项目简介

'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 提供必要的上下文数据。
  • 能力声明: 服务器在初始化时向客户端声明其支持的功能(如工具、资源)。
  • 开发者工具: 提供方便的命令行工具,用于创建和测试自定义工具。

安装步骤

  1. 创建配置文件: 在您的 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
  2. 通过 Composer 安装: 在项目根目录下运行 Composer 命令安装捆绑包:

    composer require klapaudius/symfony-mcp-server
  3. 添加路由: 在您的 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=...')进行后续通信。

基本使用方法

  1. 创建新工具: 使用 Symfony 控制台命令快速生成工具类:

    php bin/console make:mcp-tool MyAwesomeTool

    按照提示操作,您可以自动将新工具注册到配置文件中。

  2. 实现工具逻辑: 编辑生成的工具类文件 ('src/MCP/Tools/MyAwesomeTool.php'),实现 'ToolInterface' 定义的 'getName', 'getDescription', 'getInputSchema', 'getAnnotations', 'execute' 方法。

  3. 创建新资源: 实现 'KLP\KlpMcpServer\Services\ResourceService\ResourceInterface' 或 'KLP\KlpMcpServer\Services\ResourceService\ResourceTemplateInterface' 接口,并在 'klp_mcp_server.yaml' 中注册。

  4. 测试工具: 使用内置的测试命令在命令行中模拟 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"}'
  5. 连接 MCP 客户端: 使用兼容 MCP 的客户端(如 MCP Inspector)配置服务器 URL ('http(s)://[your-web-server]/[default_path]/sse') 进行连接,发现并使用服务器提供的工具和资源。

信息

分类

网页与API