Notes MCP Server
A minimal MCP server for persistent note-taking, built with Python and the official mcp package. Notes are stored as JSON in ~/.mcp_notes/notes.json.
Setup
1. Install dependencies
pip install -r requirements.txt
# or, with uv:
uv pip install -r requirements.txt
2. Add to Claude Desktop
Edit ~/AppData/Roaming/Claude/claude_desktop_config.json (Windows) and merge in:
{
"mcpServers": {
"notes": {
"command": "python",
"args": ["C:/absolute/path/to/homework_mcp/server.py"]
}
}
}
Replace the path with the actual absolute path to server.py, then restart Claude Desktop.
Tools
| Tool | Required args | Optional args | Description |
|---|---|---|---|
create_note |
title, content |
tags (list) |
Create a new note |
update_note |
title |
content, tags |
Update an existing note |
delete_note |
title |
— | Delete a note permanently |
search_notes |
query |
tag |
Search by keyword, filter by tag |
Resources
| URI | Description |
|---|---|
notes://all |
All notes as formatted Markdown |
notes://{title} |
Single note by exact title |
Example dialogs
1. Creating a note with tags
User: Create a note titled "Meeting recap" with content "Discussed Q3 roadmap and sprint planning." and tag it as "work".
Claude: (calls create_note with title="Meeting recap", content="Discussed Q3 roadmap and sprint planning.", tags=["work"]) Note 'Meeting recap' created.
2. Searching notes
User: Find all my notes about "roadmap".
Claude: (calls search_notes with query="roadmap") Found 1 note:
• Meeting recap [tags: work]Discussed Q3 roadmap and sprint planning.…
3. Reading all notes via resource
User: Show me everything I've saved.
Claude: (reads resource notes://all) Here are all your notes:
Meeting recap
Tags: work | Created: 2026-06-02T10:00:00 | Updated: 2026-06-02T10:00:00
Discussed Q3 roadmap and sprint planning.
Known limitations
- No authentication — notes are stored unencrypted in the user's home directory.
- No full-text search index; search is a linear scan (slow with thousands of notes).
- Concurrent writes from multiple Claude instances can corrupt
notes.json. - Tags are case-sensitive (
Work≠work).