mcpField
M
MCP SDK for Laravel

MCP SDK for Laravel

ローカル
github.com/ronydebnath開発ツール073 週間前に更新

MCP SDK for Laravel について

MCP SDK for Laravelは、MCPクライアントとサーバーを構築するためのLaravelパッケージです。ストリーミング、認証、会話のメモリとコンテキスト管理を備えています。

主な機能

  1. 01MCPクライアントとサーバー機能
  2. 02リクエストと応答のストリーミング
  3. 03組み込み認証
  4. 04会話のメモリとコンテキスト管理
  5. 05進捗トラッキング

活用シーン

  1. 01LaravelアプリからMCPサーバーに接続
  2. 02Laravelのルートでメッセージハンドラーを公開
  3. 03MCPリクエストの認証
  4. 04会話の状態と進捗を維持

MCP 対応

サーバーに接続するMCPクライアント機能と、リクエストを処理するサーバー機能の両方を提供します。サーバーではメッセージハンドラーの登録、認証、ストリーミングに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Packagist の最新バージョン

Laravel 向け MCP SDK

Model Context Protocol(MCP)サーバーとのやり取りや、MCP サーバーの実装を行うための Laravel パッケージです。

インストール

composer でパッケージをインストールできます。

composer require ronydebnath/mcp-sdk

パッケージのサービスプロバイダーは自動的に登録されます。

次のコマンドで設定ファイルを公開できます。

php artisan vendor:publish --provider="Ronydebnath\MCP\MCPServiceProvider" --tag="config"

これにより、設定ディレクトリに config/mcp.php ファイルが作成されます。

設定

パッケージの設定ファイルには、クライアントとサーバーの両方の機能に関する設定が含まれています。

return [
    'default' => env('MCP_CONNECTION', 'default'),
    
    'connections' => [
        'default' => [
            'host' => env('MCP_HOST', 'localhost'),
            'port' => env('MCP_PORT', 8000),
            'timeout' => env('MCP_TIMEOUT', 30),
            'verify' => env('MCP_VERIFY_SSL', true),
        ],
    ],

    'server' => [
        'session_expiry' => env('MCP_SESSION_EXPIRY', 60),
        'max_connections' => env('MCP_MAX_CONNECTIONS', 100),
        'allowed_origins' => explode(',', env('MCP_ALLOWED_ORIGINS', '*')),
    ],

    'auth' => [
        'token_expiry' => env('MCP_TOKEN_EXPIRY', 60),
        'token_length' => env('MCP_TOKEN_LENGTH', 32),
    ],

    'memory' => [
        'max_size' => env('MCP_MEMORY_MAX_SIZE', 100),
        'persist' => env('MCP_MEMORY_PERSIST', false),
        'storage_path' => env('MCP_MEMORY_STORAGE_PATH', storage_path('app/mcp/memory')),
    ],

    'message' => [
        'default_type' => 'text',
        'max_length' => env('MCP_MAX_MESSAGE_LENGTH', 4096),
    ],
];

MCP クライアントの使用

依存性注入を使用する
use Ronydebnath\MCP\Client\MCPClient;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

class YourController
{
    public function __construct(private MCPClient $client)
    {}

    public function handle()
    {
        $message = new Message(
            role: Role::USER,
            content: 'Hello, how are you?',
            type: 'text'
        );

        $response = $this->client->send($message);
    }
}
ファサードを使用する
use Ronydebnath\MCP\Facades\MCP;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

$message = new Message(
    role: Role::USER,
    content: 'Hello, how are you?',
    type: 'text'
);

$response = MCP::send($message);
複数のメッセージを送信する
use Ronydebnath\MCP\Client\MCPClient;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

$messages = [
    new Message(role: Role::USER, content: 'First message', type: 'text'),
    new Message(role: Role::USER, content: 'Second message', type: 'text'),
];

$responses = $client->sendMultiple($messages);
ストリーミングを使用する
use Ronydebnath\MCP\Client\StreamingMCPClient;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

// Using Dependency Injection
class YourController
{
    public function __construct(private StreamingMCPClient $client)
    {}

