2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPのMCPサーバSDKを試してみる

Last updated at Posted at 2025-10-19

はじめに

少し前までは、MCPサーバ用のSDKにPHP版は存在していませんでした。
しかし先月、PHP向けのMCPサーバSDKが開発されることが発表されました。

こちらが開発中のリポジトリです。

いくつかサンプルコード(Example)が公開されていたので、この記事ではサンプルコードを参考に実際にMCPサーバの作成を試してみようと思います。

試してみる

今回は動作確認が目的のため、挨拶を返すだけのシンプルなツールを定義したMCPサーバを作成してみます。
通信方式にはSTDIOを使用します。

mcp/sdk のインストール

まずはmcp/sdkをcomposerでインストールします。
現状stableが出ていないため、"minimum-stability": "dev""prefer-stable": trueを入れてインストールを行いました。

composer.json
{
    "require": {
        "mcp/sdk": "dev-main"
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

MCPサーバ作成

プロジェクト構成は以下です。

Project
  ├ src
      └ GreetingMcpElements.php
  ├ vendor
      └ mcp/sdk
  ├ composer.json
  └ server.src

以下の2ファイルを作成していきます。

  • GreetingMcpElements.php:MCPツールの定義ファイル
  • server.src:MCPサーバのエントリーポイント

ツールの定義

まずはGreetingMcpElements.phpにツールを定義しましょう。
#[McpTool]アトリビュートを付与することで、MCPサーバにツールであることを認識させることができます。

GreetingMcpElements.php
<?php

declare(strict_types=1);

namespace Koya\McpSdk;

use Mcp\Capability\Attribute\McpTool;

class GreetingMcpElements
{
    #[McpTool(name: 'greet', description: 'Greets a user in Japanese')]
    public function greet(string $name): string
    {
        return "こんにちは!, {$name}! 私は挨拶をするMCPです!.";
    }
}

エントリーポイントの作成

続いて、MCPサーバのエントリーポイントを作成しましょう。
例を見るとserver.phpという名前が多いので倣っています。

server.php
<?php

declare(strict_types=1);

require_once __DIR__ . '/vendor/autoload.php';

use Mcp\Server;
use Mcp\Server\Transport\StdioTransport;

$server = Server::builder()
    ->setServerInfo('Greeting MCP Server', '1.0.0')
    ->setDiscovery(__DIR__, ['.', 'src'])
    ->build();

$transport = new StdioTransport();

$server->run($transport);

Server::builderでMCPサーバの定義をします。setDiscovery()では、ツールが定義されているディレクトリを指定しておきます。のちの処理で#[McpTool]アトリビュートを付与したメソッドを検索し、それをツールとして認識するようです。
$transportはStdioやsseなどの通信方式を指定するために利用されます。

動作確認

作成できたので、動作確認をしましょう。
VScodeのCopilotChatで検証をしてみます。

まずはmcp.jsonに今回作成したMCPサーバを定義します。

mcp.json
{
	"servers": {
		"greeting-php-mcp": {
			"command": "php",
			"args": [
				"C:\\Path\\to\\your\\project\\mcp-sdk\\server.php"
			]
		}
	},
	"inputs": []
}

その後、チャットをしてみたところ、無事に呼び出すことができました!

image.png

おわりに

今回は開発中のMCPサーバSDKをPHPで試してみました。
アトリビュートでツールを簡潔に定義できるのは、他の言語と同様に便利ですね。

また、既存のAPIをMCPツールとして公開したいということもあると思うので、その場合どうすればいいのかなどは今後検証してみたいと思います。

ここまでご覧いただき、ありがとうございました!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?