Skip to main content
Glama
techsaurabh-394

mcp-notes-server

mcp-notes-server

An MCP server that gives Claude and other AI assistants a searchable notes memory, stored in one local JSON file.

CI License: MIT npm Stars Node

M8ven Score

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.

Architecture: Claude Desktop to MCP client to mcp-notes-server (7 tools) to notes.json

Quick start (60 seconds)

You need Node.js 18 or newer.

# Claude Code
claude mcp add notes -- npx -y mcp-notes-server

For 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

add_note

Save a new note, returns its id

title (1-200 chars), content (1-20,000), tags? (max 10, each max 50)

Writes the notes file

get_note

Fetch one note with full content

id

None (read-only)

list_notes

List notes newest first, titles and tags only

tag?

None (read-only)

search_notes

Keyword search over titles, tags and bodies

query, limit? (1-20, default 5)

None (read-only)

update_note

Edit title, content and/or tags (tags replace the old ones)

id, plus at least one of title, content, tags

Rewrites the notes file

delete_note

Permanently delete one note

id

Rewrites the notes file. Marked destructiveHint

export_notes

Return all notes (or one tag) as one Markdown document

tag?

None (read-only, nothing is written to disk)

list_tags

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

  1. "Save a note titled Docker tips: use multi-stage builds to keep images small. Tag it docker and devops."

  2. "Search my notes for docker and summarise what I wrote."

  3. "Change the tags on that note to docker, images."

  4. "List everything tagged devops, then export those notes as Markdown."

  5. "Delete the note about Docker tips."

How it works

The five steps of saving a note and then searching it

  1. Your AI app starts the server as a child process and talks to it over stdio using JSON-RPC.

  2. The model reads the tool list and picks a tool.

  3. The server validates the input with zod and the store's own limits.

  4. Writers take a lock file, write a temp file, then rename it over notes.json. A crash never leaves half a file.

  5. The result goes back to the model as text.

A note has id, title, content, tags and createdAt. Search adds 3 for title, 2 for tag, 1 for body. Writes use a lock, a temp file and a rename.

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, and get_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 report

The 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

MIT

Available Tools

7 tools
add_noteAdd noteA

Save a new note. Returns the note id. Use tags to group related notes.

NameRequiredDescriptionDefault
tagsNoOptional tags
titleYesShort title
contentYesBody of the note

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 noteA
DestructiveIdempotent

Permanently delete one note by id. This cannot be undone.

NameRequiredDescriptionDefault
idYesNote id from list_notes or search_notes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 notesA
Read-only

Return all notes (or only those with one tag) as one Markdown document, newest first. Read-only: nothing is written to disk.

NameRequiredDescriptionDefault
tagNoOnly export notes with this tag

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 noteA
Read-only

Fetch one note by id, with full content.

NameRequiredDescriptionDefault
idYesNote id from list_notes or search_notes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 notesA
Read-only

List notes, newest first. Optionally filter by a single tag.

NameRequiredDescriptionDefault
tagNoOnly notes with this tag

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 notesA
Read-only

Keyword search across note titles, tags and bodies. Returns the best matches with full content.

NameRequiredDescriptionDefault
limitNoMax results (default 5)
queryYesSpace-separated keywords

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 noteA
Idempotent

Edit an existing note. Provide the id and at least one of title, content or tags. Tags, if given, replace the existing tags.

NameRequiredDescriptionDefault
idYesNote id
tagsNoNew tags (replaces all existing tags)
titleNoNew title
contentNoNew body

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 4 tool updatesv1.1.1
    • Changedadd_note1 field changed
      • addedInput schema / properties / tags / items / maxLength
        Added value: +50
    • Addedexport_notes
    • Addedget_note
    • Addedupdate_note
  2. 4 tool updatesv1.0.0
    • First observedadd_note
    • First observeddelete_note
    • First observedlist_notes
    • First observedsearch_notes

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to manage in-memory notes by listing, fetching, and creating notes through MCP tools over stdio.
    103 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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