Skip to main content
Glama
kadal-store

kadal-store

Official

The Kadal Store sells digital downloads: planners and printables, sound effects and music, shaders, 3D models, textures, icons and templates. @kadal/store brings it to where you work. Search the store, get suggestions for the project you are in, download and sync what you own, and get a link to buy the rest. It works the same for you in a terminal and for the AI agent you already use (Claude, Cursor, Codex, any MCP client), on your own account and your own model subscription.

An agent can find things, download what you own and hand you a link. It can never buy: payment always happens on the store's checkout page, in front of you.

npx -y @kadal/store login                      # once: approve in your browser
npx -y @kadal/store recommend --from .         # what fits the project you are in
npx -y @kadal/store download retro-ui-sfx -o assets/sfx

Or install it: npm i -g @kadal/store, then kadal-store <command>. Node 20 or newer.

Sign in

$ kadal-store login
Opening your browser to sign in to store.kadal.cc. If it does not open, visit:
  https://store.kadal.cc/authorize?response_type=code&client_id=…
Signed in as Ana <ana@example.com> on store.kadal.cc. Saved to ~/.config/kadal/store.json

You sign in on the store's own page, so your password never passes through the CLI. The token is saved in ~/.config/kadal/store.json ($XDG_CONFIG_HOME is respected; %APPDATA%\kadal\ on Windows), readable only by you, and renews itself. On a machine without a browser, use --no-open, open the address anywhere, and paste the address the browser lands on back into the terminal. If the store's page says it does not know this app, run kadal-store login --register. kadal-store logout signs this machine out and revokes its access; so does removing "Kadal Store CLI" under Account → Settings → Connected apps.

Related MCP server: Meshy MCP Server

Commands

Find

$ kadal-store search planner --max 10
Techo weekly planner 2027  Planners  owned (personal)    techo-weekly-2027
A5 monthly undated         Planners  from $4.00          monthly-undated-a5

