Voicenotes 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., "@Voicenotes MCP Search my notes for meeting notes."
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.
Voicenotes MCP
A custom Model Context Protocol server for Voicenotes. It lets an MCP client (Claude Code, Claude Desktop, or the Claude.ai web connector) search, read, create, edit, tag, and organize your Voicenotes notes through natural language.
Built on a reverse-engineered Voicenotes REST API. It speaks both transports:
stdio — for Claude Code / Claude Desktop (browser-based OAuth on first call)
Streamable HTTP — for the Claude.ai web connector
Quick start
git clone <this-repo> voicenotes-mcp
cd voicenotes-mcp
npm install
npm run build # compiles src/ -> dist/Then register it with your client. Two supported paths:
A. Personal access token (fastest — Claude Code)
bash register.shIt prompts (hidden input) for your Voicenotes auth_token, verifies it against the API, then registers the server globally with the token passed as the VN_API_TOKEN env var. Get the token from a logged-in voicenotes.com tab: DevTools → Application → Local Storage → auth_token (copy the value inside the quotes).
B. OAuth (Claude Desktop / stdio)
Add to your client config and let it run over stdio — a browser opens for Voicenotes sign-in on the first tool call:
{
"mcpServers": {
"voicenotes": { "command": "node", "args": ["/abs/path/to/dist/index.js"] }
}
}For the Claude.ai web connector, run the HTTP transport instead:
MCP_HTTP_PORT=3001 node dist/index.jsAll config is via environment variables; every one is optional with sane defaults. See .env.example.
Related MCP server: MCP Notes Server
Configuration
Variable | Default | Purpose |
| — | Voicenotes bearer token. When set, the REST path is used directly (path A). Never commit it. |
| unset | Set to run the Streamable HTTP server (Claude.ai web). Unset = stdio. |
|
| Public URL the HTTP server is reachable at (OAuth resource id). |
|
| Host the HTTP server binds to. |
| Claude surfaces + localhost | Comma-separated Origin allowlist for the HTTP transport. |
|
| Local loopback port for the OAuth callback (stdio flow). |
Tokens obtained via OAuth are stored encrypted (AES-256-GCM, 0600) under ~/.voicenotes-mcp/ — never inside the repo.
Tools
14 tools, grouped by maturity:
Group A — parity with the official Voicenotes MCP.
Group B — extended tools this server adds (bulk tagging, tag management, setup).
Group C — stubs for endpoints not yet confirmed; gated or no-op until verified.
Notes
Tool | Group | What it does |
| A | List notes, newest first. Filter by tag / ISO date range; paginate or |
| A | Get one note by id, with full transcript and tags. |
| A | Natural-language search across transcripts and titles. |
| A | Create a text note (transcript = body) with optional tags. |
| B | Update title / tags / transcript. Omitting |
| B | Add tags to many notes at once (adds, never replaces). |
| C | Delete a note. Unconfirmed endpoint — requires |
Tags
Tool | Group | What it does |
| A | List all tags: id, name, keywords, pin state, usage count. |
| B | Create a tag with optional auto-tag keywords, pin state, emoji. |
| B | Update a tag's name, keywords, and/or pin state. |
| B | Delete a tag permanently. |
| B | One-shot: create a starter set of organizing tags. Idempotent; supports |
Account (stubs)
Tool | Group | What it does |
| C | Get the authenticated user's profile. Not yet implemented. |
| C | List configured webhooks. Not yet implemented. |
Sample prompts
Phrase requests naturally — the client picks the tool. Examples per tool:
vn_list_notes
"Show me my 10 most recent notes." "List every note tagged
workfrom May 2026."
vn_get_note
"Open the note with id
abc-123and show the full transcript."
vn_search_notes
"Search my notes for anything about the pricing decision." "Find notes that mention the onboarding flow."
vn_create_note
"Create a note: 'Follow up with the design team about the new dashboard.' Tag it
todoandwork."
vn_update_note
"Fix the title of note
abc-123to 'Q3 Planning'." "Append the cleaned-up transcript to noteabc-123but keep its existing tags."
vn_bulk_tag_notes
"Add the tag
archiveto notesid1,id2, andid3."
vn_delete_note
"Delete note
abc-123." (re-confirm withconfirm:truewhen asked)
vn_list_tags
"What tags do I have, and how many notes use each?"
vn_create_tag
"Create a pinned tag called
urgentwith keywords 'asap, blocker, deadline'."
vn_update_tag
"Rename tag 12 to
personaland unpin it."
vn_delete_tag
"Delete tag 12."
vn_setup_tags
"Run vn_setup_tags as a dry run to preview the starter tags." "Set up my organizing tags."
Development
npm run build # tsc -> dist/
node dist/index.js # stdio transport
MCP_HTTP_PORT=3001 node dist/index.js # HTTP transportSource layout:
src/
api/ REST client + endpoint wrappers (recordings, tags) + types
auth/ OAuth (PKCE, DCR), callback server, encrypted token store
http/ Streamable HTTP transport, middleware, OAuth metadata
tools/ Tool handlers (notes, tags) + shared helpers
server.ts Tool registry (names, schemas, descriptions)
index.ts Entry point / transport selectionNotes & caveats
Unofficial: built on a reverse-engineered API, so endpoints may change.
Group C tools target endpoints not yet confirmed and are stubbed or guarded.
vn_update_note/vn_update_tagare destructive on the fields you pass —tagsreplaces the full list unless omitted.
License
MIT — add a LICENSE file before publishing if you want others to reuse it.
Available Tools
14 toolsvn_bulk_tag_notesA
Add tags to multiple notes at once. ADDS to existing tags (does not replace).
Inputs: note_ids (required), tags_to_add (required).
vn_create_noteA
Create a new text note with optional tags. The transcript becomes the note body.
Inputs: transcript (required), tags.
vn_create_tagB
Create a tag with optional auto-tagging keywords, pin state, emoji.
Inputs: name (required), keywords, is_pinned, emoji.
vn_delete_noteADestructive
[Group C / unconfirmed endpoint] Delete a note. Requires confirm:true to attempt.
Inputs: id (required), confirm.
vn_delete_tagBDestructive
Delete a tag permanently.
Inputs: id (required).
vn_get_noteARead-only
Get one note by id, including its full transcript and tags.
Inputs: id (required).
vn_get_user_profileARead-only
[Group C — not yet implemented] Get the authenticated user's profile.
Inputs: no named parameters.
vn_list_notesARead-only
List Voicenotes notes, newest first. Filter by tag and/or ISO date range. Use page for Laravel pagination, or fetch_all:true to retrieve EVERY note in one call.
Inputs: limit, page, cursor, fetch_all, +3 more.
vn_list_tagsARead-only
List all tags: id, name, keywords, pin state, and usage count.
Inputs: no named parameters.
vn_list_webhooksARead-only
[Group C — not yet implemented] List configured webhooks.
Inputs: no named parameters.
vn_search_notesARead-only
Search notes by natural-language query across transcripts and titles.
Inputs: query (required), limit.
vn_setup_tagsA
One-shot: create the 10 personal-OS tags with keywords. Skips existing. Use dry_run to preview.
Inputs: dry_run.
vn_update_noteADestructiveIdempotent
Update a note's title, tags, and/or transcript. tags REPLACES the full list; omitting tags PRESERVES existing ones (e.g. when editing only the title/transcript).
Inputs: id (required), title, tags, transcript.
vn_update_tagBDestructiveIdempotent
Update a tag's name, keywords, and/or pin state.
Inputs: id (required), name, keywords, is_pinned.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Tools have distinct purposes overall, but vn_bulk_tag_notes and vn_update_note both modify tags on notes, with subtle differences (add vs replace). This could cause misselection without careful reading.
All tools follow a consistent vn_verb_noun pattern. Verbs like 'bulk_tag' are slightly unconventional but still adhere to the pattern.
14 tools is well-scoped for a note-taking service. It covers CRUD for notes and tags, search, bulk operations, and initial setup without being overwhelming.
Core note and tag operations are covered. Minor gap: no get_tag by id (only list). Two listed tools (vn_get_user_profile, vn_list_webhooks) are not implemented, slightly reducing completeness.
Related MCP Connectors
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.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Save notes in seconds. Your AI can then search, read, write and tag them over MCP.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables users to manage their notes on NotesKeep directly through Claude Code or other MCP clients. It supports creating, updating, and organizing both text and checklist notes using natural language commands.1415 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables users to create and manage notes through Claude Desktop using MCP tools.-
- FlicenseBqualityDmaintenanceEnables to manage notes and collections in Fastidious AI application through natural language, supporting CRUD operations and search via MCP protocol.11-
- FlicenseNot gradedqualityCmaintenanceEnables full-text search over personal notes, note and tag management, and live weather lookups through MCP tools, resources, and prompts, usable from clients like Claude Desktop or a custom agent loop.-