skill-mcp: Instructions file for Claude Code

CLAUDE.md

skill-mcp CLAUDE.md is an instructions file for Claude Code from chrischall/skill-mcp. It costs 1,602 tokens per session, scanned A, original, MIT.

Repository instructions for the skill-mcp project. They describe an MCP server that lists agent skills, provides their instructions and files, and runs approved skill scripts.

In plain words
What is it for?
Understanding the server's tools and operating modes, following its build and test commands, and avoiding changes that weaken its documented invariants.
Why use it?
They give a coding agent the project-specific rules and tested assumptions needed to modify or review the repository safely.

Instructions file for Claude Code

Written for Claude Code: the file is CLAUDE.md. Also seen: reads .claude/ paths; mentions CLAUDE.md.

This is chrischall/skill-mcp's own configuration. It tells Claude Code how to work on skill-mcp itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything skill-mcp configures →

Reuse

Borrowing it

Nothing to install: this file belongs to chrischall/skill-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.

Copy the file
curl -O https://raw.githubusercontent.com/chrischall/skill-mcp/main/CLAUDE.md
Clone the repo
git clone --depth 1 https://github.com/chrischall/skill-mcp

Made for: Claude Code.

Wrote 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.

agentmods badge for skill-mcp CLAUDE.md

README.md
[![agentmods](https://agentmods.dev/badge/instructions/chrischall/skill-mcp/claude-md.svg)](https://agentmods.dev/instructions/chrischall/skill-mcp/claude-md)
Your own site
<a href="https://agentmods.dev/instructions/chrischall/skill-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/chrischall/skill-mcp/claude-md.svg" alt="Measured on agentmods" height="20"></a>
Per session 1,602 This file is loaded in full into every session.
When invoked 1,602 The same file — it is already loaded in full.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.01602 $0.01602
Opus 5 $0.00801 $0.00801
Sonnet 5 $0.00320 $0.00320
Haiku 4.5 $0.00160 $0.00160

Measured 6d ago against content hash 2cab1b7d74a8, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade A, and why

skill-mcp CLAUDE.md 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 6d 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.

CLAUDE.md · 109 lines

How it starts

The opening of the file, as written. The whole thing — 109 lines — stays where its author put it; the contents beside it link to each section on GitHub.

CLAUDE.md — skill-mcp

Guidance for Claude working in this repo. Fleet-wide conventions (the auto-review ladder, the merge policy, release-please rules) live in ~/.claude/CLAUDE.md and chrischall/workflows — deliberately NOT restated here. What follows is true of this repo and nowhere else.

TL;DR

An MCP server that serves a directory of Agent Skills: it lists them, hands out their instructions and bundled files, and runs only the scripts a skill declares AND the owner granted. A generic adapter — the skills are content it reads, and the same build serves whatever it is pointed at.

Two ways it runs, and they have OPPOSITE defaults (below): standalone at your own terminal, or hosted on mcp-host as a registration.

npm test          # typecheck (tsc -p tsconfig.tests.json) THEN vitest
npm run build     # tsc + esbuild bundle -> dist/

npm test typechecks first on purpose: vitest transpiles with esbuild and never runs tsc, so a type error in a test file passes every suite and then fails CI.

The tool surface

Four tools, and they are the whole contract (src/tools/skills.ts).

tool takes returns
skill_list every skill: name, description, source, file count, which scripts may run
skill_load name SKILL.md verbatim + a manifest of bundled files. Referenced files are NOT inlined
skill_file name, paths[] one entry per path, in request order: text, or base64 + media type, or that path's own error
skill_run name, script, args[], confirm {exitCode, stdout, stderr, truncated, durationMs}

Skills are also projected as MCP prompts and resources (skill://<name>/<path>, src/prompts.ts). That projection is a second door, never the only one — everything reachable there is reachable through the tools.

Load-bearing invariants (tested — don't weaken)

  • A skill is named by its DIRECTORY, never by its frontmatter (src/discovery.ts). A name: that disagrees is reported as name-mismatch and otherwise ignored, and a directory whose own name is not addressable is skipped rather than renamed by its content. This is not tidiness: the owner's grant is keyed by skill name, so a bundle that could choose its name could claim its neighbour's name and be handed the neighbour's script AND the neighbour's environment. A real duplicate refuses BOTH sides and names every contributing directory.
  • The grant can only ever NARROW (src/grant.ts). MCP_SKILL_RUN is a JSON array of {skill, script, env?}; a row naming a script the skill did not declare grants nothing, and a row naming a variable the script did not ask for grants nothing. The widest this adapter is ever is the declaration itself. Keyed on basename(skill.dir) — the second line under the rule above — and the map key is NUL-separated, written as the \0 ESCAPE. Never a literal NUL byte in source: it makes git treat the file as binary, which is how this module once shipped as Bin 5859 -> 6511 bytes with no reviewable diff.
  • An absent grant means opposite things in the two modes (src/config.ts). Hosted, it is the EMPTY grant — there is a registration behind that child and §7 of mcp-host's design says empty by default. Standalone there is no registration and no owner but the person at the terminal, so the declaration stands. "Hosted" is detected from any runner-INJECTED marker (MCP_SKILLS_PATH, MCP_HOST_METER_FILE, MCP_DATA_DIR, MCP_BLOB_BASE_URL), not from SKILLS_DIR alone — a registration's plain env can carry SKILLS_DIR, and keying on it put the hosted case on the fail-OPEN default. That heuristic may only ever move the default closed.
  • Every path is checked twice, on the STRING and on the resolved real path (src/paths.ts). No leading /, no ./.. segment, no backslash, no percent escape, no NUL; then realpath and a containment check against the skill's own realpath'd directory; then lstat, which must report a regular file. A read is not less dangerous than an execution here — the slot sits beside other skills and the child's $HOME.
  • Reads are BOUNDED, never read-whole-then-slice (src/read-capped.ts). A hosted child gets RLIMIT_DATA 256 MiB and a bundle may be far larger, so readFile followed by a slice bounds the frame and kills the server. stat for the real size, then read at most maxBytes + 1 — the one extra byte is what decides truncated without a second syscall.
  • Caps are stated, not discovered. MAX_SKILLS 32, MAX_FILES_PER_SKILL 2000, MAX_SKILL_MD_BYTES 256 KiB, MAX_FRONTMATTER_BYTES 64 KiB, MAX_FILE_BYTES 1 MiB, MAX_FILE_PATHS 8 and MAX_BATCH_BYTES 4 MiB for one skill_file call, MAX_STREAM_BYTES 1 MiB and MAX_TIMEOUT_MS 300 s for a run, MAX_RESOURCES 500. A batch's total is decided from stat BEFORE a byte is read, summing min(size, MAX_FILE_BYTES) — the bytes that would actually be served — so the answer cannot depend on the order the caller listed paths in.
  • A truncation is REPORTED, never silent — per entry for skill_file, so a batch says which of its reads was cut.

Read the full file on GitHub · 109 lines

Changes

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.

  1. 6d ago First seen · 109 lines · 1,602 tokens per session scan A 2cab1b7d74a8

Subscribe to this mod's changes

skill-mcp CLAUDE.md is an instructions file published in the GitHub repository chrischall/skill-mcp (0 stars, last pushed 2d ago), licensed MIT. It adds 1,602 tokens to every session, about $0.0080 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.

Related

Other instructions, from other repositories

next.js AGENTS.md

AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.

vercel/next.js · 7,296 tokens

codex AGENTS.md

AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.

openai/codex · 5,182 tokens

vscode buildNext.instructions.md

Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).

microsoft/vscode · 6,785 tokens

vscode oss-third-party-notices.instructions.md

Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).

microsoft/vscode · 5,001 tokens

langchain AGENTS.md

AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.

langchain-ai/langchain · 4,469 tokens

spec-kit AGENTS.md

AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.

github/spec-kit · 7,104 tokens