CLI转MCP服务工具

Ophis是一个将Cobra CLI命令转换为MCP工具的服务,支持与Claude Desktop、VSCode和Cursor集成,提供命令行工具和HTTP流式传输功能。

  • by njayp
  • Go
  • 本地部署
  • 93 星标
  • 更新于

使用说明

将任何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命令和模型上下文协议:

  1. 命令发现:递归地遍历Cobra命令树
  2. 模式生成:从命令标志和参数创建JSON模式(docs/schema.md)
  3. 工具执行:将CLI作为子流程生成并捕获输出(docs/execution.md)

贡献

欢迎投稿!看 贡献.md.