💬

TypeScriptでMCPサーバーのtool呼び出しをする

2025/01/08に公開

Model Context Protocol (MCP) を使用してTypeScriptで特定のMCPサーバーのツールを呼び出す方法を説明します。
MCPサーバーの呼び出しは本来MCPホストとして機能するClaude DesktopアプリやZedの内部で透過的に実行されていますが、エディタのプラグインなどにMCPサーバー連携機能をつける時には複数のMCPサーバーへの接続管理と呼び出しを作る必要があります。
以下の例ではTypeScript SDKでMCPクライアントを使って、@modelcontextprotocol/server-memory パッケージで提供されるサーバーを呼び出します。

  • Client: MCPクライアントを作成するために使用されます。
  • StdioClientTransport: 標準入出力(stdio)を使用してMCPサーバーと通信するためのトランスポート層を提供します。
  • CallToolResultSchema: ツール呼び出しの結果の型定義に使用されます。
  1. MCPクライアントの初期化:

    • Client クラスの新しいインスタンスを作成し、クライアントの名前とバージョン、および必要なクライアント機能を設定します。
    const client = new Client(
        {
            name: "mcp-typescript test client",
            version: "0.1.0",
        },
        {
            capabilities: {
    			sampling: {},
    		}
        },
    );
    
  2. トランスポート層の設定:

    • StdioClientTransport を使用して、npx コマンドで @modelcontextprotocol/server-memory サーバーを起動するように設定します。
    const clientTransport = new StdioClientTransport({
        command: "npx",
        args: ["-y", "@modelcontextprotocol/server-memory"],
    });
    
  3. サーバーへの接続:

    • client.connect(clientTransport) を呼び出して、サーバーに接続します。
    • client.request を使用して create_entities ツールを呼び出し、新しいエンティティを知識グラフに追加します。エンティティには、nameが必須です、server-memoryのドキュメントに仕様が書いてあります。
     await client.request(
        {
            method: "tools/call",
            params: {
                name: "create_entities",
                arguments: {
                    entities: [{
                        "name": uuid,
                        "created_at": new Date().toISOString(),
                    }]
                },
            },
        },
        CallToolResultSchema,
    );
    
    • create_entities ツールは、複数の新しいエンティティをナレッジグラフに作成するために使用されます。このツールは、名前 (string)、エンティティタイプ (string)、および関連する観測値 (string[]) を含むオブジェクトの配列を入力として受け取ります。既存の名前を持つエンティティは無視されます。
  4. read_graph ツールの呼び出し:

    • 次に、read_graph ツールを呼び出してナレッジグラフの内容を取得します。
        const result = await client.request({
            method: "tools/call",
            params: {
                name: "read_graph",
                arguments: {},
            }
        }, CallToolResultSchema)
    
  • read_graph ツールは、知識グラフ全体を読み取り、すべてのエンティティと関係を含む完全なグラフ構造を返します。

テスト

実行して新たなデータが登録されることを確認します。

❯ npx tsx call-tool.ts
Connected to server.
Knowledge Graph MCP Server running on stdio
Initialized.
{
  "entities": [
    {
      "type": "entity",
	  "name": "test_entity_o6qu1i",
	  "created_at": "2025-01-08T13:13:38.090Z"
    }
  ],
  "relations": []
}
Closed.

データの実態はMCPサーバーのnpmパッケージ内に保存されたJSONファイルです。

find ./node_modules -name memory.json
./node_modules/@modelcontextprotocol/server-memory/dist/memory.json

❯ jq . < ./node_modules/@modelcontextprotocol/server-memory/dist/memory.json
{
  "type": "entity",
  "name": "test_entity_o6qu1i",
  "created_at": "2025-01-08T13:13:38.090Z"
}

Discussion