2 of 2. Details: kadal-store show <slug>
  • search <words…> with --shelf <slug>, --style, --topic, --format, --kind asset|pack, --max <dollars>, --sort relevance|newest|price, --limit <1-50>, --cursor <next page>.

  • shelves lists the store's shelves (use a slug with --shelf).

  • show <slug>: prices per licence tier, the licence (what each tier allows and doesn't), the files with their sizes and editions, what a pack holds, and its updates.

Suggestions for your project

$ kadal-store recommend "ui sounds" --from .
This summary of /home/ana/cosy-farm will be sent to store.kadal.cc:

  Project: cosy-farm — A cosy farming game
  Built with: Phaser
  Dependencies: phaser
  README sections: Cosy Farm · Art style
  File types: .png 412, .ts 88, .wav 31
  Top level: assets/, src/, package.json, README.md

Send it? [y/N] y
Retro UI sound effects  Sound effects  from $9.00   retro-ui-sfx
    Matches "ui" and "sounds", and your .wav files.

--from <dir> reads only the README's headings, package.json's (or pyproject.toml's, Cargo.toml's) name, description and dependency names, a count of file types, and the top-level names. It never reads or sends what is inside your files, and you see the exact text before it goes. --yes skips the question. Also --shelf, --format (both repeatable), --max <dollars>, --include-owned, --limit <1-20>.

What you own

$ kadal-store library
Techo weekly planner 2027  (personal)  3 files, 39 KB  techo-weekly-2027
Retro UI sound effects  (standard)  2 files, 12 KB  retro-ui-sfx

$ kadal-store download techo-weekly-2027 --year 2027 --size a5 -o planner
Downloading techo-weekly-2027 into planner
  ✓ planner/techo-weekly_2027_mon_en_a5.pdf
  ✓ planner/READ ME.txt
Done: 2 downloaded, 0 already here.

$ kadal-store sync ~/Kadal
2 products · 5 files already in /home/ana/Kadal · 0 to download
Done: 0 downloaded, 5 already here.
  • download <slug> puts one product's files in ./<slug> (or -o <dir>). --file <name> (repeatable) picks files; --year 2027 --week sun|mon --lang en|ja|en-ja --size a4|a5|letter… picks one edition of a product sold in editions; --zip gets the whole product as one zip.

  • sync [dir] mirrors everything you own into dir (default ./kadal-store), one folder per product. Files already there with the same sha256 are skipped; nothing is ever deleted. --product <slug> (repeatable), the edition flags, and --dry-run.

  • Every file is checked against the sha256 the store gives before it is kept. A download that is cut off leaves a .kadal-part file, and the next run picks up where it stopped. Downloads run four at a time (--concurrency <n>).

Buy

$ kadal-store buy fern-pack techo-weekly-2027:personal
Review and pay here:
  https://store.kadal.cc/buy?items=fern-pack:standard,techo-weekly-2027:personal&ref=cli

  Fern textures pack                        standard    $12.00
  Techo weekly planner 2027                 personal    $9.00  (you already own this)
  Total                                                 $12.00

Nothing is charged until you pay in the checkout on that page.

buy <slug[:tier]>… (tiers: standard, the default, personal, commercial) builds a page where you see each item, its licence and price, and anything you already own. --open opens it.

Tell us about a problem

$ kadal-store report techo-weekly-2027 --kind mistake --file techo-weekly_2027_mon_en_a5.pdf --page 12 "March 31 is missing"
Thanks. Your note is open: https://store.kadal.cc/account/notes/note_…
Only you and Kadal can see it. Replies show up in `kadal-store notes`.

$ kadal-store notes
  Techo weekly planner 2027 · mistake · techo-weekly_2027_mon_en_a5.pdf  [Accepted for the 7 Nov update]  note_…
    March 31 is missing
    Kadal: Thanks, fixed in the next update.

--kind mistake|question|idea; --page <n> for a PDF, --at <seconds> for audio or video. Use - in place of the words to read them from stdin. When a fix ships, the product's update shows in your library and the next download or sync gets it.

Everything else

whoami, logout, --help (and <command> --help), --version.

For scripts and agents

  • --json on any command prints one JSON document on stdout; everything meant for people goes to stderr. For the store's commands it is the store tool's answer exactly as the store sent it (shapes in the contract). download prints {slug, dir, files: [{fileId, name, path, bytes, sha256, status, resumed?, error?}], zip, counts}, sync prints {dir, dryRun, files, counts}, login prints {ok, host, user, scopes, operator, config}, logout prints {ok, host, signedOut, revoked}, and a recommend --from you declined prints {sent: false}. Errors are {ok: false, error: {code, message, exitCode}}.

  • Exit codes: 0 ok, 1 failed (the message says why), 2 usage, 3 not signed in (or the sign-in expired: run kadal-store login), 4 a download failed its checksum (nothing was kept).

  • --host <url> or KADAL_STORE_HOST points at another store, such as a local worker (--host http://localhost:8861). Each host keeps its own sign-in.

Connect your agent

Claude Code, with the skill and the MCP server together:

/plugin marketplace add kadalcc/store-cli
/plugin install kadal-store@kadal-store

The local MCP server alone (it uses the sign-in from kadal-store login):

claude mcp add kadal-store -- npx -y @kadal/store mcp

For Claude Desktop, Cursor, VS Code and others, point the client at npx -y @kadal/store mcp:

{ "mcpServers": { "kadal-store": { "command": "npx", "args": ["-y", "@kadal/store", "mcp"] } } }

The hosted MCP server, for clients that sign in themselves (OAuth) and need nothing installed:

claude mcp add --transport http kadal-store https://store.kadal.cc/mcp

In Claude (web and desktop), ChatGPT, Cursor and VS Code, add https://store.kadal.cc/mcp as a custom connector; the store's own page opens to sign in. Step-by-step for each app: store.kadal.cc/agents.

Both servers are one entry in the official MCP Registry, cc.kadal/store (the hosted one, and this package as its local version).

Kadal Store MCP connector – tool definition quality and endpoint health on Glama kadalcc/store-cli MCP server

The skill alone, for any agent that reads Agent Skills: npx skills add kadalcc/store-cli (skills/kadal-store). It teaches the agent to find assets for the project in front of it, download into it, never buy on its own, and report problems it finds in files you bought.

MCP tools

search_products, get_product, list_shelves, recommend

the catalogue, the licence of each product, suggestions from a description of the work

list_library, get_download_links

what you own, and ten-minute download links with each file's sha256

create_buy_link

a review page to pay on yourself; it charges nothing

report_problem, list_my_notes

a note about a file you own, and Kadal's replies

whoami

who is signed in, with which scopes

project_summary (local)

what recommend --from sends: the folder described without its contents

download_to_folder (local)

files you own into the project, checked by sha256, skipping what is there; only inside the folder the server started in unless it was started with --allow-outside

kadal-store mcp --dir <path> serves another folder as the project.

The contract

Every command is one call to a tool of the store's hosted MCP server (POST https://store.kadal.cc/mcp, Streamable HTTP, OAuth 2.1 with PKCE). The tools, their inputs and their outputs are specified in the store's apps/store-worker/docs/agents.md; the types are in src/types.ts. Money is always integer US cents; URLs are absolute.

Development

bun install && bun run build && bun run test
bun test/fake-store.ts 8899 &                      # a fake store, no account needed
node dist/bin.js login --host http://127.0.0.1:8899

See CONTRIBUTING.md and AGENTS.md.

Licence

AGPL-3.0-or-later, like the Kadal Deck engine. Security reports: SECURITY.md.

Available Tools

12 tools
download_to_folderDownload into the projectA
Idempotent
Inspect

Download files the person owns into the project, each checked against its sha256; files already there with the same checksum are skipped. dir is relative to the project (default kadal-store/). Narrow with fileNames or fileIds (from list_library) or an edition, or zip: true for the whole product as one zip. Returns where every file went.

NameRequiredDescriptionDefault
dirNoFolder relative to the project, e.g. 'assets/sfx'. Default kadal-store/<slug>.
zipNoThe whole product as one zip instead of its files.
slugYes
editionNoNarrow a product sold in editions (planners, calendars) to one. Leave an axis out to keep all of it.
fileIdsNoOnly these files, by id.
fileNamesNoOnly these files, by name.
overwriteNoDownload again even when the same file is already there.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-read-only, idempotent, non-destructive and open-world; the description makes the idempotency concrete via sha256 comparison and skip-if-present, and explains overwrite. It does not touch on auth/prerequisite requirements or which files are selected by default when nothing is narrowed.

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 core action and its dedup semantics are front-loaded, and every clause (dir default, narrowing options, zip, return value) carries information. The middle sentence is dense with stacked options, which slightly hurts scannability but wastes no words.

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 7-parameter write tool with a nested edition object and no output schema, the description covers return location ('where every file went'), defaults, filtering, and overwrite behavior. The main residual gap is the meaning of the required slug and any permission prerequisites.

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 86%, so the schema carries most parameter meaning; the baseline would be 3. The description adds provenance for fileIds ('from list_library'), restates the dir default relative to the project, and implicitly defines slug as the product selector, which the schema leaves undocumented.

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 and resource plus scope: download files the person owns into the project, with checksum verification and skip-if-identical behavior. It is clearly distinct from read-only siblings like list_library or get_product, though it never explicitly contrasts itself with get_download_links, which is the nearest alternative.

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 concrete narrowing paths: fileNames/fileIds (sourcing ids from list_library), an edition, or zip:true for the whole product, plus the overwrite condition. It stops short of stating when to prefer this over get_download_links or when not to use it at all.

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

get_productProduct detailsA
Read-only
Inspect

Everything about one product: description, prices per tier, its files (name, bytes, minimum tier, edition), editions, what a pack contains and which packs include it, the licence (what each tier allows and does not), and its update history. Check the licence before suggesting a product for commercial work.

NameRequiredDescriptionDefault
slugYesThe product's slug.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds value beyond that by disclosing the shape and breadth of the response — including licence restrictions and update history — which is decision-relevant behavior, not just a restatement. Minor gap: no indication of payload size or whether very large products are truncated.

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 core purpose, followed by a compact enumeration of returned facets and a one-clause caveat. The field list is long but justified in the absence of an output schema; no filler sentences.

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?

With no output schema, the description must describe return content and does so thoroughly, which is exactly what an agent needs to judge whether this tool supplies the licence and pricing data it wants. The only shortfall is the absence of any note on response size or failure behavior for unknown slugs.

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?

Only one parameter exists with 100% schema description coverage, so the schema carries the documentation burden and a 3 is the baseline. The phrase 'one product' hints that the slug identifies a single record, but no format or resolution guidance (e.g., where to obtain the slug) is added.

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+resource ('Everything about one product') and then enumerates exactly which facets are returned — files, editions, prices per tier, pack membership, licence terms, update history. 'One product' also contrasts with the sibling search_products, so an agent knows this is a single-record fetch rather than a search.

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?

Provides a concrete operational directive: 'Check the licence before suggesting a product for commercial work,' which tells the agent when the returned licence data must gate downstream recommendations. It does not explicitly route to siblings (e.g., search_products to find a slug first), so the selection guidance is context-clear but not exhaustive.

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

list_libraryWhat the person ownsA
Read-only
Inspect

Every product the person owns: the product card, their tier, its files (id, name, bytes, sha256, edition), whether a zip is available, and the latest update. File ids go to download_to_folder or get_download_links.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description earns credit by disclosing the actual contents of the result (tier, file fields, zip flag, latest update) in the absence of an output schema, though it says nothing about result size, pagination, or what happens for an empty library.

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, front-loaded with scope, and the parenthetical field list earns its space because no output schema exists. The follow-up routing sentence is short and actionable; nothing is padding.

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?

With no output schema, the description carries the return-value burden and does so by naming the key fields. Minor gaps remain: no statement about result volume or whether the list is ever truncated, and no explicit tie-break against the other listing tools.

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 no parameter semantics to explain; baseline 4 applies. The description correctly implies the call is argument-free by framing the result as everything the person owns.

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?

Opens with a specific scope statement ("Every product the person owns") and enumerates the payload: product card, tier, file metadata, zip availability, latest update. Clear verb+resource. It does not explicitly distinguish itself from search_products or list_shelves, which keeps it off a 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?

Implies a workflow by saying "File ids go to download_to_folder or get_download_links," which tells the agent what to do after this call. It gives no guidance on when to prefer this over search_products or list_shelves, and no exclusions or prerequisites.

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

list_my_notesThe person's notesC
Read-only
Inspect

The person's notes (reports) on products, with each one's status (open, accepted, declined, duplicate, fixed), a plain status line, and the thread with Kadal's replies.

NameRequiredDescriptionDefault
statusNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description does add useful behavioral context about the returned payload — per-note status, a plain status line, and the reply thread with Kadal — which matters because no output schema exists. It still omits scoping (own notes only?), pagination, and result volume, so it stops short of full disclosure.

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?

A single front-loaded sentence with no filler. Slight ambiguity comes from internal jargon ('plain status line', 'Kadal's replies') that may not be self-explanatory, but nothing is redundant or bloated.

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?

With no output schema and no parameter descriptions, the description does well to sketch the returned fields. However, for a listing tool with filtering it should clarify filtering semantics and result scope/limits; the unexplained reference to 'Kadal' and the missing notion of whose notes these are leave real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single optional 'status' parameter, so the description must carry it. It merely re-lists the enum values in a phrase that reads as an output field ('with each one's status...') rather than explaining that status is an input filter, that it is optional, and what happens when it is omitted. This ambiguity risks the agent treating it as a return value instead of a filter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as 'the person's notes (reports) on products' and enumerates part of its shape, so an agent can grasp what it deals with. But it never states the operation (list/retrieve) explicitly and does not distinguish it from the sibling report_problem, which also concerns problem reports. Purpose is inferable but not crisply differentiated.

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?

There is no when-to-use guidance at all: nothing says to call this to review your own submitted reports rather than to search_products or report_problem. No exclusions, prerequisites, or alternative routing are given, leaving the agent to guess from the name alone.

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

list_shelvesStore shelvesA
Read-only
Inspect

The store's shelves (its categories), each with a slug, name, blurb, how many products it holds, and its licence model. Use a shelf slug to narrow search_products or recommend.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description's real contribution is disclosing the returned fields (slug, name, blurb, product count, licence model), which matters since there is no output schema. It does not say whether all shelves are returned or whether results are paginated, which would matter for a catalogue-wide listing.

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, zero filler: the first defines the resource and its return shape, the second states the follow-up use. Front-loaded and appropriately sized for a simple zero-argument read tool.

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 trivial parameterless read call with no output schema, the description covers what comes back and how to use it, which is most of what an agent needs. The only real omission is result-set behaviour (completeness or pagination of the shelf list).

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 disambiguate; the baseline for a parameterless tool applies. The mention of shelf slugs is about downstream tools' inputs, not this tool's arguments, and is correctly framed that way.

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?

Names the specific resource ('the store's shelves (its categories)') and enumerates what each entry contains: slug, name, blurb, product count, and licence model. The listing action is carried by the tool name rather than a verb in the description, but the resource is unmistakable and distinct from siblings like list_library or get_product.

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?

Explicitly tells the agent what to do with the output: use a shelf slug to narrow search_products or recommend. That is clear workflow context tying this tool to two named siblings. It stops short of exclusions (e.g., when to prefer list_library or why one would browse shelves versus searching directly).

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

project_summarySummarise this projectA
Read-only
Inspect

A short summary of a project folder, without its contents: name and description from package.json / pyproject.toml / Cargo.toml, dependency names, tools it uses (Godot, Blender, Next.js, Obsidian…), the README's headings, file-type counts and the top-level names. It is what kadal-store recommend --from sends. Pass its text to recommend as context. Reads nothing else and sends nothing anywhere.

NameRequiredDescriptionDefault
dirNoA folder, relative to the project (default: the project itself).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, and the description reinforces this with "Reads nothing else and sends nothing anywhere", which is a useful explicit scope guarantee. It also discloses the extraction targets, which goes beyond the annotations. It does not cover edge cases such as large repos, ignored directories, or how a missing manifest is handled.

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 purpose is front-loaded in the first clause, then the enumerated contents follow. The long parenthetical list of tool ecosystems is somewhat verbose but each item clarifies detection scope. The final sentence about the `text` field is well placed as a call to action.

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 single-parameter read tool with annotations and no output schema, the description carries the necessary load: it explains what is collected and that the response exposes a `text` field for downstream use. Only marginal gaps remain, such as response size or behavior on non-project directories.

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% and the single `dir` parameter is documented in the schema as a folder relative to the project with a default. The description never mentions `dir` or its relative-path semantics, so it adds nothing beyond the schema. Baseline 3 applies when the schema does the documentation work.

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 names a specific verb and resource (summarise a project folder) and then enumerates exactly what the summary contains: package.json/pyproject.toml/Cargo.toml metadata, dependency names, detected tools, README headings, file-type counts, top-level names. It also distinguishes scope explicitly ("without its contents"), so an agent knows this is metadata extraction, not file reading.

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?

Usage is made concrete by tying it to a workflow: it is what `kadal-store recommend --from` sends, and its `text` should be passed to recommend as context. That tells the agent when to reach for it. It stops short of naming exclusions (e.g. when to call `list_my_notes` or `search_products` instead), so it is clear but not fully comparative.

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

recommendRecommend for this workA
Read-only
Inspect

Products that fit what the person is working on. context is a few plain lines about the project and what it needs (project_summary's text is a good start; add what the person asked for). Never put file contents, secrets or personal data in it. Each item has a one-line why and a score; packs are bundles the person already owns part of (ownedOf). This only shortlists: read get_product for the best few, then recommend with your own reasons.

NameRequiredDescriptionDefault
limitNoHow many (default 8).
contextYesWhat the project is and what it needs, at most 6000 characters.
formatsNoFormats to prefer, e.g. ['pdf'] or ['wav', 'ogg'].
shelvesNoShelf slugs to keep to.
maxCentsNoPrice ceiling in US cents.
includeOwnedNoAlso list products the person owns (default false).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description does add genuine behavioral context: the result is a shortlist, each item carries a one-line `why` and a score, and packs are surfaced via `ownedOf`. It does not mention ranking quality, latency, or whether prices/availability are live, but for a read-only recommendation call that is a reasonable level of disclosure.

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?

Dense but front-loaded: the purpose lands in sentence one, then the input constraints, then the result shape, then the follow-up flow. The phrase 'then recommend with your own reasons' inside the recommend tool's own description is slightly circular and could be tightened, but no sentence is filler.

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?

With six parameters, no output schema and only read-only annotations, the description carries the burden well by describing the return payload (why, score, packs, ownedOf) and the shortlist limitation. The remaining gaps are minor: no pagination or truncation behavior for `limit`, and no signal about ranking confidence.

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, and the description earns an extra point by telling the agent what to put in `context` (plain lines about the project plus the person's request) and what must never go in it (file contents, secrets, personal data). It also implicitly connects `includeOwned`/`packs`/`ownedOf`, which the schema alone does not tie together.

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?

'Products that fit what the person is working on' states the resource and the matching basis clearly, and the closing 'this only shortlists' scopes the output. It is distinguishable from search_products by being context-driven rather than query-driven, though it never names the sibling directly.

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?

It prescribes a concrete workflow: feed in project_summary's `text` plus the person's request, then read get_product for the best few and present with your own reasons. What is missing is an explicit negative rule (when to prefer search_products or list_shelves instead), so it falls short of full when/when-not coverage.

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

report_problemReport a problemAInspect

Tell Kadal about a product the person has: a mistake (a typo, a wrong date, a missing page, a broken file), a question, or an idea. Say where with fileName and page (PDFs, from 1) or timeSeconds (audio and video). The note is private to the person and Kadal, and its replies show in list_my_notes. Report only what you checked, in plain words, once per problem, and tell the person you filed it.

NameRequiredDescriptionDefault
bodyYesWhat is wrong and where, in plain words.
kindYes
pageNoThe PDF page, counting from 1.
slugYes
fileNameNoThe file the problem is in, as list_library names it.
timeSecondsNoSeconds into the audio or video.

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (which confirm it is a writable operation), the description offers critical workflow context by stating that the notes are 'private to the person and Kadal' and how replies are handled. This provides necessary meta-information regarding the note's visibility.

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?

While the description is moderately sized, it is highly dense and functional. It front-loads the purpose and flows logically into behavioral constraints, ensuring that almost every sentence provides necessary instructional value.

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?

The tool handles complexity by managing three different issue kinds and multiple media formats. The description comprehensively covers the boundaries of reporting (what to check, how to report it) and the privacy implications of the resulting note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given that schema coverage is moderate (67%), the description is excellent at providing semantic guidance for the media location parameters. It explicitly links `page` to PDFs and `timeSeconds` to audio/video, allowing the AI to logically group and select the correct parameter based on the file type.

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 defines the action (reporting) and the specific types of issues (mistake, question, or idea) it addresses regarding a product. By focusing on these specific problem types, it strongly differentiates itself from general library searching or listing siblings.

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?

The description provides explicit behavioral rules for usage, such as reporting 'only what you checked' and filing it 'once per problem.' This minimizes ambiguity and sets clear constraints on how and when the tool should be invoked.

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

search_productsSearch the storeA
Read-only
Inspect

Search the catalogue. Returns product cards: slug, name, kind (asset or pack), shelf, blurb, url, prices per licence tier in US cents, tags (style, topic, format), and owned (the person's tier if they already own it). Page with nextCursor.

NameRequiredDescriptionDefault
kindNoasset: one product; pack: a bundle of several.
sortNo
limitNoHow many (default 20).
queryNoWords to search for, e.g. 'weekly planner a5' or 'retro ui sound effects'.
shelfNoA shelf slug from list_shelves.
styleNoA style tag, e.g. minimal, pixel-art.
topicNoA topic tag.
cursorNonextCursor from the previous page.
formatNoA format tag, e.g. pdf, wav, glb, png.
maxCentsNoOnly products from at most this price, in US cents (2000 = $20).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly and openWorld, so safety is covered. The description adds valuable behavioral context beyond that: exactly what a product card contains, that prices are in US cents per licence tier, that `owned` reflects the caller's existing tier, and that results are cursor-paginated via nextCursor. It does not describe ranking behavior or empty-result behavior, but it is substantially more informative than the annotations alone.

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 compact sentences, front-loaded with purpose and then the return shape. Every clause carries useful information about fields, pricing units, ownership, and pagination; there is no filler.

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 10-parameter search tool with no output schema, the description does a good job specifying the return shape, price units, ownership semantics, and pagination. It could say more about result ordering and how multiple filters interact, but an agent has enough to call and interpret the tool correctly.

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 90%, so the schema already explains most parameters, including examples for query, shelf, style, and format. The description reinforces pagination via nextCursor and clarifies that `owned` is a returned field rather than an input, but adds little parameter meaning beyond what is already documented.

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 opens with a specific verb and resource ('Search the catalogue') and immediately describes the returned product cards, making the operation unambiguous. It does not explicitly contrast itself with siblings like get_product or list_shelves, which keeps it short of a 5, but the search framing is distinct enough for an agent.

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: this is the tool for finding products by query or filters. However, there is no explicit guidance on when to prefer list_shelves, get_product, or recommend, nor on how filters combine. The schema hint that shelf slugs come from list_shelves helps, but the description itself does not route the agent among alternatives.

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

whoamiWho is signed inA
Read-only
Inspect

The person this store sign-in belongs to (id, name, email), its scopes, and whether they run the store. Call it when unsure whether the person is signed in.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds substantive context by disclosing what the call returns (identity fields, scopes, owner flag), which matters because no output schema exists. It does not say what happens when nobody is signed in, whether that yields an error or an empty result, which is the main remaining 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?

Two sentences, both earning their place: the first lists the return content, the second gives the usage condition. The payload is front-loaded with no filler.

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 zero-parameter read tool with no output schema, the description covers the essentials: what is returned and when to call it. The only missing piece is unauthenticated or error behavior, a minor gap given the tool's simplicity and its read-only annotation.

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 the baseline is 4. The description correctly implies no input is needed, and nothing about parameters is left ambiguous.

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 states a specific resource (the signed-in person) and names the fields returned: id, name, email, scopes, and store-owner status. It is clearly distinct from every sibling tool, which handle shelves, products, notes, and downloads. It stops short of a leading verb, but the intent is unambiguous.

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 gives an explicit trigger: 'Call it when unsure whether the person is signed in.' No alternatives are named, and none of the siblings appear to overlap with an identity check, so there is no meaningful exclusion to state.

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. 12 tool updatesv0.1.1
    • First observedcreate_buy_link
    • First observeddownload_to_folder
    • First observedget_download_links
    • First observedget_product
    • First observedlist_library
    • First observedlist_my_notes
    • First observedlist_shelves
    • First observedproject_summary
    • First observedrecommend
    • First observedreport_problem
    • First observedsearch_products
    • First observedwhoami

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target clearly different resources: catalogue search vs. owned library vs. product detail vs. notes vs. sign-in state. The one genuine overlap is get_download_links vs. download_to_folder, but both descriptions explicitly distinguish 'get URLs I could download' from 'download into the project for me', which keeps misselection rare. recommend vs. search_products is also close but split cleanly by 'shortlist for my context' vs. 'query the catalogue'.

Naming Consistency4/5

Strong verb_noun snake_case pattern throughout: list_shelves, search_products, get_product, list_library, get_download_links, create_buy_link, download_to_folder, report_problem. The deviations are minor and idiomatic rather than chaotic: whoami (no separator) and project_summary (noun-only, no verb).

Tool Count5/5

Twelve tools is squarely in the well-scoped range for a digital storefront covering auth, browsing, recommendation, ownership, downloading, purchasing and feedback. Each tool maps to a distinct step in a real user workflow; none looks like filler.

Completeness4/5

The surface covers the full browse-to-download-to-buy lifecycle plus problem reporting and project context, with sensible crossover between tools. Minor gaps: no tool to list/manage past purchases or licences, and no way to upgrade a tier other than rebuilding a buy link, but agents can work around this.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers