MCP命令行界面

一个用于与MCP(模型上下文协议)服务器交互的命令行界面,支持连接多个服务器、探索其功能并与工具、资源和提示交互。

  • by jonesmattc
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 jonesmattc/my-first-ia

使用说明

MCP CLI 翻译为中文是“MCP 命令行界面”

一个用于与MCP(模型上下文协议)服务器交互的命令行界面。这个读取-求值-打印循环(REPL)允许您连接到多个MCP服务器,探索它们的功能,并与它们的工具、资源和提示进行交互。

特点/特性

  • 🤖 表示机器人。 AI聊天模式 - 与能够使用您的MCP工具的Claude AI聊天
  • 🔌 同时连接到多个MCP服务器
  • 🔄 支持stdio和HTTP传输方式
  • 🛠️ 交互式工具调用
  • 📚 资源阅读
  • 💬 提示管理
  • 📝 配置持久化
  • 🎨 色彩丰富,用户友好的界面

安装

npm install
npm run build

使用方法/用法

开发模式

在开发模式下运行CLI并启用热重载:

npm run dev

生产模式

构建并运行编译后的版本:

npm run build
npm start

直接执行

构建完成后,您也可以运行:

node dist/index.js

配置

CLI(命令行界面)使用一个 mcp-config.json 用于存储服务器配置的文件。您可以手动创建此文件或使用交互式方式 add-server 命令。

示例配置

{
  "servers": [
    {
      "name": "my-stdio-server",
      "transport": "stdio",
      "command": "node",
      "args": ["path/to/server.js"]
    },
    {
      "name": "my-http-server",
      "transport": "http",
      "url": "http://localhost:3000/mcp"
    }
  ]
}

可用命令

服务器管理

  • list-servers 或者 ls - 列出所有已配置的服务器及其连接状态
  • add-server - 交互式地添加新的服务器配置
  • remove-server <name> - 从配置中移除服务器
  • connect <name> - 连接到已配置的服务器
  • disconnect <name> - 从服务器断开连接

MCP运营(或:MCP操作)

  • list-tools <server> - 列出服务器上所有可用的工具
  • list-resources <server> - 列出服务器上所有可用的资源
  • list-prompts <server> - 列出服务器上所有可用的提示
  • call-tool <server> - 在服务器上交互式地调用工具
  • read-resource <server> - 从服务器读取资源
  • get-prompt <server> - 从服务器获取提示

AI聊天

  • chat - 启动带有工具访问权限的AI聊天模式
  • /exit-chat - 退出聊天模式(当处于聊天时)
  • /clear-history - 清除聊天历史记录(在聊天时)

要求: 设置 ANTHROPIC_API_KEY 环境变量

export ANTHROPIC_API_KEY=your-api-key-here

见 AI_CHAT_GUIDE.md 翻译为中文是:“AI聊天指南.md” 请参阅详细的使用说明。

将军

  • help - 显示帮助信息,列出所有可用命令
  • exit 或者 quit - 退出REPL(交互式解释器)

示例工作流程

工作流程1:AI聊天模式

  1. 设置您的API密钥:

    export ANTHROPIC_API_KEY=your-api-key-here
    
  2. 启动命令行界面(CLI):

    npm run dev
    
  3. 进入聊天模式:

    mcp> chat
    
  4. 自然聊天:

    chat> Can you create a note titled "Ideas" with content "Build a mobile app"?
    
    🤔 Thinking...
    🔧 Using tool: memory__create-note
    ✓ Tool executed successfully
    
    🤖 Assistant:
    I've created a note titled "Ideas" with the content "Build a mobile app".
    
  5. 退出聊天:

    chat> /exit-chat
    

工作流2:直接使用工具

  1. 启动REPL:

    npm run dev
    
  2. 添加服务器:

    mcp> add-server
    Server name: my-server
    Transport (stdio/http): stdio
    Command: node
    Arguments (space-separated, optional): server.js
    Connect now? (y/n): y
    
  3. 列出可用工具:

    mcp> list-tools my-server
    
  4. 调用一个工具:

    mcp> call-tool my-server
    Tool name: add
    Arguments (JSON): {"a": 5, "b": 3}
    
  5. 列出资源:

    mcp> list-resources my-server
    
  6. 阅读一篇资源文章:

    mcp> read-resource my-server
    Resource URI: config://app
    

创建您自己的MCP服务器

要测试这个命令行界面(CLI),你可以创建一个简单的MCP服务器。以下是一个最小示例:

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';

const server = new McpServer({
  name: 'example-server',
  version: '1.0.0'
});

server.registerTool(
  'add',
  {
    title: 'Add Numbers',
    description: 'Add two numbers together',
    inputSchema: { a: z.number(), b: z.number() },
    outputSchema: { result: z.number() }
  },
  async ({ a, b }) => {
    const output = { result: a + b };
    return {
      content: [{ type: 'text', text: JSON.stringify(output) }],
      structuredContent: output
    };
  }
);

const transport = new StdioServerTransport();
await server.connect(transport);

将此保存为 example-server.ts 并使用以下命令运行它:

npx tsx example-server.ts

然后在MCP CLI中进行配置:

{
  "servers": [
    {
      "name": "example",
      "transport": "stdio",
      "command": "npx",
      "args": ["tsx", "example-server.ts"]
    }
  ]
}

建筑

该项目的结构如下:

  • src/index.ts - 入口点
  • src/repl.ts - REPL接口和命令处理
  • src/server-manager.ts - MCP服务器连接管理
  • src/config.ts - 配置文件管理
  • src/types.ts - TypeScript 类型定义

依赖项

  • @modelcontextprotocol/sdk - 官方MCP TypeScript SDK
  • chalk - 终端样式
  • readline - 交互式命令行界面
  • zod - 模式验证

许可证

ISC(Internet Service Center,互联网服务中心)

做出贡献

欢迎贡献!请随时提交问题或拉取请求。