Skip to main content
Glama

anki-web-mcp

Search, download and share AnkiWeb decks from your assistant, on your own session.

npm CI License Node


Install • Sign in • Tools • How it works • Docs


anki-web-mcp is an MCP server for AnkiWeb. It gives an assistant such as Claude the shared-deck catalogue and the decks synced to your account.

  • Search shared decks and read a listing: description, sample notes, reviews.

  • Download a shared deck's .apkg to disk, and convert it to Markdown the assistant can read.

  • List the decks synced to your account.

  • Share one of your decks publicly, only after you have seen a preview and said yes.

  • Reuse the AnkiWeb session already signed in to Chrome, Brave, Edge and other Chromium browsers.

It is not affiliated with AnkiWeb or Ankitects. AnkiWeb's terms do not allow third-party clients, and say it can suspend access at its discretion; docs/ankiweb.md quotes the clause. AnkiWeb licenses shared decks for personal use only.

Install

Add the server to your MCP client's configuration:

{
  "mcpServers": {
    "anki-web": {
      "command": "npx",
      "args": ["anki-web-mcp@latest"]
    }
  }
}

Node.js 24 or newer is required. Then download the Chromium build the server drives:

npx anki-web-mcp@latest --install-browser

Searching and downloading shared decks work at this point, with no account.

Related MCP server: NotebookLM MCP Server

Sign in

Listing your decks and sharing one need an AnkiWeb session. The first call that needs one looks for it in a local Chromium-family browser where you are signed in to AnkiWeb: Chrome, Chromium, Brave, Edge, Vivaldi and Opera on Linux and macOS, plus Arc and Helium on macOS. On macOS that shows one keychain prompt per browser it tries.

If no browser has a session, sign in once in a window the server opens:

npx anki-web-mcp@latest --login

You type your password into AnkiWeb's own page, so it never passes through the server. The server keeps the session in ~/.anki-web-mcp/, created 0700, and writes the cookie export 0600. --logout deletes it.

Tools

tool

does

search_shared_decks

searches the shared catalogue, with sorting and paging

get_shared_deck

one listing: description, tags, sample notes, reviews

download_shared_deck

saves a shared deck's .apkg, never overwriting a file

convert_deck_to_markdown

turns a local .apkg into Flashcard Markdown and images

list_my_decks

the decks synced to your account, with due counts

share_deck

publishes one of your decks to the shared catalogue

server_status

version, data directory, and whether the session is valid

close_session

closes the headless browser until the next call needs it

share_deck publishes publicly under your account. Without confirm: true it only returns a preview, and the tool description tells the assistant to show you that preview and wait for your go-ahead. Calling it with confirm: true also makes AnkiWeb's declaration that you own the material or have a license to share it.

Command line

flag

does

--login

signs in to AnkiWeb in a visible browser window

--logout

deletes the stored session, keeping downloads

--import-from-browser [name]

imports the session from a local browser now

--no-auto-import

never looks in local browsers on its own

--install-browser

downloads Playwright's Chromium

--channel <name>

drives an installed browser, such as chrome, instead

--data-dir <path>

keeps the session elsewhere; also ANKI_WEB_MCP_DATA_DIR

-h, --help

lists these flags

Without --login, --logout, --import-from-browser or --install-browser, it serves MCP over stdio. A flag it does not know, or a missing value, prints one line and exits with status 2.

How it works

AnkiWeb is a single-page app whose data comes from protobuf endpoints under /svc/. The server calls those endpoints directly and renders no pages.

flowchart LR
  A[MCP client] -- stdio --> S[anki-web-mcp]
  S -- "fetch, no cookies" --> P["/svc/shared/*<br>search, listings, downloads"]
  S -- "headless Chromium,<br>signed-in cookie jar" --> U["/svc/decks/*<br>your decks, sharing"]
  B[Local browser profile] -. "session import" .-> S
  • Shared-deck reads go out without cookies, and the server caches each answer for as long as AnkiWeb allows, ten minutes.

  • After a few anonymous downloads AnkiWeb asks for a login, and the server retries the download with your session.

  • Calls on your account go through one headless browser, one at a time, which closes after five idle minutes.

  • The server spaces requests at least a second apart. AnkiWeb answers 429 after about four searches a minute.

