💬
TypeScriptでMCPサーバーのtool呼び出しをする
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
: ツール呼び出しの結果の型定義に使用されます。
-
MCPクライアントの初期化:
-
Client
クラスの新しいインスタンスを作成し、クライアントの名前とバージョン、および必要なクライアント機能を設定します。
const client = new Client( { name: "mcp-typescript test client", version: "0.1.0", }, { capabilities: { sampling: {}, } }, );
-
-
トランスポート層の設定:
-
StdioClientTransport
を使用して、npx
コマンドで@modelcontextprotocol/server-memory
サーバーを起動するように設定します。
const clientTransport = new StdioClientTransport({ command: "npx", args: ["-y", "@modelcontextprotocol/server-memory"], });
-
-
サーバーへの接続:
-
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[]) を含むオブジェクトの配列を入力として受け取ります。既存の名前を持つエンティティは無視されます。
-
-
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