背景と目的
最近「MCPサーバー」という言葉をよく耳にしますよね。
色々な解説を読んでみるのですが、結局「MCPって何?どうやって動かすの?」というのがよくわかりませんでした。
なので、理解のため、自前で作って動かしてみることにしました。
今回はローカルに最小サーバーを立てて、AIチャット(GitHub Copilot Chat)から呼んでみるところまでやってみました。
MCPサーバーとは
MCPは、Model Context Protocol の略です。イメージ的には、AI Chatに専用のAPIを追加すると考えるとわかりやすいです。
簡単に言うと
- AI Chat からの自然言語でリクエストを受け取る
- 処理して結果を返す
ための仕組みです。
ローカルMCPサーバーを作る
環境
- macOS 13.7.4
- Node.js v22
- npm v10
- VSCode + GitHub Copilot Chat (プレビュー機能でMCP対応済み)
セットアップ
まずは新しいディレクトリを作り、MCP SDK等をインストールします。
mkdir mcp-sample cd mcp-sample npm init -y npm install zod npm install @modelcontextprotocol/sdk
👉 何をしているか?
・@modelcontextprotocol/sdk は MCP サーバーを書くための公式SDKです。
これを入れると Server クラスを使ってサーバーを起動できます。
・zodは、型チェックができるライブラリです(これを入れないとエラーになる)
設定ファイルとコード
MCPサーバーをチャットから使えるようにするために、mcp.json という設定ファイルを作成します。
{ "servers": { "my-mcp-server": { "command": "node", "args": ["${workspaceFolder}/index.js"], } } }
👉 何をしているか?
GitHub Copilot Chatがこのファイルを読み込んで MCPサーバーを起動します。
次に、「文字列をそのまま返す」だけの処理のindex.js を作成します。
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import {z} from 'zod'; // MCP サーバーを作成 const server = new McpServer({ name: 'My MCP Server', version: '1.0.0', }); // greet ツールを登録 server.registerTool( 'greet', { title: 'Greet Tool', description: 'Echoes the input text', inputSchema: {text: z.string()} // zodで入力の型を定義 }, async ({text}) => { // 受け取ったテキストをそのまま返す return {content: [{ type: 'text', text }]}; } ); // GitHub Copilot Chatとの通信 const transport = new StdioServerTransport(); await server.connect(transport);
👉 何をしているか?
・new McpServer()
でMCPサーバーのインスタンスを作成
・registerTool
で、greetコマンドを登録(処理内容は、文字入力をそのまま返す)
・zodを使いインプットのパラメータ(text)が、文字列であることを定義
・StdioServerTransport
で、GitHub Copilot Chatとローカル通信する
実行してみる
ローカルにMCPサーバーを起動します。
node index.js
AIチャットから呼び出す
VS CodeのGitHub Copilot Chatを開いて、入力します。
チャット欄に返ってきた結果:
👉 何をしているか?
・#greet
は、index.jsで定義した「greetツール」を呼び出すコマンド
・{ "text": "hello" }
を入力に渡す
・greetツールで処理して、hello
を返している
「AIチャットのコマンドで入力 → MCPサーバーの処理 → 結果が返る」という流れになっています。
今回理解できたこと
- MCPサーバーの役割:Copilot Chat に「自作コマンド」を追加できる仕組み
- 最小構成:
mcp.json + index.js
で十分動かせる - 通信の流れ:GitHub Copilot Chat ⇔ MCPサーバーが「リクエスト・レスポンス形式」でやり取りする
まずは「文字を返すだけ」でも、MCPサーバーがどういう流れで動いているのかが理解できました。
次のステップ
文字を返すだけでは実用性がないですが、応用としては下記のことなどができるかと思います。
- 外部APIと連携
例: 天気予報APIを叩いて「今日の天気」をCopilot Chatに返す
- DBへのアクセス
例: ローカルのSQLite/PostgreSQLに問い合わせて結果を返す
また、外部公開されているMCPサーバーの情報を設定ファイルに登録すると、そのMCPサーバーが提供するツール一覧が呼び出せるようになります。
今後は、外部MCPサーバーの利用や、APIやDBと組み合わせて、より実用的なMCPツールを試していきたいと思います。