Borrowing it
Nothing to install: this file belongs to pvliesdonk/markdown-vault-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/pvliesdonk/markdown-vault-mcp/main/.agents/skills/tool-registration/SKILL.mdgit clone --depth 1 https://github.com/pvliesdonk/markdown-vault-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/pvliesdonk/markdown-vault-mcp/tool-registration)<a href="https://agentmods.dev/skills/pvliesdonk/markdown-vault-mcp/tool-registration"><img src="https://agentmods.dev/badge/skills/pvliesdonk/markdown-vault-mcp/tool-registration/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/pvliesdonk/markdown-vault-mcp/tool-registration"><img src="https://agentmods.dev/badge/skills/pvliesdonk/markdown-vault-mcp/tool-registration.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00037 | $0.01636 |
| Opus 5.5 | $0.00015 | $0.00654 |
| Sonnet 5.5 | $0.00007 | $0.00327 |
| Haiku 4.5 | $0.00004 | $0.00164 |
Grade A, and why
tool-registration scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 21d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
Copies of this mod
1 near-identical copy found in the catalogue:
- tool-registration — 92% identical, 10 lines differ
How it starts
The opening of the file, as written. The whole thing — 45 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Tool Registration
Tool Registration Checklist
Every MCP tool you register must carry the full set of metadata below — not just the behaviour. A tool that works but lacks a title, hints, or docs is incomplete. When adding or changing a tool, verify each item:
- Title — a human-readable
annotations.title(e.g."Search Vault"). Title-aware clients (notably VS Code, which honours onlytitleand the read-only hint among annotations) render this as the tool's label; without it they fall back to the raw machine name. Set it inline in the tool'sannotations={...}dict. - Behavioural hints —
read_only_hint, and where they applydestructive_hint/idempotent_hint, in the sameannotationsdict (MCP SDK v2 snake_case; serialized camelCase on the wire). These describe side effects accurately (a destructive tool must setdestructive_hint=True). - Icon — an entry wired via
register_tool_icons(...)or@mcp.tool(icons=[...])(see Tool icons). - Docstring — a Google-style docstring; FastMCP surfaces its summary and
Args:entries as the tool description and per-parameter descriptions the model reads. Write it with thewriting-model-facing-textskill: what the tool does, when to call it, what each parameter means; developer notes go in#comments, not the docstring. It states the contract only; how the tool fails is never docstring content. - Outcomes — every way the tool can end (a result, a request the model must change, a stale version, a server fault) maps to a return value, a
ToolErrorand a log level. Decide them with thedesigning-tool-outcomesskill, which also says how to write eachToolErrormessage so it stands on its own: what was wrong and the next call to make. Put@tool_boundary(fromfastmcp_pvl_core) under@mcp.toolso no exception reaches FastMCP unhandled; the template-ownedtests/test_tool_outcomes.pyfails any registered tool without it. - Docs entry — the published reference is generated: run
uv run python scripts/gen_reference.pyafter adding or changing a tool (CI's--checkfails otherwise). Add agroup:<slug>tag when the registering module is not the right page for it, and put a worked example in the tool'sDOMAIN-EXAMPLE-<name>slot ondocs/reference/tools/<group>.md; the slot survives regeneration. - Enforcement test — keep a test that enumerates the registered tools and asserts each carries the metadata above (at minimum a non-empty
annotations.title). Enumerate the full registry, not just the client-facing listing, so app-only / hidden tools cannot slip past. Such a test turns this checklist into a CI gate: a future tool added without a title fails loudly rather than silently shipping its machine name.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 21d ago Changed 27b14e68037a
- 29d ago Changed fb7e27bba892
- 1mo ago Changed · +1 lines e09ba1c57795
- 1mo ago Changed ac00bf059e64
- 1mo ago Changed · +4 lines c083dda93a21
- 1mo ago Changed 5f84b5f10647
- 1mo ago First seen · 40 lines · 37 tokens per session scan A e865a4ddf6d8
tool-registration is a skill published in the GitHub repository pvliesdonk/markdown-vault-mcp (35 stars, last pushed today), licensed MIT. It adds 37 tokens to every session and 1,636 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
docs-rag
Use when a project's markdown docs, specs, ADRs or decision logs need to be searchable by meaning from the agent, when a searchnotes tool (docs-rag-mcp) is connected, when its results carry labels like [semantic 0.71], [both], [exact match] or [superseded → ...], when it answers "No relevant results", or when a…
mnemonic
Search local indexed markdown knowledge bases. Use when the user asks to find notes, dig up a concept from personal docs, cross-reference ideas across wikis, or answer from indexed local files. Triggers on "look up in notes", "search my docs", "what did I write about", "find in my vault", "check my index", "retrieve…
llmwiki
Build and use a persistent, citation-traceable knowledge wiki from documents, research papers, notes, or project documentation. Use for llmwiki projects, retrieving reusable evidence for an agent task, or compiling a corpus for repeated questions. A one-off file read or live web search does not need a wiki.
siyuan-plugin-development
Official frontend plugin development workflow. After the user explicitly opts in, clarify missing requirements, confirm a short plan, implement in a managed copy, verify, and package. Installation and activation require separate authorization.
link-memory
Use after important user-approved decisions, when durable context should be proposed or reviewed, and for explicit Link memory lifecycle work: remember, recall, review, update, archive, restore, forget, or explain local memories through the CLI without requiring MCP.
link-ingest
Use when raw files are present, source pages look stale, or a user asks to ingest notes into Link; refresh source-backed wiki pages, propose memories, and validate updates through the CLI without MCP.