使用说明
🚀 Skillz-自扩展MCP服务器
在运行时构建和执行自定义工具。让你的AI创建自己的工具。
🎯 为什么是斯基尔茨?
传统的MCP服务器有一套固定的工具。 Skillz让你的人工智能动态创建新工具。
❌ 传统MCP🔒 固定工具集 ⬆️ 部署并重新启动 ⏱️ 耗时的 |
✅ 斯基尔茨🔧 动态工具 ⚡ 瞬间 🚀 零停机 |
示例:“为我构建一个获取天气数据的工具”→ AI编写代码→ 工具立即可用。
没有部署。没有重新启动。问吧。
⚡ 安装
# Install WASM target (required for building tools)
rustup target add wasm32-wasip1
# Install Skillz from crates.io
cargo install skillz
⚠️ 重要:确保
~/.cargo/bin在您的PATH中,因此您的编辑器可以找到skillz可执行。
或者从源代码构建:
git clone https://github.com/Algiras/skillz.git
cd skillz/mcp-wasm-host
cargo install --path .
☕ 支持Skillz
如果您认为Skillz有用,请考虑支持其开发:
您的支持使新功能和改进成为可能!
🔧 编辑器配置
光标IDE
添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"skillz": {
"command": "skillz"
}
}
}
2.配置MCP客户端
将以下内容添加到MCP设置文件中(例如。, ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"skillz": {
"command": "/Users/YOUR_USERNAME/.cargo/bin/skillz"
}
}
}
[!提示] 如果你遇到
spawn skillz ENOENT错误,这意味着您的客户端找不到二进制文件。使用 绝对路径 (通常~/.cargo/bin/skillz)修复此问题!
备注:如果
skillz不在您的PATH中,请使用:~/.cargo/bin/skillz
HTTP服务器模式 (v0.4.0+)
将Skillz作为HTTP服务器运行以进行web集成:
# Start HTTP server on port 8080
skillz --transport http --port 8080
# Custom host binding
skillz --transport http --host 0.0.0.0 --port 3000
# Enable hot reload (watch tools directory for changes)
skillz --hot-reload
# HTTP server with hot reload
skillz --transport http --port 8080 --hot-reload
终点:
GET /sse-服务器发送事件流以进行实时更新POST /message-发送JSON-RPC消息
使用curl连接:
# Establish SSE connection
curl -N http://localhost:8080/sse -H 'Accept: text/event-stream'
# Send a message (in another terminal)
curl -X POST http://localhost:8080/message \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
🎯 特性
🌟 核心能力
| 特性 | 描述 |
|---|---|
| 🦀 WASM工具 | 编译Rust→ 运行时的WebAssembly |
| 📦 铁锈箱 | 将serde、regex、anyhow等添加到WASM工具中! |
| 📜 脚本工具 | Python、Node.js、Ruby、Bash或任何语言 |
| 🔌 MCP集成 | 导入外部stdio MCP服务器,在命名空间下公开工具 |
| 🏷️ 工具注释 | 客户端提示(只读、破坏性、幂等) |
| ⚡ 代码执行 | 通过代码编写多个工具(节省98%的代币!) |
| 📦 依赖项 | 每个工具自动安装pip/npm/cargo包 |
| 🐳 Docker服务 | 定义和管理Docker服务工具依赖于 |
| 💾 持久性 | 工具在服务器重启后仍然有效 |
| 🔒 沙盒 | 可选的气泡膜/防火墙/nsjail隔离 |
| 📂 可共享的 | 每个工具都有自己的manifest.json目录 |
| 📖 动态指南 | 内置 skillz://guide 资源自动更新 |
| 🌐 工具导入 | 从GitHub仓库或Gist导入工具 |
| ⛓️ 管道 | 以声明方式将工具链接在一起 |
| 🌍 HTTP传输 | 使用SSE作为HTTP服务器运行web应用程序 |
| 💬 引出 | 脚本可以通过MCP协议请求用户输入 |
| 🧠 记忆 | 支持TTL的持久键值存储 |
| 📦 资源 | 工具可以列出和读取服务器资源 |
| 🔐 秘密 | 转发 SKILLZ_* env变量到工具 |
| 🔗 工具/电话 | 工具可以调用其他已注册的工具 |
| 📡 流媒体 | 通过流块进行渐进式输出 |
| 📊 日志记录/进度 | 脚本可以发送日志和进度更新 |
| 🔥 热重新加载 | 监视工具目录,更改时自动重新加载 |
| 📦 版本控制 | 更新时自动备份,回滚到任何版本 |
| 🔔 订阅 | 订阅资源更新,收到更改通知 |
| 📋 列表已更改 | 热重载发出MCP列表更改通知 |
| 🎯 _元支持 | 从MCP请求转发的进度令牌 |
| ⛔ 取消 | 处理运行工具的取消请求 |
| 💡 内置提示 | 通过MCP协议创建工具的6个本地提示 |
| 🎭 渐进式披露 | 工具仅在技能激活时显示 |
| 📦 技能包 | 激活多种技能 @bundle-name |
| 🔗 技能依赖性 | 技能可以声明依赖关系,自动激活 |
| 🤖 LLM发现 | suggest_skill 使用抽样推荐技能 |
| 📚 Git技能库 | 从GitHub克隆技能仓库 add_skill_repo |
| 🎓 知识技能 | SKILL.md文件作为提示(兼容Claude Skills) |
📖 可用工具(15芯)
| 工具 | 说明 |
|---|---|
build_tool |
编译Rust代码→ WASM工具(具有机箱依赖关系) |
register_script |
使用deps注册脚本工具(Python、Node.js等) |
call_tool |
执行任何工具(WASM、脚本、管道或MCP) |
list_tools |
列出所有可用工具 |
delete_tool |
取下工具并清理干净 |
import_tool |
从Git仓库或GitHub Gists导入工具 |
import_mcp |
在命名空间下注册外部MCP服务器 |
execute_code |
运行组成多个工具的代码 |
pipeline |
创建、列出、删除管道工具(基于操作) |
memory |
工具的持久存储(存储、获取、列表、删除、统计) |
version |
列出版本,回滚到以前,查看版本信息 |
services |
为工具定义和管理Docker服务 |
activate_skill |
启用技能(或 @bundle)使其工具可见 |
deactivate_skill |
隐藏技能工具以减少噪音 |
suggest_skill |
LLM提供的技能建议 |
add_skill_repo |
从Git(GitHub等)克隆技能库 |
📚 技能库
从Git仓库导入技能(与Claude skills格式兼容):
# First, activate dev tools
activate_skill(name="dev")
# Import a skill repository
add_skill_repo(url="https://github.com/kepano/obsidian-skills")
# → "Added repo 'obsidian-skills' with 3 skills: obsidian-markdown, obsidian-bases, json-canvas"
# Import awesome-claude-skills (23+ skills!)
add_skill_repo(url="https://github.com/ComposioHQ/awesome-claude-skills", branch="master")
# → "Added repo 'awesome-claude-skills' with 23 skills: mcp-builder, webapp-testing, ..."
支持的仓库布局:
skills/skill-name/SKILL.md(卡帕诺/黑曜石技能风格)skill-name/SKILL.md根(ComposioHQ/令人敬畏的克劳德技能风格)
技能显示为提示 -使用 prompts/get(name="skill-name") 检索知识。
🎭 渐进式披露
工具被组织成可以激活/停用的技能:
# See what's available
suggest_skill(context="I want to build an MCP server")
# → "Suggested skills: dev, mcp-builder"
# Activate skills
activate_skill(name="dev") # Enable developer tools
activate_skill(name="@dev-full") # Enable bundle: dev + sys + memory
# Create a tool (it's hidden by default)
register_script(name="my-tool", code="...")
activate_skill(name="my-tool") # Now it's visible
# Hide when done
deactivate_skill(name="my-tool")
虚拟技能:
| 技能 | 工具 |
|---|---|
dev |
register_script, build_tool, import_mcp, add_skill_repo等等。 |
sys |
pipeline, services, call_tool_internal |
memory |
memory |
捆绑包 (~/.gemini/skills/bundles.json):
{
"@dev-full": ["dev", "sys", "memory"],
"@creators": ["dev"]
}
💡 快速示例
🔥 查看Skillz在行动
🦀 构建WASM工具(Rust)
build_tool(
name: "fibonacci",
description: "Generates Fibonacci numbers",
code: "fn main() {
let (mut a, mut b) = (0u64, 1);
for _ in 0..20 { print!(\"{} \", a); (a, b) = (b, a + b); }
}",
annotations: {"readOnlyHint": true}
)
🔌 导入外部MCP服务器
# Register a stdio MCP server - all its tools become available under a namespace
import_mcp(
name: "time",
command: "uvx",
args: ["mcp-server-time"],
description: "Time utilities from MCP server"
)
# Now use its tools with the namespace prefix
call_tool(tool_name: "time_get_current_time", arguments: {"timezone": "UTC"})
# Use MCP tools in pipelines!
pipeline(
action: "create",
name: "world_clock",
steps: [
{ name: "ny", tool: "time_get_current_time", args: { timezone: "America/New_York" } },
{ name: "london", tool: "time_get_current_time", args: { timezone: "Europe/London" } },
{ tool: "word_counter", args: { text: "NY: $ny.datetime, London: $london.datetime" } }
]
)
备注:只有 标准 支持MCP服务器(命令+参数)。HTTP/SSE服务器尚不受支持。
> **🤖 For LLMs & Advanced Users**
> See [docs/LLM_GUIDE.md](docs/LLM_GUIDE.md) for detailed technical specifications, JSON-RPC protocols, script templates, and advanced usage examples.
---
## 🔧 Environment Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `TOOLS_DIR` | Where tools are stored | `~/.skillz/tools` |
| `SKILLZ_ROOTS` | Workspace roots (colon-separated) | `/home/user/project:/data` |
| `SKILLZ_SANDBOX` | Sandbox mode | `bubblewrap`, `firejail`, `nsjail` |
| `SKILLZ_SANDBOX_NETWORK` | Allow network in sandbox | `1` |
| `SKILLZ_*` | **Forwarded to tools** (for secrets) | `SKILLZ_OPENAI_KEY=sk-...` |
**Root Priority:** MCP client roots > `SKILLZ_ROOTS` env > cwd
### 🔐 Secrets via Environment Variables
All `SKILLZ_*` prefixed env vars are forwarded to script tools:
```bash
# Set secrets in your shell
export SKILLZ_OPENAI_KEY="sk-..."
export SKILLZ_API_TOKEN="your-secret"
export SKILLZ_DEBUG="1"
通过以下方式访问工具 context.environment:
env = request["params"]["context"]["environment"]
api_key = env.get("SKILLZ_OPENAI_KEY")
注: 仅
SKILLZ_*var被转发。其他环境变量不会暴露给安全工具。
🐳 Docker服务
工具可以声明对Docker服务(数据库、缓存等)的依赖关系。当工具运行时,Skillz会检查所需的服务是否正在运行,并注入连接环境变量。
定义服务
services(
action: "define",
name: "postgres",
image: "postgres:15",
ports: ["5432"],
env: {"POSTGRES_PASSWORD": "dev"},
volumes: ["data:/var/lib/postgresql/data"],
healthcheck: {
cmd: "pg_isready -U postgres",
interval: "2s",
retries: 15
}
)
管理服务
# List all defined services
services(action: "list")
# Start a service
services(action: "start", name: "postgres")
# Check status (running, ports, health)
services(action: "status", name: "postgres")
# View logs
services(action: "logs", name: "postgres", tail: 100)
# Stop/remove services
services(action: "stop", name: "postgres")
services(action: "remove", name: "postgres")
# Cleanup unused services
services(action: "prune")
具有服务依赖关系的工具
注册需要服务的工具:
register_script(
name: "user_manager",
description: "Manage users in PostgreSQL",
interpreter: "python3",
requires_services: ["postgres"], # Tool requires postgres to be running
dependencies: ["psycopg2-binary"],
code: """
import json, sys, os
import psycopg2
request = json.loads(sys.stdin.readline())
args = request["params"]["arguments"]
# Connection details injected by Skillz
conn = psycopg2.connect(
host=os.environ["POSTGRES_HOST"], # Auto-injected
port=os.environ["POSTGRES_PORT"], # Auto-injected
user="postgres",
password="dev",
dbname="postgres"
)
# ... your code
"""
)
通话时 user_managerSkillz将:
- 检查是否
postgres服务正在运行 - 如果未运行,请使用fix命令返回一个有用的错误
- 如果正在运行,请注射
POSTGRES_HOST和POSTGRES_PORT环境变量
卷类型
| 类型 | 语法 | 描述 |
|---|---|---|
| 命名 | data:/path |
Docker管理的卷,前缀为 skillz_ |
| 绑定 | /host/path:/container/path |
将主机目录装载到容器中 |
🔒 安全
平台支持
🛡️ 沙盒模式(仅限Linux)
通过环境变量启用沙盒:
| Sandbox | Security Level | Features |
|---|---|---|
| 🟢 bubblewrap | Medium | Namespace isolation |
| 🟡 firejail | High | seccomp + namespaces |
| 🔴 nsjail | Very High | Most restrictive |
配置:
# Bubblewrap (namespace isolation)
export SKILLZ_SANDBOX=bubblewrap
# Firejail (seccomp + namespaces)
export SKILLZ_SANDBOX=firejail
# nsjail (most restrictive)
export SKILLZ_SANDBOX=nsjail
# Allow network in sandbox
export SKILLZ_SANDBOX_NETWORK=1
📖 看 安全.md 了解全部细节。
🛠️ 发展
git clone https://github.com/Algiras/skillz.git
cd skillz
cargo build --release
cargo test
🤝 贡献
看 贡献.md 作为指导方针。
📄 许可证
MIT许可证-请参阅 许可证
🔗 链接
| 资源 | 链接 |
|---|---|
| 📦 板条箱.io | crates.io/crates/skillz |
| 📖 文档 | 阿尔及尔.伊苏布.io/killz |
| 💻 GitHub | github/Algiras/skillz |
| 📋 MCP规范 | 模型上下文协议.io |
建于❤️ 用于人工智能驱动的开发
