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 MCPSearch 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: NotesKeep MCP 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).
| Name | Required | Description | Default |
|---|---|---|---|
| note_ids | Yes | Note ids to tag | |
| tags_to_add | Yes | Tag names to add to each |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-destructive write. The description adds crucial behavioral context: the tool adds tags to existing ones, not replacing them. This value goes beyond the annotations, which only hint at safety.
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?
Two concise sentences, no filler. The core action and key behavioral trait are front-loaded. Every word earns its place.
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 tool with two simple parameters and no output schema, the description covers the purpose and distinctive behavior sufficiently. No gaps remain for correct invocation.
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 coverage is 100% with clear descriptions for both parameters. The description reinforces the additive nature but does not add new parameter-specific details. Baseline 3 is appropriate.
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 ('add') and resource ('tags to multiple notes'), and distinguishes the tool by noting that it adds to existing tags rather than replacing them, which differentiates it from siblings like vn_update_note that might replace tags.
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 (when adding tags without replacement) but does not explicitly state when not to use or mention alternatives like vn_update_note for tag replacement. The additive behavior is useful but minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_create_noteA
Create a new text note with optional tags. The transcript becomes the note body.
| Name | Required | Description | Default |
|---|---|---|---|
| transcript | Yes | Note body text | |
| tags | No | Tag names to attach |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive write operation. Description adds that 'transcript becomes the note body', but no additional behavioral details like auth needs or rate limits.
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?
Two concise sentences with no wasted words. Essential information front-loaded.
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?
Adequate for a simple create tool with no output schema. Could mention what is returned (e.g., note ID), but not strictly necessary.
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 covers 100% of parameters with descriptions. The description restates 'optional tags' and clarifies transcript purpose, adding minimal value beyond 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?
Clearly states the action (create), resource (text note), and optional tags. Distinguishes from sibling tools like vn_update_note or vn_delete_note.
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?
Implied usage from name and description, but no explicit guidance on when to use vs alternatives like vn_bulk_tag_notes or vn_update_note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_create_tagB
Create a tag with optional auto-tagging keywords, pin state, emoji.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tag name | |
| keywords | No | Auto-tag keywords | |
| is_pinned | No | Pin to top | |
| emoji | No | Optional emoji |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which aligns with the create action. The description mentions optional features but omits behavioral details like duplicate handling, return value, or side effects. Adequate but not rich.
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?
Single sentence that is front-loaded with the core action. No unnecessary words; every part adds value.
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?
No output schema, so description should explain return value (e.g., created tag ID). Tool has 4 parameters and siblings, but description is too brief to cover all aspects needed for correct invocation.
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 coverage is 100%, and description mentions the same parameters as schema descriptions. No additional meaning or constraints beyond what schema provides. Baseline of 3 is appropriate.
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?
Description clearly states the action ('Create') and resource ('tag'), and lists optional attributes (auto-tagging keywords, pin state, emoji). It distinguishes from siblings like vn_update_tag or vn_delete_tag.
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?
No guidance on when to use this tool versus alternatives like vn_bulk_tag_notes or vn_setup_tags. The description doesn't include when-not-to-use or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_delete_noteADestructive
[Group C / unconfirmed endpoint] Delete a note. Requires confirm:true to attempt.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id | |
| confirm | No | Must be true to actually delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive hint, but the description adds the crucial detail that a confirm parameter must be true to actually delete, which prevents accidental destruction. This goes beyond the annotations.
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 extremely concise with two short sentences. Every word is necessary and there is no fluff.
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 simplicity of the tool (2 parameters, no output schema), the description covers the essential behavior. It could mention what happens on success/failure, but the core delete operation is well explained.
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 already fully describes the parameters (id and confirm) with descriptions. The tool description adds no new meaning beyond the schema, so baseline score is appropriate.
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 it's for deleting a note, distinguishing it from other note operations like update or create. It's specific and unambiguous.
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 mentions the confirm:true requirement, providing a clear usage condition. However, it does not explicitly discuss when to use this tool versus alternatives (e.g., updating instead of deleting).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_delete_tagBDestructive
Delete a tag permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint: true already indicates a destructive operation. The description adds 'permanently,' confirming irreversibility, but does not detail side effects (e.g., removing the tag from all notes). Minimal added value beyond annotations.
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?
A single, clear sentence with no redundant words. Efficiently conveys the purpose without clutter, earning a perfect score for conciseness.
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?
Despite simplicity, the description omits return behavior (e.g., success response), error conditions, and whether deleting a tag affects notes. No output schema exists to compensate. The agent lacks full context for reliable invocation.
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?
With 100% schema description coverage, the sole parameter 'id' is already described as 'Tag id' in the schema. The tool description adds no further semantics or usage context, meeting the baseline of 3.
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 'Delete a tag permanently' clearly specifies the action (delete) and resource (tag), distinguishing it from sibling tools like vn_create_tag or vn_update_tag. The word 'permanently' adds finality, making the purpose unambiguous.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., vn_bulk_tag_notes). Prerequisites like the tag existing or implications for associated notes are not mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_get_noteARead-only
Get one note by id, including its full transcript and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id / UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the tool is known to be safe and non-destructive. The description adds value by specifying the return content (full transcript and tags), which goes beyond the annotations.
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-crafted sentence that contains no unnecessary words. It efficiently communicates the tool's core functionality.
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 simple input (one required parameter) and no output schema, the description adequately covers what the tool returns. It could mention handling of non-existent IDs, but that is not essential for a read operation.
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 coverage is 100% for the single parameter 'id', which is described as 'Note id / UUID'. The description does not add any additional parameter information beyond what the schema already provides.
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 ('Get one note by id') and explicitly mentions what is included ('full transcript and tags'). It distinguishes this from sibling tools like vn_list_notes and vn_search_notes, which handle multiple notes or search results.
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 implicitly indicates that the tool is for fetching a single note by ID, but it does not provide explicit when-to-use guidance or contrast with alternatives such as using list_notes for multiple notes or search_notes for filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_get_user_profileARead-only
[Group C — not yet implemented] Get the authenticated user's profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds the 'not yet implemented' warning, which is crucial for agent decision-making. This goes beyond annotations.
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?
Short and to the point. Could be slightly more concise without 'Group C' prefix, but the implementation status is valuable so overall efficient.
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 read operation with no output schema, the description should hint at return values (e.g., user fields). It only states 'profile' without details, leaving significant gaps.
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?
No parameters, schema coverage 100%. Baseline 4 is appropriate since description adds no param info but none needed.
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?
Description clearly states it gets the authenticated user's profile, a specific verb+resource. This is distinct from sibling tools which operate on notes, tags, and webhooks.
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?
No guidance on when to use this tool versus alternatives. While the purpose is clear, there is no explicit 'when not to use' or context for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max notes per page (1-50) | |
| page | No | Page number (Laravel pagination) | |
| cursor | No | Deprecated alias for page | |
| fetch_all | No | Walk all pages and return every note | |
| tag | No | Filter to a single tag name | |
| date_from | No | ISO 8601 start (inclusive) | |
| date_to | No | ISO 8601 end (inclusive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the description need not repeat safety. It adds ordering (newest first) but no further behavioral details like rate limits or pagination limits beyond what schema implies.
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?
Single, front-loaded sentence that contains all essential information without extraneous words. Every phrase earns its place.
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 7 parameters and no output schema, the description covers the key aspects: order, filtering, pagination. Lacks explicit mention of return structure, but that is implied for a list 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?
Schema covers 100% of parameters with descriptions. The description supplements by explaining high-level interactions (e.g., filtering combination, fetch_all behavior) but doesn't add syntax or validation details beyond 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?
Description clearly states it lists notes from Voicenotes, sorted newest first, with filtering by tag and date range. This distinguishes it from siblings like vn_search_notes or vn_get_note.
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?
Provides explicit usage for pagination (page) and bulk retrieval (fetch_all:true). While it doesn't explicitly state when not to use, the context is clear enough for an agent to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_list_tagsARead-only
List all tags: id, name, keywords, pin state, and usage count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds value by specifying the exact fields returned (id, name, keywords, pin state, usage count). It does not mention pagination or behavior if there are many tags, but for a list-all tool this is acceptable.
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 front-loads the action and result. Every word adds value, 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?
Given that there are no parameters, no output schema, and the tool is a simple list operation, the description fully covers what the agent needs to know: the resource and the returned fields.
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?
There are no parameters; the schema coverage is 100% already. The description adds meaningful information about the output fields, which is valuable since there is no output schema. Baseline for zero-parameter tools is 4, and the description meets this.
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 'List' and resource 'tags', and enumerates the returned fields (id, name, keywords, pin state, usage count). This clearly distinguishes it from sibling tools that create, update, or delete tags.
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 this tool is for getting a full list of tags without filtering. No explicit alternatives are mentioned, but the sibling context makes it clear that CRUD tools exist for other operations. It could be improved by stating that it returns all tags with no filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_list_webhooksARead-only
[Group C — not yet implemented] List configured webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states it is not yet implemented, which is a critical behavioral disclosure beyond the readOnlyHint annotation. No contradiction with annotations.
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?
Single sentence with essential information: action, resource, and implementation status. Minimal and front-loaded.
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 tool with no parameters and no output schema, the description is nearly complete. Could be improved by defining what a webhook is, but not essential.
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?
There are no parameters, and schema coverage is 100%. Baseline 4 applies, and the description adds no parameter-specific information but is adequate.
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 (List) and resource (configured webhooks). It distinguishes from sibling tools which deal with notes and tags.
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?
No guidance on when to use this tool versus alternatives. While siblings are different resources, there is no mention of context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_search_notesARead-only
Search notes by natural-language query across transcripts and titles.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| limit | No | Cap on results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true. The description adds the key behavioral detail that this is a 'natural-language query' (semantic search, not exact match) and that it searches 'across transcripts and titles', disclosing the search scope. No contradictions.
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, concise sentence of 9 words, with no wasted text. It is front-loaded with the primary action and resource.
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 low complexity (2 parameters, no output schema, no enums), the description adequately covers the tool's purpose and scope. A minor gap is the lack of mention of the output format, but for a simple search tool returning notes, this is acceptable.
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 coverage is 100%, with both parameters (query, limit) already described clearly in the schema. The description adds no additional meaning beyond what the schema provides, so baseline 3 is appropriate.
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 'Search', the resource 'notes', and the scope 'across transcripts and titles', distinguishing it from sibling tools like vn_list_notes which list all notes, and vn_get_note which retrieves a single note.
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 usage for natural-language queries but does not explicitly state when to use this tool versus alternatives like vn_list_notes for simple listing or vn_get_note for direct retrieval. No 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_setup_tagsA
One-shot: create the 10 personal-OS tags with keywords. Skips existing. Use dry_run to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | Preview without creating |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes idempotency ('Skips existing'), one-shot behavior, and preview option ('Use dry_run to preview'), adding value beyond annotations which only show readOnlyHint=false and destructiveHint=false. No contradictions.
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?
Two concise sentences with front-loaded purpose. No unnecessary words, every part adds value.
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 no output schema and a single parameter, the description fully covers what the tool does, its behavior (skip existing), and how to use dry_run. Contextual completeness is high for this simple 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?
Schema coverage is 100% for the single parameter. The description's mention of 'dry_run to preview' aligns with the schema description, providing no additional meaning beyond what the schema already conveys.
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 'create the 10 personal-OS tags with keywords', specifying a clear verb and resource. It distinguishes from siblings like vn_create_tag (single tag) and vn_bulk_tag_notes (tagging notes), indicating a one-time setup.
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?
Explicitly mentions using 'dry_run to preview', giving usage guidance. While it doesn't explicitly say when to use vs alternatives, the one-shot nature and sibling tools imply it's for initial setup rather than ongoing tag management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note id | |
| title | No | New title | |
| tags | No | Full replacement tag list (omit to keep existing) | |
| transcript | No | Corrected transcript text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent nature. Description adds key behavioral info about tags replacement. Does not mention side effects or permissions, but annotations cover basic safety profile.
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?
Two sentences, efficient, front-loaded with purpose. Every sentence adds value without 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?
Adequate for a 4-parameter update tool with no output schema. Covers the key nuance on tags. Could mention idempotency or response, but not essential given annotations and schema coverage.
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 covers 100% of parameters with descriptions. The description adds value by clarifying the tags replacement/preservation semantics beyond the schema's 'Full replacement tag list'.
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 updates a note, specifying the fields: title, tags, and/or transcript. It distinguishes from siblings like vn_create_note and vn_delete_note.
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?
Provides explicit guidance on tags behavior: replacement vs preservation on omission. Includes an example scenario. Could further contrast with vn_update_tag but sufficiently helps decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vn_update_tagBDestructiveIdempotent
Update a tag's name, keywords, and/or pin state.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag id | |
| name | No | ||
| keywords | No | ||
| is_pinned | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true and idempotentHint=true, but the description does not elaborate on what destruction entails (e.g., overwriting fields) or idempotency guarantees. It adds no behavioral context beyond the annotations.
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?
Single sentence, front-loaded with the verb and resource, no filler. Every word earns its place.
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?
Despite destructiveHint=true, the description does not explain what happens on partial updates, default behavior, or return value. No output schema exists, so more context on side effects or response is needed.
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 low (25%, only id has a description). The description lists 'name, keywords, and/or pin state' which adds some meaning, but lacks details like format constraints (e.g., keyword length, name allowed characters). It partially compensates for missing schema descriptions.
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 a tag's name, keywords, and/or pin state.' The verb 'Update' and resource 'tag' are specific and distinct from sibling tools like vn_create_tag or vn_delete_tag.
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?
No explicit guidance on when to use this tool vs alternatives (e.g., no mention of vn_create_tag for creation or vn_bulk_tag_notes for bulk operations). The description does not include when-not-to-use or prerequisites.
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.
14 tool updates
v1.0.0- First observed
vn_bulk_tag_notes - First observed
vn_create_note - First observed
vn_create_tag - First observed
vn_delete_note - First observed
vn_delete_tag - First observed
vn_get_note - First observed
vn_get_user_profile - First observed
vn_list_notes - First observed
vn_list_tags - First observed
vn_list_webhooks - First observed
vn_search_notes - First observed
vn_setup_tags - First observed
vn_update_note - First observed
vn_update_tag
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.
Maintenance
Related MCP Connectors
- 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.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
- NoteMCPOAuthcom.notemcp
Save notes in seconds. Your AI can then search, read, write and tag them over MCP.
Related MCP Servers
- AlicenseDqualityDmaintenanceA Claude MCP integration that allows seamless interaction with Apple Notes through natural language, enabling users to create, update, delete, and search notes.151MIT
- 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.1461MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search, read, create, and append Apple Notes using MCP tools, supporting bulk folder reads and tag search.10MIT
- FlicenseNot gradedqualityDmaintenanceEnables users to create and manage notes through Claude Desktop using MCP tools.-