はじめに
自社サービスにREST APIを提供した場合、外部サービスと連携するには連携先のサービスに自社APIとの連携部分(自社アプリケーションのAPIをコールする機能)を実装してもらう必要がある。
AIサービスが増加する中、MCPサーバを準備しておくと、連携先AIサービスでは大きな実装が不要になる可能性がある。
というのも、自社APIがMCPを提供することで、連携先のAIサービスではMCPのURLと認証情報を格納する実装さえあれば、自社サービスと連携することができるからだ。
この記事では、symfonyアプリケーションにMCP機能を追加する方法を記す。
使うもの
- Symfony MCP bundle: https://symfony.com/doc/current/ai/bundles/mcp-bundle.html
実装方法
基本設定
- composer でインストールする。
composer require symfony/mcp-bundle
-
config/routes.yamlを以下のように書く。
mcp:
resource: .
type: mcp
-
config/packages/mcp.yamlにMCPサーバの基本設定を書いておく。
mcp:
servers:
default:
name: 'rpst-api'
transports:
http: true
stdio: true
http:
path: /mcp
registry:
tools:
- 'App\Mcp\Tool\'
これでPOST /mcpがMCPエンドポイントになる。
ツールを作成する
LLMがMCPサーバを利用して何かしらの操作を行うためには、MCPにツールが登録されている必要がある。
ツールは以下のように実装する。
<?php
namespace App\Mcp\Tool;
use Mcp\Capability\Attribute\McpTool;
use Mcp\Capability\Attribute\Schema;
use App\Application\Order\SearchOrderService;
final class SearchOrderTool
{
public function __construct(
private SearchOrderService $searchOrderService,
) {
}
#[McpTool(
name: 'search_order',
description: '注文IDから注文情報を取得します'
)]
public function search(
#[Schema(description: '注文ID')]
int $orderId,
): array {
$order = $this->searchOrderService->search($orderId);
return [
'id' => $order->id,
'customerId' => $order->customerId,
'status' => $order->status,
'totalPrice' => $order->totalPrice,
];
}
}
これだけでMCPツールが作成でき、自動的にMCPに登録される。
動作確認
MCPの動作確認はSymfonyでは以下のように簡単にできる。
php bin/console debug:mcp
また、特定のツールを指定してデバッグできる。
php bin/console debug:mcp search_order
まとめ
昨今、様々な業務アプリケーションにAI機能が実装されてきている。
AIエージェントはMCPという共通インターフェースを利用できるので、自社サービスがMCPサーバを提供することで、他社のシステムとの連携が容易になってくるはずだ。各々がコーディングエージェントを利用する場合は、MCPを利用するよりもSKILLS+CLIで良いという意見もある。MCPはその領域ではなく、Saas同士の連携に威力を発揮するかもしれない。