项目简介
'symfony-mcp-server' 是一个强大的 Symfony 捆绑包 (Bundle),旨在简化在 Symfony 应用程序中实现 Model Context Protocol (MCP) 服务器的过程。它通过 Server-Sent Events (SSE) 传输方式,为 LLM 客户端提供安全、可控的上下文信息和功能访问。
主要功能点
- 支持 MCP 协议核心功能: 实现并处理符合 MCP 标准的请求(如初始化、工具列表、工具调用、资源列表、资源读取)和通知。
- Server-Sent Events (SSE) 传输: 利用 SSE 实现服务器到客户端的实时通信,并通过适配器模式(支持 Cache 和 Redis)实现客户端到服务器的消息推送和队列管理,模拟双向通信。
- 工具 (Tools) 管理: 允许开发者定义、注册和执行自定义工具,为 LLM 提供外部功能调用接口。
- 资源 (Resources) 管理: 允许开发者定义、注册和访问静态或动态生成的资源,为 LLM 提供必要的上下文数据。
- 能力声明: 服务器在初始化时向客户端声明其支持的功能(如工具、资源)。
- 开发者工具: 提供方便的命令行工具,用于创建和测试自定义工具。
安装步骤
-
创建配置文件: 在您的 Symfony 项目的 'config/packages/' 目录下创建 'klp_mcp_server.yaml' 文件,并粘贴以下基本配置:
# config/packages/klp_mcp_server.yaml klp_mcp_server: enabled: true server: name: '您的 MCP 服务器名称' version: '1.0.0' default_path: 'mcp' # MCP 服务的默认路径前缀 ping: enabled: true interval: 30 # Ping 间隔秒数 server_provider: 'sse' # 当前只支持 sse sse_adapter: 'cache' # 选择 SSE 适配器,可选 'cache' 或 'redis' adapters: cache: # Cache 适配器配置 prefix: 'mcp_sse_' ttl: 100 # 消息 TTL 秒数 redis: # Redis 适配器配置 (如果使用 redis) prefix: 'mcp_sse_' host: 'localhost' ttl: 100 tools: # 在此处列出您的工具类,例如: # - App\MCP\Tools\MyCustomTool resources: # 在此处列出您的资源类,例如: # - App\MCP\Resources\MyCustomResource resources_templates: # 在此处列出您的资源模板类,例如: # - App\MCP\Resources\MyCustomResourceTemplate -
通过 Composer 安装: 在项目根目录下运行 Composer 命令安装捆绑包:
composer require klapaudius/symfony-mcp-server -
添加路由: 在您的 Symfony 项目的 'config/routes.yaml' 文件中添加以下配置以暴露 MCP 服务端点:
# config/routes.yaml klp_mcp_server: resource: '@KlpMcpServerBundle/Resources/config/routes.php' type: php
完成以上步骤后,您的 Symfony 应用将具备 MCP 服务器功能,并通过 '/mcp/sse' (GET) 和 '/mcp/messages' (POST) 两个端点与客户端通信。
服务器配置(供 MCP 客户端连接使用)
本项目实现的 MCP 服务器通过 HTTP/SSE 协议与客户端通信,并非作为客户端启动的子进程运行。因此,MCP 客户端需要配置的是服务器的 网络地址 (URL),而不是本地执行的命令和参数。
典型的 MCP 客户端连接配置需要指定服务器的名称以及连接 URL。虽然标准 MCP 客户端配置中常包含 'command' 和 'args' 字段用于启动本地 STDIO 服务器,但对于此类基于 Web 服务器的 SSE 实现,这两个字段通常为空或被忽略。
以下是 MCP 客户端配置通常需要的关键信息示例(请根据您的实际部署环境替换 'http://your-server.com' 和 'mcp' 路径):
{ "name": "您的 MCP 服务器名称 (如: My MCP Server)", "url": "http://your-server.com/mcp/sse", // 对于基于 HTTP 的 MCP 服务器,客户端通常通过 URL 连接,以下字段可能不适用或留空 "command": [], "args": [] }
重要提示:
- 您需要确保您的 Symfony 应用程序已通过 Nginx、Apache 或 Docker 等 Web 服务器正确部署并运行。
- MCP 客户端应连接到您部署的 Symfony 应用的 '/mcp/sse' 端点(具体路径取决于您在 'klp_mcp_server.yaml' 中配置的 'default_path')。客户端发送消息或调用工具通常会使用 MCP Inspector 连接到 '/mcp/sse' 后通过获取到的 'endpoint' 信息(即 '/mcp/messages?sessionId=...')进行后续通信。
基本使用方法
-
创建新工具: 使用 Symfony 控制台命令快速生成工具类:
php bin/console make:mcp-tool MyAwesomeTool按照提示操作,您可以自动将新工具注册到配置文件中。
-
实现工具逻辑: 编辑生成的工具类文件 ('src/MCP/Tools/MyAwesomeTool.php'),实现 'ToolInterface' 定义的 'getName', 'getDescription', 'getInputSchema', 'getAnnotations', 'execute' 方法。
-
创建新资源: 实现 'KLP\KlpMcpServer\Services\ResourceService\ResourceInterface' 或 'KLP\KlpMcpServer\Services\ResourceService\ResourceTemplateInterface' 接口,并在 'klp_mcp_server.yaml' 中注册。
-
测试工具: 使用内置的测试命令在命令行中模拟 MCP 客户端调用您的工具:
# 交互式测试指定工具 php bin/console mcp:test-tool MyAwesomeTool # 列出所有已配置工具 php bin/console mcp:test-tool --list # 使用 JSON 参数直接测试 php bin/console mcp:test-tool MyAwesomeTool --input='{"param1": "value1"}' -
连接 MCP 客户端: 使用兼容 MCP 的客户端(如 MCP Inspector)配置服务器 URL ('http(s)://[your-web-server]/[default_path]/sse') 进行连接,发现并使用服务器提供的工具和资源。
信息
分类
网页与API