一键导入
skilljack-docs
Complete documentation for the Skilljack MCP server - tools, prompts, resources, configuration, and architecture reference.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Complete documentation for the Skilljack MCP server - tools, prompts, resources, configuration, and architecture reference.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use this skill when writing any code. Formats all code with a specific style marker.
Respond to greetings with a specific format including the magic phrase "SKILLJACK_GREETING_SUCCESS"
Generate files from templates. Use this when asked to create a config file or generate structured output.
| name | skilljack-docs |
| description | Complete documentation for the Skilljack MCP server - tools, prompts, resources, configuration, and architecture reference. |
An MCP server that jacks Agent Skills directly into your LLM's brain.
Recommended: For best results, use an MCP client that supports
tools/listChangednotifications (e.g., Claude Code). This enables dynamic skill discovery - when skills are added or modified, the client automatically refreshes its understanding of available skills. Alternatively, use--staticmode for predictable behavior with a fixed skill set.
Tool search / deferred tools. By default, skilljack delivers its skill catalog via MCP server instructions, which arrive in the
initializehandshake and reach the model even when tool search / deferred tool loading is enabled (the default on modern Claude Code, ~2.1.x) — automatic skill activation works out of the box. The legacy--catalog=tool-descriptionmode (not recommended) delivers the catalog inside theload-skilltool description instead, but tool-search clients defer MCP tool descriptions out of context, so that mode requires disabling tool search (e.g.ENABLE_TOOL_SEARCH=false) for auto-activation. See Catalog Delivery.
.well-known/agent-skills/ publishers (both allowlisted)tools/listChanged so clients can refresh available skillsload-skill Tool - Load full skill content on demand (progressive disclosure)/skill prompt with auto-completion or per-skill promptsskill:// URIs aligned with SEP-2640notifications/resources/updatedThis server demonstrates a way to approach integrating skills using existing MCP primitives.
MCP already has the building blocks:
load-skill tool)initialize (the default catalog channel)skill:// URIs)tools/listChanged, resources/updated)/my-server-skill)This approach provides separation of concerns. Rather than every MCP server needing to embed skill handling, the server acts as a dedicated 'skill gateway'. Server authors can bundle skills alongside their MCP servers without modifying the servers themselves. If MCP registries support robust tool discovery, skill tools become discoverable like any other tool.
Configure one or more skills directories containing your Agent Skills:
# Single directory
skilljack-mcp /path/to/skills
# Multiple directories (separate args or comma-separated)
skilljack-mcp /path/to/skills /path/to/more/skills
skilljack-mcp /path/to/skills,/path/to/more/skills
# Using environment variable (comma-separated for multiple)
SKILLS_DIR=/path/to/skills skilljack-mcp
SKILLS_DIR=/path/to/skills,/path/to/more/skills skilljack-mcp
Each directory is scanned along with its .claude/skills/ and skills/ subdirectories for skills. Duplicate skill names are handled by keeping the first occurrence.
In addition to local directories, skills can be pulled from two kinds of remote sources. Both are default-deny — a remote source is only synced if its origin is on the corresponding allowlist.
# GitHub repository (allowlisted via GITHUB_ALLOWED_ORGS / GITHUB_ALLOWED_USERS)
GITHUB_ALLOWED_ORGS=acme skilljack-mcp github.com/acme/skills
# Well-known publisher serving /.well-known/agent-skills/index.json
# (allowlisted via WELL_KNOWN_ALLOWED_ORIGINS)
WELL_KNOWN_ALLOWED_ORIGINS=https://example.com \
skilljack-mcp https://example.com/.well-known/agent-skills/
owner-repo prefix..tar.gz/.zip) are extracted with path-traversal/symlink/size protections, and every fetched URL — index, artifact, and any redirect target — must be on WELL_KNOWN_ALLOWED_ORIGINS (so a separate CDN origin must be allowlisted too). See the Developer Guide for the full list of WELL_KNOWN_* tuning env vars.Sources can be mixed freely on one command line (local dirs, GitHub URLs, and well-known URLs together).
By default, Skilljack MCP watches skill directories for changes and notifies clients when skills are added, modified, or removed.
Enable static mode to freeze the skills list at startup:
skilljack-mcp --static /path/to/skills
# or
SKILLJACK_STATIC=true skilljack-mcp /path/to/skills
In static mode:
tools.listChanged and prompts.listChanged capabilities are falseUse static mode when you need predictable behavior or have a fixed set of skills that won't change during the session.
Windows note: Use forward slashes in paths when using with MCP Inspector:
skilljack-mcp "C:/Users/you/skills"
The <available_skills> catalog is delivered through exactly one channel, selected with --catalog=<mode> or SKILLJACK_CATALOG — never both:
# Default: catalog in server instructions (survives tool search)
skilljack-mcp /path/to/skills
# Legacy escape hatch, not recommended: catalog in the load-skill tool description
skilljack-mcp --catalog=tool-description /path/to/skills
instructions (default) — the catalog (plus load-skill usage guidance) is sent as MCP server instructions in the initialize handshake. It is visible to the model even under tool search / deferred tool loading. Trade-off: on stdio, the MCP SDK sets instructions once at construction, so the catalog is frozen until restart — live skill add/remove won't reach connected clients. (Over HTTP, instructions are regenerated per request from the watched skill state, so newly connecting clients always get a current catalog; already-connected clients receive instructions only at initialize and see changes after reconnecting.)tool-description (not recommended — legacy escape hatch, also used as the control condition in the evals) — the catalog lives in the load-skill tool description and refreshes live via tools/listChanged when skills change. Why it's not recommended: (1) clients with tool search enabled (the modern Claude Code default) defer MCP tool descriptions out of context, so the model never sees the catalog and auto-activation silently breaks unless the client sets ENABLE_TOOL_SEARCH=false; (2) its one advantage — live refresh — is a prompt-cache trap: tool definitions sit at the top of the cached prompt prefix, so every tools/listChanged refresh invalidates the entire prompt cache (tools + system prompt + conversation history) and re-writes it at cache-write prices; (3) measured 2026-07-06 (issue #78), it has no steady-state cost advantage over instructions either.By default skilljack communicates over stdio. To serve over stateless Streamable HTTP instead, use --http (or SKILLJACK_HTTP_PORT):
skilljack-mcp --http=3000 /path/to/skills
Clients connect at POST /mcp. HTTP mode serves the core skill surface — load-skill, skill-resource, skill:// resources, and /skill prompts. Discovery-on-change works the same as stdio: file watchers and remote-source polling keep the skill state fresh, and every request reads it — so newly connecting clients get a current catalog, and load-skill/tools/list reflect changes immediately. Because the transport is stateless (no session, no server→client stream), it does not push listChanged / resources/updated notifications — already-connected clients see changes on their next request (for the instructions catalog, on their next reconnect). The UI config/display tools are stdio-only.
In MCP clients that support MCP Apps (like Claude Desktop), you can manage skill directories through an interactive UI.
To open the configuration UI, ask your assistant to show the skilljack config:
"show me the skilljack config"
The UI displays:
Changes made through the UI are persisted to the server's configuration. Clients that support tools/listChanged notifications will see updates immediately; others may require reconnection.
View all available skills and customize their invocation settings through the skill display UI.
To open the skill display UI, ask your assistant:
"what skills are configured in skilljack?"
The UI displays:
Skills from GitHub repositories show the org/repo name (e.g., modelcontextprotocol/ext-apps), and well-known skills show the publisher origin, making it easy to identify where each skill originates.
The server implements the Agent Skills progressive disclosure pattern with dynamic updates:
load-skill tool description (--catalog=tool-description)tools/listChanged (in tool-description mode this refreshes the catalog; in instructions mode the catalog is frozen until restart on stdio)load-skill tool to load full SKILL.md contentskill-resource to load additional files┌─────────────────────────────────────────────────────────┐
│ Server starts │
│ • Discovers skills from configured directories │
│ • Starts watching for SKILL.md changes │
│ ↓ │
│ MCP Client connects │
│ • Skill catalog delivered via server instructions │
│ (default) or load-skill tool description │
│ • Prompts registered for each skill │
│ ↓ │
│ LLM sees skill metadata in the catalog │
│ ↓ │
│ SKILL.md added/modified/removed │
│ • Server re-discovers skills │
│ • Updates load-skill tool description │
│ • Updates prompt list (add/remove/modify) │
│ • Sends tools/listChanged notification │
│ • Sends prompts/listChanged notification │
│ • Client refreshes tool and prompt definitions │
│ ↓ │
│ User invokes /skill prompt or /skill-name prompt │
│ OR LLM calls "load-skill" tool with skill name │
│ ↓ │
│ Server returns full SKILL.md content │
│ ↓ │
│ LLM calls "skill-resource" for additional files │
│ • Scripts, snippets, references, assets, etc. │
└─────────────────────────────────────────────────────────┘
This server exposes skills via tools, resources, and prompts:
load-skill, skill-resource) - For your agent to use autonomously. The LLM sees available skills in the skill catalog (server instructions by default, or the load-skill tool description) and calls them as needed./skill, /skill-name) - For explicit user invocation. Use /skill with auto-completion or select a skill directly by name.skill:// URIs) - For manual selection in apps that support it (e.g., Claude Desktop's resource picker). Useful when you want to explicitly attach a skill to the conversation.Skills are context delivered through MCP primitives. Tools enable autonomous activation by the agent. Prompts enable user-initiated loading with auto-completion. Resources provide explicit access for manual control. Each mechanism suits different workflows — skills aren't tied to any single delivery path.
This server implements the Agent Skills progressive disclosure pattern, which structures skills for efficient context usage:
| Level | Tokens | What's loaded | When |
|---|---|---|---|
| Metadata | ~100 | name and description | At startup, for all skills |
| Instructions | < 5000 | Full SKILL.md body | When skill is activated |
| Resources | As needed | Files in scripts/, references/, assets/ | On demand via skill-resource |
load-skill tool description)skill-resource as neededThe skill catalog and the loaded SKILL.md body don't enumerate every file in a skill directory. Instead, skill authors document available resources directly in their SKILL.md (e.g., "Copy the template from templates/server.ts"). This design choice follows the spec because:
(Supporting files are enumerated in resources/list for clients that browse resources — see Resources — but at lower priority than SKILL.md, and the progressive-disclosure tool/prompt path above still loads only what the SKILL.md points to.)
For skill authors: Reference files using relative paths from the skill root (e.g., snippets/tool.ts, references/api.md). Keep your main SKILL.md under 500 lines; move detailed reference material to separate files. See the Agent Skills specification for complete authoring guidelines.
load-skillLoad and activate an Agent Skill by name. Returns the full SKILL.md content.
Named
load-skill(notskill) to avoid colliding with clients that ship a built-inSkilltool (e.g. Claude Code); a distinct verb-first name removes the routing ambiguity. The user-facing prompt is still/skill.
Input:
{
"name": "skill-name"
}
Output: Full SKILL.md content including frontmatter and instructions.
skill-resourceRead files within a skill's directory (scripts/, references/, assets/, snippets/, etc.).
This follows the Agent Skills spec's progressive disclosure pattern - resources are loaded only when needed.
Read a single file:
{
"skill": "mcp-server-ts",
"path": "snippets/tools/echo.ts"
}
Read all files in a directory:
{
"skill": "algorithmic-art",
"path": "templates"
}
Returns all files in the directory as multiple content items.
List available files (pass empty path):
{
"skill": "mcp-server-ts",
"path": ""
}
Security: Path traversal is prevented - only files within the skill directory can be accessed.
Skills can be loaded via MCP Prompts for explicit user invocation.
/skill PromptLoad a skill by name with auto-completion support.
Arguments:
name (string, required) - Skill name with auto-completionThe prompt description includes all available skills for discoverability. As you type the skill name, matching skills are suggested.
Each discovered skill is also registered as its own prompt (e.g., /mcp-server-ts, /algorithmic-art).
Example: If you have a skill named mcp-server-ts, you can invoke it directly as /mcp-server-ts.
Prompt responses include MCP content annotations for proper handling:
audience: ["assistant"] - Content is intended for the LLM, not the userpriority: 1.0 - High priority content that should be included in contextPrompts return embedded resources with the skill's skill:// URI, allowing clients to track the content source.
Skills are also accessible via MCP Resources using skill:// URIs, following the SEP-2640 Skills Extension convention. The server advertises support via the extensions["io.modelcontextprotocol/skills"] capability key in its initialize response.
| URI | Returns |
|---|---|
skill://<skill-path>/SKILL.md | The skill's SKILL.md (text/markdown). Listed in resources/list. |
skill://<skill-path>/<file-path> | A supporting file inside the skill directory. Listed in resources/list at lower priority than SKILL.md. |
skill://index.json | SEP-2640 discovery index (application/json). Listed in resources/list. |
<skill-path> is <prefix>/<baseName> for prefixed skills (the prefix segments come from the skill's source — e.g., a local directory basename or owner-repo for GitHub-sourced skills) or just <baseName> for bundled skills. The final <skill-path> segment always matches the name field in the skill's frontmatter, per SEP.
Clients can subscribe to resources for real-time updates when files change.
Capability: resources: { subscribe: true, listChanged: true }
Subscribe to a resource:
→ resources/subscribe { uri: "skill://skilljack-docs/SKILL.md" }
← {} (success)
Receive notifications when files change:
← notifications/resources/updated { uri: "skill://skilljack-docs/SKILL.md" }
Unsubscribe:
→ resources/unsubscribe { uri: "skill://skilljack-docs/SKILL.md" }
← {} (success)
Subscribing to skill://index.json watches every SKILL.md, so any skill change re-fires that subscription as well as notifications/resources/updated for skill://index.json directly when skills are added or removed.
How it works:
skill:// URISkills are treated as trusted content. This server reads and serves skill files directly to clients without sanitization. Only configure skills directories containing content you trust.
Protections in place:
MAX_FILE_SIZE_MB env var)Not protected against:
The server watches skill directories for changes. When SKILL.md files are added, modified, or removed:
load-skill tool's description is updated with current skill names and metadata (in --catalog=tool-description mode; in the default instructions mode the catalog itself is frozen until restart on stdio)tools/listChanged and prompts/listChanged notifications are sent to connected clientsThe skill catalog (server instructions by default, or the load-skill tool description in --catalog=tool-description mode) includes metadata for all available skills in XML format:
# Skills
When a user's task matches a skill description below: 1) activate it, 2) follow its instructions completely.
<available_skills>
<skill>
<name>mcp-server-ts</name>
<description>Build TypeScript MCP servers with composable code snippets...</description>
<location>C:/path/to/mcp-server-ts/SKILL.md</location>
</skill>
</available_skills>
In tool-description mode this metadata is dynamically updated when skills change — clients supporting tools/listChanged will automatically refresh. In the default instructions mode it is generated at startup (stdio) or per request (HTTP).
Skills are discovered at startup from the configured directories. For each directory, the server checks:
.claude/skills/ subdirectoryskills/ subdirectoryEach skill subdirectory must contain a SKILL.md file with YAML frontmatter including name and description fields.
Control which skills appear in tools vs prompts using optional frontmatter fields:
| Frontmatter | In Skill Catalog | In Prompts Menu | Use Case |
|---|---|---|---|
| (default) | Yes | Yes | Normal skills |
disable-model-invocation: true | No | Yes | User-triggered workflows (deploy, commit) |
user-invocable: false | Yes | No | Background context (model auto-loads when relevant) |
Hide from model auto-discovery, require explicit user invocation via /skill-name prompt:
---
name: deploy
description: Deploy to production
disable-model-invocation: true
---
Hide from prompts menu, model uses automatically when relevant:
---
name: codebase-context
description: Background information about this codebase
user-invocable: false
---
Note: Resources (skill:// URIs) always include all skills regardless of visibility settings, allowing explicit access when needed.
npm run build
npm run inspector -- /path/to/skills
The evals/ directory contains an evaluation framework for testing skill activation across different delivery modes. Evals are only available when developing from source (not included in the npm package).
# Clone the repo first
git clone https://github.com/olaservo/skilljack-mcp.git
cd skilljack-mcp
# Install dev dependencies (includes claude-agent-sdk for evals)
npm install
# Build and run evals
npm run build
npm run eval # Default: greeting task, MCP mode
npm run eval -- --task=xlsx-openpyxl # Specific task
npm run eval -- --mode=local # Local skill mode
npm run eval -- --mode=mcp+local # Both MCP and local enabled
See evals/README.md for details on available tasks, modes, and findings about activation behavior differences.