Inkdrop MCP Server
A Model Context Protocol server for the Inkdrop Local HTTP Server API.
Installation
-
Set up a local HTTP server
-
Add server config to Claude Desktop:
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%Claudeclaude_desktop_config.json
{
"mcpServers": {
"inkdrop": {
"command": "npx",
"args": ["-y", "@inkdropapp/mcp-server"],
"env": {
"INKDROP_LOCAL_SERVER_URL": "http://localhost:19840",
"INKDROP_LOCAL_USERNAME": "your-local-server-username",
"INKDROP_LOCAL_PASSWORD": "your-local-server-password"
}
}
}
}
Components
read-note
: Retrieve the complete contents of the note by its ID from the database.
- Required inputs:
noteId
: The ID of the note to retrieve. It can be found as _id
in the note docs. It always starts with note:
.
search-notes
: List all notes that contain a given keyword.
- Required inputs:
keyword
: Keyword to search for.
- Note: Results include truncated note bodies (200 characters). Use
read-note
to get full content.
- Supports advanced search qualifiers like
book:
, tag:
, status:
, title:
, etc.
list-notes
: List all notes in a specified notebook.
- Required inputs:
bookId
: The notebook ID. It always starts with 'book:'.
- Optional inputs:
tagIds
: An array of tag IDs to filter. Each starts with 'tag:'.
keyword
: Keyword to filter notes.
sort
: Sort field (updatedAt
, createdAt
, or title
). Default: updatedAt
.
descending
: Reverse the order of output. Default: true
.
- Note: Results include truncated note bodies (200 characters). Use
read-note
to get full content.
create-note
: Create a new note in the database.
- Required inputs:
bookId
: The notebook ID. Must start with 'book:' or be 'trash'.
title
: The note title.
body
: The content of the note in Markdown.
- Optional inputs:
status
: The note status (none
, active
, onHold
, completed
, dropped
).
update-note
: Update an existing note in the database.
- Required inputs:
_id
: The note ID. Must start with 'note:'.
_rev
: The revision ID (CouchDB MVCC-token).
bookId
: The notebook ID. Must start with 'book:' or be 'trash'.
title
: The note title.
body
: The content of the note in Markdown.
- Optional inputs:
status
: The note status (none
, active
, onHold
, completed
, dropped
).
list-notebooks
: Retrieve a list of all notebooks.
list-tags
: Retrieve a list of all tags.
Debugging
Since MCP servers run over stdio, debugging can be challenging. For the best debugging
experience, we strongly recommend using the MCP Inspector.
You can launch the MCP Inspector via npm
with this command:
npx @modelcontextprotocol/inspector "./dist/index.js"
Be sure that environment variables are properly configured.
Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
You can also watch the server logs with this command:
tail -n 20 -f ~/Library/Logs/Claude/mcp-server-inkdrop.log
[
{
"description": "Retrieve the complete contents of the note by its ID from the database.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"noteId": {
"description": "ID of the note to retrieve. It can be found as `_id` in the note docs",
"type": "string"
}
},
"required": [
"noteId"
],
"type": "object"
},
"name": "read-note"
},
{
"description": "List all notes that contain a given keyword.nThe result does not include entire note bodies as they are truncated in 200 characters.nYou have to retrieve the full note content by calling `read-note`.nHere are tips to specify keywords effectively:nn## Use special qualifiers to narrow down resultsnnYou can use special qualifiers to get more accurate results. See the qualifiers and their usage examples:nn- **book** n `book:Blog`: Searches for notes in the 'Blog' notebook.n- **tag** n `tag:JavaScript`: Searches for all notes having the 'JavaScript' tag. Read more about [tags](https://docs.inkdrop.app/manual/write-notes#tag-notes).n- **status** n `status:onHold`: Searches for all notes with the 'On hold' status. Read more about [statuses](/reference/note-statuses).n- **title** n `title:"JavaScript setTimeout"`: Searches for the note with the specified title.n- **body** n `body:KEYWORD`: Searches for a specific word in all notes. Equivalent to a [global search](#search-for-notes-across-all-notebooks).nn### Combine qualifiersnnYou can combine the filter qualifiers to refine data even more.nn**Find notes that contain the word 'Hello' and have the 'Issue' tag.**nn```textnHello tag:Issuen```nn**Find notes that contain the word 'Typescript,' have the 'Contribution' tag, and the 'Completed' status**nn```textnTypescript tag:Contribution status:Completedn```nn## Search for text with spacesnnTo find the text that includes spaces, put the text into the double quotation marks ("):nn```textn"database associations"n```nn## Exclude text from searchnnTo exclude text from the search results or ignore a specific qualifier, put the minus sign (-) before it. You can also combine the exclusions. See the examples:nn- `-book:Backend "closure functions"`: Ignores the 'Backend' notebook while searching for the 'closure functions' phrase.n- `-tag:JavaScript`: Ignores all notes having the 'JavaScript' tag.n- `-book:Typescript tag:work "Data types"`: Ignores the 'Typescript' notebook and the 'work' tag while searching for the 'Data types' phrase.n- `-status:dropped title:"Sprint 10.0" debounce`: Ignores notes with the 'Dropped' status while searching for the 'debounce' word in the note with the 'Sprint 10.0' title.n- `-"Phrase to ignore" "in the rest of a sentence"`: Ignores the 'Phrase to ignore' part while searching for 'in the rest of a sentence'.nnNote that you can't specify excluding modifiers only without including conditions.nn**WARNING**: Make sure to enter a text to search for after the exclusion modifier.nn- â
Will work n `-book:Backend "closure functions"`nn- âï¸ Won't work n `-book:Backend`. There's no query. Inkdrop doesn't understand what to search for.n ",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"keyword": {
"description": "Keyword to search for.",
"type": "string"
}
},
"required": [
"keyword"
],
"type": "object"
},
"name": "search-notes"
},
{
"description": "Create a new note in the database",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"body": {
"description": "The content of the note represented with Markdown",
"maxLength": 1048576,
"type": "string"
},
"bookId": {
"description": "The notebook ID",
"maxLength": 128,
"minLength": 5,
"pattern": "^(book:|trash$)",
"type": "string"
},
"status": {
"description": "The status of the note",
"enum": [
"none",
"active",
"onHold",
"completed",
"dropped"
],
"type": "string"
},
"title": {
"description": "The note title",
"maxLength": 128,
"type": "string"
}
},
"required": [
"bookId",
"title",
"body"
],
"type": "object"
},
"name": "create-note"
},
{
"description": "Update the existing note in the database",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"_id": {
"description": "The unique document ID which should start with `note:` and the remains are randomly generated string",
"maxLength": 128,
"minLength": 6,
"pattern": "^note:",
"type": "string"
},
"_rev": {
"description": "This is a CouchDB specific field. The current MVCC-token/revision of this document (mandatory and immutable).",
"type": "string"
},
"body": {
"description": "The content of the note represented with Markdown",
"maxLength": 1048576,
"type": "string"
},
"bookId": {
"description": "The notebook ID",
"maxLength": 128,
"minLength": 5,
"pattern": "^(book:|trash$)",
"type": "string"
},
"status": {
"description": "The status of the note",
"enum": [
"none",
"active",
"onHold",
"completed",
"dropped"
],
"type": "string"
},
"title": {
"description": "The note title",
"maxLength": 128,
"type": "string"
}
},
"required": [
"_id",
"_rev",
"bookId",
"title",
"body"
],
"type": "object"
},
"name": "update-note"
},
{
"description": "Retrieve a list of all notebooks",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list-notebooks"
}
]