    public function handle()
    {
        $message = new Message(
            role: Role::USER,
            content: 'Hello, how are you?',
            type: 'text'
        );

        $this->client->stream($message, function ($chunk) {
            // Handle each chunk of the response
            echo $chunk['content'];
        });
    }
}

// Using the Facade
MCP::stream($message, function ($chunk) {
    echo $chunk['content'];
});

// Streaming multiple messages
$messages = [
    new Message(role: Role::USER, content: 'First message', type: 'text'),
    new Message(role: Role::USER, content: 'Second message', type: 'text'),
];

$client->streamMultiple($messages, function ($chunk) {
    echo $chunk['content'];
});

MCP サーバーの使用

ルートの設定

routes/api.php に次のルートを追加します。

use Ronydebnath\MCP\Server\MCPServer;

Route::post('/mcp', function (Request $request, MCPServer $server) {
    return $server->handle($request);
});
メッセージハンドラーの登録
use Ronydebnath\MCP\Server\MCPServer;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

$server->registerHandler('text', function (Message $message) {
    return [
        'role' => Role::ASSISTANT->value,
        'content' => 'This is a response to: ' . $message->content,
        'type' => 'text',
    ];
});
認証の使用

このパッケージには認証機能が組み込まれています。

use Ronydebnath\MCP\Server\Auth\AuthMiddleware;
use Ronydebnath\MCP\Server\Auth\AuthProvider;

// Generate a token
$token = $authProvider->generateToken();

// Register the authentication middleware
$server->registerMiddleware(function ($request) use ($authMiddleware) {
    return $authMiddleware->handle($request);
});

クライアントは次のいずれかの方法で認証できます。

  1. Authorization ヘッダー内の Bearer トークン:
Authorization: Bearer your-token-here
  1. クエリパラメーターとしてのトークン:
/mcp?token=your-token-here
ストリーミングリクエストの処理

クライアントが Accept: text/event-stream ヘッダーを設定すると、サーバーはストリーミングリクエストを自動的に処理します。サーバーは次の処理を行います。

  1. 新しいセッションを作成するか、既存のセッションを使用します
  2. 初期接続メッセージを送信します
  3. 生成され次第、応答チャンクをストリーミングします
  4. 接続中はセッションを維持します

メモリとコンテキストの管理

このパッケージには、会話の状態を維持するためのメモリおよびコンテキスト管理機能が含まれています。

メモリの使用
use Ronydebnath\MCP\Shared\Memory;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

$memory = app(Memory::class);

// Add messages to memory
$memory->add(new Message(
    role: Role::USER,
    content: 'Hello',
    type: 'text'
));

// Get messages by role
$userMessages = $memory->getByRole(Role::USER);

// Get messages by type
$textMessages = $memory->getByType('text');

// Clear memory
$memory->clear();
コンテキストの使用
use Ronydebnath\MCP\Shared\Context;
use Ronydebnath\MCP\Types\Message;
use Ronydebnath\MCP\Types\Role;

$context = app(Context::class);

// Set context data
$context->set('user_id', 123);
$context->set('preferences', ['theme' => 'dark']);

// Add messages to context
$context->addMessage(new Message(
    role: Role::USER,
    content: 'Hello',
    type: 'text'
));

// Get context data
$userId = $context->get('user_id');
$messages = $context->getMessages();

// Clear context
$context->clear();
進捗状況の追跡
use Ronydebnath\MCP\Shared\Progress;

$progress = app(Progress::class);

// Update progress
$progress->update(50, 'Processing...', ['step' => 'analysis']);

// Increment progress
$progress->increment(10, 'Moving to next step');

// Get progress information
$percentage = $progress->getPercentage();
$status = $progress->getStatus();
$metadata = $progress->getMetadata();

// Check if complete
if ($progress->isComplete()) {
    // Handle completion
}

// Reset progress
$progress->reset();

テスト

composer test

セキュリティ

セキュリティに関する問題を発見した場合は、課題トラッカーを使用せず、hello[at]ronydebnath.com までメールでご連絡ください。

ライセンス

MIT ライセンス(MIT)。詳細については、ライセンスファイルをご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。