将任何Cobra CLI转换为MCP服务器
Ophis会自动将Cobra命令转换为MCP工具,并提供CLI命令以与Claude Desktop、VSCode和Cursor集成。
快速开始
安装
go get github.com/njayp/ophis添加到CLI
package main
import (
"os"
"github.com/njayp/ophis"
)
func main() {
rootCmd := createMyRootCommand()
rootCmd.AddCommand(ophis.Command(nil))
if err := rootCmd.Execute(); err != nil {
os.Exit(1)
}
}在克劳德桌面、VSCode或光标中启用
# Claude Desktop
./my-cli mcp claude enable
# Restart Claude Desktop
# VSCode (requires Copilot in Agent Mode)
./my-cli mcp vscode enable
# Cursor
./my-cli mcp cursor enable您的CLI命令现在可以作为MCP工具使用!
通过HTTP流式传输
通过HTTP公开您的MCP服务器以进行远程访问:
./my-cli mcp stream --host localhost --port 8080命令
这 ophis.Command(nil) 将这些子命令添加到CLI中(默认命令名为 mcp,可通过以下方式配置 Config.CommandName):
mcp
├── start # Start MCP server on stdio
├── stream # Stream MCP server over HTTP
├── tools # Export available MCP tools as JSON
├── claude
│ ├── enable # Add server to Claude Desktop config
│ ├── disable # Remove server from Claude Desktop config
│ └── list # List Claude Desktop MCP servers
├── vscode
│ ├── enable # Add server to VSCode config
│ ├── disable # Remove server from VSCode config
│ └── list # List VSCode MCP servers
└── cursor
├── enable # Add server to Cursor config
├── disable # Remove server from Cursor config
└── list # List Cursor MCP servers配置
使用选择器控制哪些命令和标志作为MCP工具公开。默认情况下,所有命令和标志都是公开的(隐藏/弃用除外)。
config := &ophis.Config{
Selectors: []ophis.Selector{
{
CmdSelector: ophis.AllowCmdsContaining("get", "list"),
LocalFlagSelector: ophis.ExcludeFlags("token", "secret"),
InheritedFlagSelector: ophis.NoFlags, // Exclude persistent flags
// Middleware wraps command execution
Middleware: func(ctx context.Context, req *mcp.CallToolRequest, in ophis.ToolInput, next func(context.Context, *mcp.CallToolRequest, ophis.ToolInput) (*mcp.CallToolResult, ophis.ToolOutput, error)) (*mcp.CallToolResult, ophis.ToolOutput, error) {
ctx, cancel := context.WithTimeout(ctx, time.Minute)
defer cancel()
return next(ctx, req, in)
},
},
},
}
rootCmd.AddCommand(ophis.Command(config))自定义命令名称
默认情况下,ophis命令命名为 mcp。如果您的CLI已经使用 mcp 对于其他内容,set CommandName 为了避免碰撞:
config := &ophis.Config{
CommandName: "agent",
}
rootCmd.AddCommand(ophis.Command(config))命令树、编辑器配置(enable/disable),内部过滤器都会自动使用配置的名称。
默认环境变量
编辑器在最小的环境中启动MCP服务器子流程。在macOS上,这意味着PATH仅为 /usr/bin:/bin:/usr/sbin:/sbin,所以工具像 helm, kubectl,或 docker 找不到通过mise/homebrew/nix安装的程序。使用 DefaultEnv 在以下位置捕获当前PATH(或任何其他变量) enable 时间:
config := &ophis.Config{
DefaultEnv: map[string]string{
"PATH": os.Getenv("PATH"),
},
}
rootCmd.AddCommand(ophis.Command(config))这些被合并到由编写的编辑器配置中 enable.用户提供 --env 价值观优先于冲突。
看 docs/config.md 了解详细的配置选项。
运作原理
Ophis桥接Cobra命令和模型上下文协议:
- 命令发现:递归地遍历Cobra命令树
- 模式生成:从命令标志和参数创建JSON模式(docs/schema.md)
- 工具执行:将CLI作为子流程生成并捕获输出(docs/execution.md)
贡献
欢迎投稿!看 贡献.md.
