kadal-store
OfficialThis server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
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/sfxOr 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.jsonYou 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>.shelveslists 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;--zipgets the whole product as one zip.sync [dir]mirrors everything you own intodir(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-partfile, 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
--jsonon 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).downloadprints{slug, dir, files: [{fileId, name, path, bytes, sha256, status, resumed?, error?}], zip, counts},syncprints{dir, dryRun, files, counts},loginprints{ok, host, user, scopes, operator, config},logoutprints{ok, host, signedOut, revoked}, and arecommend --fromyou declined prints{sent: false}. Errors are{ok: false, error: {code, message, exitCode}}.Exit codes:
0ok,1failed (the message says why),2usage,3not signed in (or the sign-in expired: runkadal-store login),4a download failed its checksum (nothing was kept).--host <url>orKADAL_STORE_HOSTpoints 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-storeThe local MCP server alone (it uses the sign-in from kadal-store login):
claude mcp add kadal-store -- npx -y @kadal/store mcpFor 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/mcpIn 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).
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 | |
| the catalogue, the licence of each product, suggestions from a description of the work |
| what you own, and ten-minute download links with each file's sha256 |
| a review page to pay on yourself; it charges nothing |
| a note about a file you own, and Kadal's replies |
| who is signed in, with which scopes |
| what |
| 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 |
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:8899See CONTRIBUTING.md and AGENTS.md.
Licence
AGPL-3.0-or-later, like the Kadal Deck engine. Security reports: SECURITY.md.
Available Tools
12 toolscreate_buy_linkA link to buyARead-onlyInspect
A link to a review page on the store where the person sees each item (picture, licence, price), anything they already own, and the total, and pays in the checkout themselves. Only when the person asked to buy or agreed to it; building the link charges nothing and buys nothing. Give them the URL, and never say something was bought.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Where the link came from, for the store's counts (default agent). | |
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true and openWorldHint=true, the description discloses that building the link charges nothing and buys nothing, that payment happens externally in the store's checkout, and that the agent must hand over the URL without asserting a purchase. This is exactly the side-effect context an agent needs before calling a "create_"-named tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and every clause carries information (review page contents, payment location, when to use, no-charge semantics, URL handoff). The first sentence is a long run-on that is harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description correctly covers what the caller gets back (a URL to pass along) plus the crucial no-purchase constraint. It leaves required-item semantics and the item limit to the schema, which is acceptable but leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema description coverage, the schema already documents ref and the tier enum. The description adds only indirect meaning, hinting at licence choice via "see the licence", and says nothing about the undocumented slug field or the 20-item limit. Baseline-appropriate but not compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource and outcome: a link to a store review page where the person reviews items (picture, licence, price), existing ownership and total, then pays in checkout. That clearly separates it from get_download_links (retrieving files) and search_products, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Only when the person asked to buy or agreed to it" gives an explicit, actionable when-to-use condition, plus the caution against claiming a purchase was made. It stops short of naming alternatives (e.g. recommend or get_download_links for free items), so no exclusion routing is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_to_folderDownload into the projectAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Folder relative to the project, e.g. 'assets/sfx'. Default kadal-store/<slug>. | |
| zip | No | The whole product as one zip instead of its files. | |
| slug | Yes | ||
| edition | No | Narrow a product sold in editions (planners, calendars) to one. Leave an axis out to keep all of it. | |
| fileIds | No | Only these files, by id. | |
| fileNames | No | Only these files, by name. | |
| overwrite | No | Download again even when the same file is already there. |
TDQS
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.
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.
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.
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.
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.
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_download_linksDownload linksARead-onlyInspect
Download URLs for files the person owns, each with its name, size and sha256, valid for 10 minutes; no cookie needed (curl -L works). Narrow with fileIds or an edition; zip: true adds one link for the whole product. To put files into the project, download_to_folder does the download and the checksum for you.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | Also a link to the whole product as one zip. | |
| slug | Yes | ||
| edition | No | Narrow a product sold in editions (planners, calendars) to one. Leave an axis out to keep all of it. | |
| fileIds | No | Only these files (ids from list_library). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint and openWorldHint, but the description adds genuinely load-bearing behavior: links expire in 10 minutes, each result carries name, size and sha256, and no cookie is required (curl -L works). The expiry window and auth-free access are exactly the operational facts an agent needs and cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses separated by semicolons: what you get, how to narrow it, and where to go instead. The most decision-relevant fact (URLs, valid 10 minutes) is front-loaded and nothing is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden itself and does so — listing name, size and sha256 plus the 10-minute validity. For a read-only link-generation tool with nested edition parameters, nothing needed to call it correctly is missing beyond the slug definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the baseline is 3, and the description earns an increment by clarifying that zip:true is additive ("adds one link") rather than replacing the per-file links. The gap is the required slug parameter, which has no schema description and no explanation in the description — the agent must infer it from siblings like get_product.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource ("Download URLs for files the person owns") and immediately corrects a likely misconception — it returns URLs, not bytes. It also implicitly distinguishes itself from download_to_folder, which actually fetches files, so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: "To put files into the project, download_to_folder does the download and the checksum for you" names the alternative and the condition that selects it. It also says how to narrow results (fileIds or an edition) and what zip:true adds, covering both when-to-use and how-to-scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productProduct detailsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The product's slug. |
TDQS
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.
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.
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.
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.
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.
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 ownsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true 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.
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.
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.
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.
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.
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 notesCRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
TDQS
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.
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.
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.
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.
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.
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 shelvesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true 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.
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.
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.
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.
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.
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 projectARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | A folder, relative to the project (default: the project itself). |
TDQS
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.
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.
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.
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.
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.
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 workARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many (default 8). | |
| context | Yes | What the project is and what it needs, at most 6000 characters. | |
| formats | No | Formats to prefer, e.g. ['pdf'] or ['wav', 'ogg']. | |
| shelves | No | Shelf slugs to keep to. | |
| maxCents | No | Price ceiling in US cents. | |
| includeOwned | No | Also list products the person owns (default false). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | What is wrong and where, in plain words. | |
| kind | Yes | ||
| page | No | The PDF page, counting from 1. | |
| slug | Yes | ||
| fileName | No | The file the problem is in, as list_library names it. | |
| timeSeconds | No | Seconds into the audio or video. |
TDQS
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.
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.
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.
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.
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.
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 storeARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | asset: one product; pack: a bundle of several. | |
| sort | No | ||
| limit | No | How many (default 20). | |
| query | No | Words to search for, e.g. 'weekly planner a5' or 'retro ui sound effects'. | |
| shelf | No | A shelf slug from list_shelves. | |
| style | No | A style tag, e.g. minimal, pixel-art. | |
| topic | No | A topic tag. | |
| cursor | No | nextCursor from the previous page. | |
| format | No | A format tag, e.g. pdf, wav, glb, png. | |
| maxCents | No | Only products from at most this price, in US cents (2000 = $20). |
TDQS
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.
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.
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.
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.
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.
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 inARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true 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.
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.
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.
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.
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.
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.
12 tool updates
v0.1.1- First observed
create_buy_link - First observed
download_to_folder - First observed
get_download_links - First observed
get_product - First observed
list_library - First observed
list_my_notes - First observed
list_shelves - First observed
project_summary - First observed
recommend - First observed
report_problem - First observed
search_products - First observed
whoami
TDQS
Scored across 12 tools
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'.
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).
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.
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
Related MCP Connectors
Catalog for building with AI agents: tools, APIs, licensed assets, prices and history, recipes.
Marketplace where AI agents buy prompt packs, workflows, personas, datasets and playbooks.
A marketplace for AI agents. Tools and data for agents, on one MCP address. No account, no API key.
Search, buy and sell AI agents, apps, prompts and templates. AI agents can list products and earn.
Related MCP Servers
- AlicenseAqualityFmaintenanceAgent-first skill marketplace MCP server. AI agents discover, install, and share skills across 7 platforms via MCP protocol. 15 tools including skill search, download, upload, and agent discovery.184MIT

Meshy MCP Serverofficial
AlicenseAqualityAmaintenanceEnables AI agents to create, manage, and download 3D models, textures, images, rigged characters, and animations through natural conversation.2822,115 npm89MIT- AlicenseAqualityBmaintenanceLicense-aware game development resource discovery MCP server. Helps AI coding agents find reusable game assets with commercial-use filtering, license classification, and attribution generation.91MIT
- AlicenseAqualityAmaintenanceYour game-asset vault - Unity Asset Store, Fab, Quixel Megascans, Gumroad and Leartes Cosmos - searchable by AI agents over MCP. Local, offline, no telemetry.93MIT