项目简介
本项目提供了基于 Model Context Protocol (MCP) 的服务器实现,旨在扩展大型语言模型 (LLM) 的能力。通过集成 OpenAPI 规范和自定义工具,MCP 服务器允许 LLM 安全、可扩展地访问外部数据和功能。
主要功能点
- OpenAPI 工具集成: 支持将符合 OpenAPI 规范的 API 转换为 LLM 可调用的工具,方便 LLM 利用丰富的外部服务。
- 自定义工具: 允许开发者自定义工具函数,灵活扩展 LLM 的能力边界,例如本项目中提供的随机数生成器和分数审批工具。
- Prompt 模板管理: 支持定义和管理 Prompt 模板,实现可定制的 LLM 交互模式,并提供创建 Agent 的 Prompt 示例。
- 会话管理: MCP 服务器负责处理客户端会话,为每个会话提供独立的上下文环境。
- 多传输协议支持: 支持 Stdio 和 SSE 等多种传输协议,满足不同应用场景的需求。
安装步骤
- 克隆仓库
git clone https://github.com/opendatahub-io/llama-stack-demos cd llama-stack-demos - 安装 Python 依赖
本项目使用 'uv' 进行包管理。请先安装 'uv',然后同步依赖:
或者,您也可以使用 'pip' 安装依赖(可能需要自行解决依赖冲突):pip install uv uv sync source .venv/bin/activatepip install -r requirements.txt # 如果存在 requirements.txt 文件 # 或手动安装 mcp-server, openapi-parser, click, anyio, uvicorn, starlette 等依赖 - 选择并进入服务器目录
- OpenAPI MCP 服务器: 'cd mcp-servers/llamastack'
- 自定义工具 MCP 服务器: 'cd mcp-servers/custom'
服务器配置
1. OpenAPI MCP 服务器 (mcp-servers/llamastack/mcp_server.py)
- 服务器名称: 'mcp-openapi-tools-and-prompts' (非配置项,仅为标识)
- 启动命令 (command): 'python mcp_server.py'
- 参数 (args):
参数注释:{ "spec_path": "path/to/your/openapi.json", // 【必填】OpenAPI 规范文件路径,请替换为实际路径 "transport": "sse", // 【可选】传输协议,可选 "stdio" 或 "sse",默认为 "stdio" "port": 8000 // 【可选】SSE 传输协议端口号,默认为 8000,仅当 transport 为 "sse" 时有效 }- 'spec_path': 必填。指向 OpenAPI 规范文件的路径。您需要将 'path/to/your/openapi.json' 替换为您实际的 OpenAPI 规范文件路径。
- 'transport': 可选。指定 MCP 服务器使用的传输协议。可以设置为 '"stdio"' (标准输入输出) 或 '"sse"' (Server-Sent Events)。默认为 '"stdio"'。
- 'port': 可选。当 'transport' 设置为 '"sse"' 时,此参数指定服务器监听的端口号。默认为 '8000'。如果使用 SSE 传输协议,客户端需要配置此端口以连接服务器。
示例配置 (SSE 传输协议):
{ "server name": "openapi-mcp-server", "command": "python mcp_server.py", "args": { "spec_path": "/path/to/your/openapi.json", "transport": "sse", "port": 8000 } }
2. 自定义工具 MCP 服务器 (mcp-servers/custom/mcp_tools.py)
- 服务器名称: 'Demo' (非配置项,仅为标识)
- 启动命令 (command): 'python mcp_tools.py'
- 参数 (args):
参数注释:{ "transport": "sse", // 【可选】传输协议,可选 "stdio" 或 "sse",默认为 "stdio" "port": 8001 // 【可选】SSE 传输协议端口号,默认为 8001 (建议与 OpenAPI 服务器端口区分) }- 'transport': 可选。指定 MCP 服务器使用的传输协议。可以设置为 '"stdio"' (标准输入输出) 或 '"sse"' (Server-Sent Events)。默认为 '"stdio"'。
- 'port': 可选。当 'transport' 设置为 '"sse"' 时,此参数指定服务器监听的端口号。默认为 '8000'。注意: 为了避免端口冲突,建议自定义工具服务器使用与 OpenAPI 服务器不同的端口号,例如 '8001'。
示例配置 (SSE 传输协议):
{ "server name": "custom-tools-mcp-server", "command": "python mcp_tools.py", "args": { "transport": "sse", "port": 8001 } }
基本使用方法
-
启动 MCP 服务器: 根据您选择的服务器类型,进入相应的目录 ('mcp-servers/llamastack' 或 'mcp-servers/custom'),并根据上述 "服务器配置" 中的说明,使用 'python' 命令启动服务器。请确保根据您的需求配置正确的参数,例如 OpenAPI 规范文件路径、传输协议和端口号。
-
配置 MCP 客户端: 在您的 MCP 客户端应用(例如 'demos/rag_agentic' 目录下的示例客户端),您需要注册 MCP 服务器。这通常涉及到配置 MCP 服务器的 ToolGroup ID 和 MCP Endpoint URI。
- ToolGroup ID: 在客户端代码中,您需要为 MCP 服务器指定一个 ToolGroup ID,例如 '"mcp::openapi"' 或 '"mcp::custom_tool"'。ToolGroup ID 用于在客户端中标识和管理来自不同 MCP 服务器的工具。
- MCP Endpoint URI: 这是 MCP 客户端连接到 MCP 服务器的地址。对于 SSE 传输协议,URI 的格式通常为 'http://<服务器主机名或IP>:<端口>/sse'。例如,如果您的 OpenAPI MCP 服务器运行在本地主机的 8000 端口,则 URI 可能为 'http://localhost:8000/sse'。对于 Stdio 传输协议,客户端通常不需要显式配置 URI。
-
在 LLM 应用中使用工具: 一旦 MCP 客户端成功连接到 MCP 服务器并注册了 ToolGroup,您就可以在 LLM 应用中像使用本地工具一样调用 MCP 服务器提供的工具了。具体的调用方式取决于您使用的 LLM 客户端库和 Agent 框架。您可以参考 'demos/rag_agentic' 目录下的示例代码,了解如何在 Llama Stack 客户端中使用 MCP 工具。
注意事项
- 启动服务器前,请确保已安装所有必要的 Python 依赖。
- 配置 MCP 客户端时,请确保 ToolGroup ID 和 MCP Endpoint URI 与您启动的 MCP 服务器配置相匹配。
- 如果使用 SSE 传输协议,请确保服务器端口未被占用,并且客户端可以访问服务器的网络地址。
- OpenAPI MCP 服务器需要有效的 OpenAPI 规范文件才能正常工作。请确保提供的 'spec_path' 参数指向正确的文件。
- 自定义工具 MCP 服务器提供的工具功能和参数定义在 'mcp-servers/custom/mcp_tools.py' 文件中。您可以根据需要修改或扩展这些工具。
信息
分类
AI与计算