项目简介

这是一个用于在Go语言中实现 Model Context Protocol (MCP) 服务器的开源框架。MCP定义了一种标准化的方式,使应用程序能够通过JSON-RPC与大型语言模型 (LLM) 客户端进行通信,提供上下文信息和调用外部功能。

主要功能点

  • 资源管理: 托管和管理应用程序的各种数据资源,并提供标准的数据访问接口(如列出、读取资源)。
  • 工具调用: 注册和执行外部工具或函数,使LLM能够调用应用程序提供的能力。
  • Prompt模板与生成: 定义和渲染可定制的Prompt模板,支持根据不同场景生成LLM交互所需的Prompt。
  • 能力声明: 服务器可以声明其支持的功能(例如是否支持资源、工具、Prompt等)。
  • 多种传输协议支持: 支持通过不同的传输协议(如HTTP/SSE, Stdio)进行通信。
  • 日志与进度报告: 支持服务器向客户端发送日志消息和任务进度通知。
  • 请求取消: 支持取消进行中的请求。
  • 身份认证与授权: 提供中间件支持,可集成OAuth2等认证授权机制保护资源和工具。

安装步骤

要将此框架集成到您的Go项目中以构建MCP服务器,请使用以下命令安装库:

go get github.com/viant/mcp

服务器配置 (客户端视角)

MCP客户端需要知道如何启动和/或连接到MCP服务器。常见的连接方式有两种:通过标准I/O (Stdio) 或通过网络(如HTTP/SSE)。

对于Stdio连接(客户端启动服务器进程并与其Stdio通信),客户端通常需要以下JSON格式的配置来指定如何启动服务器:

{
  "server": {
    "name": "您的MCP服务器名称",
    "command": "/path/to/your/mcp-server-executable",
    "args": [
      "--config", "/path/to/server/config.json"
      // 根据您的具体服务器实现,这里可以添加启动参数,
      // 例如指定监听地址、配置文件的路径等。
      // 本框架提供了构建服务器的库,实际的启动参数取决于您使用此库
      // 编写的具体服务器应用。
    ]
  }
}
  • 'name': MCP服务器的显示名称,用于标识服务器。
  • 'command': MCP服务器可执行文件的完整路径。客户端将执行此命令来启动服务器进程。
  • 'args': 启动MCP服务器进程时需要传递的命令行参数列表。

对于网络连接(如HTTP/SSE),客户端通常只需要配置服务器的网络地址(URL):

{
  "server": {
    "name": "您的MCP服务器名称",
    "url": "http://localhost:4981/sse"
    // 或者其他网络地址和路径,取决于服务器的配置。
    // 对于HTTP/SSE,通常需要指定 /sse 路径。
  }
}

基本使用方法 (客户端与服务器交互)

MCP客户端连接到服务器后,通常会遵循以下基本交互流程:

  1. 初始化: 客户端发送 'initialize' 请求,声明其能力和信息。服务器响应其能力、信息和协议版本。
  2. 能力发现: 客户端根据服务器声明的能力,可能发送 'resources/list'、'tools/list'、'prompts/list' 等请求,发现服务器提供的资源、工具和Prompt。
  3. 获取信息: 客户端发送 'resources/read' 请求读取特定资源内容,或发送 'prompts/get' 获取渲染后的Prompt内容。
  4. 调用功能: 客户端发送 'tools/call' 请求执行服务器注册的工具,并获取工具的执行结果。
  5. 订阅更新: 如果服务器支持,客户端可以发送 'resources/subscribe' 请求订阅资源变化通知。
  6. 采样: 如果服务器支持,它可以向客户端发送 'sampling/createMessage' 通知,请求客户端通过其集成的LLM进行文本采样。

服务器端使用此框架实现相应的Handler逻辑来响应这些客户端请求。

信息

分类

开发者工具