notes-mcp
Click on "Install 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., "@notes-mcpwhat did I write about late check-out?"
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.
notes-mcp
An MCP server for a personal notes / knowledge base. Create, search, and retrieve notes — and let an AI assistant (Claude Desktop, Claude Code, …) work with them directly.
The Model Context Protocol is an open standard
that lets AI assistants securely call your tools and read your data. notes-mcp
is a small, self-contained MCP server that turns a folder of notes into something
an assistant can use in natural language — "save this as a note tagged billing",
"what did I write about late check-out?", "summarize everything tagged onboarding".
It exercises all three MCP primitives:
Primitive | What this server exposes |
Tools |
|
Resources | Every note at |
Prompts |
|
Tech
TypeScript on Node 20+
@modelcontextprotocol/sdk— the official MCP SDK (stdio transport)Zod — input schemas / validation
Zero native dependencies — notes are stored in a plain JSON file, so there's nothing to compile. The storage layer is isolated in
src/store.ts; swapping in SQLite later would touch only that file.node:test— the test suite spawns the built server and drives it over the real MCP protocol as a client would.
Related MCP server: Bruin
Install & build
pnpm install # or npm install
pnpm build # compiles src → dist
pnpm test # spawns the server and exercises the MCP protocol end-to-endWhere notes are stored
A single JSON file at ~/.notes-mcp/notes.json by default. Override the location
with the NOTES_MCP_DIR environment variable.
Connect it to an assistant
The server speaks MCP over stdio, so any MCP client can launch it.
Claude Desktop — add to claude_desktop_config.json
(~/Library/Application Support/Claude/ on macOS):
{
"mcpServers": {
"notes": {
"command": "node",
"args": ["/absolute/path/to/notes-mcp/dist/index.js"]
}
}
}Claude Code — one command:
claude mcp add notes -- node /absolute/path/to/notes-mcp/dist/index.jsThen ask the assistant to create, search, or summarize notes — it will call the
tools above. To point the store somewhere specific, add an env var to the config
("env": { "NOTES_MCP_DIR": "/path/to/notes" }).
Try it without a client
The MCP Inspector is the quickest way to poke at the tools by hand:
npx @modelcontextprotocol/inspector node dist/index.jsScripts
Command | What it does |
| Compile TypeScript to |
| Recompile on change |
| Run the built server on stdio |
| Spawn the server and run the MCP round-trip |
| Type-check without emitting |
How it's structured
src/
store.ts # file-backed note store: CRUD + search (no MCP knowledge)
index.ts # MCP server: wires the store to tools, resources, and prompts
test/
smoke.test.mjs # connects a real MCP client to the spawned serverKeeping store.ts free of any MCP types means the storage layer is testable on its
own and replaceable without touching the protocol wiring.
License
MIT
Available Tools
6 toolscreate_noteCreate noteA
Create a new note with a title, markdown body, and optional tags.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Note content (markdown allowed) | |
| tags | No | Optional list of tags | |
| title | Yes | Short title for the note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and parameters but does not mention what the tool returns, whether the operation is idempotent, potential side effects, or required permissions. For a mutation tool, this is a notable gap.
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?
The description is a single sentence that is front-loaded with the core action and includes the key parameters. Every word earns its place, with no redundant 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?
The tool is simple (3 params, no output schema, no annotations), and the schema covers all parameters, but the description lacks any information about return values or error conditions. Given the lack of annotations and output schema, the description should provide a bit more context to be fully 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 description coverage is 100%, so the schema already documents all three parameters. The description merely restates them ('title, markdown body, and optional tags') without adding any deeper meaning or usage details, earning the baseline score.
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?
The description uses a specific verb and resource ('Create a new note') and clearly distinguishes from siblings like update_note, delete_note, and get_note. It unambiguously states the action and the primary inputs.
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 clearly implies the tool is for creating new notes, which differentiates it from updating or deleting existing notes. However, it does not explicitly state when not to use it or mention alternatives, but the verb 'create' provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteDelete noteA
Permanently delete a note by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The note id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It clearly states the deletion is permanent, alerting users to its irreversible nature. However, it does not disclose return values, error behavior, or permission requirements, leaving some gaps for a destructive operation.
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?
The description is a single, front-loaded sentence that immediately states the verb and object. It is concise with no wasted words, and the 'by id' qualifier efficiently conveys the required input.
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?
Given the tool's simplicity (1 parameter, no output schema, no nested objects), the description fully covers the action, target, and permanence. The lack of return-value or error-handling details is a minor gap but not critical for a straightforward delete operation in the context of sibling CRUD tools.
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?
The schema provides a full description for the 'id' parameter ('The note id') with 100% coverage. The description's 'by id' reinforces the parameter's role but adds no new semantic information beyond the schema. Baseline 3 applies since the schema carries the 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?
The description states a specific verb ('delete'), resource ('note'), and required identifier ('by id'). It clearly distinguishes from siblings like create_note, update_note, and get_note. The word 'permanently' adds important specificity about the operation's effect.
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 when to use the tool (to remove a note) but does not explicitly state when not to use it or name alternatives like update_note or get_note. The permanence warning provides some context, but no direct comparison to sibling tools is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteGet noteA
Retrieve a single note by id, including its full body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The note id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral transparency burden. It does add value by noting 'including its full body', which clarifies the return content, and 'Retrieve' implies a read-only operation. However, it does not disclose behavior for missing/nonexistent ids, authentication requirements, or any other edge-case behavior. It provides some transparency but not comprehensive detail.
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?
The description is a single, efficiently worded sentence that starts with the verb 'Retrieve' and immediately conveys the action, target, and relevant distinguishing detail ('by id', 'full body'). There is no filler, redundant phrasing, or unnecessary prose, making it highly concise and well-structured.
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 get-by-id tool with only one parameter and no output schema, the description covers the core purpose and return content (full body). It stops short of covering id-not-found behavior or providing pointers to sibling tools like search_notes for alternative retrieval scenarios. Given the low complexity, this is still largely complete, but those omissions keep it from being fully comprehensive.
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?
The input schema fully describes the 'id' parameter as 'The note id', achieving 100% schema description coverage. The description's 'by id' restates the schema without adding new semantic detail, such as expected format or error behavior. Since the schema provides complete coverage, the baseline of 3 applies, and the description does not elevate param understanding 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?
The description clearly states the action ('Retrieve'), the resource ('a single note'), the identifier ('by id'), and the scope ('including its full body'). This distinguishes it from sibling tools like create_note and search_notes, which are either mutations or return multiple notes. The mention of 'single' and 'full body' further sharpens the specific purpose.
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 provides no explicit guidance on when to use this tool versus alternatives like search_notes. It does not state when to use it, when not to use it, or mention any alternative tools. The only implicit hint is 'full body', but that is not developed into actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList tagsA
List every tag currently in use across all notes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral nuance that only tags 'currently in use' are returned, which is useful. However, with no annotations provided, it does not disclose other traits such as read-only behavior, sorting, or potential performance implications of scanning all 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?
The description is a single, well-structured sentence that leads with the action and resource. Every word contributes meaning with no redundancy.
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 zero-parameter tool with no annotations or output schema, the description fully conveys what it does and the scope of the result. The phrase 'list every tag' adequately implies the return value.
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?
The tool accepts zero parameters, so the schema provides complete coverage by default. The description adds no parameter-specific meaning, but none is required. The baseline of 4 is appropriate for zero-parameter tools.
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?
The description clearly states the verb 'List' with the resource 'tags' and a specific scope ('currently in use across all notes'). It distinguishes itself from sibling note-centric tools by focusing exclusively on tag enumeration.
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 context is clear: this is the only tool for listing tags, while siblings handle notes. There are no competing alternatives, so no explicit exclusion is needed. However, it stops short of explicitly stating when to use it over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesSearch notesA
Search notes by free-text query (all terms must match) and/or a tag. Returns matching notes newest-first.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Restrict to notes carrying this tag | |
| query | No | Free-text search; every term must appear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It provides useful details about matching semantics (AND logic) and result ordering, but omits which note fields are searched, case sensitivity, pagination, or any limit behavior.
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?
The description is two sentences, front-loaded with the tool's action, and contains no filler. Every sentence adds meaningful 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?
Given there is no output schema, the description should explain return shape more thoroughly. It states 'Returns matching notes newest-first' but does not mention the fields included or any limits, leaving some ambiguity for a potentially large result set.
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 both parameters are already well-documented. The description does not add parameter-level semantics beyond the schema; it only restates the matching logic in a different way.
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?
The description clearly states the tool performs a search over notes, with specific matching rules (all terms must match) and ordering (newest-first). This distinguishes it from sibling tools like get_note (likely single-note retrieval) and list_tags (tag listing).
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 searching notes by query and/or tag, but does not explicitly state when to use alternatives like get_note or list_tags. The usage context is clear but exclusions are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteUpdate noteA
Update an existing note by id. Only the fields you pass are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The note id | |
| body | No | ||
| tags | No | ||
| title | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses a key behavior: 'Only the fields you pass are changed' (partial update), which is genuinely useful. However, it does not mention error cases, authentication requirements, return value, or whether the operation is reversible, leaving notable gaps.
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?
The description is only two sentences, front-loaded with the main action ('Update an existing note by id') and a concise explanation of partial update. There is no redundant or filler content.
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 annotations and no output schema, the description is minimal for a mutation tool. It does not explain the success/failure behavior, whether the updated note is returned, or what happens if the id does not exist. This is a significant gap in context for an agent deciding whether and how to invoke the tool.
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?
Only 25% of parameters have schema descriptions (only id), and the description does not compensate by explaining body, tags, or title semantics. It only generically refers to 'the fields you pass', which is behavioral rather than parameter-specific. The partial update hint does not clarify what each field means or how it will be used.
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?
The description clearly states 'Update an existing note by id', which uses a specific verb and resource, and it is easily distinguished from sibling tools like create_note, delete_note, and get_note. The partial-update behavior is also clarified with 'Only the fields you pass are changed'.
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 when to use the tool (when you have an existing note id and want to change it), but it doesn't explicitly mention alternatives or exclusions. The partial-update note adds some usage context, but there is no direct guidance contrasting it with delete_note or create_note.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
create_note - First observed
delete_note - First observed
get_note - First observed
list_tags - First observed
search_notes - First observed
update_note
TDQS
Each tool targets a distinct operation: create, update, delete, get, search, and list tags. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern (create_note, update_note, delete_note, get_note, search_notes, list_tags). This makes the API predictable and easy to navigate.
Six tools is an appropriate scope for a notes management server, covering core CRUD, search, and tag listing without unnecessary bloat or sparse coverage.
The tool surface provides complete CRUD for notes (create, read, update, delete) plus search and tag listing. A minor gap is the lack of an explicit 'list all notes' tool, but search_notes likely can serve this purpose with empty query.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Related MCP Servers
- FlicenseBqualityDmaintenanceA TypeScript-based MCP server that enables AI assistants to create, search, list, and delete notes with tags. Serves as a starter template for building custom MCP servers with tools and resources.1-
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.62MIT
- FlicenseNot gradedqualityDmaintenanceA simple notes MCP server that enables creating, listing, and summarizing text notes via resources, tools, and prompts.-
- AlicenseAqualityBmaintenanceA personal notes MCP server that allows AI assistants to create, search, edit, and manage notes stored in a local SQLite database.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sheimaz/notes-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server