Borrowing it
Nothing to install: this file belongs to DeepBlueCoding/mcp-replay-dota2. 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/DeepBlueCoding/mcp-replay-dota2/master/.claude/skills/add-mcp-tool/SKILL.mdgit clone --depth 1 https://github.com/DeepBlueCoding/mcp-replay-dota2Wrote 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/deepbluecoding/mcp-replay-dota2/add-mcp-tool)<a href="https://agentmods.dev/skills/deepbluecoding/mcp-replay-dota2/add-mcp-tool"><img src="https://agentmods.dev/badge/skills/deepbluecoding/mcp-replay-dota2/add-mcp-tool/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/deepbluecoding/mcp-replay-dota2/add-mcp-tool"><img src="https://agentmods.dev/badge/skills/deepbluecoding/mcp-replay-dota2/add-mcp-tool.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.00154 | $0.01621 |
| Opus 5 | $0.00077 | $0.00811 |
| Sonnet 5 | $0.00031 | $0.00324 |
| Haiku 4.5 | $0.00015 | $0.00162 |
Grade A, and why
add-mcp-tool 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 8d 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.
How it starts
The opening of the file, as written. The whole thing — 100 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Add an MCP tool to mcp-replay-dota2
Read CLAUDE.md (repo root) first — it holds the python-manta attribute-access rules, the
enum rules, the lane-naming rules, and the mandatory tests+docs+changelog policy. This skill
adds the tool-specific vertical slice on top of that.
Tool vs resource
- Dynamic, parameter-required query (needs a
match_idor other args) ->@mcp.tool. - Static reference data, no params (heroes, map, pro lists) ->
@mcp.resourcein thedota2://namespace (seesrc/resources/, registered indota_match_mcp_server.py).
This skill is for tools. For a brand-new analysis domain (new service), use the
add-replay-collector-service skill first, then come back here to expose it.
Workflow (do in this order)
- Service method first. Put extraction logic in a service under
src/services/<domain>/, not in the tool. The service must have ZERO MCP/fastmcp imports — it stays importable from CLI/web (the boundary is stated insrc/services/__init__.py). Tools must contain no extraction logic; they only call services and shape the response. - Response model. Add or extend a Pydantic model in
src/models/(NOTsrc/services/models/— those are the service-layer models). Write aField(description=...)on every field; those descriptions become the LLM-visible schema. FastMCP auto-serializes the model — never return a raw dict. - Register the tool inside the correct
register_<domain>_tools(mcp, services)insrc/tools/<domain>_tools.py. Tools are NOT decorated at module top level — they live inside the register function so they captureservices. Pull dependencies out of the dict, e.g.replay_service = services["replay_service"]. Decorate with@mcp.tool(bare, no parens — seereplay_tools.py). - Replay tools follow this exact pattern for progress + cached parse:
@mcp.tool async def get_something(match_id: int, ctx: Context) -> SomethingResponse: async def progress_callback(current: int, total: int, message: str) -> None: await ctx.report_progress(current, total) data = await replay_service.get_parsed_data(match_id, progress=progress_callback) return some_service.do_thing(data)get_parsed_datareturns a cachedParsedReplayData; never call python-mantaParserdirectly in a tool. - Filtering uses the shared filter models in
src/models/filters.py(DeathFilters,CombatFilters,EventFilters,FightFilters,HeroPerformanceFilters). Build with.from_params(killer=..., location=..., start_time=...)then.apply(items). Location filters accept the 37 named map regions — do not invent ad-hoc filtering. - New tool module? Add
register_<domain>_toolsto the imports and the call list insrc/tools/__init__.py::register_all_tools. The six existing modules are:replay_tools,combat_tools,fight_tools,match_tools,pro_scene_tools,analysis_tools(registered in that order; ~41 tools total). - New service dependency? Instantiate the singleton in
dota_match_mcp_server.pyand add it to theservicesdict (~line 97). Available keys today:replay_service,combat_service,fight_service,jungle_service,lane_service,seek_service,farming_service,rotation_service,heroes_resource,pro_scene_resource,constants_fetcher,match_fetcher,pro_scene_fetcher. - Tool-selection instructions — update BOTH surfaces so the LLM knows when to pick the tool:
- the
TOOL_INSTRUCTIONSmarkdown table indota_match_mcp_server.py, and - the "AI Summary - Tool Selection Guide" admonition table at the top of
docs/api/tools/index.md(and bump the per-category tool count in the Categories table).
- the
- Docs page — add
## <tool_name>with a one-line purpose, a python call example, and a JSONReturnsblock, on the page matching the tool's category (see map below). Use thewrite-mkdocs-docsskill for the admonition/changelog conventions. - Real-values test under
tests/<area>/using conftest fixtures only — never parse a replay in a test. See therun-ci-and-test-replaysskill. - CI gate — run all three before declaring done (also in
CLAUDE.md):uv run ruff check src/ tests/ dota_match_mcp_server.py uv run mypy src/ dota_match_mcp_server.py --ignore-missing-imports uv run pytest
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.
- 8d ago First seen · 100 lines · 154 tokens per session scan A 2149fef1e03d
add-mcp-tool is a skill published in the GitHub repository DeepBlueCoding/mcp-replay-dota2 (2 stars, last pushed 3mo ago), licensed MIT. It adds 154 tokens to every session and 1,621 once invoked, about $0.0008 per session on Opus 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-31.
Other skills, from other repositories
gameobject-component-destroy
Destroy one or more Components from a target GameObject. Missing (null) components are skipped — they cannot be destroyed. Use 'gameobject-find' and 'gameobject-component-get' to identify the components first.
unity-version-split
Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID).
unity-addressables
Manage Addressables groups, entries, profiles and content builds (com.unity.addressables, reflection-based).
motion
How an agent turns a character mesh into a usable animated FBX — and how to judge whether the result is shippable.
playtest-report
Generates a structured playtest report template or analyzes existing playtest notes into a structured format. Use this to standardize playtest feedback collection and analysis.
unity-manual-component
Manually add, configure, reorder, and copy components on GameObjects using Unity Editor UI. For one-off Inspector workflows that do not need REST automation.