MCP技能服务器
用于发现、管理和访问的MCP(模型上下文协议)服务器 Skills 它们类似于 拟人克劳德代码技能.
虽然拥有文件系统方面的技能对Claude Code来说既方便又有效,但并非所有编码代理都支持这种方法。此外,Claude Code需要特定的命名约定和文件结构来发现技能。虽然文件夹名称和结构可以为代理找到它们留下面包屑,但这是有限的。
此MCP服务器提供了一个灵活的环境,可以按需提供技能。启动时,它会发现技能文件(配置目录中的所有markdown文件),读取它们的YAML frontmatter,并将它们索引到向量数据库中。这允许通过可用技能进行语义搜索,允许代理使用自然语言进行查询。
可用工具:
search_skills-按含义和关键字对技能进行语义搜索get_skill-加载完整技能内容list_skills-列出所有可用技能create_skill-在可写位置创建新技能update_skill-更新现有技能
特征:
- 减少所需的上下文窗口 -通过按需提供所需的技能,它可以有效地减少操作所需的上下文窗口
- 灵活的路径配置 -任意数量的具有自定义昵称的技能目录
- 只读或可写路径 -控制代理创建/修改技能的位置
- 嵌套技能组织 -在子目录中组织技能
- 语义搜索 -可选的基于嵌入的智能发现
- CRUD操作 -通过MCP工具创建、阅读和更新技能
- 元数据丰富 -标签、类别和关键字,以便更好地组织
安装
先决条件
- Python 3.8+
- 点
来自GitHub
pip install git+https://github.com/yamsergey/yamsergey.mcp.skills.git但你很可能不得不使用 pipx 为了解决操作系统的安全问题:
pipx install git+https://github.com/yamsergey/yamsergey.mcp.skills.git来源(发展)
git clone https://github.com/yamsergey/yamsergey.mcp.skills.git
cd yamsergey.mcp.skills
pip install -e .配置
技能只能从明确配置的路径中发现。不应用默认值。
快速入门:JSON配置
创建一个 skills-config.json:
{
"skills_paths": [
{
"nickname": "project",
"path": "./.claude/skills",
"readonly": false
},
{
"nickname": "shared",
"path": "~/shared-skills",
"readonly": true
}
]
}运行服务器:
mcp-skills --config skills-config.json代理商的位置昵称
在创建技能时,代理可以通过他们的 昵称例如:
- 用户提示:“为共享项目创建安全审计技能”
- 代理人理解:“共享”是一个已知的位置,用于确定在哪里创建技能
这允许代理直接推断或询问用户使用哪个位置来学习新技能。
快速入门:CLI参数
mcp-skills --skills-path ./.claude/skills --skills-path ~/shared-skills自定义搜索描述
默认情况下 search_skills 该工具使用以下内容的全面描述 search_skills_description.md 指导AI代理如何有效地使用该工具。
要提供自定义描述,请执行以下操作:
mcp-skills --config skills-config.json --search-tool-description "Your custom description"或者指向自定义描述文件:
mcp-skills --config skills-config.json --search-tool-description /path/to/custom-description.md编码代理配置
只需将其配置为您常用的MCP服务器:
{
"mcpServers": {
"mcp-skills": {
"command": "mcp-skills",
"args": [
"--config",
"~/.mcp-skills-config.json"
]
}
}
}技能路径配置
每个技能路径都有以下属性:
| 属性 | 类型 | 描述 | ||
|---|---|---|---|---|
nickname | string | 路径标识符(创建技能时使用) | ||
path | string | 文件系统目录 .md 技能档案 | ||
readonly | boolean | 如果 true技能只能被阅读;如果 false,代理可以创建/修改技能 | ||
pattern | string(可选) | Regexp模式,以包括技能文件(例如。, "^security_.*" 或 `"^security_.*\ | ^audit_.*" 对于多个类别)。使用标准正则表达式 \ | ` 用于交替 |
exclude_pattern | string(可选) | Regexp模式,用于排除技能文件(例如。, ".*_deprecated$" 或 `".*_deprecated$\ | .*_experimental$").使用标准正则表达式 \ | ` 用于交替 |
模式过滤示例
示例1:单一夹杂物模式
按名称前缀筛选技能:
{
"skills_paths": [
{
"nickname": "security",
"path": "./skills/all-skills",
"readonly": true,
"pattern": "^security_.*"
}
]
}示例2:多种包含模式
使用模式交替包含多个类别:
{
"skills_paths": [
{
"nickname": "compliance",
"path": "./skills/all-skills",
"readonly": true,
"pattern": "^security_.*|^audit_.*|^compliance_.*"
}
]
}示例3:排除已弃用和实验性技能
使用排除模式过滤掉不需要的技能:
{
"skills_paths": [
{
"nickname": "project",
"path": "./.claude/skills",
"readonly": false,
"exclude_pattern": ".*_deprecated$|.*_experimental$"
}
]
}示例4:包括+排除(白名单和黑名单)
结合多种包含和排除模式进行细粒度控制:
{
"skills_paths": [
{
"nickname": "production",
"path": "./shared-skills",
"readonly": true,
"pattern": "^prod_.*|^stable_.*",
"exclude_pattern": ".*_testing$|.*_deprecated$"
}
]
}此配置仅发现与至少一个包含模式匹配但不与任何排除模式匹配的技能,从而能够从较大的共享目录中选择性地加载技能。
技能格式
技能是使用YAML frontmatter的Markdown文件:
---
description: Brief description of the skill
tags: ["category", "tag"]
category: "main-category"
---
# Skill Name
Skill content in Markdown format...
## Features
- Feature 1
- Feature 2必修的: description 在前线 可选: tags, category, keywords, use_case
发展
运行测试
pytest
pytest --cov=mcp_skills项目结构
mcp_skills/
├── __init__.py
├── server.py # MCP server implementation
├── skill_manager.py # Skill discovery and management
├── security.py # Path validation and security
└── embeddings.py # Semantic search (optional)API 参考
技能管理器(Python)
from mcp_skills.skill_manager import SkillManager, SkillPath
manager = SkillManager(
skills_paths=[
SkillPath(nickname="project", path="./.claude/skills", readonly=False),
SkillPath(
nickname="compliance",
path="~/shared-skills",
readonly=True,
pattern="^security_.*|^audit_.*|^compliance_.*"
),
SkillPath(
nickname="production",
path="~/shared-skills",
readonly=True,
pattern="^prod_.*|^stable_.*",
exclude_pattern=".*_testing$|.*_deprecated$"
),
]
)
# List all skills
skills = manager.list_skills()
# Get a specific skill
content = manager.read_skill("skill-name")
# Create a new skill (only in writable locations)
manager.create_skill(
skill_name="category/my-skill",
description="Description",
content="# Markdown content",
location="project"
)
# Update a skill
manager.update_skill(
skill_name="skill-name",
description="New description",
content="Updated content"
)
# Search skills
results = manager.search_skills(
query="security audit",
limit=10,
tags=["security"],
location="compliance"
)许可证
麻省理工学院
贡献
欢迎投稿!请确保测试通过:
pytest --cov=mcp_skills