🐙
MCP クライアントをTypescriptで利用する
はじめに
Model Context Protocol (MCP) は、LLM エージェントから外部ツールを容易に呼び出せる仕組みを提供します。
最近MCPを使っているのですが、コードを書くたびに過去のコードを掘り起こしているので、これを機にまとめておきます。
ということで本記事では、TypeScript SDK を用いて複数の MCP サーバーを統合し、ツールを実行する手順を具体的なコード例とともに解説します。
コード全文はGitHubに公開しています。
動作環境
- 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);
ワークフロー例
- JSON 設定ファイルからクライアントを生成
-
createAllSessions()
で全サーバーに接続 -
listTools()
で利用可能なツールを取得.プロンプトを作成 - LLM でツールを選択
-
callTool()
で選択ツールを実行
これにより、LLM エージェントから柔軟に外部ツールを呼び出せます。
まとめ
本記事では、MCP TypeScript SDK を利用したクライアントの構築から、ツール一覧取得、ツール実行までの基本フローを解説しました。ぜひ本記事のサンプルを参考に、MCP を活用してみてください。
Discussion