MCP转Pi工具转换器

一款将MCP服务器工具转换为Pi原生扩展的工具,支持自动分组、TypeBox模式验证和零配置。

  • by nicobailon
  • JavaScript
  • 本地部署
  • 17 星标
  • 更新于
在 GitHub 查看 nicobailon/mcp-to-pi-tools

使用说明

mcp到pi工具

一个命令可以将任何MCP服务器转换为本机pi工具——具有自动分组、TypeBox模式和零配置。

npx mcp-to-pi-tools chrome-devtools-mcp

快速开始

# Generate a pi extension from any MCP server
npx mcp-to-pi-tools chrome-devtools-mcp

# Python packages work too
npx mcp-to-pi-tools mcp-server-time --uvx

# List installed extensions
npx mcp-to-pi-tools list

扩展名由pi自动发现 ~/.pi/agent/extensions/--无需注册。

它的作用

  1. 发现 MCP工具通过 麦克波特
  2. 群组 使用AI的相关工具(例如,单击+悬停+拖动→ chrome_interact)
  3. 产生 TypeScript的pi扩展名:
    • pi.registerTool() 对于每个分组工具
    • 用于参数验证的TypeBox模式
    • 多工具组的动作判别器
  4. 写 到 ~/.pi/agent/extensions/<name>/

生成的扩展结构

~/.pi/agent/extensions/chrome-devtools/
├── index.ts          # Pi extension with registerTool() calls
├── package.json      # Manifest with MCP source info
└── README.md         # Tool documentation

生成工具示例

// Grouped tool: chrome_interact (wraps: click, hover, drag)
pi.registerTool({
  name: "chrome_interact",
  label: "Chrome Interact",
  description: "Mouse interactions on page elements",
  parameters: Type.Object({
    action: StringEnum(["click", "hover", "drag"] as const),
    uid: Type.String({ description: "Element UID from snapshot" }),
    doubleClick: Type.Optional(Type.Boolean()),
  }),
  async execute(toolCallId, params, onUpdate, ctx, signal) {
    const result = callMcp(params.action, { uid: params.uid, ... });
    return { content: [{ type: "text", text: result }], details: {} };
  },
});

用法

生成扩展

# NPM packages
mcp2ext chrome-devtools-mcp
mcp2ext @upstash/context7-mcp

# Python packages
mcp2ext mcp-server-fetch --uvx
mcp2ext mcp-server-time --pip

# Custom command
mcp2ext --command "docker run -i mcp/fetch" --name fetch

管理插件

# List installed extensions
mcp2ext list

# Remove an extension
mcp2ext remove chrome-devtools

# Regenerate from latest MCP schema (coming soon)
mcp2ext refresh chrome-devtools

选项

--name <name>        Extension directory name (default: derived from package)
--output <path>      Output path (default: ~/.pi/agent/extensions/<name>)
--dry-run            Preview generated files without writing
--force, -f          Overwrite existing extension
--quiet, -q          Suppress progress output
--agent <name>       Force AI agent for grouping (pi, claude, codex)
--http-url <url>     Connect to HTTP/HTTPS MCP endpoint (requires --name, --description)
--description <text> Description for extension (required for HTTP servers)
--allow-http         Allow non-localhost HTTP URLs

Python/Runner选项

--uvx                Use uvx runner (Python packages, no install needed)
--pip                Use pip runner (requires: pip install <package>)
--command <cmd>      Use explicit command (docker, custom paths, etc.)

HTTP服务器

对于公开HTTP端点的MCP服务器(如Figma MCP桌面服务器):

# Local HTTP endpoint (localhost auto-allowed)
mcp2ext --http-url http://127.0.0.1:3845/mcp --name figma --description "Figma design tools"

# HTTPS endpoints
mcp2ext --http-url https://api.example.com/mcp --name api --description "API tools"

# Non-localhost HTTP (requires explicit flag)
mcp2ext --http-url http://192.168.1.100:8080/mcp --name internal --description "Internal tools" --allow-http

注: --name 和 --description 是HTTP所必需的(没有包注册表来获取元数据)。

安全: 本地主机HTTP是自动允许的。非本地主机需要HTTPS或 --allow-http.

从CLI格式迁移

如果您在中有现有工具 ~/agent-tools/,将它们迁移到扩展:

# Scan for migrateable tools
mcp2ext migrate

# Migrate all at once
mcp2ext migrate --all --cleanup

# Migrate one tool
mcp2ext migrate chrome-dev-tools --cleanup

看 MIGRATION.md 查看完整的迁移指南。

配置

创建 ~/.pi/agent/mcp2ext.settings.json 对于默认值:

{
  "agent": "pi"
}

工具分组的工作原理

AI分析MCP工具和组相关操作:

MCP工具 分组工具 动作值
单击、悬停、拖动 chrome_interact 单击、悬停、拖动
take_screenshot chrome_screenshot (单一工具,无动作)
list_console_message,get_sole_message chrome_console 列表,获取

对于多工具组:

  • 一 action 参数添加了工具名称的枚举
  • 所有工具的参数都被合并(常用的参数仍然是必需的,特定于工具的参数变为可选的)
  • 执行功能分派到相应的MCP工具

故障排除

问题 修复
mcporter not found npm install -g mcporter
发现超时 MCPORTER_CALL_TIMEOUT=120000 mcp2ext <pkg>
无AI代理 无需Pi/Claude即可工作(1:1工具映射)
扩展未加载 重新启动pi以获取新的扩展

传统:CLI包装格式

原版 mcp2cli 命令生成shell可调用的CLI脚本,而不是本机扩展。

为什么mcp2ext更适合Pi:

  • 自动发现(无AGENTS.md注册)
  • 无符号链接或PATH配置
  • 直接工具集成(无bash层)
  • 用于类型安全的TypeBox模式

何时改用mcp2cli:

  • 使用没有Pi扩展系统的其他代理(Claude CLI、Codex、Gemini)
  • 需要shell可访问的命令以供手动使用
  • 使用通过bash调用工具的系统

CLI使用情况

# Generate CLI wrappers (legacy)
mcp2cli chrome-devtools-mcp

# Manage CLI tools
mcp2cli list
mcp2cli remove chrome-devtools
mcp2cli refresh

CLI输出

~/agent-tools/<name>/
├── README.md
├── chrome-snapshot.js
└── chrome-interact.js

~/agent-tools/bin/
├── chrome-snapshot → ../<name>/chrome-snapshot.js
└── chrome-interact → ../<name>/chrome-interact.js

CLI包装器需要:

  • ~/agent-tools/bin 在PATH中
  • 在AGENTS.md中注册
  • 通过bash工具调用Shell

看 CLI文档 对于传统格式。


贡献

欢迎在GitHub上发布PR和问题。

许可证

麻省理工学院

学分