5分で自作MCPサーバーを構築!Model Context Protocol入門ステップバイステップガイド
Model Context Protocol(MCP)とは?
Model Context Protocol(略称:MCP)は、AIを外部APIやリアルタイムデータなどに接続するための標準化プロトコルです。2024年末にAnthropicによって発表されました。
MCPサーバーは、天気情報の取得、テキスト翻訳、APIとの連携などを行う「ツール」だとイメージしてください。AIエージェントは、現在のタスクにおいてそのツールが役立つと判断した場合、自律的に呼び出すことができます。
たとえばUpstashのMCPを使えば、Cursorがデータベースを直接操作できるようになります。通常のClaude単体では絶対にできない「XYZをRedisデータベースに入れて」といった自然言語コマンドが実現できるのは、MCPがこれらのリクエストを実際のデータベース操作へ変換してくれるからです。
Model Context Protocol(MCP)の活用例
MCPの公開以来、人々は次々と創造的なユースケースを生み出しています。その活躍の場はCursorやコーディングにとどまりません。自分で作れば何時間もかかるような、Blenderでの複雑なアニメーションシーンも、MCP経由でClaudeにBlenderへのアクセス権を与えるだけで実現できます。

筆者にとって、Model Context Protocolは「AIにインターネットアクセスを与える」ことの次のステップのように感じられます。比喩的に言えば、インターネットアクセスがAIに腕と手を与えること(=実際に行動できるようにする)だとすれば、MCPは自由に歩き回るための「脚」を与えるようなものです。
ちなみに、MCPサーバーの構築は一部の企業や開発者だけに許されたものではありません。誰でも自分専用のMCPを作成・ホストでき、さらにはSaaSとして事業化することも可能です。具体的な方法を見ていきましょう。
基本的なMCPサーバーの作り方
まずは非常にシンプルなMCPの例から始めましょう。ここでは、Cursorがツールを使ってテキストを翻訳できる「翻訳MCP」を作成するとします。必要なのは、このMCPを提供するサーバーと、目的の処理を実行するツールだけです。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "Translation Service",
version: "1.0.0",
});
server.tool(
"translate",
{
text: z.string(),
targetLanguage: z.enum(["spanish", "french", "german"]),
},
async ({ text, targetLanguage }) => {
// 👉 ここで実際の翻訳サービスへのAPI呼び出しを行う
const translatedText = `[Translated: "${text}" to ${targetLanguage}]`;
return {
content: [{ type: "text", text: translatedText }],
};
},
);
上記のコードは、Model Context Protocol(MCP)の基本原理を示したものです。ここでは、Claudeがプログラム的にやり取りできる翻訳サービスを作成しています。
Zodスキーマを使って受け付けるパラメータを定義し、translateという名前のツールを作成しました:
text:文字列型targetLanguage:文字列型(スペイン語・フランス語・ドイツ語のみ許可)
AIアシスタントがこのツールを呼び出すと、Zod(オープンソースのスキーマバリデーションライブラリ)によって検証済みの必須パラメータが渡され、関数が処理を実行します。本番環境では、このプレースホルダーの代わりに、DeepLやGoogle翻訳などの実際の翻訳APIを呼び出すように置き換えます。
content: [{ type: "text", text: translatedText }],というレスポンス形式はMCPツールの仕様に準拠しており、Claudeが応答に利用できる構造を返します。この標準化されたアプローチにより、特別な統合作業なしに、MCP対応のあらゆるAIがあなたのツールを利用できるのです。
この同じパターンは、あらゆる種類のツールに応用できます。翻訳はもちろん、データ分析、画像生成、さらにはスマートホーム機器の制御まで可能です。
MCPサーバーの起動とCursorでのテスト
続いて、MCPサーバーを起動するためにtransportを使用します:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "Translation Service",
version: "1.0.0",
});
server.tool(/* ... */);
const transport = new StdioServerTransport();
server.connect(transport);
これだけで、独自のMCPサーバーが完成しました!🎉
index.tsファイルへのパスをコピーしてCursorに接続すれば、新しいMCPをローカルでテストできます。Cursorでは、MCPサーバーを追加することで「Agent」モードを強化できます。
- Cursorで
index.tsを右クリックし、「Copy Path」を選択します。後で使うので控えておきましょう。 - CursorにMCPサーバーを追加するには、「Cursor Settings > Features > MCP」に移動し、「+ Add New MCP Server」をクリックします。