More

Available Tools

8 tools
close_sessionClose the browserA
Idempotent

Close the server's headless browser to free its memory, once any call in progress has finished. The AnkiWeb session stays stored, and the next call that needs the browser starts it again. The browser also closes by itself after five idle minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
closedYesfalse when no browser was open.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing that the AnkiWeb session persists, that the next browser-needing call restarts it, and that an idle timeout closes it automatically. This is exactly the kind of side-effect and lifecycle context the readOnlyHint/idempotentHint flags cannot convey.

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?

Three short sentences, front-loaded with the action and purpose, then the state-persistence and auto-close caveats. Every sentence adds a distinct, useful fact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-arg lifecycle tool with annotations and an output schema, the description covers the essentials an agent needs: what it does, what survives, and that it self-restarts and self-closes. Nothing material is missing.

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 takes zero parameters, so there is nothing for the description to clarify and no schema gap to compensate for. Baseline 4 applies; no parameter behavior is misstated.

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?

States a specific verb (Close) and resource (the server's headless browser) plus the motivation (free memory), which no sibling tool covers. An agent can immediately distinguish this lifecycle tool from the deck/session tools listed as siblings.

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?

Gives a clear timing condition ('once any call in progress has finished') and an implicit reason to call it (free memory). It also warns that the browser auto-closes after five idle minutes, which effectively tells the agent the call is often optional, but it never explicitly states when not to call or names an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_deck_to_markdownConvert a deck to MarkdownA

Convert a local .apkg, such as one download_shared_deck saved, to a Flashcard Markdown file the assistant can read. It goes in a new folder named after the package, with the images its cards use under .images/; nothing existing is replaced. Only basic front-and-back notes convert: cloze and other note types are counted in diagnostics, and review history is not kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAn absolute path to the .apkg.
titleNoThe deck's title. Defaults to the filename, with underscores as spaces.
directoryNoAn absolute path to an existing directory to create the deck's folder in. Defaults to the .apkg's own directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cardsYes
titleYes
directoryYes
mediaFilesYes
diagnosticsYes
markdownPathYes
diagnosticCountYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (non-destructive, non-idempotent, closed-world), and the description adds substantial behavior beyond them: a new folder named after the package, images under .images/, nothing existing replaced, cloze/other note types only counted in diagnostics, and review history dropped. This is exactly the extra context an agent needs.

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?

Three sentences, each carrying distinct information: what it produces, where it lands, and what is dropped. No filler, and the primary purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a conversion tool with an output schema, the description covers the essentials an agent cannot get elsewhere: destination layout, non-replacement guarantee, and conversion fidelity limits. Nothing material is missing.

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 path, title, and directory are already fully documented, including defaults. The description adds no per-parameter syntax or format detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource (convert a local .apkg to a Flashcard Markdown file) and names the sibling that produces the input (download_shared_deck). The output shape and location are specified, so an agent can distinguish it from every sibling tool without opening a schema.

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 anchors usage to a local file, explicitly tying it to download_shared_deck's output, and notes the scope limit that only basic front-and-back notes convert. It gives clear context for when the tool applies but stops short of an explicit when-not/alternative rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_shared_deckDownload a shared deckA

Download a shared deck's .apkg from AnkiWeb to disk and return where it was saved. An existing file is never replaced: the new one gets a numbered name. Works without an AnkiWeb session until AnkiWeb asks for one, which it does after a few downloads; then the signed-in session is used. AnkiWeb licenses shared decks for personal use only.

ParametersJSON Schema
NameRequiredDescriptionDefault
deckYesThe shared deck's id, or its https://ankiweb.net/shared/info/<id> link.
directoryNoAn absolute path to an existing directory. Defaults to the server's own downloads directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deckYes
pathYes
bytesYes
filenameYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only cover readOnly/openWorld/destructive) by disclosing three non-obvious traits: existing files are never overwritten (new file gets a numbered name), a session may be prompted after a few downloads, and the personal-use licensing restriction. This is exactly the kind of behavioral context an agent needs.

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?

