项目简介

AgentMcp是一个功能强大的Model Context Protocol (MCP) 服务器实现,旨在通过标准化的JSON-RPC协议,向大型语言模型(LLM)客户端提供其执行任务所需的各种上下文信息和外部功能。它通过依赖注入的方式集成了文件操作、网页抓取、Shell命令执行以及任务委托等多种工具,赋能LLM更深入地与外部环境交互。

主要功能点

  • 文件操作: 支持读取文件内容、写入文件、进行多重文本替换编辑、以及使用Glob模式进行文件路径匹配。
  • 命令行工具: 允许执行任意Bash命令,获取正在运行的Bash进程输出,并能终止后台Bash会话。
  • 网络访问: 提供网页内容抓取(WebFetch),能够从指定URL获取并处理网页信息;同时支持网页搜索(WebSearch),利用外部服务获取最新网络信息。
  • 任务委托: 能够启动新的智能代理,用于执行更复杂或需要多步骤协调的任务。
  • 会话管理: 支持后台命令的异步执行和输出监控,提升LLM处理长时任务的效率。
  • 可插拔工具: 服务器架构设计允许通过简单标记 ('McpServerTool' 属性) 轻松扩展和注册新的自定义工具。

安装步骤

  1. 环境准备: 确保您的系统已安装 .NET SDK 8.0 或更高版本。
  2. 获取代码: 通过Git克隆本仓库到您的本地机器:
    git clone https://github.com/AIDotNet/MakingMcp.git
    cd MakingMcp
  3. 恢复依赖: 在仓库根目录运行以下命令,下载并安装项目所需的依赖项:
    dotnet restore
  4. 编译项目: 编译AgentMcp服务器应用程序:
    dotnet build src/AgentMcp/AgentMcp.csproj
  5. 启动服务器: 运行以下命令启动MCP服务器。默认情况下,它将通过标准输入输出 (Stdio) 协议运行:
    dotnet run --project src/AgentMcp/AgentMcp.csproj

服务器配置

MCP客户端需要以下配置信息来与AgentMcp服务器建立连接。以下是一个标准的JSON格式配置示例,您需要将其提供给您的MCP客户端:

{
  "name": "AgentMcpServer",
  "command": "dotnet",
  "args": [
    "run",
    "--project",
    "src/AgentMcp/AgentMcp.csproj"
    // 可选参数:通过 'tools=' 选择要暴露的工具。
    // 例如,如果您只想暴露 Read、Write、Bash 和 Web 工具,可以添加:
    // "tools=Read,Write,Bash,Web"
    // 如果未指定 'tools=' 参数,服务器将默认暴露所有可用的工具。
  ]
}

参数注释:

  • 'name': 服务器的标识名称,MCP客户端会使用此名称来识别服务。
  • 'command': 启动MCP服务器的可执行命令。对于AgentMcp,通常是 'dotnet'。
  • 'args': 传递给 'command' 命令的命令行参数列表。
    • 'run': 'dotnet' 命令的一个子命令,用于运行 .NET 项目。
    • '--project src/AgentMcp/AgentMcp.csproj': 指定AgentMcp项目文件的路径。
    • 'tools=<工具列表>' (可选): 这是一个灵活的参数,允许您精确控制服务器向LLM客户端暴露哪些工具。您可以提供一个逗号分隔的工具名称列表(例如 'Read,Write,Bash')。如果省略此参数,AgentMcp将暴露其所有内置工具。
  • 环境变量: 为了使某些工具(如 'TaskTool' 和 'WebTool')正常工作,您可能需要在服务器运行的环境中设置以下环境变量:
    • 'OPENAI_API_KEY': OpenAI API的访问密钥,用于'TaskTool'。
    • 'OPENAI_ENDPOINT': OpenAI API的服务端点,用于'TaskTool'。
    • 'TASK_MODEL': 用于'TaskTool'的特定OpenAI模型名称。
    • 'TAVILY_API_KEY': Tavily API的访问密钥,用于'WebFetch'和'WebSearch'工具进行网页内容抓取和搜索。

基本使用方法

AgentMcp服务器启动后,它将通过标准输入输出(Stdio)等待来自MCP客户端的JSON-RPC请求。LLM客户端通过发送结构化的JSON-RPC请求来调用服务器上注册的工具。例如,LLM可以发送一个调用'Read'工具的请求来获取某个文件的内容,或者发送一个调用'Bash'工具的请求来执行特定的Shell命令。服务器接收、处理这些请求,并返回相应的JSON-RPC响应,其中包含工具执行的结果。LLM客户端解析这些响应,以继续其推理和决策过程。

信息

分类

AI与计算