typeはcommandのままにします。- サーバーに名前を付けます。例:
Translation。 - 翻訳ツールを実行するコマンドを入力します:
npx tsx <path-to-file>。
これでCursorが、私たちのMCPサーバーと利用可能な全ツールを認識しました。今回の場合、それは先ほど作成したtranslateツールです。

試してみるには、Agentic Chatを開きます。Cursorはすでにこのツールを把握しているため、翻訳タスクに対して自動的に使用してくれます。
注意:この例では、ツールは実際には翻訳を行わず、モック(模擬)翻訳を返しています。画面上の実際の翻訳結果は、Claude自身が生成したものです。

その他のMCPユースケース案
この記事を書きながら、MCPサーバーとして構築できそうなアイデアがいくつか浮かびました。中には、独立したサービスとして収益化する価値のあるものもあるかもしれません:
- コードのスクリーンショットを撮影するMCPツール
- 生成コードのベストプラクティス・脆弱性・バグをチェックするMCPツール
- テストコードを自動生成するMCPツール
あなた自身のアイデアもきっと見つかるはずです。結局のところ、MCPは「LLM向けのAPIを構築する」ような感覚で取り組めます。
Upstash MCPのご紹介
私たちUpstashでは、自然言語でUpstashアカウントを操作できるオープンソースの「Upstash MCP」を提供しています。以下のような操作が可能です:
- 「us-east-1に新しいRedisデータベースを作成して」
- 「データベースの一覧を見せて」
- 「users-db内の『user:』で始まるすべてのキーを表示して」
- 「バックアップを作成して」
- 「過去7日間のスループットの急増状況を見せて」
以下のコマンドをCursorの「Add MCP Server」欄に貼り付けるだけで設定完了です:
npx -y @upstash/mcp-server run <UPSTASH_EMAIL> <UPSTASH_API_KEY>
セットアップにかかる時間は60秒以内。詳しくはこちらをご覧ください:https://github.com/upstash/mcp-server
最後までお読みいただきありがとうございました!フィードバックやゲスト執筆のご希望があれば、josh@upstash.comまでお気軽にご連絡ください 🙌
-
React Server Componentsで実装するリアルタイム閲覧数カウンターの作り方
このチュートリアルでは、React Server Components(RSC)の仕組みを理解した上で、その知識を活かしてアプリにシンプルな閲覧数カウンターを実装していきます。すぐに実装に取り掛かりたい方は、「プロジェクトのセットアップ」までスキップしてください。 React Server Componentsを理解する React Server Componentsがどのように動作するのかを理解するために、まずクライアントサイドレンダリング(CSR)とサーバーサイドレンダリング(SSR)について簡単におさらいしましょう。 クライアントサイドレンダリング(CSR) CSRでは、レンダリング処理
-
Redis DELコマンドの使い方 – データストアからキーを削除する方法
このチュートリアルでは、redis-cliでDELコマンドを使用して、Redisデータストアからキーを削除する方法について解説します。DELコマンドは、指定したキーとその値を削除するための基本的なコマンドで、キーのデータ型(文字列、リスト、セットなど)に関わらず使用できます。 構文 redis host:post> DEL <key name> 削除したいキー名を引数として指定します。複数のキーをスペース区切りで指定することも可能です。 戻り値 (integer) 1 : キーが正常に削除された場合 (integer) 0 : 指定したキーが存在しない場合 DELコマンドは、