【Laravel12】Httpファサードを使ってMCPサーバーへリクエスト送信

Laravel

LaravelのHttpファサードを使ってMCPサーバーへリクエストを送信する方法、というか、メインはPOSTメソッドのボディを生JSONで送信する方法のメモです。

HTTP Client - Laravel 12.x - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We???ve already laid the foundation ??? free...

MCPサーバーの例として、以前の記事で作成したユーザー検索MCPを使ってみます。

前提

▼APIキーがある場合は「.env」に記述

(上記MCPサーバーでは使ってない)

USER_SEARCH_MCP_API_KEY="ust-ak-hogehoge1234567890"

env() で拾う

$apiKey = env('USER_SEARCH_API_KEY');

▼MCPサーバーURL

http://localhost:8000/mcp/search-user

$url = 'http://localhost:8000/mcp/search-user';

▼ツール名

「search-user」

▼パラメータ

  • name: h
  • per-page: 5
  • page: 2

送信データ構築

MCPサーバーに送信する tools/call のJSON構造は次の通りです。

{
    "jsonrpc": "2.0",
    "id": "[一意のリクエストID]",
    "method": "tools/call",
    "params": {
        "name": "[ツール名]",
        "arguments": {
            "arg1": "値1",
            "arg2": "値2",
            ...
        } 
}

次のような感じでPHPのハッシュ配列として定義して、

json_encode() してしまえばOKでしょう。

$method = 'tools/call';
$toolName = 'search-user';
$arguments = [
    'name' => 'h',
    'per-page' => 5,
    'page' => 2,
];

$data = [
    'jsonrpc' => '2.0',
    'id' => uniqid(),
    'method' => $method,
    'params' => [
        'name' => $toolName,
        'arguments' => $arguments,
    ],
];

MCPサーバーへのリクエスト送信

次の通り、やり方は何通りかありますが、post()だけでいけてしまいますね。

$response = Http::withToken($apiKey)->accept('application/json')->withBody(json_encode($data))->post($url);
$response = Http::withToken($apiKey)->accept('application/json')->post($url, $data);
$response = Http::withToken($apiKey)->acceptJson()->withBody(json_encode($data))->post($url);
$response = Http::withToken($apiKey)->asJson()->post($url, $data);
$response = Http::withToken($apiKey)->post($url, $data);

※withToken()で追加してくれるHTTPリクエストヘッダーは次の通りです。

Authorization: Bearer [APIキー]

※別のHTTPリクエストヘッダーで認証している場合は withHeaders() で設定しましょう。

$response = Http::withHeaders([
    'X-API-KEY' => $apiKey,
])->post($url, $data);

tinkerで動作確認

tinkerを起動します。

php artisan tinker

諸々入力しておきます。

リクエストを送信してみます。

$response = Http::withToken($apiKey)->post($url, $data);

レスポンスを確認してみます。

dump $response->json();

※qキー押下で表示モード終了

ばっちり取得できました。

  • 1
  • 0
  • 0
  • 0

コメント

タイトルとURLをコピーしました