Встановлення MCP Bundle

Встановлення MCP Bundle

Вимоги версії 1.x: PHP >= 8.4, Symfony ^7.2 або ^8.0, ufo-tech/json-rpc-bundle ^10.4.3, mcp/sdk ^0.8.1. Сервер JsonRpcBundle має бути вже встановлений.

Крок 1: Встановлення

composer require ufo-tech/mcp-bundle

Крок 2: Реєстрація бандла

Додайте бандл у config/bundles.php поруч із JsonRpcBundle:

return [
    // ...
    Ufo\JsonRpcBundle\UfoJsonRpcBundle::class => ['all' => true],
    Ufo\McpBundle\UfoMcpBundle::class => ['all' => true],
];

Крок 3: Налаштування

Рецепта Symfony Flex для бандла поки немає: файли конфігурації копіюються вручну.

Скопіюйте vendor/ufo-tech/mcp-bundle/install/packages/ufo_mcp.yaml у config/packages/. Мінімальна конфігурація:

# config/packages/ufo_mcp.yaml
ufo_mcp:
    enabled: true
    mcp_server_info:
        name: 'io.github.your-org/your-app'
        title: 'Your App MCP Server'

Без файлу бандл працює на типових значеннях. Усі параметри — на сторінці Налаштування.

Крок 4: Реєстрація маршрутів

Скопіюйте vendor/ufo-tech/mcp-bundle/install/routes/ufo_mcp.yaml у config/routes/:

# config/routes/ufo_mcp.yaml
ufo_mcp:
    resource: ../../vendor/ufo-tech/mcp-bundle/config/router.yaml
    prefix: /mcp
    defaults: { api_group: mcp }

Один імпорт — один MCP-ендпоінт, що обслуговує одну групу API (api_group). Щоб додати ще ендпоінт, імпортуйте той самий router.yaml ще раз з іншими prefix і api_group — див. Маршрути.

Крок 5: Методи для MCP

Додайте RPC-методи в групу ендпоінта атрибутом #[RPC\APIGroups]:

use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
use Ufo\McpBundle\Attribute\McpTool;
use Ufo\RpcObject\RPC;

#[RPC\Info('Catalog')]
#[RPC\APIGroups(['mcp'], withDefault: false)]   // лише /mcp, не /rpc
final class CatalogProcedure implements IRpcService
{
    /** Search products by name. */
    #[McpTool(readOnlyHint: true)]
    public function search(string $query, int $limit = 10): array
    {
        // ...
    }
}

withDefault: false прибирає методи з типової групи (/rpc); без нього методи доступні і в /rpc, і в /mcp.

#[McpTool] необов'язковий: він лише додає підказки для агента. Інструментом стає кожен метод групи — див. Інструменти.

Перевірка

Запит Що повертає
POST /mcp MCP-ендпоінт (Streamable HTTP)
GET /mcp/manifest/claude.json Конфігурацію підключення для Claude Code (також cursor, gemini, openai)
GET /mcp/server.json Документ для MCP Registry

Маніфест для Claude Code:

Request:

curl https://example.com/mcp/manifest/claude.json

Response:

{
    "mcpServers": {
        "mcp": {
            "type": "http",
            "url": "https://example.com/mcp",
            "headers": {"Ufo-RPC-Token": "${UFO_MCP_TOKEN}"}
        }
    }
}

Якщо в JsonRpcBundle увімкнено protected_doc, додайте до запиту заголовок з токеном. Збережіть відповідь у .mcp.json проєкту і задайте змінну оточення UFO_MCP_TOKEN — Claude Code побачить інструменти групи.

Перелік інструментів без AI-клієнта — через MCP Inspector:

npx -y @modelcontextprotocol/inspector --cli https://example.com/mcp \
    --transport http --header "Ufo-RPC-Token: change-me" --method tools/list

Що далі?