关于 MCP Skills Server
MCP Skills Server 从目录加载按文件夹组织的技能,面向需要通过 MCP 提供技能内容的 Agent。它支持文件变更后热重载,并提供搜索、目录和技能信息查询。
主要功能
- 01自动发现目录中的技能
- 02SKILL.md 变更后热重载
- 03验证技能文件夹结构
- 04按条件搜索技能
- 05提供技能目录与元数据
适用场景
- 01维护可动态更新的技能集合
- 02按类别或标签查找技能
- 03让 MCP 客户端读取技能内容
MCP 相关
作为 MCP 服务,它向客户端提供技能目录和单项技能资源,并提供搜索、重载、查询元数据及列出文件夹的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e MCP_SKILLS_DIR -e MCP_SKILLS_HOT_RELOAD -e MCP_SKILLS_LOG_LEVEL docker.io/srprasanna/mcp-skill-hub:1.0.0MCP_SKILLS_DIRRoot directory containing skill foldersMCP_SKILLS_HOT_RELOADEnable automatic reloading when SKILL.md files changeMCP_SKILLS_LOG_LEVELLogging verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Skills Server
一款可用于生产环境的 Model Context Protocol (MCP) 服务,可从挂载卷动态加载并公开技能,并支持热重载。
📦 现已发布于 MCP Registry——只需一条命令即可安装!
功能
- 动态加载技能:自动发现并从目录加载技能
- 热重载:检测
SKILL.md文件的更改,并在无需重启的情况下重新加载 - 文件夹结构验证:强制遵循最佳实践,并提供清晰的错误消息
- 符合 MCP 协议:完整实现资源和工具
- 可用于生产环境:具备全面的错误处理、日志记录和验证
- 支持 Docker:可通过挂载卷在容器中运行
- 类型安全:使用 Python 3.13 特性提供完整类型提示
- 测试完善:代码覆盖率超过 80%,并配有全面的测试套件
目录
技能目录结构
重要要求:每个技能都必须放在技能目录中专属的文件夹内。服务只会识别符合此结构的技能。
✅ 有效结构
your-skills-directory/
├── skill-one/
│ └── SKILL.md ← Required
├── skill-two/
│ ├── SKILL.md ← Required
│ └── examples/ ← Optional
│ └── example.py
└── skill-three/
├── SKILL.md
├── examples/
│ └── demo.py
└── templates/
└── template.txt
❌ 无效结构(将被忽略)
your-skills-directory/
├── SKILL.md ❌ Not in a folder - WILL BE SKIPPED
├── random-file.txt ❌ Not a skill folder
├── .hidden-folder/ ❌ Hidden folder - WILL BE SKIPPED
│ └── SKILL.md
└── __pycache__/ ❌ System folder - WILL BE SKIPPED
└── SKILL.md
文件夹命名约定
有效的文件夹名称:
- 小写字母并使用连字符:
my-skill-name - 小写字母并使用下划线:
excel_advanced - 字母数字组合:
skill-name-v2
无效(将被跳过):
- 以
.开头的隐藏文件夹 - 以
_开头的私有文件夹 - 系统文件夹:
__pycache__、node_modules、.git等
快速开始
使用 Docker(推荐)
- 创建技能目录:
mkdir -p ~/claude-skills/my-first-skill
- 创建技能文件:
cat > ~/claude-skills/my-first-skill/SKILL.md << 'EOF'
---
name: "my-first-skill"
description: "My first Claude skill"
---
# My First Skill
This is my first skill for Claude!
## Usage
Simply describe what your skill does here.
EOF
- 运行服务:
docker run -i --rm \
-v ~/claude-skills:/skills:ro \
mcp-skill-hub
使用 Poetry(开发)
- 克隆并安装:
git clone https://github.com/srprasanna/mcp-skill-hub.git
cd mcp-skill-hub
poetry install
- 创建技能目录:
mkdir -p ~/claude-skills/my-first-skill
# Create SKILL.md as shown above
- 运行服务:
export MCP_SKILLS_DIR=~/claude-skills
poetry run mcp-skills
安装
前置条件
- Python 3.13+(用于开发)
- Poetry 1.7+(用于依赖管理)
- Docker(可选,用于容器化部署)
使用 Poetry 安装
# Clone the repository
git clone https://github.com/srprasanna/mcp-skill-hub.git
cd mcp-skill-hub
# Install dependencies
poetry install
# Verify installation
poetry run mcp-skills --help
构建 Docker 镜像
# Build the image
docker build -t mcp-skill-hub .
# Or use docker-compose
docker-compose build
使用方法
在本地运行
# Set the skills directory
export MCP_SKILLS_DIR=/path/to/your/skills
# Run the server
poetry run mcp-skills
使用 Docker 运行
docker run -i --rm \
-v /path/to/your/skills:/skills:ro \
-e MCP_SKILLS_LOG_LEVEL=INFO \
mcp-skill-hub
使用 Docker Compose 运行
# Edit docker-compose.yml to set your skills directory path
docker-compose up mcp-skills
与 Claude Desktop 集成
将以下内容添加到 Claude Desktop 配置(claude_desktop_config.json)中:
{
"mcpServers": {
"skills": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"${HOME}/claude-skills:/skills:ro",
"mcp-skill-hub"
]
}
}
}
或者使用 Poetry:
{
"mcpServers": {
"skills": {
"command": "poetry",
"args": ["run", "mcp-skills"],
"cwd": "/path/to/mcp-skill-hub",
"env": {
"MCP_SKILLS_DIR": "/path/to/your/skills"
}
}
}
}
**重要提示:**请确保 ${HOME}/claude-skills 目录中包含技能文件夹,而不是散放的 SKILL.md 文件!
配置
通过前缀为 MCP_SKILLS_ 的环境变量进行配置:
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_SKILLS_DIR | /skills | 包含技能文件夹的根目录 |
MCP_SKILLS_HOT_RELOAD | true | 启用自动重新加载 |
MCP_SKILLS_DEBOUNCE_DELAY | 0.5 | 重新加载前的延迟时间(秒) |
MCP_SKILLS_LOG_LEVEL | INFO | 日志级别(DEBUG、INFO、WARNING、ERROR) |
MCP_SKILLS_SCAN_DEPTH | 1 | 扫描深度(始终为 1) |
.env 文件示例
MCP_SKILLS_DIR=/path/to/skills
MCP_SKILLS_HOT_RELOAD=true
MCP_SKILLS_DEBOUNCE_DELAY=0.5
MCP_SKILLS_LOG_LEVEL=INFO
技能文件格式
技能定义在带有 YAML frontmatter 的 SKILL.md 文件中:
最简示例
---
name: "my-skill"
description: "Brief description"
---
# My Skill
Your skill content here in Markdown.
完整示例
---
# Required fields
name: "excel-advanced"
description: "Advanced Excel automation techniques"
# Version and authorship
version: "1.2.0"
author: "Your Name"
created: "2025-01-15"
updated: "2025-10-23"
# Dependencies
dependencies:
python: ["openpyxl>=3.0.0", "pandas>=2.0.0"]
system: ["libreoffice"]
# Categorization
category: "office-automation"
tags: ["excel", "spreadsheet", "automation"]
complexity: "intermediate" # beginner|intermediate|advanced
# Usage guidance
when_to_use:
- "Automating Excel report generation"
- "Processing multiple Excel files"
- "Creating complex formulas programmatically"
# Relationships
related_skills: ["csv-processing", "data-analysis"]
# Examples
has_examples: true
example_files: ["examples/report_generator.py", "templates/report_template.xlsx"]
---
# Excel Advanced Automation
This skill covers advanced Excel automation techniques...
## Features
- Automated report generation
- Formula creation
- Bulk processing
## Examples
See `examples/report_generator.py` for a working example.
可用的元数据字段
必填:
name:唯一标识符(建议使用 kebab-case)description:简短描述
可选:
version:语义化版本author:创建者名称created、updated:ISO 日期(YYYY-MM-DD)dependencies:Python 包或系统工具category:用于分组的主要类别tags:用于搜索的标签数组complexity:初级、中级或高级when_to_use:使用场景数组related_skills:相关技能的名称has_examples:布尔标志example_files:示例文件路径(相对于技能文件夹)
MCP 资源和工具
资源
此服务公开以下 MCP 资源:
skill://catalog- 包含所有技能元数据的 JSON 目录skill://{name}- 单个技能的 Markdown 内容
工具
提供四个用于与技能交互的工具:
1. search_skills
按查询词、类别、标签或复杂度搜索技能。
{
"query": "excel",
"category": "office-automation",
"tag": "automation",
"complexity": "intermediate"
}
2. reload_skills
手动触发从目录重新加载所有技能。
{}
3. get_skill_info
获取特定技能的元数据,而不加载完整内容。
{
"name": "excel-advanced"
}
4. list_skill_folders
列出在技能目录中找到的所有有效技能文件夹。
{}
开发
设置开发环境
# Clone repository
git clone https://github.com/srprasanna/mcp-skill-hub.git
cd mcp-skill-hub
# Install dependencies (including dev dependencies)
poetry install
# Activate virtual environment
poetry shell
运行测试
# Run all tests
poetry run pytest
# Run with coverage
poetry run pytest --cov=mcp_skills --cov-report=html
# Run specific test file
poetry run pytest tests/test_scanner.py
# Run with verbose output
poetry run pytest -v
代码质量
# Format code
poetry run black .
# Lint code
poetry run ruff check .
# Type checking
poetry run mypy src
# Run all quality checks
poetry run black . && poetry run ruff check . && poetry run mypy src
开发工作流
-
创建分支:
git checkout -b feature/my-feature -
进行更改并测试:
poetry run pytest poetry run mypy src -
格式化并检查代码:
poetry run black . poetry run ruff check . -
提交并推送:
git commit -m "Add feature: description" git push origin feature/my-feature
项目结构
mcp-skill-hub/
├── src/mcp_skills/ # Source code
│ ├── models/ # Data models
│ ├── parsers/ # Skill parsers
│ ├── storage/ # Repository pattern
│ ├── scanner.py # Directory scanning
│ ├── watcher.py # Hot-reload watcher
│ ├── server.py # MCP server
│ ├── config.py # Configuration
│ └── __main__.py # CLI entry point
├── tests/ # Test suite
├── examples/ # Example skills
├── docs/ # Documentation
└── pyproject.toml # Poetry configuration
故障排除
常见问题
技能未加载
问题: 服务启动时没有加载任何技能。
解决方案:
- 检查技能是否位于专用文件夹中:
/skills/my-skill/SKILL.md ✓ /skills/SKILL.md ✗ - 确认文件夹名称不以
.或_开头 - 查看日志以获取详细错误信息
热重载不起作用
问题: 未检测到对 SKILL.md 文件的更改。
解决方案:
- 确保
MCP_SKILLS_HOT_RELOAD=true - 检查文件名是否恰好为
SKILL.md - 确认文件位于有效的技能文件夹中
- 查看日志中是否有文件监视器错误
解析错误
问题: SKILL.md 文件解析失败。
解决方案:
- 验证 YAML frontmatter 语法
- 确保 frontmatter 位于
---分隔符之间 - 检查是否包含必填字段(
name、description) - 使用 YAML 验证器检查语法
验证命令
检查技能目录结构:
poetry run mcp-skills --validate
预期输出:
✓ /skills/excel-advanced: Valid skill
✓ /skills/python-automation: Valid skill
✗ /skills/SKILL.md: Error - Skills must be in folders
✗ /skills/.hidden: Skipped - Hidden folder
⚠ /skills/empty-folder: Warning - No SKILL.md found
Summary: 2 valid, 1 error, 1 warning, 1 skipped
日志记录
启用调试日志以获取详细信息:
export MCP_SKILLS_LOG_LEVEL=DEBUG
poetry run mcp-skills
日志包括:
- 文件夹结构验证消息
- 扫描进度和结果
- 解析成功与失败信息
- 热重载事件
- 详细错误上下文
贡献
欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。
快速贡献指南
- Fork 此仓库
- 创建功能分支
- 编写更改并添加测试
- 确保所有测试通过且代码格式正确
- 提交拉取请求
代码规范
- Python 3.13+,使用类型提示
- 使用 Black 格式化(行长 88 个字符)
- 使用 Ruff 检查代码
- 使用 Mypy 进行类型检查(严格模式)
- 使用 Pytest 进行测试(覆盖率 >80%)
发布
此项目通过 GitHub Actions 自动发布。
创建发布版本
- 前往 Actions → Release 工作流
- 点击 Run workflow
- 选择版本升级类型:
patch- Bug 修复(0.1.0 → 0.1.1)minor- 新功能(0.1.0 → 0.2.0)major- 不兼容变更(0.1.0 → 1.0.0)- 或指定确切版本(例如,
1.2.3)
- 选择 Docker 镜像仓库(
docker.io或ghcr.io) - 点击 Run workflow
工作流将:
- ✅ 更新
pyproject.toml中的版本号 - ✅ 创建 Git 标签和 GitHub 发布版本
- ✅ 构建并推送 Docker 镜像
- ✅ 运行测试以验证发布版本
Docker 镜像:
- Docker Hub:
{username}/mcp-skill-hub:{version} - GitHub:
ghcr.io/{owner}/mcp-skill-hub:{version}
详细的发布文档请参阅 RELEASING.md。
许可证
此项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
致谢
- 基于 MCP Python SDK 构建
- 灵感来自 Claude 对动态技能管理的需求
- 感谢所有贡献者!
注意: 此服务通过以下方式确保文件夹结构要求不会产生误解:
- 提供包含文件夹上下文的清晰错误消息
- 完善的日志记录
- 多层级验证
- 详细文档
- 可运行的示例
每项技能都必须放在自己的文件夹中。这一设计决策确保了组织清晰、管理便捷且结构明确。🎯
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。