🐙

MCP クライアントをTypescriptで利用する

に公開

はじめに

Model Context Protocol (MCP) は、LLM エージェントから外部ツールを容易に呼び出せる仕組みを提供します。
最近MCPを使っているのですが、コードを書くたびに過去のコードを掘り起こしているので、これを機にまとめておきます。

ということで本記事では、TypeScript SDK を用いて複数の MCP サーバーを統合し、ツールを実行する手順を具体的なコード例とともに解説します。

コード全文はGitHubに公開しています。
https://github.com/M6saw0/mcp-client-typescript

動作環境

  • Node.js v20.15.0
  • npm v10.7.0
  • TypeScript

インストール手順

クラスを作成したので、以下のコマンドでGitHubリポジトリをクローンしてください。

# リポジトリをクローン
git clone https://github.com/M6saw0/mcp-client-typescript.git
cd mcp-client-typescript

# 依存パッケージをインストール
npm install

設定ファイル (mcp_config.json)

MCP サーバーの設定は JSON ファイルで管理します。以下はサンプルです。

{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    },
    "file-system": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "./"
      ]
    }
  }
}

クライアントの初期化

設定ファイルからクライアントを生成し、全セッションを確立します。

import { MCPClient } from "@modelcontextprotocol/typescript-sdk";

async function main() {
  // 設定ファイルを読み込んでクライアントを生成
  const client = MCPClient.fromConfigFile("mcp_config.json");
  // すべてのセッションを作成
  await client.createAllSessions();
}

main().catch(console.error);

ツール一覧の取得

listTools() メソッドで、現在登録されているツール名や説明、入力スキーマを確認できます。

const tools = await client.listTools();
for (const tool of tools) {
  console.log(`
    name: ${tool.name}
    description: ${tool.description}
    inputSchema: ${JSON.stringify(tool.inputSchema)}
  `);
}

ツールの実行

LLM が選択したツールを callTool() で呼び出します。内部で最適なサーバーが自動的に選択されます。

const result = await client.callTool({
  name: "fetch",
  args: { url: "https://js.langchain.com/v0.1/docs/modules/agents/tools/dynamic/" }
});
console.log('ツール実行結果:', result);

ワークフロー例

  1. JSON 設定ファイルからクライアントを生成
  2. createAllSessions() で全サーバーに接続
  3. listTools() で利用可能なツールを取得.プロンプトを作成
  4. LLM でツールを選択
  5. callTool() で選択ツールを実行

これにより、LLM エージェントから柔軟に外部ツールを呼び出せます。

まとめ

本記事では、MCP TypeScript SDK を利用したクライアントの構築から、ツール一覧取得、ツール実行までの基本フローを解説しました。ぜひ本記事のサンプルを参考に、MCP を活用してみてください。

参考文献

Discussion