notes-mcp
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., "@notes-mcp what 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.
Inputs: body (required), title (required), tags.
delete_noteDelete noteA
Permanently delete a note by id.
Inputs: id (required).
get_noteGet noteA
Retrieve a single note by id, including its full body.
Inputs: id (required).
list_tagsList tagsA
List every tag currently in use across all notes.
Inputs: no named parameters.
search_notesSearch notesA
Search notes by free-text query (all terms must match) and/or a tag. Returns matching notes newest-first.
Inputs: tag, query.
update_noteUpdate noteA
Update an existing note by id. Only the fields you pass are changed.
Inputs: id (required), body, tags, title.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
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
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.
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
- AlicenseBqualityDmaintenanceA 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.1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.3 npm2MIT
- AlicenseNot gradedqualityDmaintenanceA simple notes MCP server that enables creating, listing, and summarizing text notes via resources, tools, and prompts.MIT
- AlicenseAqualityDmaintenanceA personal notes MCP server that allows AI assistants to create, search, edit, and manage notes stored in a local SQLite database.6MIT