项目简介
SimpleTool Server 是一个基于 FastAPI 构建的轻量级、异步后端服务,专门设计用于托管和管理 Model Context Protocol (MCP) 兼容的工具和服务器。它通过标准的 JSON-RPC over SSE 协议与 LLM 客户端(如支持 MCP 的大语言模型)通信,为 LLM 应用提供强大的上下文和功能扩展能力。通过将 MCP 工具和服务器作为外部进程运行,Simple Tool Server 实现了良好的隔离性和管理性。
主要功能点
- MCP 工具托管与调用: SimpleTool Server 能够加载并管理外部的 MCP 工具进程(通过配置的命令启动),并提供 API 供 LLM 客户端调用这些工具。
- MCP 服务器管理: 允许管理员动态添加、列出、重启和删除配置的外部 MCP 服务器进程。
- 多种传输协议支持: 提供基于 Server-Sent Events (SSE) 的 MCP 通信端点 ('/mcp/sse'),用于与 MCP 客户端进行实时双向通信。同时也通过 REST API ('/tool/{server_name}/{tool_name}') 暴露工具调用能力,方便非 MCP 客户端使用。
- 用户管理与认证: 支持用户注册、登录、API 密钥生成等认证功能,区分管理员和普通用户权限,保护敏感管理接口和用户数据。
- 用户级配置: 允许用户配置全局或服务器特定的环境变量。这些环境变量会在启动用户相关的工具或私有服务器实例时注入,用于定制化工具行为,而无需修改服务器主配置。
- 私有服务器实例: 支持为特定用户启动带有其自定义配置(如环境变量)的私有 MCP 服务器进程,确保用户配置的隔离性和个性化。闲置的私有服务器会自动清理。
- Prompt 模板管理与执行: 包含一个 Prompt 管理器,能够加载和执行 Prompt 模板。支持公共 Prompt(所有用户可访问)、私有 Prompt(仅用户自己访问)和共享 Prompt,并通过 API ('/prompts', '/user/prompts') 暴露。
- 工具过滤: 支持通过主配置文件 ('config.json') 或环境变量对可用的工具进行白名单和黑名单过滤,控制哪些工具可以被暴露给客户端使用。
- 隔离运行: 外部 MCP 工具或服务器进程在独立于 SimpleTool Server 主进程的环境中运行,增强了系统的稳定性和安全性。
安装步骤
- 安装 Python: 确保您的系统已安装 Python 3.10 或更高版本。
- 克隆仓库: 打开终端,执行命令 'git clone https://github.com/getsimpletool/simpletool-server.git' 将项目克隆到本地。
- 进入项目目录: 'cd simpletool-server'
- 安装依赖: 推荐使用 'uv' 工具进行安装。如果您没有 'uv',可以先安装:'pip install uv'。然后在项目目录下执行:'uv sync' 或 'uv pip install -r requirements.txt'。
- 配置环境变量: 复制 '.env.example' 文件并重命名为 '.env'。根据您的需求修改其中的配置项,特别是设置 'ADMIN_DEFAULT_PASSWORD' 和 'SALT'(用于安全目的,应设置为随机字符串)。
- 配置 MCP 服务器: 编辑 'data/config/config.json' 文件来定义 SimpleTool Server 需要管理哪些外部 MCP 工具或服务器进程。
- 启动服务器: 在项目目录下执行启动命令。
- 开发模式 (带自动重载): 'uvicorn src.server.main:fastapi --reload'
- 生产模式: 'uvicorn src.server.main:fastapi --host 0.0.0.0 --port 8000' (可以根据需要修改端口)
- 使用 Docker: 仓库提供了 Docker 支持。您可以构建和运行 Docker 镜像来部署 SimpleTool Server,这通常是更便捷和推荐的部署方式。具体步骤请参考项目官方文档。
服务器配置 (data/config/config.json)
SimpleTool Server 的核心功能之一是管理和运行外部的 MCP 进程。这些外部进程的启动方式和参数需要在 'data/config/config.json' 文件中进行配置。此文件定义了 SimpleTool Server 启动时应该加载并管理的 MCP 服务器列表。
以下是一个 'data/config/config.json' 的示例结构(请根据您希望集成的具体 MCP 工具或服务器进程进行修改):
{ "mcpServers": { "server_name_example": { "command": "外部MCP进程的启动命令", // 必需:例如 "uvx", "npx", "python", "/path/to/your/mcp_server_executable" // "uvx" 是一个用于运行基于uv/npm包的命令的工具,常用格式是 "uvx" ["package_name", "--arg1", "value1"] "args": ["参数1", "参数2"], // 必需:传递给启动命令的参数列表。例如,对于uvx运行的MCP包,第一个参数通常是包名。 // 示例:["mcp-server-time", "--local-timezone=Europe/Warsaw"] "env": { "ENV_VAR_KEY": "环境变量值" }, // 可选:一个字典,包含启动此外部 MCP 进程时需要设置的环境变量。这会合并到SimpleTool Server自身的环境变量中。 "description": "这是一个示例MCP服务器的描述", // 可选:关于此 MCP 服务器的简短说明。 "disabled": false // 可选:布尔值。设置为 true (布尔类型,非字符串 "true") 将禁用此服务器,SimpleTool Server 启动时不会加载它。 } // 您可以在这里添加更多 "server_name": { ... } 的配置块来管理多个外部 MCP 进程 }, "tools": { // 可选:全局工具过滤配置。如果此处和环境变量都设置了过滤,则取两者的交集。 "whiteList": [], // 可选:一个字符串列表。如果非空,则 SimpleTool Server 只会暴露列表中名称的工具。空列表表示不启用白名单过滤。 "blackList": [] // 可选:一个字符串列表。列表中的工具名称将不会被暴露。 } }
注意: MCP 客户端不需要修改或理解 'data/config/config.json' 文件。MCP 客户端只需要知道 SimpleTool Server 的网络地址(IP和端口)以及 MCP SSE 端点路径(默认为 '/mcp/sse'),通过连接此端点,客户端会自动与 SimpleTool Server 进行 MCP 协议交互(如发送 'initialize' 获取服务器能力,发送 'tools/list' 获取可用工具列表等)。
基本使用方法
- 访问 API 文档: 服务器启动后,您可以通过浏览器访问 'http://localhost:8000/docs' (或您配置的地址和端口) 来查看由 FastAPI 自动生成的 OpenAPI (Swagger) 文档。这里包含了用户认证、管理员功能、Prompt 管理等所有 REST API 的详细信息。
- 连接 MCP 客户端: 兼容 Model Context Protocol (MCP) 的 LLM 客户端(例如某些 AI 助手前端或开发库)应该通过 HTTP GET 请求连接到 SimpleTool Server 的 MCP SSE 端点,默认为 '/mcp/sse'。连接成功后,服务器会通过 SSE 发送一个 'endpoint' 事件,其中包含用于发送 JSON-RPC 消息的 HTTP POST 端点 URI(通常是 '/mcp/message?session_id=...')。客户端应向此端点发送 MCP 协议消息(例如 '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}')来与服务器交互。
- 通过 REST 调用工具: 对于不使用 MCP 协议的应用程序,或者仅需要通过简单的 HTTP 请求来调用工具,可以使用暴露在 '/tool/{server_name}/{tool_name}' 的 REST API。向此 URL 发送 POST 请求,请求体为 JSON 对象,其中包含工具所需的参数。例如,调用一个名为 'get_current_time' 的工具,如果它位于配置中名称为 'time' 的 MCP 服务器下,并且需要一个 'timezone' 参数,则可以向 '/tool/time/get_current_time' 发送一个 POST 请求,请求体为 '{"timezone": "America/New_York"}'。
信息
分类
AI与计算