项目简介

MCPoSimpleServer 是一个基于 Python FastAPI 实现的轻量级、异步服务器,旨在作为 LLM 应用与 Model Context Protocol (MCP) 工具和 Prompt 之间的桥梁。它本身并不直接实现具体的工具或 Prompt,而是通过管理和运行外部的 MCP 工具进程,并将它们的能力(Tool调用、Prompt渲染等)通过标准化的 MCP 协议(如 SSE/JSON-RPC)和 REST API 暴露给 LLM 客户端。服务器支持多用户,提供身份认证和私有服务器实例管理,为 LLM 应用提供安全、可扩展的上下文服务框架。

主要功能点

  • MCP 工具管理: 能够启动、停止、重启、加载由 'uvx' 或 'npx' 等命令执行的外部 MCP 工具/服务器进程。
  • 动态 API 暴露: 将外部 MCP 工具的能力动态生成 REST API 接口 (Swagger/OpenAPI),方便非 MCP 客户端调用。
  • Prompt 模板管理: 支持加载和执行公共、私有(用户独享)和共享的 Prompt 模板。
  • 多用户支持: 提供用户认证(用户名/密码、API Key)和授权(管理员/普通用户),支持用户拥有私有的 MCP 服务器配置和环境。
  • 隔离运行: 为每个受管理的 MCP 服务器进程(特别是用户私有的)提供隔离的运行环境,通常在独立线程或进程中。
  • 多种协议支持: 主要通过 Server-Sent Events (SSE) 和 JSON-RPC 协议与标准 MCP 客户端通信,同时也提供 REST API 接口。
  • 配置持久化: 使用 JSON 文件存储服务器配置、用户数据、Prompt 等信息,无需数据库。
  • 工具过滤: 支持通过白名单或黑名单过滤可用的工具。

安装步骤

该项目推荐使用 Docker 进行部署,以简化环境依赖。具体安装步骤请参考官方 GitHub 仓库的详细说明。

基本流程如下:

  1. 克隆仓库代码。
  2. 构建 Docker 镜像。
  3. 运行 Docker 容器,可以通过环境变量配置端口、管理员密码等。

更详细的步骤请查阅仓库中的 'Dockerfile' 和相关的部署文档(如果提供)。

服务器配置

MCPoSimpleServer 的核心功能是管理外部的 MCP 工具进程。这些外部工具的配置信息存储在 JSON 格式的文件中。

  • 公共工具配置: 位于主配置文件 ('config.json') 中。您需要编辑此文件来定义哪些外部 MCP 工具服务器应该由 MCPoSimpleServer 启动并作为公共工具暴露。配置结构通常包含一个 'mcpServers' 对象,其中每个键是服务器的名称,对应的值是一个包含 'command' (启动命令)、'args' (命令参数)、'env' (环境变量)、'description' (描述) 等字段的对象。

    {
      "mcpServers": {
        "server_name_1": {
          "command": "command_to_run_server_1",
          "args": ["arg1", "arg2"],
          "env": {"ENV_VAR": "value"},
          "description": "Description of server 1"
        },
        "server_name_2": {
          "command": "command_to_run_server_2",
          "args": [],
          "disabled": true
        }
        // ...更多服务器配置
      },
      "tools": {
        "whiteList": [], // 或 ["tool_name_a", "tool_name_b"]
        "blackList": []  // 或 ["tool_name_c"]
      }
    }

    请注意,此处的 'command' 和 'args' 是 MCPoSimpleServer 用于启动外部 MCP 工具进程的命令和参数。

  • 私有工具配置: 用户可以创建自己的私有 MCP 服务器配置。这些配置存储在每个用户的独立 JSON 文件中。用户可以通过 API 接口 ('/user/mcpserver') 来添加、查看、修改和删除他们的私有服务器配置和环境变量。私有配置会覆盖同名公共配置的环境变量等设置,并为该用户启动一个独立的服务器实例。

对于 MCP 客户端而言,要连接到 MCPoSimpleServer,客户端需要知道 MCPoSimpleServer 的网络地址(主机名和端口)以及 MCP 协议的入口点路径(通常是 '/mcp/sse')。例如,如果 MCPoSimpleServer 运行在 'localhost:8000',客户端需要配置连接到 'http://localhost:8000/mcp/sse'。客户端不需要关心 MCPoSimpleServer 内部如何启动和管理具体的 MCP 工具进程。

基本使用方法

  1. 启动服务器: 运行 Docker 容器或直接执行 'python -m mcpo_simple_server'。
  2. 连接 MCP 客户端: 配置您的 MCP 客户端连接到 MCPoSimpleServer 的 SSE 端点(例如 'http://localhost:8000/mcp/sse')。客户端将通过此连接接收事件和发送 JSON-RPC 消息。
  3. 使用工具和 Prompt:
    • 标准 MCP 客户端: 客户端连接后,可以发送 JSON-RPC 请求,如 'initialize' (建立会话)、'tools/list' (获取可用工具列表)、'tools/call' (调用工具)、'prompts/list' (获取可用Prompt列表)、'prompts/execute' (执行Prompt模板) 等。MCPoSimpleServer 会将这些请求路由到相应的内部服务或外部 MCP 工具进程,并将结果通过 SSE 返回给客户端。
    • 非 MCP 客户端 / REST API: 您可以通过访问 '/docs' 或 '/redoc' 查看由 FastAPI 自动生成的 API 文档,发现并直接调用由 MCPoSimpleServer 动态暴露的工具 REST API(路径通常为 '/tool/{服务器名}/{工具名}')。Prompt 也可以通过 '/public/prompts' (公共) 或 '/user/prompts' (用户私有/共享) 接口进行列表和执行。
  4. 用户认证: 对于需要访问私有工具或 Prompt、或管理私有服务器的用户,需要通过 '/user/login' 接口进行认证获取 Bearer Token,或生成 API Key,并在后续请求中携带认证信息。
  5. 管理服务器: 管理员可以通过 '/admin' 或 '/public' 下的特定接口来管理公共 MCP 服务器(添加、删除、重启等)和用户。

信息

分类

AI与计算