这是一个基于模型上下文协议(MCP)的服务器,使 Claude 能够管理存储在 ~/.skill-mcp/skills 中的技能。该系统允许 Claude 编程地创建、编辑、运行和管理技能,包括带有环境变量的技能脚本执行。
状态: ✅ 生产就绪 测试覆盖率: 86% (145/145 测试通过) 部署日期: 2025年10月18日 架构: 统一的CRUD架构,由22个模块组成的Python包
TL;DR: 编写Python代码,统一多个技能在一个执行中 - 遵循Anthropic的MCP模式,使代理效率提高98.7%。
该项目主要由两个部分组成:
src/skill_mcp/server.py) - 提供5个统一的CRUD工具用于技能管理的Python包~/.skill-mcp/skills/) - 存储和管理你的技能的地方构建一次,随处组合 - 执行Python代码,无缝结合多个技能在一个运行中:
# 一个执行,多个技能统一!
# 从计算器、数据处理器和天气技能导入
from math_utils import calculate_average # 计算器技能
from json_fetcher import fetch_json # 数据处理器技能
from weather_api import get_forecast # 天气技能
# 获取天气数据
weather = fetch_json('https://api.weather.com/cities')
# 使用计算器工具计算平均值
temps = [city['temp'] for city in weather['cities']]
avg_temp = calculate_average(temps)
# 获取详细预报
forecast = get_forecast('London')
print(f"平均温度: {avg_temp}°F")
print(f"伦敦预报: {forecast}")
为什么这很强大:
效率提升:
这与Anthropic的研究一致,显示编写代码调用工具比对每个操作进行直接工具调用,代理扩展得更好。
与Claude界面不同,这个系统使用的是模型上下文协议(MCP),它具有以下特点:
你的技能可以运行在:
不再需要手动复制、压缩和上传文件:
❌ 旧方法:手动过程
1. 在本地创建技能文件
2. 压缩技能文件夹
3. 上传到Claude界面
4. 等待处理
5. 无法轻松修改或版本化
✅ 新方法:LLM程序化管理
1. 告诉Claude:“创建一个新的名为'data-processor'的技能”
2. Claude创建技能目录和SKILL.md
3. 告诉Claude:“添加一个处理CSV的Python脚本”
4. Claude创建并测试脚本
5. 告诉Claude:“为此技能设置API密钥”
6. Claude更新.env文件
7. 告诉Claude:“使用这些数据运行脚本”
8. Claude执行并展示结果 - 全部即时完成!
关键好处:
~/.skill-mcp/
└── skills/ # 你的技能目录
├── example-skill/
│ ├── SKILL.md # 必需:技能定义
│ ├── .env # 可选:特定技能的环境变量
│ ├── scripts/ # 可选:可执行脚本
│ ├── references/ # 可选:文档
│ └── assets/ # 可选:模板、文件
└── another-skill/
├── SKILL.md
└── .env
注意: MCP服务器通过PyPI上的uvx安装,并自动运行。不需要本地服务器文件!
此项目使用uv进行快速可靠的Python包管理。
# 安装uv(包括uvx)
curl -LsSf https://astral.sh/uv/install.sh | sh
将MCP服务器添加到你的配置中。服务器将通过uvx从PyPI自动下载和运行。
Claude桌面版 - 编辑配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonCursor - 编辑配置文件:
~/.cursor/mcp.json%USERPROFILE%\.cursor\mcp.json~/.cursor/mcp.json{
"mcpServers": {
"skill-mcp": {
"command": "uvx",
"args": [
"--from",
"skill-mcp",
"skill-mcp-server"
]
}
}
}
就这样!无需安装 - uvx将自动下载并运行PyPI上的最新版本。
重启Claude桌面版或Cursor以加载MCP服务器。
在新对话中:
列出所有可用技能
Claude应该使用skill-mcp工具来显示~/.skill-mcp/skills/中的技能。
在此仓库中开发:
uv sync # 安装/更新依赖项
uv run python script.py # 使用项目环境运行Python
uv add package-name # 添加新的依赖项
uv pip list # 显示已安装的包
uv run pytest tests/ -v # 运行测试
注意: uv会自动创建和管理.venv/ - 不需要手动创建虚拟环境!
✅ run_skill_script 和 execute_python_code 都支持PEP 723!
Python脚本和代码可以使用uv的内联元数据声明其依赖项。服务器会自动检测这一点,并使用uv run来处理依赖项:
#!/usr/bin/env python3
# /// script
# dependencies = [
# "requests>=2.31.0",
# "pandas>=2.0.0",
# ]
# ///
import requests
import pandas as pd
# 你的脚本代码 - 依赖项会自动安装!
response = requests.get("https://api.example.com/data")
df = pd.DataFrame(response.json())
print(df.head())
优点:
run_skill_script 和 execute_python_code 都自动工作execute_python_code 也会从技能导入中聚合依赖项!如何与 run_skill_script 一起工作:
run_skill_script 运行时,服务器会检测元数据pip install 或虚拟环境管理!如何与 execute_python_code 一起工作:
示例: 查看 example-skill/scripts/fetch_data.py 的实际示例。
本地测试:
# 带有依赖项的脚本只需工作!
uv run example-skill/scripts/fetch_data.py
execute_python_code 工具允许你运行Python代码,在一个执行中结合多个技能。这非常适合:
Anthropic研究的关键见解: 通过编写代码调用工具,代理扩展得更好,而不是对每个操作进行直接工具调用。这种方法最多可以减少98.7%的上下文使用,并启用更有效的流程。
# 带有依赖项的简单内联执行
# /// script
# dependencies = [
# "requests>=2.31.0",
# ]
# ///
import requests
response = requests.get("https://api.example.com/data")
print(response.json())
组合的力量 - 创建一次实用技能,并以无数种方式组合它们:
现实世界示例: 通过统一计算器、数据处理器和CRM技能来处理销售数据:
步骤1: 创建一个具有可重用模块的计算器技能
# calculator:math_utils.py
def add(a, b):
return a + b
def multiply(a, b):
return a * b
步骤2: 创建数据处理器技能工具
# data-processor:csv_parser.py
# /// script
# dependencies = ["pandas>=2.0.0"]
# ///
import pandas as pd
def parse_csv_url(url):
return pd.read_csv(url)
def filter_by_status(df, status):
return df[df['status'] == status]
步骤3: 在一次执行中统一两个技能!
# 使用skill_references: ["calculator:math_utils.py", "data-processor:csv_parser.py"]执行
from math_utils import calculate_average
from csv_parser import parse_csv_url, filter_by_status
# 获取销售数据
sales_df = parse_csv_url('https://example.com/sales.csv')
# 过滤活跃交易
active_deals = filter_by_status(sales_df, 'active')
# 使用计算器技能计算平均交易规模
deal_values = active_deals['amount'].tolist()
avg_deal = calculate_average(deal_values)
print(f"活跃交易: {len(active_deals)}")
print(f"平均交易规模: ${avg_deal:,.2f}")
发生了什么:
当你从具有PEP 723依赖项的技能模块导入时,它们会被自动包含:
具有依赖项的库技能:
# data-processor:json_fetcher.py
# /// script
# dependencies = ["requests>=2.31.0"]
# ///
import requests
def fetch_json(url):
return requests.get(url).json()
你的代码 - 无需重新声明requests!
# 使用skill_references: ["data-processor:json_fetcher.py"]执行
from json_fetcher import fetch_json
data = fetch_json('https://api.example.com')
print(data)
# 来自json_fetcher.py的依赖项自动聚合!
当你从技能导入时,它的环境变量会自动加载:
具有API凭证的技能:
# weather-skill/.env
API_KEY=your-secret-api-key
API_URL=https://api.weatherapi.com
你的代码 - 环境变量自动可用:
# 使用skill_references: ["weather-skill:api_client.py"]执行
from api_client import fetch_weather
# api_client.py可以从其.env文件访问API_KEY和API_URL
data = fetch_weather('London')
print(data)
优点: