2026年5月7日木曜日

TypeScriptで実装するMCP Server:Stdioトランスポートを介したAIとのセキュアな対話

はじめに:AIエージェントの可能性を拡張するMCP

近年のAI開発において、LLM(大規模言語モデル)の進化は目覚ましいものがありますが、単独のモデルがすべての情報を保持することは不可能です。そこで重要となるのが「Model Context Protocol(MCP)」です。MCPは、AIモデルとデータソースを標準化されたプロトコルで接続するためのオープンフレームワークであり、AIを単なる対話ツールから、ローカルデータや業務システムを自在に操作する「エージェント」へと進化させる鍵となります。

本稿では、TypeScriptを用いてMCPサーバーを構築し、Stdioトランスポートを介した安全なデータアクセスの仕組みを深掘りします。

なぜStdioトランスポートなのか:設計上のトレードオフ

MCPサーバーには、HTTPやSSE(Server-Sent Events)などの通信方式がありますが、今回採用する「Stdioトランスポート」には特筆すべき利点があります。それは、ホストプロセスと子プロセスとしてMCPサーバーが直接通信するため、ネットワークポートを開放する必要がなく、ファイアウォールの制約を受けないという「高いセキュリティ」と「低レイテンシ」の両立です。

外部ネットワークを経由しないため、機密性の高いローカルファイルや社内データベースへのアクセスを、安全かつ閉じた環境で実現できます。これは、エンタープライズ環境でエージェントを導入する際の必須要件とも言えます。

TypeScriptでのMCPサーバー構築:実践ステップ

MCPサーバーの構築には公式の「@modelcontextprotocol/sdk」を利用します。以下の手順で、極めてシンプルにサーバーを立ち上げることができます。

1. 依存関係のインストール

npm install @modelcontextprotocol/sdk

2. サーバー実装の基本形

以下のコードは、JSON-RPCを介してクライアントからツールを呼び出せるようにする最小構成です。

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";

const server = new Server({ name: "my-local-server", version: "1.0.0" }, { capabilities: { tools: {} } });

// 利用可能なツールの定義
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: "get_system_info",
    description: "システムのステータスを取得します",
    inputSchema: { type: "object", properties: {} }
  }]
}));

// ツールの実行ロジック
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "get_system_info") {
    return { content: [{ type: "text", text: "System status: OK" }] };
  }
  throw new Error("Unknown tool");
});

const transport = new StdioServerTransport();
await server.connect(transport);

3. JSON-RPCによるフローの仕組み

MCPは背後で「JSON-RPC 2.0」を活用しています。クライアント(AIエージェント)がリクエストを送ると、Stdio経由でサーバーがJSONメッセージとして受け取り、定義されたスキーマに従って処理を実行します。この標準化されたやり取りにより、AIはデータの構造を即座に理解し、正確な操作を行うことが可能となります。

セキュアな運用のために

ローカルでデータを扱う際、もっとも注意すべきは「認証」と「認可」です。MCPサーバーを構築する際は、以下の観点を意識してください。

  1. 最小権限の原則: サーバーに付与するツールは、必要最小限の機能に留めてください。
  2. 入力のバリデーション: AIが生成する引数は必ず検証を行い、コマンドインジェクションなどを防ぐ必要があります。
  3. 環境変数の隔離: APIキーやシークレットは.envファイルを用い、サーバープロセスからのみ読み取れるように設計します。

まとめ:AIとローカル環境を接続する新たなエコシステム

MCPの登場により、AIエージェントは「知識」だけでなく「ツール」という手足を手に入れました。TypeScriptを用いたStdioベースのサーバー構築は、その第一歩であり、最も堅牢な実装パターンの一つです。

今後は、さらに複雑なビジネスロジックをMCP経由で提供することで、AIが自律的に業務を遂行する環境が当たり前になるでしょう。まずは今回紹介した基礎をベースに、皆様のプロジェクトに必要なデータ連携を試してみてください。詳細は公式ドキュメント(modelcontextprotocol.io)でも随時更新されていますので、併せて参照することを強く推奨します。

0 件のコメント:

コメントを投稿