Skill Jack MCP

Skill Jack MCP

Integrates Agent Skills into LLMs by discovering skills in a configured directory and progressively loading their instructions and resources on demand through a structured disclosure pattern.

Category
访问服务器

README

Skilljack MCP

An MCP server that jacks Agent Skills directly into your LLM's brain.

Recommended: For best results, use an MCP client that supports tools/listChanged notifications (e.g., Claude Code). This enables dynamic skill discovery - when skills are added or modified, the client automatically refreshes its understanding of available skills.

Features

  • Dynamic Skill Discovery - Watches skill directories and automatically refreshes when skills change
  • Tool List Changed Notifications - Sends tools/listChanged so clients can refresh available skills
  • Skill Tool - Load full skill content on demand (progressive disclosure)
  • MCP Prompts - Load skills via /skill prompt with auto-completion or per-skill prompts
  • MCP Resources - Access skills via skill:// URIs with batch collection support
  • Resource Subscriptions - Real-time file watching with notifications/resources/updated

Motivation

This repo demonstrates a way to approach integrating skills using existing MCP primitives.

MCP already has the building blocks:

  • Tools for on-demand skill loading (the skill tool with dynamically updated descriptions)
  • Resources for explicit skill access (skill:// URIs)
  • Notifications for real-time updates (tools/listChanged, resources/updated)
  • Prompts for explicitly invoking skills by name (/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.

Installation

npm install @skilljack/mcp

Or run directly with npx:

npx @skilljack/mcp /path/to/skills

From Source

git clone https://github.com/olaservo/skilljack-mcp.git
cd skilljack-mcp
npm install
npm run build

Usage

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.

Windows note: Use forward slashes in paths when using with MCP Inspector:

skilljack-mcp "C:/Users/you/skills"

How It Works

The server implements the Agent Skills progressive disclosure pattern with dynamic updates:

  1. At startup: Discovers skills from configured directories and starts file watchers
  2. On connection: Skill tool description includes available skills metadata
  3. On file change: Re-discovers skills, updates tool description, sends tools/listChanged
  4. On tool call: Agent calls skill tool to load full SKILL.md content
  5. As needed: Agent calls skill-resource to load additional files
┌─────────────────────────────────────────────────────────┐
│ Server starts                                            │
│   • Discovers skills from configured directories         │
│   • Starts watching for SKILL.md changes                 │
│   ↓                                                      │
│ MCP Client connects                                      │
│   • Skill tool description includes available skills     │
│   • Prompts registered for each skill                    │
│   ↓                                                      │
│ LLM sees skill metadata in tool description              │
│   ↓                                                      │
│ SKILL.md added/modified/removed                          │
│   • Server re-discovers skills                           │
│   • Updates 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 "skill" tool with skill name              │
│   ↓                                                      │
│ Server returns full SKILL.md content                     │
│   ↓                                                      │
│ LLM calls "skill-resource" for additional files          │
│   • Scripts, snippets, references, assets, etc.          │
└─────────────────────────────────────────────────────────┘

Tools vs Resources vs Prompts

This server exposes skills via tools, resources, and prompts:

  • Tools (skill, skill-resource) - For your agent to use autonomously. The LLM sees available skills in the tool description and calls them as needed.
  • Prompts (/skill, /skill-name) - For explicit user invocation. Use /skill with auto-completion or select a skill directly by name.
  • Resources (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.

Most users will rely on tools for automatic skill activation. Prompts provide user-initiated loading with auto-completion. Resources provide an alternative for manual control.

Progressive Disclosure Design

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

How it works

  1. Discovery - Server loads metadata from all skills into the skill tool description
  2. Activation - When a skill is loaded (via tool, prompt, or resource), only the SKILL.md content is returned
  3. Execution - SKILL.md references additional files; agent fetches them with skill-resource as needed

Why SKILL.md documents its own resources

The server doesn't automatically list all files 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:

  • Skill authors know best - They decide which files are relevant and when to use them
  • Context efficiency - Loading everything upfront wastes tokens on files the agent may not need
  • Natural flow - SKILL.md guides the agent through resources in a logical order

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.

Tools

skill

Load and activate an Agent Skill by name. Returns the full SKILL.md content.

Input:

{
  "name": "skill-name"
}

Output: Full SKILL.md content including frontmatter and instructions.

skill-resource

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

Prompts

Skills can be loaded via MCP Prompts for explicit user invocation.

/skill Prompt

Load a skill by name with auto-completion support.

Arguments:

  • name (string, required) - Skill name with auto-completion

The prompt description includes all available skills for discoverability. As you type the skill name, matching skills are suggested.

Per-Skill Prompts

Each discovered skill is also registered as its own prompt (e.g., /mcp-server-ts, /algorithmic-art).

  • No arguments needed - just select and invoke
  • Description shows the skill's own description
  • List updates dynamically as skills change

Example: If you have a skill named mcp-server-ts, you can invoke it directly as /mcp-server-ts.

Content Annotations

Prompt responses include MCP content annotations for proper handling:

  • audience: ["assistant"] - Content is intended for the LLM, not the user
  • priority: 1.0 - High priority content that should be included in context

Prompts return embedded resources with the skill's skill:// URI, allowing clients to track the content source.

Resources

Skills are also accessible via MCP Resources using skill:// URIs.

URI Patterns

URI Returns
skill://{name} Single skill's SKILL.md content
skill://{name}/ All files in skill directory (collection)

Individual file URIs (skill://{name}/{path}) are not listed as resources to reduce noise. Use the skill-resource tool to fetch specific files on demand.

Resource Subscriptions

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://mcp-server-ts" }
← {} (success)

Receive notifications when files change:

← notifications/resources/updated { uri: "skill://mcp-server-ts" }

Unsubscribe:

→ resources/unsubscribe { uri: "skill://mcp-server-ts" }
← {} (success)

How it works:

  1. Client subscribes to a skill:// URI
  2. Server resolves URI to file path(s) and starts watching with chokidar
  3. When files change, server debounces (100ms) and sends notification
  4. Client can re-read the resource to get updated content

Security

Skills 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:

  • Path traversal prevention (symlink-aware)
  • File size limits (1MB default, configurable via MAX_FILE_SIZE_MB env var)
  • Directory depth limits
  • Skill content is confined to configured directories

Not protected against:

  • Malicious content within trusted skill directories
  • Prompt injection via skill instructions (skills can influence LLM behavior by design)

Dynamic Skill Discovery

The server watches skill directories for changes. When SKILL.md files are added, modified, or removed:

  1. Skills are re-discovered from all configured directories
  2. The skill tool's description is updated with current skill names and metadata
  3. Per-skill prompts are added, removed, or updated accordingly
  4. tools/listChanged and prompts/listChanged notifications are sent to connected clients
  5. Clients that support these notifications will refresh tool and prompt definitions

Skill Metadata Format

The skill tool description 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>

This metadata is dynamically updated when skills change - clients supporting tools/listChanged will automatically refresh.

Skill Discovery

Skills are discovered at startup from the configured directories. For each directory, the server checks:

  • The directory itself for skill subdirectories
  • .claude/skills/ subdirectory
  • skills/ subdirectory

Each skill subdirectory must contain a SKILL.md file with YAML frontmatter including name and description fields.

Testing

# Build first
npm run build

# Test with MCP Inspector
npx @modelcontextprotocol/inspector@latest node dist/index.js /path/to/skills

Related

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选