本项目是一个使用 .NET 技术栈构建的 Model Context Protocol (MCP) 服务器示例。它提供了一个框架,允许开发者创建和注册可以通过标准 MCP 协议供大型语言模型 (LLM) 客户端调用的工具。这使得 LLM 能够安全、标准化地访问外部数据和服务。

主要功能点

  • 托管和执行工具 (Tools): 服务器注册并管理自定义工具,这些工具封装了特定的业务逻辑或外部服务调用(如搜索 GitLab 群组、生成人物描述)。LLM 客户端可以通过 MCP 协议调用这些工具并获取结果。
  • MCP 协议支持: 示例利用 MCP .NET 库实现了 MCP 协议的部分功能,支持客户端通过指定的传输方式(如 SSE over HTTP)与服务器通信,进行工具发现和调用。
  • 外部服务集成示例: 包含一个与 GitLab API 集成的工具示例,展示了如何在工具中调用外部服务,并通过用户 Secrets 安全地管理敏感配置。

安装步骤

  1. 克隆仓库: 将项目仓库克隆到本地计算机。
    git clone https://github.com/garrardkitchen/mcp-server-example.git
    cd mcp-server-example
  2. 构建项目: 在项目根目录运行 .NET 构建命令。
    dotnet build
  3. (可选) 配置 GitLab 工具的用户 Secrets: 如果你需要测试 'GitLabTools',需要配置 GitLab Token 和域名。
    • 如果项目没有 '<UserSecretsId>',先运行 'dotnet user-secrets init' 进行初始化。
    • 设置 GitLab Token:
      dotnet user-secrets set "GitLab:Token" "<你的GitLab个人访问令牌>"
    • 设置 GitLab 域名:
      dotnet user-secrets set "GitLab:Domain" "<你的GitLab域名,例如:gitlab.com>"
    将尖括号内的内容替换为你实际的值。

服务器配置 (供 MCP 客户端使用)

MCP 客户端(如 Visual Studio Code 的 MCP 插件或 MCP Inspector)需要配置如何启动并连接到此服务器。通常,这涉及到指定用于启动服务器进程的命令和参数。

典型的 MCP 客户端配置会包含一个 JSON 对象,其中至少需要指定:

  • 'name': 一个用于标识此服务器的名称(字符串),例如 '"My GitLab Tool Server"'。
  • 'command': 用于启动服务器可执行文件的命令(字符串),例如 '"dotnet"'。
  • 'args': 传递给启动命令的参数列表(字符串数组)。对于此示例项目,可以使用 '["run", "--project", "<服务器项目文件路径>"]' 来启动。你需要将 '<服务器项目文件路径>' 替换为你克隆的仓库中 '.csproj' 文件的实际路径。

例如,如果你的仓库在 '/home/user/mcp-server-example',项目文件是 'mcp-server-example.csproj',则 'args' 可能是 '["run", "--project", "/home/user/mcp-server-example/mcp-server-example.csproj"]'。

配置完成后,MCP 客户端会使用这些信息启动服务器进程,并通过配置的传输方式(如 SSE)连接到服务器监听的地址(默认是 'http://localhost:5168',连接时需加上 '/sse' 后缀,即 'http://localhost:5168/sse')。

基本使用方法

  1. 启动服务器: 在项目根目录运行 'dotnet run'。服务器将启动并监听一个本地端口(通常是 'http://localhost:5168')。
  2. 连接客户端: 使用一个支持 MCP 协议的客户端(如 MCP Inspector 或支持 MCP 的 VSCode 扩展)。在客户端配置中输入服务器的启动命令、参数以及连接 URL ('http://localhost:5168/sse') 和传输类型 ('SSE')。
  3. 发现和调用工具: 通过客户端发送“列出工具”请求,查看服务器提供的工具('GitLabTools', 'WhoIsTool')。然后,你可以通过客户端界面或编程方式调用这些工具,并提供所需的参数(例如,调用 'WhoIsTool' 时提供一个姓名)。

这个示例提供了一个基础框架,你可以基于此扩展更多的工具,为你的 LLM 应用提供丰富的上下文信息和功能。

信息

分类

开发者工具