Three tight sentences, front-loaded with the action and return value, then collision-handling, then auth behavior and licensing. Every sentence carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it still notes what is returned (the saved path). Between the write-safety note, the deferred-auth behavior, and the licensing constraint, nothing an agent needs to call this correctly is missing.

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 coverage is 100%, so both 'deck' (id or URL) and 'directory' (absolute path, defaults to server downloads dir) are already fully documented in the schema. The description adds no additional parameter semantics, so the baseline 3 applies.

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?

States a specific verb (download), resource (a shared deck's .apkg), and destination (to disk), plus the return value (where it was saved). This is clear and functional, though it never explicitly names the sibling it differs from (e.g. get_shared_deck for metadata vs. this tool for retrieving the file).

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?

Usage is implied by the action rather than stated: no explicit when-to-use vs. alternatives such as get_shared_deck or search_shared_decks. The description does supply useful context on the AnkiWeb session requirement, but does not route the agent among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shared_deckGet a shared deckA
Read-only

Read a shared deck's AnkiWeb listing: description, tags, size, ratings, sample notes with their media, and reviews. Needs no AnkiWeb session.

ParametersJSON Schema
NameRequiredDescriptionDefault
deckYesThe shared deck's id, or its https://ankiweb.net/shared/info/<id> link.
reviewsNoHow many of the newest reviews to include.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
kindYes
tagsYes
audioNo
notesNo
titleYes
imagesNo
reviewsYesThe newest reviews, up to the number asked for.
updatedYes
thumbsUpYes
sizeBytesYes
supportUrlNo
thumbsDownYes
descriptionYesPlain text, with links written as [text](href).
reviewCountYes
sampleNotesYes
tooNewForRatingYes
originalDeckNameNo
itemsSharedByAuthorYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond them — that no AnkiWeb session is required — which tells the agent this works before authentication. No rate-limit or caching behavior is disclosed, but the auth note is solid added value.

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?

A single sentence that front-loads the verb and resource and then lists the returned fields efficiently. No filler, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full annotations and an output schema, the description is nearly complete. The only meaningful gap is the absence of routing guidance relative to search_shared_decks and download_shared_deck; return values need not be explained since an output schema exists.

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 coverage is 100%, so both the deck id/URL format and the reviews count/default are already documented in the schema. The description adds nothing about either parameter, so the baseline 3 applies.

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?

States a specific verb ('Read') and resource ('shared deck's AnkiWeb listing') and enumerates exactly what the listing contains: description, tags, size, ratings, sample notes with media, and reviews. This plainly distinguishes it from siblings like download_shared_deck (which fetches files) and search_shared_decks (which finds ids).

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?

Usage is only implied: an agent can infer this is the metadata-inspection step before downloading, but no alternative sibling (search_shared_decks, download_shared_deck) is named and no when/when-not condition is given. The 'needs no AnkiWeb session' note is a precondition, not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_decksList my decksA
Read-only

List the decks synced to the signed-in AnkiWeb account, parents before their subdecks, with due counts and card totals. Needs an AnkiWeb session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
decksYes
currentDeckIdYes
mediaSizeBytesYes
collectionSizeBytesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, but the description adds real behavioral detail beyond them: the auth requirement (AnkiWeb session), the ordering guarantee (parents before subdecks), and the return contents (due counts and card totals).

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?

Two sentences with no filler; the resource and scope lead, followed by the ordering/return detail and the auth requirement. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description needn't detail return shape, yet it usefully summarizes it; with no parameters and annotations covering safety, the definition is complete for correct invocation.

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?

There are zero input parameters, so the baseline is 4; no parameter meaning needs to be added or is missing.

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?

States a specific verb (List) and resource (decks synced to the signed-in AnkiWeb account), and scopes it as the user's own decks, which cleanly separates it from the shared-deck siblings (search_shared_decks, get_shared_deck).

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 'signed-in AnkiWeb account' scoping implies this is for the user's own synced decks rather than shared decks, and 'Needs an AnkiWeb session' gives a precondition. It stops short of explicitly naming when to prefer a sibling, so it isn't a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_shared_decksSearch shared decksA
Read-only

Search AnkiWeb's shared deck catalogue by title. AnkiWeb returns every match at once, so the results are sorted and paged here. Needs no AnkiWeb session. AnkiWeb rate-limits searches to about four a minute; repeating a search within ten minutes is served from cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sortNorating is thumbs up minus thumbs down; modified is newest first.rating
limitNo
queryYesWords to look for in deck titles.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
queryYes
totalYes
hasMoreYes
resultsYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld; the description adds substantial behavior beyond them: AnkiWeb returns all matches at once so sorting/paging happens client-side, no session is required, searches are rate-limited to ~4/minute, and repeated searches are cached for ten minutes. These are exactly the operational constraints an agent needs before calling.

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?

Three tight sentences: purpose first, then the paging rationale, then session/rate-limit/cache constraints. Nothing is redundant and the operational caveats are front-loaded where an agent will see them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers purpose, auth needs, rate limits, caching, and the paging model. For a search tool of this complexity, nothing an agent needs to invoke it correctly is missing.

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 coverage is 50%: query and sort carry descriptions, while page and limit have none. The description alludes to 'sorted and paged here' but adds no meaning to the page/limit semantics or the limit cap, so it only partially compensates for the undocumented half of the parameters. Baseline 3 fits.

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?

States a specific verb and resource scoped precisely: 'Search AnkiWeb's shared deck catalogue by title.' This clearly separates it from list_my_decks (the caller's own decks) and get_shared_deck (a single deck), so an agent can route without inspecting schemas.

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?

Implies usage context (searching the public catalogue rather than the user's own decks) and clarifies the prerequisite that no AnkiWeb session is needed. It stops short of naming alternatives like list_my_decks or get_shared_deck or stating exclusions, so it is clear but not explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_statusServer statusA
Read-only

Report the server version, the data directory, and whether an AnkiWeb session is stored. With validate, also ask AnkiWeb whether that session is still signed in.

ParametersJSON Schema
NameRequiredDescriptionDefault
validateNoCheck the session against AnkiWeb. Starts a headless browser only when the stored cookie is missing or turned down.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataDirYes
versionYes
authenticatedNo
lastValidatedNo
sessionStoredYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint; the description adds the meaningful behavioral detail that `validate` performs an external AnkiWeb check on the stored session, which explains the open-world trait. It does not contradict the annotations, though it adds little about failure modes or latency.

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?

Two tightly written sentences with the core output described first and the conditional enhancement second. No filler, no restating of the name, and the `validate` behavior is front-loaded where it matters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the readOnly/openWorld annotations carry the safety profile. Combined with a fully documented single parameter, an agent has everything required to call this correctly.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema's terse 'Check the session against AnkiWeb' by clarifying the check answers whether the session is still signed in. The conditional 'also' framing makes the parameter's effect on output concrete.

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?

States a specific verb ('Report') and enumerates the exact resources returned: server version, data directory, and stored AnkiWeb session state. This is unmistakably a diagnostics/status tool and trivially distinguishable from the deck-oriented siblings (list_my_decks, download_shared_deck, etc.).

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 second sentence gives a clear conditional trigger: pass `validate` when you also want AnkiWeb to confirm the session is still signed in. There are no explicit exclusions or named alternatives, but for a status tool none are really needed, so this is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

share_deckShare a deck publiclyA

Publish one of the signed-in user's decks to AnkiWeb's public shared-deck catalogue, under their account. Anyone can then find and download it.

Without confirm, nothing is published: the call checks the deck and the listing against AnkiWeb's limits and returns a preview. Show that preview to the user and get their explicit go-ahead before calling again with confirm: true.

Calling with confirm: true publishes the deck and makes AnkiWeb's declaration on the user's behalf: "I declare that the material I am sharing is entirely my own work, or I have obtained a license from the intellectual property holder(s) to share it here."

A deck that is already shared is refused. Needs an AnkiWeb session.

ParametersJSON Schema
NameRequiredDescriptionDefault
deckYesThe deck's id or its exact full name, as list_my_decks gives them.
tagsNoUp to 60 characters in all, joined by spaces.
titleNoThe listing's title, up to 60 characters. Required unless AnkiWeb has one from an earlier share.
confirmNotrue publishes. Only after the user has seen the preview and agreed.
supportUrlNoA page where users can ask about the deck, up to 180 characters.
descriptionNoMarkdown, up to 65000 characters. Required unless AnkiWeb has one from an earlier share.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNo
deckYes
tagsYes
titleYes
statusYes`pending` means AnkiWeb accepted the share and is still processing it.
problemsYesEach one blocks publishing until it is fixed.
sharedIdNo
supportUrlYes
descriptionYes
sharesPerWeekYes
sharesInLast7DaysYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations convey only the generic write/openWorld/no-destructive profile; the description supplies the operationally critical facts an agent cannot infer — that the default call is a non-publishing dry run, that publishing makes a legal declaration on the user's behalf (quoted verbatim), that AnkiWeb limits are validated during the preview, and that re-sharing is refused. No contradiction with readOnlyHint=false or idempotentHint=false.

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?

Front-loaded with the publish action and its audience, then the confirm flow, then the declaration, then edge cases. The full legal declaration quote is long but is precisely the text the agent must surface, so it earns its space; the prose is otherwise tight with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with an output schema present, the description covers everything the agent needs to decide, sequence, and gate the call: auth requirement, dry-run/preview semantics, user-confirmation gate, re-share refusal, and the declaration the user is accepting.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to `confirm` (its absence yields a preview rather than a publish) and instructs that `deck` values come from list_my_decks. It adds little for tags/title/supportUrl/description beyond the schema, so it lands at 4 rather than 5.

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?

Opens with a specific verb+resource ('Publish one of the signed-in user's decks to AnkiWeb's public shared-deck catalogue') and names the scope (under their account, publicly downloadable). This is clearly distinct from siblings like download_shared_deck or search_shared_decks, which move decks in the other direction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It spells out the two-phase invocation contract explicitly: calling without `confirm` returns a preview that must be shown to the user, and `confirm: true` is only called after explicit user go-ahead. It also states a when-not condition (already-shared decks are refused) and a precondition (needs an AnkiWeb session).

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. 8 tool updatesv0.0.2
    • First observedclose_session
    • First observedconvert_deck_to_markdown
    • First observeddownload_shared_deck
    • First observedget_shared_deck
    • First observedlist_my_decks
    • First observedsearch_shared_decks
    • First observedserver_status
    • First observedshare_deck

TDQS

A4.3/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target a distinct action on a distinct resource: search_shared_decks vs get_shared_deck (finding vs. reading details), download vs. convert, list_my_decks vs. share_deck. The only mild overlap is between server_status (which can validate a session) and close_session, both housekeeping tools, but their purposes remain clear.

Naming Consistency4/5

All names use snake_case and follow a verb_noun pattern (list_my_decks, search_shared_decks, get_shared_deck, download_shared_deck, convert_deck_to_markdown, share_deck, close_session). The single deviation is server_status, a noun_noun state-report name, but it is still readable and conventional.

Tool Count5/5

Eight tools is well within the ideal 3-15 range and each one covers a distinct step of the AnkiWeb workflow (status, list, search, inspect, download, convert, publish, cleanup). No tool feels redundant or filler.

Completeness4/5

The surface covers a full read/download/convert/publish lifecycle plus session management. Minor gaps remain: there is no way to unshare or delete a published deck, and no operation to update an existing share, though these may be outside AnkiWeb's API reach.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers