项目简介
Ophis是一个Go语言框架,旨在帮助开发者快速将现有的Cobra命令行界面(CLI)应用程序转换为MCP服务器。通过Ophis,您的CLI命令可以被大型语言模型(LLM)客户端(如Claude Desktop或VSCode Copilot)识别为可调用的工具,从而实现AI助手与您的CLI应用程序的无缝交互。它处理了MCP协议的复杂性、命令执行和工具注册,极大地简化了MCP服务器的搭建过程。
主要功能点
- 自动化工具转换: 自动将Cobra CLI中的命令解析并转换为符合MCP规范的工具,包括命令名称、描述、参数和标志。
- 灵活的工具过滤: 支持通过白名单、黑名单、隐藏命令过滤或自定义逻辑来控制哪些CLI命令暴露为MCP工具。
- 自定义输出处理: 允许开发者定义自定义处理器来格式化CLI命令的输出,例如将文本输出转换为图像、JSON或其他MCP客户端支持的富媒体格式。
- 多平台集成支持: 提供简便的CLI命令,用于配置Claude Desktop和VSCode,使其能够发现并连接到由Ophis驱动的MCP服务器。
- JSON-RPC通信: 服务器通过JSON-RPC协议与客户端通信,实现上下文信息的提供和工具调用。
- Stdio传输协议: 默认支持Stdio传输协议,方便与各种LLM客户端集成。
安装步骤
在您的Go项目中,通过以下命令引入Ophis:
go get github.com/njayp/ophis
然后,在您的Cobra CLI应用程序的'main()'函数中,添加Ophis提供的MCP服务器命令:
package main import ( "os" "github.com/njayp/ophis" "github.com/spf13/cobra" ) func createMyRootCommand() *cobra.Command { // 您的Cobra根命令定义 rootCmd := &cobra.Command{ Use: "my-cli", Short: "我的自定义CLI工具", Long: "一个用于演示的CLI应用程序。", } // 添加一些示例命令 rootCmd.AddCommand(&cobra.Command{ Use: "hello", Short: "打招呼", Run: func(cmd *cobra.Command, args []string) { cmd.Println("Hello from my-cli!") }, }) return rootCmd } func main() { rootCmd := createMyRootCommand() // 添加MCP服务器命令,可以传入nil使用默认配置 rootCmd.AddCommand(ophis.Command(nil)) if err := rootCmd.Execute(); err != nil { os.Exit(1) } }
编译您的应用程序:
go build -o my-cli .
服务器配置
MCP服务器的配置是用于告知MCP客户端如何启动和连接到Ophis生成的MCP服务器。这些配置通常以JSON格式存储在MCP客户端(如Claude或VSCode)的配置文件中。以下是两个MCP客户端所需的典型配置信息:
1. Claude Desktop 配置示例 Claude Desktop通常会在其配置文件(例如 'claude_desktop_config.json')中添加如下JSON对象,用于启动MCP服务器:
{ "mcpServers": { "your-cli-name": { "command": "/path/to/your/my-cli", "args": [ "mcp", "start", "--log-level", "info" ], "env": {} } } }
- 'your-cli-name': 您自定义的MCP服务器名称,通常会从可执行文件名称派生。
- 'command': 指向您的CLI可执行文件的绝对路径。
- 'args': 启动MCP服务器所需的参数列表。'mcp start' 是启动Ophis MCP服务器的核心命令,'--log-level info' 是可选的日志级别参数。
- 'env': 可选的环境变量。
2. VSCode Copilot 配置示例 VSCode Copilot(在Agent模式下)会在其配置文件(例如 '.vscode/mcp.json' 或用户设置)中添加如下JSON对象:
{ "servers": { "your-cli-name": { "type": "stdio", "command": "/path/to/your/my-cli", "args": [ "mcp", "start", "--log-level", "info" ], "env": {}, "url": "", "headers": {} } } }
- 'your-cli-name': 您自定义的MCP服务器名称,通常会从可执行文件名称派生。
- 'type': 服务器的传输协议类型,Ophis默认为 'stdio'。
- 'command': 指向您的CLI可执行文件的绝对路径。
- 'args': 启动MCP服务器所需的参数列表。'mcp start' 是启动Ophis MCP服务器的核心命令,'--log-level info' 是可选的日志级别参数。
- 'env': 可选的环境变量。
- 'url', 'headers': 对于Stdio类型服务器通常为空,用于其他传输协议。
请注意: 上述JSON配置是示例,实际配置会根据您的应用程序名称和安装路径自动生成。Ophis提供了内置的命令 ('mcp claude enable' 和 'mcp vscode enable') 来自动生成和更新这些配置。
基本使用方法
-
构建您的CLI应用程序: 首先,确保您的Cobra CLI应用程序已经集成了'ophis.Command(nil)'并且已成功编译成可执行文件(例如 './my-cli')。
-
启用MCP服务器集成:
- 对于Claude Desktop: 运行以下命令,Ophis将自动配置Claude Desktop以识别您的CLI作为MCP服务器。
./my-cli mcp claude enable # 之后,重启Claude Desktop以加载新的配置。 - 对于VSCode Copilot: 运行以下命令,Ophis将自动配置VSCode以识别您的CLI作为MCP服务器。
./my-cli mcp vscode enable # 确保Copilot处于Agent模式,并重启VSCode或重新加载窗口以应用配置。
- 对于Claude Desktop: 运行以下命令,Ophis将自动配置Claude Desktop以识别您的CLI作为MCP服务器。
-
使用AI助手调用CLI命令: 配置完成后,您就可以在Claude Desktop或VSCode Copilot中与AI助手交互。AI助手会识别您的CLI命令为可用工具,并可以在对话中根据需要调用它们。例如,如果您的CLI有一个 'my-cli hello' 命令,您可以在AI助手中说 "请调用 hello 命令",AI助手就能执行它。
-
自定义工具暴露和输出: 您可以在 'ophis.Command()' 中传入 'ophis.Config' 对象来自定义工具的生成和输出处理。例如,您可以指定只暴露某些命令,或者将命令的输出格式化为JSON或图像。
import ( "log/slog" "github.com/njayp/ophis" "github.com/njayp/ophis/tools" "github.com/mark3labs/mcp-go/mcp" "context" ) // 自定义输出处理器示例 myCustomHandler := func(ctx context.Context, request mcp.CallToolRequest, data []byte, err error) (*mcp.CallToolResult, error) { if err != nil { return mcp.NewToolResultError(err.Error()), nil } // 例如,将所有输出视为JSON return mcp.NewToolResultJSON(data), nil } config := &ophis.Config{ GeneratorOptions: []tools.GeneratorOption{ tools.Allow([]string{"get", "list"}), // 只暴露 'get' 和 'list' 命令 tools.WithHandler(myCustomHandler), // 使用自定义输出处理器 }, SloggerOptions: &slog.HandlerOptions{ Level: slog.LevelDebug, // 设置日志级别为Debug }, } rootCmd.AddCommand(ophis.Command(config))
信息
分类
开发者工具