MCP协议服务器

基于Symfony框架的MCP协议服务器,通过HTTP和服务器发送事件(SSE)端点提供数据访问和实用工具,支持AI助手集成和多种外部服务连接。

  • by odinuv
  • PHP
  • 本地部署
  • 更新于
在 GitHub 查看 odinuv/mcp-test

使用说明

MCP服务器-Symfony实现

基于Symfony的MCP(模型上下文协议)服务器,通过HTTP和服务器发送事件(SSE)端点公开各种数据访问和实用工具。使用PHP 8.4和Symfony 7.3构建。

特性

  • MCP协议支持:实现AI助手集成的模型上下文协议规范
  • 多传输层:支持流式HTTP和SSE传输
  • 可扩展工具系统:使用Symfony的服务容器轻松添加工具
  • 数据访问工具:查询气象数据、情绪数据和PostgreSQL数据库
  • 外部API集成:连接到Mapy.cz和其他外部服务
  • Docker开发环境:与RoadRunner服务器进行一致的开发设置

可用的MCP工具

  • Postgresmetotool:从PostgreSQL查询气象站数据
  • MeteoDataool:访问气象数据集
  • MeteoStation工具:检索气象站信息
  • 情绪数据工具:访问情绪分析数据集
  • 列表数据集工具:列出可用数据集
  • 地图放置工具:使用Mapy.cz API搜索地点
  • 最近流量工具:获取最近的交通信息
  • 回声工具:回声消息(实用程序/测试)
  • 全能闹钟:获取指定时区的当前时间(实用程序/测试)

快速开始

先决条件

  • Docker和Docker Compose
  • (可选)用于Mapy.cz等外部服务的API密钥

安装

docker-compose run --rm dev composer install

配置环境

复制 .env 到 .env.local 并配置任何必要的环境变量:

cp .env .env.local

特定工具所需的环境变量:

  • MAPY_API_KEY:适用于MapyPlacesTool
  • POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DATABASE, POSTGRES_USERNAME, POSTGRES_PASSWORD:适用于PostgresMeteoTool

启动服务器

docker-compose up dev-server

服务器将在上运行 localhost:8080.

验证安装

检查运行状况端点:

curl localhost:8080/health-check

列出可用的MCP工具:

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }'

使用Docker

Project已经设置了Docker开发环境,所以你不需要在本地计算机上安装任何东西,除了 Docker和Docker Compose。

要运行PHP脚本,请使用 dev 服务:

docker-compose run --rm dev composer install   # install dependencies using Composer 
docker-compose run --rm dev composer phpunit   # run Phpunit as a Composer script
docker-compose run --rm dev vendor/bin/phpunit # run Phpunit standalone
docker-compose run --rm dev bin/console        # run Symfony console commands

要运行Web服务器,托管您的应用程序,请使用 dev-server 服务:

docker-compose up dev-server

要运行所有CI检查(验证、代码样式、静态分析、测试),请使用 ci 服务:

docker-compose run --rm ci

MCP端点

服务器公开以下MCP协议端点:

流式HTTP传输

  • POST /mcp -MCP协议消息的直接HTTP请求/响应

苏格兰和南方能源公司运输

  • GET /mcp/sse -用于实时流式传输的服务器发送事件端点
  • POST /mcp/messages -向活动的SSE会话提交消息

示例:调用工具

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "get-time",
      "arguments": {
        "timezone": "America/New_York",
        "format": "Y-m-d H:i:s"
      }
    }
  }'

有关更多示例,请参见 MCP_TEST.md.

创建新工具

  1. 在中创建新类 src/Mcp/ 实现 StreamableToolInterface
  2. 将工具类添加到 config/packages/klp_mcp_server.yaml
  3. 该工具将被自动发现和注册

看 MCP_TEST.md 举一个完整的例子。

环境配置

对于本地开发,该应用程序遵循Symfony的最佳实践 .env 文件夹:

  • .env -本地开发的版本默认值
  • .env.local -本地覆盖(未版本化)
  • .env.test -测试环境配置

生产部署使用常规环境变量(Docker -e 旗帜)而不是 .env 文件夹。

发展

代码质量

# Run code style check
docker-compose run --rm dev composer phpcs

# Auto-fix code style issues
docker-compose run --rm dev composer phpcbf

# Run static analysis
docker-compose run --rm dev composer phpstan

# Run tests
docker-compose run --rm dev composer phpunit

运行单个测试

# Run specific test file
docker-compose run --rm dev vendor/bin/phpunit tests/Controller/IndexActionTest.php

# Run specific test method
docker-compose run --rm dev vendor/bin/phpunit --filter testActionReturnsResponse

许可证

专有的