「AIと自分のシステムを連携させたいけど、どこから手をつければいいかわからない…」そんな悩み、ありませんか?🤔
最近、AI開発の世界でMCP(Model Context Protocol)というキーワードが急速に注目を集めています。今回はこのMCPサーバーを実際に自分で作りながら、仕組みをざっくり理解していきましょう!
MCPサーバーってそもそも何?

イメージとしては「AIと自分のビジネスロジックをつなぐ中継地点」です。
従来のAI連携では、ツールのロジックをAIのコードの中にベタ書きしていました。でもMCPを使うと、ビジネスロジックとAIのオーケストレーション層を分離できるんですよね。つまり、AIの部分を変えてもツール側は触らなくてよくなる、という設計の話です。
メリットをざっくりまとめるとこんな感じです。
- ✅ AIとビジネスロジックが疎結合になる
- ✅ ツールを再利用・組み合わせやすくなる
- ✅ スキーマ検証・レート制限など堅牢な設計が入れやすい
今回作る3つのAIツール
30分のチュートリアルで作成するツールは以下の3つです。
- データベースクエリツール:自然言語→SQLクエリ実行
- 通知ツール:AIからの通知送信
- ファイル操作ツール:ファイルの読み書き操作
さらにZodによるスキーマバリデーション・レート制限・サーキットブレーカー(障害時の自動遮断)まで実装します。盛りだくさんですね😄
MCPサーバーの基本構造を見てみよう
まず、MCPサーバーの骨格はこんな感じです。ポイントを先に確認しておきましょう。
tool()でAIが呼び出せるツールを登録する- 引数スキーマをZodで定義してバリデーションを自動化
- 処理の中身(ビジネスロジック)はツールごとに分離
// MCPサーバーの基本骨格(TypeScript)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "my-ai-tools", // サーバー名
version: "1.0.0",
});
// ✅ データベースクエリツールを登録
server.tool(
"query_database",
"データベースにSQLクエリを実行します",
{
// Zodでスキーマを定義(バリデーション自動化)
query: z.string().describe("実行するSQLクエリ"),
limit: z.number().max(100).default(10).describe("最大取得件数"),
},
async ({ query, limit }) => {
// ここにビジネスロジックを書く
const result = await executeQuery(query, limit);
return {
content: [{ type: "text", text: JSON.stringify(result) }],
};
}
);
console.log("MCPサーバー起動完了!");
ここが重要です。Zodでスキーマを定義するだけで、AIがツールを呼び出す際の引数チェックが自動で行われます。型ミスや不正な値が来ても弾いてくれるので、安心して設計できますよね。
サーキットブレーカーって何?
聞き慣れない言葉かもしれませんが、イメージは「ブレーカー(電気の遮断器)」そのままです。
外部サービスが連続してエラーを返したとき、一定回数失敗したら一時的にリクエストをストップする仕組みです。無限にリトライしてサービスに負荷をかけ続けるのを防いでくれます。AIツールの実運用では必須の考え方ですよ。
まとめ
今回はMCPサーバーの概要と基本構造を解説しました。ポイントをおさらいすると…
- MCPはAIとビジネスロジックを分離する設計パターン
- Zodでスキーマバリデーションを自動化できる
- レート制限・サーキットブレーカーで本番運用に耐える設計が作れる
「むずかしそう」と思っていた方も、骨格を見るとだいぶ「できそう」に見えてきませんか?😊 MCPはAIエージェント開発の標準になりつつある技術です。ぜひ手を動かして試してみてください!
📚 関連商品・おすすめ書籍
もしも
ELEGOO Arduino用UNO R3スターターキット レベルアップ チュートリアル付 mega2560 r3 nanoと互換 [並行輸入品]
チュートリアル付きのArduino入門セット
※本記事にはアフィリエイトリンクが含まれます。




