Skip to main content
Glama

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_KEY environment 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

  1. Install dependencies using uv:

    uv sync
  2. Make sure Anki is running with the AnkiConnect add-on installed:

    • In Anki, go to Tools > Add-ons > Get Add-ons

    • Enter code: 2055492159

    • Restart Anki

  3. (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'
  4. 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.json

  • Windows: %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

  1. Ensure dependencies are installed: Make sure you've run uv sync in your anki-mcp directory

  2. Find your config file at the location above (create it if it doesn't exist)

  3. Update the path: Replace /path/to/your/anki-mcp/ with the actual path to your anki-mcp directory

  4. Add your API key:

    • Replace your-google-cloud-api-key-here with your actual Google Cloud API key (for audio generation)

  5. 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 uv command will automatically handle the Python environment and dependencies

  • Make sure uv is 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 from

  • sample_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 to

  • model_name (str): Name of the note type/model to use

  • fields (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 update

  • fields (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 deck

  • model_name (str): Name for the note type/model

  • fields (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 speech

  • language (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 data

  • media_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 save

  • filename (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 to

  • notes_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 be true to enable audio generation

    • source_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 Chinese

    • voice (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\", ...}"  ❌ INCORRECT

    To disable audio generation, pass null or 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 in

  • search_text (str): Text to search for as a substring in any field

  • case_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 tools
create_deck_with_note_typeC

Create a new deck and optionally a new note type with specified fields and card templates.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName for the new Anki deck to create
model_nameYesName for the note type/model to create or use
fieldsYesList of field names for the note type (e.g., ['Front', 'Back', 'Extra'])
card_templatesNoOptional list of card template definitions. If not provided, basic front/back templates will be created

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to add the note to
model_nameYesName of the note type/model to use for this note
fieldsYesDictionary mapping field names to their values (e.g., {'Front': 'Question', 'Back': 'Answer'})
tagsNoOptional list of tags to add to the note

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to add notes to
notes_listYesList of note dictionaries, each containing 'model_name', 'fields', and optionally 'tags'
auto_audioNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to search in
search_textYesText to search for as a substring in any field
case_sensitiveNoWhether the search should be case sensitive
max_resultsNoMaximum number of matching notes to return

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to convert to speech and save
filenameYesName for the audio file (e.g., 'pronunciation.mp3')
languageNoLanguage code (e.g., 'cmn-cn' for Chinese, 'en-US' for English)cmn-cn
voiceNoVoice name (e.g., 'cmn-CN-Chirp3-HD-Achernar' for Chinese HD voice)cmn-CN-Chirp3-HD-Achernar

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to convert to speech
languageNoLanguage code (e.g., 'cmn-cn' for Chinese, 'en-US' for English)cmn-cn
voiceNoVoice name (e.g., 'cmn-CN-Chirp3-HD-Achernar' for Chinese HD voice)cmn-CN-Chirp3-HD-Achernar

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to retrieve notes from

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to analyze for note types

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deck_nameYesName of the Anki deck to sample notes from
sample_sizeNoNumber of notes to randomly sample from the deck

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName of the file to save (e.g., 'audio.mp3', 'image.jpg')
base64_dataYesBase64 encoded file data
media_typeNoType of media file (audio, image, etc.)audio

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYesID of the note to update
fieldsYesDictionary mapping field names to their new values (e.g., {'Audio': '[sound:pronunciation.mp3]'})
tagsNoOptional list of tags to replace existing tags

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesList of update dictionaries, each containing 'note_id', 'fields' dict, and optionally 'tags' list

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 14 tool updatesv0.1.0
    • First observedcreate_deck_with_note_type
    • First observedcreate_note
    • First observedcreate_notes_bulk
    • First observedfind_similar_notes
    • First observedgenerate_and_save_audio
    • First observedgenerate_audio
    • First observedget_deck_note_types
    • First observedget_deck_notes
    • First observedget_deck_sample
    • First observedlist_decks
    • First observedlist_note_types
    • First observedsave_media_file
    • First observedupdate_note
    • First observedupdate_notes_bulk

TDQS

A3.5/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -