Are you the author? Sign in to claim
Model Context Protocol server for Slite integration - search and retrieve notes from your Slite workspace
This project is no longer maintained.
Slite now provides an official MCP server with native support for all block types including mermaid diagrams, tables, callouts, and more.
To migrate, update your MCP config:
hljs language-json{ "mcpServers": { "slite-official": { "type": "http", "url": "https://api.slite.com/mcp", "headers": { "Authorization": "Bearer YOUR_SLITE_API_KEY" } } } }Key improvements in the official MCP over this repo:
- ✅ Mermaid/diagram blocks work correctly
- ✅ Block-level editing via
modify-block(no more full-document rewrites)- ✅ Callouts, tables, collapsibles, and all native Slite blocks
- ✅ Maintained by Slite directly
A Model Context Protocol (MCP) server that integrates with Slite's API to search, retrieve, create, and edit notes.
# Clone the repository
git clone https://github.com/fajarmf/slite-mcp.git
cd slite-mcp
# Install dependencies
npm install
# Build the project
npm run build
Add the server to your MCP configuration file (~/.mcp.json):
{
"mcpServers": {
"slite": {
"command": "node",
"args": ["/path/to/slite-mcp/build/index.js"],
"env": {
"SLITE_API_KEY": "your-api-key-here"
}
}
}
}
Once configured, the following tools are available:
Search for notes in your Slite workspace.
Parameters:
query (required): Search query stringhitsPerPage (optional): Results per page (default: 10)Example:
{
"tool": "slite_search",
"arguments": {
"query": "project documentation",
"hitsPerPage": 5
}
}
Retrieve a specific note by its ID.
Parameters:
noteId (required): The ID of the note to retrieveformat (optional): Format to return - "md" or "html" (default: "md")Example:
{
"tool": "slite_get_note",
"arguments": {
"noteId": "BoptqNi4pm0lcV",
"format": "md"
}
}
Get all child notes of a parent note.
Parameters:
noteId (required): The ID of the parent notecursor (optional): Pagination cursor for next pageExample:
{
"tool": "slite_get_note_children",
"arguments": {
"noteId": "5i6k33yrVu7eMy"
}
}
Ask natural language questions and get AI-powered answers from your Slite workspace.
Parameters:
question (required): The question to askparentNoteId (optional): Limit search to notes under this parentExample:
{
"tool": "slite_ask",
"arguments": {
"question": "What is our deployment process?"
}
}
Create a new note in your Slite workspace.
Parameters:
title (required): Note titlemarkdown (optional): Note content in markdown formatparentNoteId (optional): Parent note ID (creates in personal channel if not specified)Example:
{
"tool": "slite_create_note",
"arguments": {
"title": "Meeting Notes",
"markdown": "# Meeting Notes\n\n- Discussed project timeline\n- Assigned tasks",
"parentNoteId": "5i6k33yrVu7eMy"
}
}
Edit a note using search-and-replace. Preferred for targeted edits - faster and safer than full rewrite.
Parameters:
noteId (required): The ID of the note to editedits (required): Array of search-and-replace operations
oldText: Exact text to find (must be unique in document)newText: Text to replace it withdryRun (optional): If true, validate edits without applying themExample:
{
"tool": "slite_edit_note",
"arguments": {
"noteId": "BoptqNi4pm0lcV",
"edits": [
{ "oldText": "Draft", "newText": "Final" },
{ "oldText": "TODO: add details", "newText": "Implementation complete" }
],
"dryRun": false
}
}
Replace entire note content. Use slite_edit_note for small changes.
Parameters:
noteId (required): The ID of the note to updatemarkdown (required): New markdown content (replaces entire note)title (optional): New title (keeps existing if not provided)Example:
{
"tool": "slite_update_note",
"arguments": {
"noteId": "BoptqNi4pm0lcV",
"markdown": "# New Content\n\nThis replaces everything.",
"title": "Updated Title"
}
}
# Copy environment config and add your API key
cp .env.example .env
# Edit .env with your SLITE_API_KEY
# Setup test data (creates test documents in Slite)
npm run test:setup
# Run all tests
npm test
The test:setup command creates test documents in your Slite workspace:
The script is idempotent - it won't create duplicates if test data already exists.
# Setup with a new parent note
npm run test:setup
# Or use an existing note as parent
npm run test:setup -- --parent=<note-id>
# Force recreation even if data exists
npm run test:setup -- --force
The test suite includes:
slite-mcp/
├── src/
│ └── index.ts # Main MCP server (7 tools: 4 read, 3 write)
├── build/ # Compiled JavaScript files
├── tests/
│ ├── index.test.js # Consolidated test suite
│ └── setup-test-data.js # Idempotent test data setup
├── examples/ # Example configurations
├── package.json
├── tsconfig.json
└── README.md
npm run build
The Slite API returns data in specific formats:
hits arrayid, title, highlight, updatedAt, type, parentNotesid, title, url, updatedAt, parentNoteIdnotes arraytotal, hasNextPage, nextCursorIf you encounter errors, the Slite API might have changed. Check:
Contributions are welcome! Please:
MIT License - see LICENSE file for details
For issues or questions:
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows