mcp-notes-server
This MCP server provides a local, searchable notes memory for an AI assistant.
Save new notes with title, content, and optional tags.
Fetch a single note by id with full content.
List notes newest first, optionally filtered by one tag.
Keyword-search note titles, tags, and bodies, with a result limit.
Update a note's title, content, and/or tags (tags replace existing tags).
Permanently delete a note by id.
Export all notes or one tag's notes as a single Markdown document.
The provided schema exposes these 7 tools; the README also mentions list_tags, resources (notes://all, notes://{id}), and a review_notes prompt.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-notes-serverSave a note titled RAG chunking: use 800-char chunks with overlap, tagged rag."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-notes-server
An MCP server that gives Claude and other AI assistants a searchable notes memory, stored in one local JSON file.
mcp-notes-server is a Model Context Protocol (MCP) server written in TypeScript. Connect it to Claude Desktop, Claude Code or any MCP client and your AI assistant can save, search, edit, export and delete notes that survive between chats: simple AI assistant memory you own, on your disk, with no cloud and no network calls.
Quick start (60 seconds)
You need Node.js 18 or newer.
# Claude Code
claude mcp add notes -- npx -y mcp-notes-serverFor Claude Desktop, add this to claude_desktop_config.json (Settings, Developer, Edit Config), then fully quit and restart the app:
{
"mcpServers": {
"notes": {
"command": "npx",
"args": ["-y", "mcp-notes-server"]
}
}
}Then type: "Save a note titled RAG chunking: use 800-character chunks. Tag it rag." and "Search my notes for chunking."
Prefer a clone? git clone https://github.com/techsaurabh-394/mcp-notes-server && cd mcp-notes-server && npm install && npm run build, then use "command": "node" with "args": ["/absolute/path/to/mcp-notes-server/dist/index.js"] (print it with echo "$(pwd)/dist/index.js"). Relative paths fail because the app starts the server from another folder.
Related MCP server: mcp-server-example
Tools
Tool | What it does | Inputs | Side effects |
| Save a new note, returns its id |
| Writes the notes file |
| Fetch one note with full content |
| None (read-only) |
| List notes newest first, titles and tags only |
| None (read-only) |
| Keyword search over titles, tags and bodies |
| None (read-only) |
| Edit title, content and/or tags (tags replace the old ones) |
| Rewrites the notes file |
| Permanently delete one note |
| Rewrites the notes file. Marked |
| Return all notes (or one tag) as one Markdown document |
| None (read-only, nothing is written to disk) |
| List every tag in use with its note count, most used first | None | None (read-only) |
The server also exposes the resources notes://all and notes://{id}, and a review_notes prompt that asks the model to summarise and tidy your notes.
Every tool has a typed zod input schema and MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint), so clients can show the right confirmation UI. Invalid input returns a clear error and stores nothing.
Example prompts
"Save a note titled Docker tips: use multi-stage builds to keep images small. Tag it docker and devops."
"Search my notes for docker and summarise what I wrote."
"Change the tags on that note to docker, images."
"List everything tagged devops, then export those notes as Markdown."
"Delete the note about Docker tips."
How it works
Your AI app starts the server as a child process and talks to it over stdio using JSON-RPC.
The model reads the tool list and picks a tool.
The server validates the input with
zodand the store's own limits.Writers take a lock file, write a temp file, then rename it over
notes.json. A crash never leaves half a file.The result goes back to the model as text.
Storage. One JSON file: ~/.mcp-notes/notes.json, or the path in the NOTES_FILE environment variable. Each note has id (8 hex characters), title, content, tags (lowercased, de-duplicated) and createdAt (ISO timestamp).
Search. For each search word: +3 if it is in the title, +2 if it matches a tag exactly, +1 if it is in the body. Scores add up, highest first, zero scores are dropped. It is plain keyword matching, not semantic search.
Limits. Title 200 characters with no line breaks, content 20,000 characters, 10 tags of at most 50 characters each, 5,000 notes per file. A notes file with malformed entries is refused rather than overwritten.
Two clients at once. Writes hold an exclusive lock file (notes.json.lock) for the read-modify-write cycle. A lock older than 30 seconds is treated as left behind by a crash and removed. A test starts four separate OS processes that add 15 notes each and checks all 60 survive.
Optional: human approval before delete
By default delete_note runs immediately. To require approval, install mcp-safe-actions next to the server and set NOTES_CONFIRM_DELETE=1:
npm install github:techsaurabh-394/mcp-safe-actions # in the folder that holds mcp-notes-server{
"mcpServers": {
"notes": {
"command": "node",
"args": ["/absolute/path/to/mcp-notes-server/dist/index.js"],
"env": { "NOTES_CONFIRM_DELETE": "1" }
}
}
}delete_note then uses registerConfirmedTool: clients that support MCP elicitation ask you directly; others get a one-time token the model must pass back. Nothing is deleted before approval. Extra variables: NOTES_CONFIRM_MODE (auto, elicit or token) and NOTES_AUDIT_FILE (path for a JSON-lines audit log). If the package is missing, the server refuses to start instead of silently running unguarded. mcp-safe-actions is not on npm yet, so it is installed from GitHub.
Security notes
No shell, no SQL, no network calls: the server only reads and writes one JSON file.
The file path comes from the operator (
NOTES_FILE), never from tool input. Ids are never used as paths, andget_note/update_note/notes://{id}reject ids that are not 8 hex characters.stdout is the protocol channel. All logging goes to stderr (a test checks every stdout line is a JSON-RPC message).
Not covered: notes are plain text with no encryption or access control beyond your operating system's file permissions. Anything in a note is visible to the AI model that reads it, so do not store secrets in notes. Do not point several machines at one file over a network share: the lock file is only safe on a local filesystem.
Report vulnerabilities as described in SECURITY.md.
Development and tests
npm install
npm run lint # tsc --noEmit
npm test # build, then node:test
npm run coverage # same, with Node's built-in coverage reportThe suite has store unit tests (limits, locking, stale locks, export) and end-to-end tests that spawn the built server over stdio with the MCP SDK client and call every tool with valid input, invalid input, empty results and unknown ids. CI runs on Node 18, 20 and 22 and prints the coverage table to the job summary. See CONTRIBUTING.md and CHANGELOG.md.
Roadmap
Typed tools, resources and a prompt
Input limits, lock-file safe writes, Markdown export
Optional human approval for delete
Publish to npm
Optional SQLite backend for large collections
Semantic search with embeddings
Streamable HTTP transport for remote clients
Import from Markdown
FAQ
Where are my notes? In ~/.mcp-notes/notes.json, or at your NOTES_FILE path. Changing NOTES_FILE shows a different, empty set of notes.
Does it send my notes anywhere? The server makes no network calls. But your AI app sends the notes it reads to its model provider as part of the conversation.
Does it work with clients other than Claude Desktop? It speaks standard MCP over stdio, so Claude Code, Cursor and other MCP clients can run it. Only Claude Desktop and Claude Code are documented here.
The server does not show up. Run node dist/index.js yourself: it should print mcp-notes-server running on stdio to stderr. Check that the config JSON is valid, the path is absolute, and you fully restarted the app. If the app cannot find node, put the full path from which node in "command".
Is search semantic? No. It is keyword scoring over titles, tags and bodies.
Can I back up my notes? Copy the JSON file, or ask the assistant to run export_notes and save the Markdown.
Contributing
Small, focused pull requests are welcome. Read CONTRIBUTING.md, and look for issues labelled good first issue. Please follow the Code of Conduct.
Support this project
If this saves you time, a star helps others find it, and you can support more free open-source work:
Author
Saurabh Pathak, AI engineer and full-stack developer.
GitHub · LinkedIn · Blog: mernstackdev.com
License
Available Tools
7 toolsadd_noteAdd noteA
Save a new note. Returns the note id. Use tags to group related notes.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags | |
| title | Yes | Short title | |
| content | Yes | Body of the note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the write profile and non-idempotency are covered structurally. The description adds one genuinely useful behavioral fact — that the call returns the note id — which matters since there is no output schema, but says nothing about duplicate handling, tag creation, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no redundancy, with the core action and return value front-loaded before the optional tag advice. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small three-parameter create tool with full annotation coverage, the description covers what it does and what it returns. A note on whether tags must already exist or on duplicate behavior would close the remaining gap, but no output schema is needed here since the return value is stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so title, content and tags are already documented with types and length limits. The description adds only marginal semantic value by hinting at the organizational purpose of tags; title and content get no elaboration beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Save a new note" gives a specific verb and resource, and "Returns the note id" adds the outcome. The word "new" implicitly separates it from update_note, but no sibling is named explicitly, so the reader must infer the boundary with update_note/get_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use tags to group related notes" is guidance on how to use a field, not on when to choose this tool over update_note or search_notes. The distinction from update_note is only implied by "new note"; there are no exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteDelete noteADestructiveIdempotent
Permanently delete one note by id. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id from list_notes or search_notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is carried structurally. The description reinforces this with "Permanently" and "cannot be undone", which is useful but largely restates destructiveHint; it adds nothing about permissions, whether the note is recoverable from a trash, or behavior for an unknown id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the destructive consequence front-loaded right after the action. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter mutation with full annotation coverage and no output schema, this is close to sufficient. A minor gap remains around error/not-found behavior, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the id parameter is documented in-schema, including its source (list_notes or search_notes). The description adds no format or sourcing detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("delete one note by id") and the scope is unambiguous. The verb alone separates it cleanly from the read/write siblings (add_note, get_note, update_note), though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the "by id" phrasing, and the permanence warning signals this is not the reversible path. However, it never says when to prefer update_note or how to recover an id, and gives no exclusions or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_notesExport notesARead-only
Return all notes (or only those with one tag) as one Markdown document, newest first. Read-only: nothing is written to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only export notes with this tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and a closed world, and the description usefully adds that output is a single concatenated Markdown document ordered newest first and that nothing is written to disk. It does not mention size limits, pagination or what happens with very large note sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the return shape and ordering, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills the gap by describing the return value and ordering, and the safety profile is covered by annotations. Only edge-case behavior (large exports, empty results, tag misses) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single tag parameter is documented there; the description only echoes that omitting it means all notes are exported. Baseline 3 is appropriate since the schema carries the parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (return all notes), the output form (one Markdown document) and the ordering (newest first), which separates it from list_notes/search_notes that return structured results. It never names a sibling, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'or only those with one tag' implies when to pass the tag filter, but there is no explicit when-to-use versus list_notes/search_notes/get_note guidance and no stated exclusions or limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteGet noteARead-only
Fetch one note by id, with full content.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id from list_notes or search_notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that the response includes 'full content' (vs a preview), which is useful payload context not in annotations, but says nothing about error behavior for a missing id or about pagination/sizing of large notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and scope front-loaded and zero filler. Nothing to trim and nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety and no output schema, the description supplies the one thing missing elsewhere: that the return value is the complete note body. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, so the schema already documents 'id' including its source. The description's 'by id' merely restates that; baseline 3 applies when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('one note by id') and adds a distinguishing detail: it returns 'full content', which separates it from list/search style siblings. It does not explicitly name list_notes or search_notes as alternatives, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The single-note scope implies this is the tool to use once an id is known, and the schema notes the id comes 'from list_notes or search_notes'. However, the description itself contains no explicit when-to-use/when-not guidance or prerequisite statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesList notesARead-only
List notes, newest first. Optionally filter by a single tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only notes with this tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral facts beyond them: results are ordered newest first and only one tag may be applied. It still omits pagination or result-size limits, which matters for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the ordering and filter constraint front-loaded. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return shape, and it never says whether all notes are returned or how results are bounded. For an unbounded list operation, the absence of any pagination or volume hint is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single 'tag' parameter is already fully documented in the schema. The description's 'single tag' wording reinforces the cardinality constraint but adds little beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List notes') plus the ordering ('newest first') and the optional filter, which separates it conceptually from search_notes. It doesn't explicitly name the sibling it is not, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally filter by a single tag' implies the filtering use case, but there is no explicit guidance on when to use this versus search_notes, nor any stated exclusion. Usage must be inferred from the sibling name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesSearch notesARead-only
Keyword search across note titles, tags and bodies. Returns the best matches with full content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| query | Yes | Space-separated keywords |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful context beyond that: the searched fields (titles, tags, bodies), relevance ranking ('best matches'), and that full content is returned rather than snippets — all of which shape how an agent should use results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the search scope is front-loaded and the return behavior follows. Nothing redundant and nothing that could be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description covers what is searched and what comes back ('full content'), which is the key missing piece an agent would otherwise lack. Minor gaps remain around result ordering and empty-result behavior, but nothing essential is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both 'query' and 'limit' are fully documented in the schema, including the default of 5 and max of 20. The description reinforces keyword-style querying but adds no syntax or formatting detail the schema doesn't already supply, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('keyword search across note titles, tags and bodies') and what it returns, which clearly separates it from get_note (single record by ID) and list_notes (unfiltered enumeration). It does not explicitly name a sibling as an alternative, keeping it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for keyword-based lookup ('Keyword search... space-separated keywords'), which lets an agent infer it should be used when it has search terms rather than an ID. However, there is no explicit statement of when to prefer search_notes over list_notes or get_note, and no mention of result limits or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteUpdate noteAIdempotent
Edit an existing note. Provide the id and at least one of title, content or tags. Tags, if given, replace the existing tags.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id | |
| tags | No | New tags (replaces all existing tags) | |
| title | No | New title | |
| content | No | New body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, idempotent, not destructive), so the description's job is to add mutation semantics. It does: it discloses the at-least-one-field requirement (a constraint the schema does not enforce, since only id is required) and that tags are replaced wholesale rather than merged. It could still state explicitly that omitted fields are preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose first, then the invocation precondition, then the one non-obvious field behavior. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, non-destructive update tool with a fully documented schema and safety annotations, only the return behavior is unaddressed (e.g., whether the updated note is echoed back). No output schema exists, so a brief return-value note would have made it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented, including 'New tags (replaces all existing tags)'. The description's note about tag replacement therefore restates schema content rather than adding to it. Baseline 3 applies since the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Edit') and resource ('existing note'), making it immediately distinguishable from add_note, delete_note and get_note by their own verbs. It does not explicitly name a sibling, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Provide the id and at least one of title, content or tags' gives a concrete precondition for invocation, which is the key usage rule for a partial-update tool. It stops short of stating exclusions such as when to prefer add_note vs update_note for a missing id, but no alternatives are needed for a simple CRUD edit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.1.1- Changed
add_note1 field changed- added
Input schema / properties / tags / items / maxLengthAdded value: +50
- Added
export_notes - Added
get_note - Added
update_note
4 tool updates
v1.0.0- First observed
add_note - First observed
delete_note - First observed
list_notes - First observed
search_notes
TDQS
Scored across 7 tools
Each tool targets a distinct action on notes: create, read one, list, keyword search, update, delete, and export. The retrieval tools (list, search, export) have clearly differentiated behaviors described explicitly, so an agent can pick correctly.
All seven tools follow a strict verb_noun snake_case pattern (add_note, get_note, list_notes, update_note, delete_note, search_notes, export_notes). No mixing of conventions.
Seven tools is a well-scoped set covering the full note lifecycle plus search and export. Every tool earns its place with no redundant entries.
Complete CRUD coverage (add/get/list/update/delete) plus search and export, leaving no obvious dead ends. Minor extras like tag listing or bulk delete are not essential to the domain.
Maintenance
Related MCP Connectors
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Save notes in seconds. Your AI can then search, read, write and tag them over MCP.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceProvides persistent, searchable memory for MCP-compatible AI coding tools, allowing notes added from one tool to be retrieved from another.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage in-memory notes by listing, fetching, and creating notes through MCP tools over stdio.103 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables managing plain-text notes on disk through MCP resources, tools, and prompts, so natural-language requests can create, read, search, delete, and summarize notes via an interactive client.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read, search, create, update, and remove locally stored personal notes organized by themes and subt themes, with backlink navigation, all through MCP tools.MIT