项目简介
MCP 服务检索与匹配系统(MCP-OS)是一个基于 Model Context Protocol (MCP) 构建的服务,其主要目的是帮助大型语言模型(LLM)或智能代理在众多可用的 MCP 服务器中,根据当前任务需求,快速准确地找到最相关的服务器。它通过暴露一个工具(Tool)和相关资源(Resource),使得 LLM 可以向其发起请求,获取匹配的 MCP 服务器信息。
主要功能点
- MCP 智能匹配: 根据 LLM 提供的任务描述,利用 LLM 或向量检索技术(当前版本主要通过调用外部LLM)识别并推荐最相关的 MCP 服务器。
- MCP 元数据暴露: 将已知的 MCP 服务器(通过配置文件加载)的描述信息作为标准的 MCP 资源(Resource)暴露给 LLM,方便 LLM 查询详细信息。
- 匹配工具提供: 提供一个名为 'match_mcp' 的 MCP 工具(Tool),LLM 可以调用此工具并传入任务描述来执行匹配操作。
- 选择指导 Prompt: 提供一个 Prompt 模板,帮助 LLM 理解如何根据提供的 MCP 信息做出选择。
- 多种传输协议支持: 支持 Stdio、HTTP/SSE 等多种传输协议与 LLM 客户端通信。
安装步骤
- 克隆仓库:
使用 Git 命令将项目代码克隆到本地目录。
git clone https://github.com/giao-123-sun/MCP-OS.git cd MCP-OS - 安装依赖:
进入项目目录,使用 npm 或 yarn 安装项目所需的依赖包。
npm install # 或 yarn install - 配置 MCP 列表:
创建一个 'mcp_list.json' 文件(或指定其他路径),列出您希望该服务知道的 MCP 服务器的元数据。文件格式可参考仓库中的示例。示例格式如下:
{ "web-scraper": { "name": "Web Scraper MCP", "description": "Fetches HTML and parses DOM.", "functions": ["fetchHtml", "querySelector"] }, "calc": { "name": "Calculator MCP", "description": "Performs arithmetic calculations.", "functions": ["add", "subtract", "multiply", "divide"] } // 更多 MCP... } - 构建索引(可选,取决于具体实现):
根据项目 README,可能需要构建一个用于检索的索引。如果使用基于 LLM 的匹配,此步骤可能不是强制要求或需要调整。请参考项目文档。
# 示例命令,可能需要根据实际代码调整 npm run build:index --src ./mcp_list.json --out ./index - 启动服务器:
运行命令启动 MCP 检索服务。
服务器默认会在本地地址 '127.0.0.1' 的特定端口(例如 5500)上启动,并通过配置的协议(如 Stdio 或 HTTP/SSE)监听连接。npm run start:retriever
服务器配置(供 MCP 客户端参考)
MCP 客户端(如 LLM 应用程序)需要配置连接到此 MCP 服务。典型的配置信息是一个 JSON 对象,包含服务的名称、启动命令及其参数。以下是一个配置示例,您需要根据您的实际安装路径调整 'command':
{ "mcpServers": { "mcp-retriever": { // 服务的唯一标识符 "name": "mcp-retriever", // 启动 MCP 服务器进程的命令(请替换为您的实际安装路径) "command": "/absolute/path/to/MCP-OS/packages/retriever/dist/index.js", // 传递给命令的参数(如果需要,例如指定配置文件路径) "args": ["--mcp-list", "./mcp_list.json"] // 其他可能的配置,如传输协议、端口等,取决于客户端和服务器的实现 // "transport": "stdio", // "port": 5500 } // 其他 MCP 服务器配置... } }
LLM 客户端加载此配置后,将能够发现并与该 MCP 检索服务建立连接。
基本使用方法
一旦 LLM 客户端成功连接到此 MCP 检索服务,LLM 可以通过标准的 MCP 协议与之交互:
- 列出工具 (ListTools): LLM 可以发现 'match_mcp' 工具。
- 调用工具 (CallTool): LLM 调用 'match_mcp' 工具,传入 'taskDescription' 参数(例如:'{"taskDescription": "查找能帮我处理待办事项的工具"}')。
- 接收响应: 服务器执行匹配逻辑,并将匹配到的 MCP 服务器 ID 及相关信息作为工具调用的结果返回给 LLM。LLM 可以解析此结果,了解哪些 MCP 服务器可能有用。
- 列出资源 (ListResources): LLM 可以获取所有已知 MCP 的列表(作为资源)。
- 读取资源 (ReadResource): LLM 可以通过 MCP URI ('mcp:///mcp_id') 读取某个特定 MCP 的详细描述信息。
- 使用 Prompt (GetPrompt): LLM 可以获取 'mcp_selection_guide' Prompt,该 Prompt 可能会提供关于如何选择 MCP 的指导性文本和可用的 MCP 资源嵌入。
通过这些交互,LLM 可以有效地利用此服务来发现和理解哪些 MCP 服务器最适合执行当前任务,从而优化其决策过程和减少上下文开销。
信息
分类
AI与计算