Anki MCP Server
Provides comprehensive tools for managing Anki decks, notes, and note types, including creating, updating, and sampling notes, as well as managing note types and field definitions through the AnkiConnect API.
Integrates with Google Cloud Text-to-Speech to generate high-quality audio pronunciation files for flashcards using natural-sounding Chirp voices.
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., "@Anki MCP Serveradd a new flashcard to my Spanish deck for the word 'biblioteca'"
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.
Anki MCP Server
A FastMCP server for interacting with Anki through the Model Context Protocol (MCP). This server provides comprehensive tools for managing Anki decks, notes, and note types, with advanced features including AI-powered audio generation, bulk operations, and semantic similarity search.
External APIs Used
This project integrates with several external APIs to provide enhanced functionality:
Google Cloud Text-to-Speech API
Purpose: High-quality audio generation from text using Google's Chirp voices
Use Case: Generate pronunciation audio files for flashcards
Features: HD quality voices with natural pronunciation, especially excellent for Chinese
Setup: Requires
GOOGLE_CLOUD_API_KEYenvironment variable
AnkiConnect API (Local)
Purpose: Interface with Anki desktop application
Use Case: All Anki operations (create/read/update notes, manage decks, etc.)
Features: Complete Anki functionality via HTTP API
Setup: AnkiConnect add-on must be installed and Anki must be running
Related MCP server: anki-mcp
Setup
Install dependencies using uv:
uv syncMake sure Anki is running with the AnkiConnect add-on installed:
In Anki, go to Tools > Add-ons > Get Add-ons
Enter code:
2055492159Restart Anki
(Optional) Set up API key for audio generation:
# For audio generation with Google Cloud TTS export GOOGLE_CLOUD_API_KEY='your-google-cloud-api-key-here'Run the server:
uv run server.py
Claude Desktop Integration
To use this MCP server with Claude Desktop, add the following configuration to your claude_desktop_config.json file:
Configuration Location
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Configuration Example
{
"mcpServers": {
"anki-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/anki-mcp/",
"run",
"server.py"
],
"env": {
"GOOGLE_CLOUD_API_KEY": "your-google-cloud-api-key-here"
}
}
}
}Setup Steps
Ensure dependencies are installed: Make sure you've run
uv syncin your anki-mcp directoryFind your config file at the location above (create it if it doesn't exist)
Update the path: Replace
/path/to/your/anki-mcp/with the actual path to your anki-mcp directoryAdd your API key:
Replace
your-google-cloud-api-key-herewith your actual Google Cloud API key (for audio generation)
Restart Claude Desktop for the changes to take effect
Important Notes
Make sure Anki is running with the AnkiConnect add-on before using the tools
The
uvcommand will automatically handle the Python environment and dependenciesMake sure
uvis installed on your system (curl -LsSf https://astral.sh/uv/install.sh | sh)
Alternative: Using Environment Variables
If you prefer to keep your API key in your shell environment, you can omit the env section:
{
"mcpServers": {
"anki-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/anki-mcp/",
"run",
"server.py"
]
}
}
}Then set the environment variable in your shell:
export GOOGLE_CLOUD_API_KEY='your-google-cloud-api-key-here'Verification
Once configured, restart Claude Desktop and you should see the Anki MCP tools available in your conversations. You can verify by asking Claude to list your Anki decks or try any of the available tools.
Available Tools
list_decks
Lists all available Anki decks with count.
Parameters: None
Returns: Formatted string with all deck names and total count
get_deck_notes
Retrieves all notes/cards from a specific deck with detailed information.
Parameters:
deck_name(str): Name of the Anki deck to retrieve notes from
Returns: Detailed information about all notes including model name, tags, and field values
get_deck_sample
Gets a random sample of notes from a deck to understand typical note structure.
Parameters:
deck_name(str): Name of the Anki deck to sample notes fromsample_size(int, optional): Number of notes to sample (1-50, default: 5)
Returns: Detailed information about sampled notes
get_deck_note_types
Analyzes a deck to identify all note types (models) and their field definitions.
Parameters:
deck_name(str): Name of the Anki deck to analyze
Returns: All unique note types used in the deck with their field names
create_note
Creates a new note in the specified deck.
Parameters:
deck_name(str): Name of the Anki deck to add the note tomodel_name(str): Name of the note type/model to usefields(dict): Dictionary mapping field names to values (e.g.,{'Front': 'Question', 'Back': 'Answer'})tags(list, optional): Optional list of tags to add to the note
Returns: JSON object with noteId and success status or error message
update_note
Updates specific fields of an existing note while preserving other fields.
Parameters:
note_id(int): ID of the note to updatefields(dict): Dictionary mapping field names to new values (e.g.,{'Audio': '[sound:pronunciation.mp3]'})tags(list, optional): Optional list of tags to replace existing tags
Returns: JSON object with success status and updated field information
Use Case: Perfect for adding audio files to existing cards or updating specific content
create_deck_with_note_type
Creates a new deck and optionally a new note type with custom fields and templates.
Parameters:
deck_name(str): Name for the new Anki deckmodel_name(str): Name for the note type/modelfields(list): List of field names (e.g.,['Front', 'Back', 'Extra'])card_templates(list, optional): Optional list of card template definitions
Returns: JSON object with creation status and details
list_note_types
Lists all available note types (models) with comprehensive information.
Parameters: None
Returns: Information about all note types including fields, templates, and styling
generate_audio
Generates high-quality audio files from text using Google Cloud Text-to-Speech API with Chirp voices.
Parameters:
text(str): Text to convert to speechlanguage(str, optional): Language code (default: "cmn-cn" for Chinese)voice(str, optional): Voice name (default: "cmn-CN-Chirp3-HD-Achernar" for Chinese HD voice)
Returns: JSON object with base64-encoded MP3 audio data and metadata
Setup: Requires GOOGLE_CLOUD_API_KEY environment variable
Features: HD quality voices with natural pronunciation, especially excellent for Chinese language learning
save_media_file
Saves base64 encoded media data as a file in Anki's media collection for use in cards.
Parameters:
filename(str): Name of the file to save (e.g., 'audio.mp3', 'image.jpg')base64_data(str): Base64 encoded file datamedia_type(str, optional): Type of media file (default: "audio")
Returns: JSON object with saved filename and success status
Use Case: Save generated audio or other media files for use in Anki cards
generate_and_save_audio
Generates audio from text and saves it directly to Anki's media collection in one operation.
Parameters:
text(str): Text to convert to speech and savefilename(str): Name for the audio file (e.g., 'pronunciation.mp3')language(str, optional): Language code (default: "cmn-cn" for Chinese)voice(str, optional): Voice name (default: "cmn-CN-Chirp3-HD-Achernar")
Returns: JSON object with filename and sound tag for use in card fields
Setup: Requires GOOGLE_CLOUD_API_KEY environment variable
Use Case: One-step audio generation and saving, returns [sound:filename.mp3] tag ready for card fields
create_notes_bulk
Creates multiple notes in a single batch operation for maximum efficiency. Handles duplicates gracefully by reporting which notes are duplicates while still creating non-duplicate notes. NEW: Optionally auto-generates audio files using Google TTS for each note.
Parameters:
deck_name(str): Name of the Anki deck to add notes tonotes_list(list): List of note dictionaries, each containing 'model_name', 'fields', and optionally 'tags'auto_audio(AutoAudioConfig or null, optional): IMPORTANT: Pass as a dictionary/object with the structure shown below, NOT as a JSON string. Configuration for automatic audio generation:enabled(bool, required): Must betrueto enable audio generationsource_field(str, required): Name of field to read text from (e.g., "Front", "Hanzi")target_field(str, required): Name of field to write audio tag to (e.g., "Audio")language(str, optional): Language code - defaults to "cmn-cn" for Chinesevoice(str, optional): Voice name - defaults to "cmn-CN-Chirp3-HD-Achernar"
Correct format (dictionary object):
{ "enabled": true, "source_field": "Hanzi", "target_field": "Audio", "language": "cmn-cn", "voice": "cmn-CN-Chirp3-HD-Achernar" }WRONG - Do NOT pass as a string:
"{\"enabled\": true, \"source_field\": \"Hanzi\", ...}" ❌ INCORRECTTo disable audio generation, pass
nullor omit this parameter entirely.
Returns: JSON object with success/failed counts, successful notes array, failed notes array, and audio generation results if enabled
Features:
Uses canAddNotesWithErrorDetail to pre-check which notes can be added
Only attempts to add valid notes, ensuring no batch failures
Provides detailed error reporting for each failed note (duplicates, validation errors, etc.)
Returns note IDs for successfully created notes for further processing
Auto-generates audio files for all notes in a single operation - no need to create notes and then update them separately!
Audio generation reports success/failure for each note individually
Skips audio generation if target field already has content
Use Case: Create 20 Chinese vocabulary cards with audio in one efficient operation instead of creating cards and then updating each one individually
update_notes_bulk
Updates multiple notes in a single batch operation for maximum efficiency.
Parameters:
updates(list): List of update dictionaries, each containing 'note_id', 'fields' dict, and optionally 'tags' list
Returns: JSON object with success/failure counts and detailed update results
Use Case: Perfect for batch updates like adding audio files to multiple cards at once
find_similar_notes
Finds notes that contain the search text as a substring in any field. Simple and reliable text matching.
Parameters:
deck_name(str): Name of the Anki deck to search insearch_text(str): Text to search for as a substring in any fieldcase_sensitive(bool, optional): Whether the search should be case sensitive (default: false)max_results(int, optional): Maximum number of matching notes to return (default: 20)
Returns: JSON object with matching notes and details about which fields contained the search text
Features:
Fast substring matching across all note fields
Case-sensitive or case-insensitive search options
Shows exactly which fields matched the search criteria
No external API dependencies required
Technical Details
Framework: FastMCP (built on FastAPI)
Server Name: "anki-mcp"
AnkiConnect URL: http://localhost:8765
Dependencies: fastapi, fastmcp, requests, uvicorn
External APIs:
Google Cloud Text-to-Speech API (for audio generation)
Audio Format: MP3 with base64 encoding
Features
HD Audio Generation: Premium quality TTS using Google Cloud Chirp voices, optimized for Chinese pronunciation
Automatic Bulk Audio Generation: Create notes with audio in one operation - no need to create notes and then add audio separately!
Note Updates: Update existing notes with new content like audio files while preserving other fields
Media Management: Direct integration with Anki's media collection for seamless file handling
Bulk Operations: Efficient batch note creation and updates for large datasets
Fast Text Search: Simple substring matching for finding notes containing specific text
Comprehensive Error Handling: Robust error handling for all API failures and edge cases
Smart Data Formatting: Content truncation and formatting for optimal readability
Random Sampling: Efficient sampling for large datasets without memory issues
Custom Templates: Full support for custom card templates and CSS styling
Type Safety: Complete parameter validation using Pydantic
Secure API Key Handling: Environment variable-based API key management
Robust Error Handling: Pre-validation of notes with detailed error reporting for duplicates and other issues
Cross-Language Support: Optimized for Chinese language learning but supports multiple languages
Available Tools
14 toolscreate_deck_with_note_typeC
Create a new deck and optionally a new note type with specified fields and card templates.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name for the new Anki deck to create | |
| model_name | Yes | Name for the note type/model to create or use | |
| fields | Yes | List of field names for the note type (e.g., ['Front', 'Back', 'Extra']) | |
| card_templates | No | Optional list of card template definitions. If not provided, basic front/back templates will be created |
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. It mentions that card templates are optional and basic ones will be created if omitted, which adds some behavioral context. However, it doesn't disclose critical traits like whether this is a mutating operation (implied by 'create'), potential side effects (e.g., overwriting existing decks), authentication needs, error handling, or rate limits. For a creation tool with zero annotation coverage, this is insufficient.
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 efficiently conveys the core functionality and optional aspects. It is front-loaded with the main action and includes no redundant information, making it easy to parse quickly.
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 complexity of creating both a deck and note type (a mutating operation), no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., idempotency, error cases), output format, or how this integrates with other tools (e.g., using the created deck/note type with 'create_note'). For a tool with 4 parameters and significant functionality, more context 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 100%, so the schema already documents all parameters (deck_name, model_name, fields, card_templates) with clear descriptions. The description adds minimal value beyond the schema by noting that card templates are optional and basic ones will be created if not provided, but it doesn't explain parameter interactions (e.g., how fields relate to card templates) or provide examples beyond what's in the schema. Baseline 3 is appropriate when the schema does most of the work.
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 'create' and the resources 'new deck' and 'optionally a new note type', which is specific and actionable. It distinguishes from siblings like 'create_note' (which adds notes to existing decks) by focusing on deck and note type creation. However, it doesn't explicitly mention how it differs from 'list_decks' or 'list_note_types' (which are read-only).
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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether the deck or note type must not already exist), nor does it compare to siblings like 'create_note' (for adding notes) or 'update_note' (for modifying). The optional nature of card templates is noted, but overall usage context is lacking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteC
Create a new note in the specified deck with the given fields and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to add the note to | |
| model_name | Yes | Name of the note type/model to use for this note | |
| fields | Yes | Dictionary mapping field names to their values (e.g., {'Front': 'Question', 'Back': 'Answer'}) | |
| tags | No | Optional list of tags to add to 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 states the tool creates a note but doesn't cover critical aspects: whether this is a write operation (implied but not confirmed), error handling (e.g., if deck doesn't exist), permissions needed, or what happens on success (e.g., returns note ID). For a creation tool with zero annotation coverage, this leaves significant gaps in understanding its 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 a single, efficient sentence that front-loads the core action ('Create a new note') and includes essential details without waste. Every word earns its place, making it easy to parse quickly. No unnecessary elaboration or redundancy is present.
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 complexity (creation operation with 4 parameters, no output schema, and no annotations), the description is incomplete. It lacks information on behavioral traits (e.g., side effects, error conditions), usage context compared to siblings, and output details. For a tool that creates data without structured output documentation, more guidance is needed to ensure proper agent use.
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 parameters thoroughly (e.g., deck_name, model_name, fields mapping, optional tags). The description adds minimal value beyond the schema by mentioning 'fields and tags' but doesn't provide additional context like format examples beyond what's in the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
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 ('Create a new note') and specifies the target resource ('in the specified deck') along with key attributes ('with the given fields and tags'). It distinguishes itself from siblings like 'create_notes_bulk' (single vs. bulk) and 'update_note' (create vs. update), though it doesn't explicitly mention these distinctions. The purpose is specific and actionable.
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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., deck or model must exist), compare to 'create_notes_bulk' for multiple notes, or indicate when 'update_note' might be more appropriate. Usage is implied by the action but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_notes_bulkA
Create multiple notes in a single batch operation for efficiency. Handles duplicates gracefully by reporting which notes are duplicates while still creating non-duplicate notes.
IMPORTANT: The auto_audio parameter must be passed as a dictionary/object structure with fields: enabled, source_field, target_field, language, and voice. Do NOT pass it as a JSON string. Set to null (or omit) to disable automatic audio generation.
Example auto_audio object:
{
"enabled": true,
"source_field": "Hanzi",
"target_field": "Audio",
"language": "cmn-cn",
"voice": "cmn-CN-Chirp3-HD-Achernar"
}| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to add notes to | |
| notes_list | Yes | List of note dictionaries, each containing 'model_name', 'fields', and optionally 'tags' | |
| auto_audio | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it's a write operation (implied by 'Create'), handles duplicates gracefully with reporting, and includes important implementation details about the auto_audio parameter structure. It doesn't cover permissions, rate limits, or error handling, but provides substantial operational context.
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 appropriately sized but not optimally structured: the first paragraph is well-focused, but the auto_audio instructions dominate with repetitive warnings and an example that could be more concise. Some information (like the dictionary/object requirement) is repeated, reducing efficiency.
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 3-parameter write tool with no annotations and no output schema, the description is moderately complete: it covers the main operation, duplicate behavior, and critical parameter details. However, it lacks information about return values, error conditions, or what happens with invalid inputs, leaving gaps in operational understanding.
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 67% schema description coverage, the description compensates well by adding crucial semantics: it explains the auto_parameter must be a dictionary/object (not JSON string), provides a complete example structure, and clarifies how to disable it. This adds significant value beyond the schema, though it doesn't detail notes_list structure beyond what's in 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 specific action ('Create multiple notes in a single batch operation') and resource ('notes'), distinguishing it from sibling tools like 'create_note' (singular) and 'update_notes_bulk' (updates rather than creates). It also mentions the efficiency benefit and duplicate handling, which adds valuable context.
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 clear context for when to use this tool ('for efficiency' in batch operations) and implies an alternative by mentioning duplicate handling, which suggests it's suitable for bulk imports. However, it doesn't explicitly state when not to use it or name specific sibling alternatives like 'create_note' for single notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_notesA
Find notes that contain the search text as a substring in any field. Simple and reliable text matching.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to search in | |
| search_text | Yes | Text to search for as a substring in any field | |
| case_sensitive | No | Whether the search should be case sensitive | |
| max_results | No | Maximum number of matching notes to return |
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 mentions 'simple and reliable text matching' but lacks details on permissions, rate limits, error handling, or what happens if no matches are found. For a search tool with zero annotation coverage, this is a significant gap in transparency.
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 appropriately sized with two concise sentences that are front-loaded with the core purpose ('Find notes that contain the search text as a substring in any field') followed by a qualifier ('Simple and reliable text matching'). Every sentence earns its place without waste.
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 moderate complexity (search function with 4 parameters), no annotations, and no output schema, the description is incomplete. It covers the basic operation but lacks details on return values, error cases, or behavioral traits, leaving gaps for an AI agent to fully understand the tool's context.
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 parameters thoroughly. The description adds minimal value by reinforcing 'search text as a substring in any field', which aligns with the schema but doesn't provide additional syntax or format details beyond what's in the structured data.
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's purpose with specific verbs ('Find notes') and resource ('notes'), and distinguishes it from siblings by specifying 'simple and reliable text matching' as a substring search across any field, unlike other tools that create, update, or list decks/notes without searching.
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 text-based substring searches in notes, but does not explicitly state when to use this tool versus alternatives like 'get_deck_notes' (which might list notes without searching) or other search-related tools not present in siblings. No exclusions or clear alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_and_save_audioA
Generate audio from text and save it to Anki's media collection, returning filename for use in cards.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to convert to speech and save | |
| filename | Yes | Name for the audio file (e.g., 'pronunciation.mp3') | |
| language | No | Language code (e.g., 'cmn-cn' for Chinese, 'en-US' for English) | cmn-cn |
| voice | No | Voice name (e.g., 'cmn-CN-Chirp3-HD-Achernar' for Chinese HD voice) | cmn-CN-Chirp3-HD-Achernar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions the tool generates audio, saves it, and returns a filename, but doesn't disclose behavioral traits like whether this requires specific permissions, what happens if the filename already exists, whether there are rate limits, or what format the audio is in. For a tool that creates and saves files with no annotation coverage, this is a significant 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, well-structured sentence that efficiently conveys the core functionality: generation, saving location, and return value. Every word earns its place with no redundancy or unnecessary elaboration.
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 4 parameters, 100% schema coverage, but no annotations and no output schema, the description is minimally adequate. It covers the purpose and basic usage but lacks behavioral details (e.g., file overwrite behavior, error conditions) and doesn't explain the return value format beyond 'filename'. Given the complexity of file generation and saving operations, more context would be helpful.
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 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. It implies the parameters are used for generation and saving but provides no additional syntax, format, or usage details. Baseline 3 is appropriate when schema does the heavy lifting.
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 specific action: 'Generate audio from text and save it to Anki's media collection', which includes both generation and saving. It distinguishes from sibling 'generate_audio' by explicitly mentioning saving to Anki's media collection, and from 'save_media_file' by specifying audio generation from text.
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 clear context: 'returning filename for use in cards' indicates this is for Anki card creation. However, it doesn't explicitly state when to use this vs. 'generate_audio' (which likely doesn't save) or 'save_media_file' (which likely saves existing files). The guidance is implied but not explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_audioC
Generate audio file from text using Google Cloud Chirp TTS API and return base64 encoded audio data.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to convert to speech | |
| language | No | Language code (e.g., 'cmn-cn' for Chinese, 'en-US' for English) | cmn-cn |
| voice | No | Voice name (e.g., 'cmn-CN-Chirp3-HD-Achernar' for Chinese HD voice) | cmn-CN-Chirp3-HD-Achernar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the API used and output format, but lacks critical details such as rate limits, authentication requirements, error handling, or whether this is a read-only or mutating operation. For a tool that likely involves external API calls, this is a significant 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, efficient sentence that front-loads the core functionality ('generate audio file from text') and includes essential details (API and output format) without unnecessary elaboration. 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?
Given the complexity of a TTS tool with external API integration, no annotations, and no output schema, the description is insufficient. It doesn't cover behavioral aspects like performance, limitations, or error cases, and the lack of output schema means the return value format (base64) is mentioned but not fully specified (e.g., encoding details).
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 thoroughly. The description doesn't add any meaningful parameter semantics beyond what's in the schema (e.g., it doesn't explain default value implications or provide examples beyond the schema's descriptions). Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('generate') and resource ('audio file from text'), specifying the technology used ('Google Cloud Chirp TTS API') and the output format ('base64 encoded audio data'). However, it doesn't explicitly differentiate from sibling tools like 'generate_and_save_audio', which appears to be a related but distinct operation.
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 guidance on when to use this tool versus alternatives. It doesn't mention the sibling tool 'generate_and_save_audio', which seems to serve a similar purpose but with different behavior (saving vs. returning base64 data). No context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deck_notesC
Get all notes/cards from a specific deck.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to retrieve notes from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal insight. It implies a read-only operation ('Get') but doesn't specify aspects like whether it returns all notes at once (potential pagination issues), error handling for non-existent decks, or data format (e.g., structured vs. raw). This leaves significant gaps for a tool that likely interacts with user data.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly, though this brevity contributes to gaps in other dimensions.
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 lack of annotations and output schema, the description is incomplete for effective tool use. It doesn't address key contextual aspects like return format (e.g., list of notes, error responses), performance considerations (e.g., large deck handling), or how it differs from siblings, leaving the agent under-informed for a data retrieval 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?
The description adds no parameter-specific details beyond what the input schema already provides (100% coverage). It mentions 'a specific deck' which aligns with the 'deck_name' parameter but doesn't clarify semantics like case sensitivity, deck naming conventions, or validation rules. With high schema coverage, a baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.
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') and target resource ('all notes/cards from a specific deck'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from similar siblings like 'get_deck_sample' or 'find_similar_notes', which might also retrieve notes with different scopes or filters.
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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., deck existence), exclusions, or comparisons to siblings like 'get_deck_sample' (which might retrieve a subset) or 'find_similar_notes' (which likely filters content), leaving the agent to infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deck_note_typesB
Get the note types (models) and their field definitions used in a specific deck.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to analyze for note types |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does without behavioral details. It doesn't disclose whether this is a read-only operation, what permissions are needed, how it handles non-existent decks, or the format/structure of the returned data. For a tool with zero annotation coverage, this leaves significant gaps in understanding its 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 a single, well-structured sentence that efficiently conveys the tool's purpose without unnecessary words. It's front-loaded with the core functionality and appropriately sized for its complexity.
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 annotations and no output schema, the description is incomplete for a tool that retrieves structured data. It doesn't explain what 'note types (models) and their field definitions' means in practice, what the return format looks like, or any error conditions. For a data retrieval tool with rich output expected, this leaves too much unspecified.
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 parameter 'deck_name' is fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides (e.g., no examples, format constraints, or relationship to output). The baseline score of 3 reflects adequate coverage through the schema alone.
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') and the resource ('note types (models) and their field definitions') with specific scope ('used in a specific deck'). It distinguishes from siblings like 'list_note_types' by specifying deck-specific retrieval, but doesn't explicitly contrast with 'get_deck_notes' which retrieves notes rather than note types.
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 when needing note types for a particular deck, but provides no explicit guidance on when to use this versus alternatives like 'list_note_types' (which might list all note types regardless of deck) or 'get_deck_notes' (which retrieves actual notes). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deck_sampleB
Get a random sample of notes from a specific deck to understand typical note structure.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Name of the Anki deck to sample notes from | |
| sample_size | No | Number of notes to randomly sample from the deck |
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 mentions random sampling and the goal of understanding note structure, but lacks details on permissions, rate limits, error handling, or what the output looks like (e.g., format of returned notes). This is a significant gap for a tool with no annotation coverage.
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, efficient sentence that front-loads the core purpose without unnecessary words. It directly communicates the tool's function and intent, 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?
Given no annotations and no output schema, the description is incomplete. It does not explain what the returned sample includes (e.g., note fields, IDs), how randomness is implemented, or any behavioral traits like side effects. For a tool with 2 parameters and no structured output documentation, this leaves gaps in understanding how to use it effectively.
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%, with clear descriptions for both parameters ('deck_name' and 'sample_size') in the input schema. The description adds minimal value beyond the schema by implying the purpose of sampling for note structure understanding, but does not provide additional syntax or format details. Baseline 3 is appropriate when the schema does the heavy lifting.
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's purpose: 'Get a random sample of notes from a specific deck to understand typical note structure.' It specifies the verb ('Get'), resource ('notes'), and scope ('from a specific deck'), but does not explicitly differentiate it from sibling tools like 'get_deck_notes' or 'find_similar_notes', which prevents a score of 5.
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 understanding note structure through random sampling, but does not provide explicit guidance on when to use this tool versus alternatives like 'get_deck_notes' (which might retrieve all notes) or 'find_similar_notes' (which might search based on criteria). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_decksB
List all available Anki decks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves—such as whether it returns all decks at once, if there's pagination, what format the output is in, or any performance considerations. This is inadequate for a tool with zero annotation coverage.
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, direct sentence with no wasted words. It's front-loaded with the core action and resource, making it highly efficient and easy to parse for an AI agent.
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 lack of annotations and output schema, the description is incomplete. It doesn't explain what 'list' entails—such as the structure of returned data, any limitations, or error handling. For a tool with no structured behavioral hints, this leaves significant gaps in understanding.
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 has 0 parameters, and the schema description coverage is 100%, so there's no need for parameter details in the description. The description doesn't add parameter semantics, but this is acceptable given the lack of parameters, warranting a baseline score above minimum.
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') and resource ('all available Anki decks'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_deck_notes' or 'get_deck_note_types' which also retrieve deck-related information, so it doesn't reach the highest score.
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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for usage, or compare it to siblings like 'get_deck_notes' or 'list_note_types', leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_note_typesA
List all available note types (models) with their fields and card templates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool lists all available note types with fields and templates, implying a read-only, non-destructive operation. However, it doesn't mention behavioral traits like pagination, rate limits, authentication needs, or error conditions, leaving gaps for a tool with no annotation coverage.
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, efficient sentence that front-loads the core purpose ('List all available note types') and adds necessary detail ('with their fields and card templates') without any wasted words. Every part 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 no annotations, no output schema, and 0 parameters, the description is minimally complete for a simple list tool. It explains what the tool returns (note types with fields and templates), but lacks details on output format, error handling, or system constraints, which could be helpful despite the low complexity.
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 has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't add param info beyond the schema, but this is appropriate given the lack of parameters, meeting the baseline for 0 params.
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 specific action ('List all available note types') and specifies the resources returned ('with their fields and card templates'). It distinguishes from siblings like 'get_deck_note_types' by not being deck-specific and from 'create_deck_with_note_type' by being read-only.
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 context (when you need to know available note types with their structure), but doesn't explicitly state when to use this vs. alternatives like 'get_deck_note_types' for deck-specific types or 'create_deck_with_note_type' for creation. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_media_fileC
Save base64 encoded media data as a file in Anki's media collection for use in cards.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Name of the file to save (e.g., 'audio.mp3', 'image.jpg') | |
| base64_data | Yes | Base64 encoded file data | |
| media_type | No | Type of media file (audio, image, etc.) | audio |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the core action (saving media) but lacks critical behavioral details such as whether this operation requires specific permissions, what happens if a file with the same name exists (overwrite? error?), rate limits, or the expected response format. For a write operation with zero annotation coverage, this is a significant 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every element contributing to understanding the 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 complexity of a write operation with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like error handling, idempotency, or integration with other tools (e.g., how the saved file references relate to note creation). For a tool that modifies system state, more context 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?
The schema description coverage is 100%, with all parameters well-documented in the input schema (filename, base64_data, media_type with default). The description adds no additional parameter semantics beyond what's already in the schema, such as format constraints or examples. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('Save base64 encoded media data as a file') and the target resource ('in Anki's media collection for use in cards'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from sibling tools like 'generate_and_save_audio' or 'generate_audio', which might have overlapping media-related functionality.
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 minimal usage guidance, stating only that the saved file is 'for use in cards' without specifying when to use this tool versus alternatives like 'generate_and_save_audio' or how it integrates with other tools (e.g., whether it should be called before creating notes). No explicit when/when-not scenarios or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteB
Update specific fields of an existing note. Perfect for adding audio or other content to existing cards.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ID of the note to update | |
| fields | Yes | Dictionary mapping field names to their new values (e.g., {'Audio': '[sound:pronunciation.mp3]'}) | |
| tags | No | Optional list of tags to replace existing tags |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it updates fields without disclosing behavioral traits like permissions needed, whether updates are reversible, rate limits, or error handling. It mentions adding audio as an example but doesn't explain broader implications or constraints.
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 concise with two sentences that are front-loaded with the core purpose. The second sentence adds context without redundancy, though it could be slightly more structured (e.g., separating usage examples).
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 annotations and no output schema, the description is incomplete for a mutation tool with 3 parameters. It lacks details on behavioral aspects, error cases, and what the tool returns, leaving gaps for an AI agent to understand full usage.
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 parameters. The description adds minimal value by hinting at usage ('adding audio') and implying 'fields' is a dictionary, but doesn't provide additional semantics beyond what the schema specifies (e.g., format details for audio).
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 ('Update specific fields') and resource ('an existing note'), distinguishing it from creation tools like 'create_note' and bulk operations like 'update_notes_bulk'. However, it doesn't explicitly differentiate from all siblings (e.g., 'generate_and_save_audio' might also modify notes).
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 implied context with 'Perfect for adding audio or other content to existing cards', suggesting use cases, but lacks explicit guidance on when to choose this over alternatives like 'update_notes_bulk' for multiple notes or 'create_note' for new notes. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_notes_bulkB
Update multiple notes in a single batch operation for efficiency. Each update should contain note_id and fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes | List of update dictionaries, each containing 'note_id', 'fields' dict, and optionally 'tags' list |
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 states this is an update operation (implying mutation) and mentions efficiency, but fails to disclose critical traits such as required permissions, whether changes are reversible, error handling for partial failures in batch updates, rate limits, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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 highly concise and well-structured in two sentences: the first states the purpose and benefit, and the second specifies parameter requirements. Every sentence adds value without redundancy, making it easy for an agent to parse quickly. It is appropriately sized for a tool with a single parameter and clear 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 complexity of a batch mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., error handling, permissions), does not explain return values or side effects, and relies heavily on the schema for parameter documentation. For a tool that modifies multiple resources, more contextual information is needed to ensure safe and effective use by an agent.
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 description adds minimal semantics beyond the input schema: it specifies that each update should contain 'note_id and fields to update,' which aligns with the schema's description of 'update dictionaries.' However, with 100% schema description coverage, the schema already documents the parameter thoroughly (e.g., 'List of update dictionaries, each containing 'note_id', 'fields' dict, and optionally 'tags' list'). The description does not provide additional context like field constraints or examples, so it meets the baseline for high schema coverage.
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's purpose: 'Update multiple notes in a single batch operation for efficiency.' It specifies the verb ('update'), resource ('notes'), and scope ('multiple...batch'), distinguishing it from the sibling tool 'update_note' which likely handles single notes. However, it doesn't explicitly contrast with 'update_note' or other bulk operations like 'create_notes_bulk', leaving some sibling differentiation implicit.
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 context by mentioning 'efficiency' for batch operations, suggesting this tool is preferred over individual updates when handling multiple notes. However, it lacks explicit guidance on when to use this versus alternatives like 'update_note' or 'create_notes_bulk', and does not mention prerequisites, exclusions, or performance trade-offs, leaving the agent to infer optimal scenarios.
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
v0.1.0- First observed
create_deck_with_note_type - First observed
create_note - First observed
create_notes_bulk - First observed
find_similar_notes - First observed
generate_and_save_audio - First observed
generate_audio - First observed
get_deck_note_types - First observed
get_deck_notes - First observed
get_deck_sample - First observed
list_decks - First observed
list_note_types - First observed
save_media_file - First observed
update_note - First observed
update_notes_bulk
TDQS
Scored across 14 tools
Most tools have distinct purposes, such as create_deck_with_note_type for deck creation and generate_audio for audio generation, but there is some overlap between generate_audio and generate_and_save_audio, which could cause confusion as both handle audio generation with similar names. The descriptions help clarify that generate_audio returns base64 data while generate_and_save_audio saves to media, but the naming similarity might lead to misselection.
Tool names follow a consistent verb_noun pattern throughout, such as create_deck_with_note_type, list_decks, update_note, and get_deck_notes, with no deviations in style or convention. This predictability makes it easy for agents to understand and use the tools without confusion from mixed naming schemes.
With 14 tools, the server is well-scoped for managing Anki decks and notes, covering operations like creation, retrieval, updating, and audio handling. Each tool serves a clear purpose, such as bulk operations for efficiency and specific functions like audio generation, making the count appropriate without being excessive or insufficient.
The tool surface provides comprehensive coverage for Anki management, including CRUD operations for decks and notes, bulk handling, and audio integration. Minor gaps exist, such as no direct tools for deleting decks or notes, but agents can work around this by using update or other methods, and core workflows are well-supported.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Free: turn your AI chats into spaced-repetition vocabulary. 13 tools, reads and writes.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that allows LLMs to interact with Anki flashcard software, enabling functions like creating decks, adding notes, searching cards, and managing flashcard content through natural language.86 npm1MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables interaction with Anki flashcards through AnkiConnect, providing organized tools for managing decks, notes, cards, models, and media files.407MIT
- AlicenseCqualityBmaintenanceServer that enables programmatic interaction with Anki through the Model Context Protocol, allowing users to manage flashcards, decks, and review processes.39 npm39MIT
- FlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Anki decks and notes through the Model Context Protocol, including bulk operations and note type customization. It features integrated high-quality audio generation for flashcards using ElevenLabs and Google Cloud Text-to-Speech APIs.1-