skill-mcp
This is a local MCP server that catalogs, suggests, and binds a small set of SKILL.md files (max 3) to keep agent context lean, with optional host-rule injection and safe maintenance tools.
list_skills – Catalog local SKILL.md files, including shadowed duplicates with explanations.
suggest_skills – Lexically rank skills for a prompt (hard cap 3, optional token budget, CJK-aware).
bind_skills – Persist a lean binding (session/project/global) of up to 3 skills; can clear.
get_binding – Return the resolved binding and host contract.
why – Explain the reasoning behind the current binding.
estimate_tokens – Estimate token usage per skill (body or description).
read_skill – Explicitly read a full SKILL.md body (opt-in).
rescan_skills – Rescan skill roots without restarting the server.
write_host_contract – Inject Claude CLAUDE.md and Cursor .cursor/rules listing only bound skills.
doctor – Dry-run diagnostics: roots, counts, shadowing, binding path.
archive_idle – Dry-run or apply archiving of idle/shadowed user skills (recoverable, never silent-delete).
native_skills_bypass – Optionally write or restore Claude skillOverrides to hide descriptions from host listing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@skill-mcpsuggest skills for debugging a Node.js app"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
skill-mcp
Local stdio MCP server that helps an agent pick which local SKILL.md files to use — and keeps the context small.
Replacement for the deleted skillbind CLI: MCP-only, no host adapters, no marketplace.
30-second demo
Drop more than three
SKILL.mdfiles into~/.claude/skills(or another configured root).Call
suggest_skillswith a prompt. You get at most 3names[]ready for bind. If nothing matches:This directory has no matching skill for that prompt.Call
bind_skillswith those names (hard max 3).Call
write_host_contract. ClaudeCLAUDE.mdand Cursor.cursor/rulesnow list only the bound skills and forbid the rest.
{ "prompt": "fix login redirect" }{ "names": ["auth-login", "auth-oauth", "auth-token"] }Related MCP server: Skill Shelf
Release v0.2.0
Notes: GitHub Release v0.2.0. This README is part of that release.
Why the cap is hard
Max 3 bound skills. A larger token budget never raises that cap.
Default budget is 4000 tokens (CJK-aware: Han, Hiragana, Katakana, Hangul). Budget can only drop more candidates.
Lean by default:
name/description/path. FullSKILL.mdbody is opt-in viaread_skill.Default roots:
~/.claude/skills,~/.agents/skills,~/.codex/skills,~/.config/opencode/skills.
Install (Mac / local attach)
Requires Node 20+. The one-shot script builds the server and writes absolute-path MCP snippets, then merges them into Claude Desktop and Cursor configs when those files can be created:
git clone https://github.com/tsumon/skill-mcp.git
cd skill-mcp
./scripts/install.sh./scripts/install.sh runs npm install, npm run build, then node dist/install-cli.js. It writes:
docs/output/claude-desktop.mcp.jsondocs/output/cursor.mcp.json
Those files use an absolute args path to dist/index.js on this machine. Restart Claude Desktop / Cursor.
Mac Claude Desktop file: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Cursor: ~/.cursor/mcp.json
Do not paste a relative ./dist/index.js. Use the generated file, or replace the args entry with the absolute path printed by the installer.
Optional env vars:
SKILL_MCP_ROOTS— comma-separated user roots (overrides defaults)SKILL_MCP_PROJECT_ROOTS/SKILL_MCP_PLUGIN_ROOTS— extra roots with project / plugin shadowing tiersSKILL_MCP_STATE_DIR— global binding directory (default~/.config/skill-mcp)SKILL_MCP_PROJECT_DIR— project bind root (default cwd)SKILL_MCP_SESSION_ID— in-memory session bind keySKILL_MCP_EMBEDDINGS—auto(default) /on/off. Ollama is a soft dependency.
Optional single-file binary (bun compile):
./scripts/pack.sh
# dist-pack/skill-mcp — point host args at this absolute pathFallback if bun is missing: npm run build && node dist/index.js. Details in docs/PACKAGING.md.
Host contract (takes effect)
get_binding still returns a contract string, and skill-mcp://binding/contract is the same text. v0.2.0 also writes host files in one shot so Claude Code and Cursor actually load it:
node dist/index.js write-contract
# or MCP tool write_host_contractWrites:
<stateDir>/HOST-CONTRACT.md(canonical)<project>/CLAUDE.md(managedskill-mcp-contractblock)<project>/.cursor/rules/skill-mcp-contract.mdc(alwaysApply: true)
The generated files list only the currently bound skills and say not to load any other SKILL.md. Empty binding: do not load any skill until the user binds.
Empty suggest
When no skill matches the prompt, suggest_skills sets none: true and:
empty_message:This directory has no matching skill for that prompt.empty_message_zh:该目录下没有匹配该提示的技能。
It does not invent names to bind.
G — Auto-uninstall (dry-run / --apply)
Targets idle user-tier skills (not in the current binding) and shadowed user-tier copies.
Mode | What happens |
Default / MCP without | Dry-run. Reports candidates. Does not move or delete. |
| Moves each candidate into |
node dist/index.js archive-idle
node dist/index.js archive-idle --applyMCP: archive_idle with no args is dry-run; { "apply": true } archives.
Never silent-deletes. Bound skills stay. Project-tier skills stay. Recover by copying back from archive/.
H — Native skills bypass (toggle / restore / risk)
Claude Code otherwise stuffs every local skill description into the listing. Optional bypass writes skillOverrides: { "<name>": "name-only" } into ~/.claude/settings.json so the host listing keeps names but drops descriptions. skill-mcp then suggest/bind/read progressively.
Command | Effect |
| Backup current settings, write name-only overrides |
| Restore the backup in one step |
node dist/index.js native-skills enable
node dist/index.js native-skills restoreRisk: this is a routing fight with Claude Code native skills. Name-only hides descriptions from the model listing; it does not delete SKILL.md files. Plugin skills are not covered by skillOverrides. If routing feels wrong, restore immediately. skill-mcp never changes this setting unless you call enable.
Core tools
list_skills
Catalog SKILL.md files from configured roots. Duplicate names are shadowed (project beats user beats plugin). Shadowed rows include a plain-language shadow_message.
suggest_skills
Lexically rank skills for a prompt (optional Ollama embeddings). Returns at most 3. names is ready for bind_skills.
bind_skills
Persist a lean binding. More than 3 names is an error. Optional scope: session / project / global (default). Priority: session > project > global.
Other tools
Tool | Purpose |
| Resolved lean binding + |
| Inject Claude + Cursor rule files |
| Why those skills are bound |
| Reload roots without restarting |
| Per skill ( |
| Explicit full |
| Dry-run: roots, counts, binding path |
| Dry-run idle/shadowed user skills; |
|
|
Eval and CI
Offline goldens (ZH / JA / KO plus multi-skill conflicts):
npm test
npx tsc --noEmit
npm run eval.github/workflows/ci.yml runs those on pull requests and main.
Invariants
Max 3 bound skills; budget never raises the cap
Not a marketplace; no ranker retrain
Lean list / suggest / bind — no full bodies by default
Local stdio MCP only
G never silent-deletes; default dry-run
H is optional and one-step reversible
License
MIT
中文说明见 README.zh-CN.md.
Available Tools
12 toolsarchive_idleA
List idle and shadowed user-tier skills. Default dry-run reports what would move. Pass apply:true to archive into a recoverable path. Never silent-deletes.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | When true, move candidates into a recoverable archive. Default false (dry-run). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It states 'Never silent-deletes' and mentions 'recoverable path,' explicitly disclosing the non-destructive, reversible nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no redundant or vague language. Each sentence adds specific value: what the tool does, how the default works, and how to trigger the actual action with a safety note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set, the description covers the tool's behavior, default mode, explicit action trigger, and a key safety guarantee. No output schema is needed, and no additional context appears necessary for correct invocation.
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 single parameter 'apply' is fully described, including its boolean effect and default value (false = dry-run). Schema coverage is 100%, and the description adds meaningful context beyond the schema 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?
Clearly states the tool lists idle and shadowed user-tier skills and, with apply:true, archives them. The verb 'List' plus the archive action are both explained, making the purpose unambiguous despite the name.
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 explicit usage instructions: default dry-run reports what would move, and apply:true triggers the archive. Lacks an explicit comparison to sibling tools, but the self-contained guidance is sufficient for a user to know when and how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_skillsC
Persist lean binding (name/description/path only). Max 3. Pass clear:true or none to clear. Optional scope: session (in-memory), project (.skill-mcp/binding.json), or global (~/.config/skill-mcp/binding.json). Default global. Priority: session > project > global.
| Name | Required | Description | Default |
|---|---|---|---|
| none | No | ||
| clear | No | ||
| names | No | ||
| scope | No | ||
| reasons | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses persistence scope and precedence ('Default global. Priority: session > project > global') and where data is stored for project and global scopes. However, with no annotations provided, it carries the full burden and still does not clearly explain side effects such as overwriting existing bindings or exactly what clearing does beyond the phrase 'to clear'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and uses separate sentences for distinct details, making it easy to scan. It includes scope paths and clear behavior without excessive verbosity, though the telegraphic style makes some phrases like 'Max 3' underexplained.
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 annotations, the description needs to be self-sufficient, but it leaves important gaps: the purpose of the 'reasons' parameter, the exact meaning of 'none', and what the tool returns or changes are not explained. It is not complete enough for an agent to confidently invoke the tool in all intended scenarios.
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%, so the description must compensate, but it only partially explains parameters. It covers clear and scope, and loosely references 'name/description/path only' and 'Max 3' for names, but it does not explain the 'none' property clearly and completely omits the 'reasons' object parameter.
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 says 'Persist lean binding' and mentions clearing and scope, which gives some sense of the action, but it never explicitly states that the tool binds skills to a scope or what a 'binding' represents. 'Max 3' is ambiguous and could refer to the number of skills or entries. It is distinguishable from siblings like list_skills and read_skill, but not as crisp as it could be.
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 parameter-level instructions such as 'Pass clear:true or none to clear' and scope options, but it does not state when to use bind_skills versus alternatives like get_binding or write_host_contract. There is no explicit guidance about the intended use case or when a binding should be created.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Dry-run only: check skill roots exist, counts, shadowed, and binding path. Never mutates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Never mutates' and 'Dry-run only,' which are key behavioral traits indicating the tool is read-only and safe to invoke. This transparency helps an agent understand side effects without needing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and to the point, covering the essential aspects (dry-run, check items, non-mutating) in a compact form. It avoids redundancy, though the term 'shadowed' might be unclear to some users, slightly reducing clarity.
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?
While the description explains the tool's function and side-effect profile, it does not mention the output format or return value. For a diagnostic tool, this omission could leave an agent uncertain about what to expect, making the description somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is effectively 100%. The description does not need to explain any parameters, and adding more would be superfluous. The baseline of 3 applies here as there are no parameter details to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function as a dry-run check for skill roots existence, counts, shadowing, and binding path. It uses a specific verb ('check') and identifies the resource (skill roots/binding path), making its purpose understandable even without additional context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Dry-run only' and 'Never mutates,' which implies it is for non-destructive diagnosis, but it does not explicitly compare to sibling tools like get_binding or why. There is no guidance on when to prefer this tool over others, leaving the usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_tokensB
Estimate tokens for one/many/all skills (mode: body|description).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| name | No | ||
| names | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose side effects, read-only nature, performance implications, or any behavioral details beyond the core function. The tool's behavior is largely unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys the primary action and mode options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It does not explain the return format, whether the estimate is per skill or aggregate, or any error conditions, leaving an agent uncertain about the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description partially clarifies parameters by indicating 'one/many/all' for name/names and 'mode: body|description', adding value over the bare schema. However, it does not define the exact meaning of each mode, how to specify 'all', or the relationship between name and names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Estimate tokens') and the resource ('skills'), with a mode parameter indicating body or description. This distinguishes it from sibling tools like list_skills or bind_skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions such as needing token counts before binding or when to choose a specific mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bindingA
Return current lean skill binding. Default is the resolved binding (session > project > global). Pass scope to inspect one layer. Includes the host contract (only these N skills).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains what the tool returns, including the host contract and the layered resolution. With no annotations, this provides useful behavioral context, though it does not mention side effects, errors, or authentication requirements.
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 concise sentences, each adding meaningful information: what it returns, default behavior, and scope usage. No redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool and no output schema, the description adequately covers the purpose, defaults, and parameter behavior. It could be more explicit about the exact output format, but it is sufficient for selecting and invoking the tool.
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 single optional scope parameter is explained beyond the schema: it specifies which layer to inspect, and the default is the resolved binding. The enum values are self-explanatory in context.
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?
Clearly states the tool returns the current lean skill binding, with a specific verb ('Return') and object. It is distinct from sibling tools like bind_skills and list_skills by focusing on the binding state.
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?
Explains the default behavior (resolved binding with precedence) and how to inspect a specific layer via the scope parameter. However, it does not explicitly say when to prefer this over sibling tools such as list_skills or read_skill.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsA
Catalog local SKILL.md skills from configured roots; include shadowed duplicates with why.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses a notable behavior: including shadowed duplicates with an explanation ('why'). This is more than a generic 'list' and gives the agent expectations about the output's richness, though it does not specify output format or side effects (which are likely none).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that packs essential details: the action (catalog), the target (local SKILL.md skills), the scope (configured roots), and a key feature (include shadowed duplicates with why). No unnecessary words or redundancy.
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 description conveys the tool's core functionality and scope, and the absence of parameters and output schema keeps it simple. It could be more explicit about the output format or the meaning of 'why', but for a listing operation it is largely complete.
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 input schema has zero parameters, so schema coverage is trivially 100%. The description does not need to explain parameters since none exist, and it does not mislead about them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool catalogs local SKILL.md skills from configured roots, and specifically mentions including shadowed duplicates with reasons. This distinguishes it from sibling tools like suggest_skills or bind_skills, making its purpose 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 clear context about what the tool does—listing skills from configured roots—so an agent knows when to invoke it for enumeration. It does not explicitly contrast with alternatives, but the name and action are self-explanatory enough for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
native_skills_bypassA
Optional: write Claude skillOverrides name-only so the host listing does not dump every skill description. enabled:true writes; enabled:false restores the previous settings in one step. Risk: routing fight with Claude Code native skills.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true writes name-only skillOverrides; false restores the prior host file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions a risk (routing fight) and explains the effects of the boolean, but does not detail side effects, permissions, or where the overrides are written.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, dense with useful information: purpose, behavior for true/false, and a risk warning. No filler or redundancy.
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-boolean-parameter tool with no output schema, the description covers the action, the rationale, and a risk. It could mention what 'prior host file' refers to, but overall it is sufficiently complete.
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 parameter schema already has 100% coverage with a clear description of 'enabled'. The tool description repeats the same semantics without adding new information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (write Claude skillOverrides name-only) and the purpose (to avoid dumping every skill description in the host listing). This distinguishes it from sibling tools like list_skills and read_skill.
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 implies when to use the tool (to slim down host listing) and explains the two states (enabled true/false), but does not explicitly contrast it with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_skillB
Read full SKILL.md body by explicit skill name (opt-in; other tools stay lean).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It only states what is read, but doesn't disclose behavior on missing names, errors, or side effects, leaving the agent to infer basic read semantics.
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 concise sentence efficiently conveys the purpose and key constraint, with no redundant wording.
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 simple read operation, the description is adequate, but it lacks detail on edge cases (e.g., missing skill, empty body) and does not clarify what 'opt-in' entails in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for 'name', and the tool description only says 'explicit skill name' without clarifying format, case sensitivity, or expected values. Schema coverage is 0%, so the description must compensate but only minimally does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the full SKILL.md body by explicit skill name, with a specific verb and resource. It distinguishes itself from leaner alternatives, though it doesn't name them 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?
The phrase 'opt-in; other tools stay lean' implicitly suggests using this when full contents are needed, but it doesn't explicitly name sibling tools or specify conditions for choosing this over list_skills or others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rescan_skillsA
Rescan skill roots into the in-memory catalog without restarting the MCP process. list_skills and suggest_skills then reflect new/changed/removed skills.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the side effect (updating the in-memory catalog) and specifies that it does not restart the MCP process, which satisfies transparency for a non-destructive operation. It does not mention potential performance implications, but the key behavioral aspects are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two sentences that efficiently convey the action and its effect. There is no redundant information or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete enough for an agent to understand the purpose, the action taken, and the resulting state. It covers all necessary contextual information.
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 zero parameters, the description does not need to explain parameter semantics. The baseline for 0 parameters is 4, and since there are no parameters to describe, the score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('rescan skill roots') and the resource (the in-memory catalog), and it differentiates from sibling tools by noting the effect on list_skills and suggest_skills. This makes the purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (after skill changes to update the catalog) and indicates that list_skills and suggest_skills will reflect changes, but it does not explicitly mention alternatives or exclusions. The context is clear, though not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_skillsA
Lexically rank skills for a prompt. Hard cap 3; default token budget 4000 (CJK-aware). Returns reasons and dropped (cap/budget).
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | Token budget (default 4000); never raises the max-3 cap | |
| prompt | Yes | User or agent task prompt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of disclosing behavior. It says the tool 'Returns reasons and dropped (cap/budget)' and uses the verb 'suggest,' which implies a read-only ranking operation, but it never explicitly states that it has no side effects or does not modify skills.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that conveys the core behavior, constraints, and return highlights without unnecessary 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?
With no output schema, the description mentions that returns include 'reasons and dropped (cap/budget),' but it does not fully specify the result shape or how the ranked skills are represented. This is adequate for a simple tool but leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters, including the default budget and the cap constraint. The description adds 'CJK-aware' and repeats the hard cap, but it does not substantially deepen parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Lexically rank skills for a prompt.' This uses a specific verb and object, and is distinct from sibling tools like list_skills or bind_skills.
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 provides constraints like 'Hard cap 3' and a default token budget, but does not explain when to use this tool versus alternatives such as list_skills, bind_skills, or estimate_tokens. There is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whyA
Explain why the current skills are bound.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. The action 'Explain' clearly indicates a read-only operation with no side effects, which is transparent enough. However, it does not explicitly state that it makes no changes, though this is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is direct and free of extraneous detail. It is well-structured and immediately conveys the tool's function without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters or output schema), the description fully covers what an agent needs to know to invoke it correctly. It is self-contained and does not require additional context about return values or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (since there are no parameters to describe). The description adds no parameter-related meaning, and the baseline score of 3 applies because there is nothing beyond the schema to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to explain why current skills are bound. This is a specific verb ('Explain') and resource ('current skills'), distinguishing it from siblings like list_skills (which lists) or bind_skills (which binds). It is unambiguous and concise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_binding or doctor. It does not mention any prerequisites or typical scenarios, leaving the agent to infer usage from the tool name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_host_contractA
Write the current binding contract into Claude CLAUDE.md and Cursor .cursor/rules in one shot. The files list only bound skills and forbid others.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the primary side effect—writing files and forbidding unbound skills—but does not clarify whether existing files are overwritten, appended, or require a pre-existing contract. With no annotations, more detail on the write behavior would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, highly concise, and immediately states the action and outcome without extraneous details.
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 parameters and no output schema, the description adequately covers the tool's purpose and effect. It lacks context on what 'current binding contract' refers to, but that may be domain-specific and not required for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to explain parameter semantics. Baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes the current binding contract into specific files (CLAUDE.md and .cursor/rules) and explains the content (list only bound skills, forbid others). This distinguishes it from sibling tools like bind_skills or list_skills.
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?
No explicit guidance on when to use this tool versus alternatives. While 'in one shot' hints at convenience, there is no mention of conditions that would make this preferable to, say, bind_skills or manually editing files.
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.
6 tool updates
v0.2.0- Changed
archive_idle1 field changed- added
Input schema / properties / applyAdded value: +{ + "description": "When true, move candidates into a recoverable archive. Default false (dry-run).", + "type": "boolean" +}
- Changed
bind_skills1 field changed- added
Input schema / properties / scopeAdded value: +{ + "enum": [ + "session", + "project", + "global" + ], + "type": "string" +}
- Changed
get_binding1 field changed- added
Input schema / properties / scopeAdded value: +{ + "enum": [ + "session", + "project", + "global" + ], + "type": "string" +}
- Added
native_skills_bypass - Added
rescan_skills - Added
write_host_contract
9 tool updates
v0.1.0- First observed
archive_idle - First observed
bind_skills - First observed
doctor - First observed
estimate_tokens - First observed
get_binding - First observed
list_skills - First observed
read_skill - First observed
suggest_skills - First observed
why
TDQS
Scored across 12 tools
Most tools address distinct actions: binding, listing, suggesting, rescanning, archiving, reading, and estimating. A few diagnostic/inspection tools (doctor, list_skills, get_binding, why) have some overlapping concerns, but their descriptions make each purpose clear enough.
Most tools follow an imperative verb_noun pattern like bind_skills, list_skills, rescan_skills, and estimate_tokens. A few names deviate (doctor, why, native_skills_bypass), but the pattern is still predictable overall.
Twelve tools is a well-scoped set for a skill-management server. Each tool covers a distinct part of the workflow: cataloging, binding, suggesting, diagnosing, archiving, reading, and host integration, without obvious bloat.
The tool surface covers core lifecycle needs: listing, reading, binding, suggesting, rescanning, archiving, and host contract writing. Restoring archived skills or configuring skill roots is not directly exposed, but those feel like external/recoverable edge cases rather than critical gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
Search and discover Agent Skills from the skills.sh registry. Powered by HAPI MCP server.
A registry of 5,900+ peer-authored skills any MCP agent can search and load on demand.
Search & install 6,500+ AI agent skills from skills-hub.ai inside any MCP tool.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover, install, and manage SKILL.md skills from a Git-backed registry via MCP tools for search, install, and list operations.131MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search, browse, install, and manage a large library of skills via only 7 MCP tools, with skills stored locally and loaded on demand to minimize context overhead.4-
- AlicenseNot gradedqualityCmaintenanceExposes MCP tools to list, search, and load Markdown skills from a local folder, enabling coding agents to discover and reuse procedural knowledge.MIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-capable agents to search, inspect, lint, and safely install Agent Skills from the skillmd registry mid-conversation.61MIT