IT女子 アラ美お疲れ様です!IT業界で働くアライグマです!
結論から言います。MCPサーバーはPythonで50行程度のコードから自作できます。そして、一度作れば社内ツール、データベース、外部APIなど、あらゆるリソースをCursorやClaude Codeから直接操作できるようになります。
「MCPって聞いたことはあるけど、具体的に何ができるのかわからない」「既存のMCPサーバーは使っているが、自分の業務に合ったものを作りたい」——こうした声をよく耳にします。
Model Context Protocol(MCP)は、Anthropicが2024年末に公開したオープンプロトコルで、AIアシスタントと外部データソースを標準化された方法で接続するための仕組みです。
本記事では、MCPの仕組みを理解した上で、実際にPythonでMCPサーバーを自作し、CursorやClaude Desktopから利用するまでの手順を解説します。
MCPの全体像と背景



MCPが登場する以前、AIエディタと外部ツールの連携は各ツールごとに独自のプラグインやAPIラッパーを実装する必要がありました。
CursorにはCursorの拡張、GitHub CopilotにはCopilotの拡張と、ツールごとにバラバラの実装が求められていたのです。
MCPはこの問題を解決するために設計されました。LangChainを使わないLLMアプリ開発でも触れた通り、LLMアプリケーションの構築には「どのようにツールと接続するか」が重要な設計判断になりますが、MCPはその接続部分を標準化するプロトコルです。
MCPのアーキテクチャ
MCPはクライアント-サーバーモデルを採用しています。
- MCPホスト:Cursor、Claude Desktop、Windsurf等のAIアプリケーション。ユーザーとの対話を管理する
- MCPクライアント:ホスト内に組み込まれたコンポーネント。MCPサーバーとの通信を担当する
- MCPサーバー:外部リソースへのアクセスを提供するプログラム。ツール、リソース、プロンプトの3種類の機能を公開できる
MCPが提供する3つのプリミティブ
- Tools(ツール):AIが呼び出せる関数。データベースクエリの実行、API呼び出し、ファイル操作など
- Resources(リソース):AIが読み取れるデータソース。設定ファイル、ドキュメント、ログなど
- Prompts(プロンプト):再利用可能なプロンプトテンプレート。特定のワークフローに最適化された指示セット



前提条件と環境整理
本記事で使用する環境とバージョンを整理します。
- Python:3.10以上(型ヒントの記法のため)
- mcp[cli]:MCPの公式Pythonライブラリ(pip installで導入)
- Cursor:0.45以降(MCP対応バージョン)
- Claude Desktop:最新版(MCP標準対応)
- OS:macOS / Linux / Windows(WSL推奨)
MCPサーバーの実装にはFastMCPというフレームワークを使用します。これはMCP公式SDKに含まれる高レベルAPIで、デコレータベースの直感的な記法でサーバーを構築できます。GitHub CopilotのエージェントモードでもMCP連携が進んでおり、一度MCPサーバーを作れば複数のAIエディタから共通して利用できるのが大きなメリットです。



ステップ1:最小構成のMCPサーバーを作る
まずは最小構成のMCPサーバーを作り、動作確認するところまで進めます。
インストール
pip install "mcp[cli]"
最小構成のサーバーコード
以下は、現在時刻を返すだけのシンプルなMCPサーバーです。
from mcp.server.fastmcp import FastMCP
from datetime import datetime
mcp = FastMCP("my-first-mcp-server")
@mcp.tool()
def get_current_time() -> str:
"""現在の日本時間を返します"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if __name__ == "__main__":
mcp.run()
@mcp.tool()デコレータを付けた関数が、AIから呼び出し可能なツールとして公開されます。関数のdocstringがツールの説明文として使われるため、AIが適切にツールを選択できるよう、わかりやすい説明を書くことが重要です。
動作確認
MCPの公式CLIツールで動作確認ができます。
mcp dev server.py
このコマンドを実行すると、ブラウザベースのMCP Inspectorが起動し、ツールの一覧確認やテスト実行が可能です。


上図の通り、主要なAIエディタはすでにMCPに対応しています。Claude Code実践ガイドで紹介したClaude Codeも、MCPサーバーを経由して外部ツールと連携する仕組みを備えています。



ステップ2:実用的なMCPサーバーの構築パターン
基本構成を理解したところで、実務で役立つ3つの構築パターンを紹介します。
パターン1:データベース連携サーバー
社内のPostgreSQLやMySQLに接続し、AIエディタからSQLクエリを実行できるサーバーです。
import sqlite3
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("db-query-server")
@mcp.tool()
def query_database(sql: str) -> str:
"""SQLiteデータベースに対してSELECTクエリを実行します。
INSERT/UPDATE/DELETEは安全のため拒否します。"""
if not sql.strip().upper().startswith("SELECT"):
return "エラー: SELECTクエリのみ実行可能です"
conn = sqlite3.connect("app.db")
cursor = conn.execute(sql)
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
conn.close()
return str([dict(zip(columns, row)) for row in rows])
パターン2:外部API連携サーバー
社内のREST APIやSaaSのAPIをMCP経由で公開するパターンです。Slack通知、Jiraチケット作成、GitHub Issue管理などに応用できます。
import httpx
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("api-gateway-server")
@mcp.tool()
async def search_jira_issues(project_key: str, status: str = "Open") -> str:
"""Jiraプロジェクトのイシューを検索します"""
async with httpx.AsyncClient() as client:
resp = await client.get(
f"https://your-domain.atlassian.net/rest/api/3/search",
params={"jql": f"project={project_key} AND status='{status}'"},
headers={"Authorization": f"Bearer {JIRA_TOKEN}"}
)
return resp.text
パターン3:リソース公開サーバー
ツールだけでなく、AIが参照できるリソース(ドキュメントや設定ファイル)を公開するパターンです。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("docs-server")
@mcp.resource("docs://coding-standards")
def get_coding_standards() -> str:
"""チームのコーディング規約を返します"""
with open("docs/coding_standards.md") as f:
return f.read()
これらのパターンを組み合わせることで、実務に即したMCPサーバーを構築できます。LLMブラウザ自動化エージェントの記事でも解説した通り、AIエージェントの能力は「どれだけ多くのツールとデータにアクセスできるか」で決まります。



実装後の効果検証(ケーススタディ)



状況(Before)
- Fさん(34歳・SaaS企業のバックエンドエンジニア)。開発中にデータベースの状態確認、Slackへの進捗報告、Jiraチケットの更新を頻繁に行っていた
- これらの操作はすべてブラウザやターミナルを切り替えて手動で行っており、1日あたり平均40分のコンテキストスイッチが発生していた
- 特にコードレビュー時に「このテーブルの現在のスキーマは?」「関連するJiraチケットは?」といった確認作業が頻発し、レビュー1件あたり15分のオーバーヘッドがあった
行動(Action)
- 社内PostgreSQLへのSELECTクエリを実行できるMCPサーバーを自作(本記事のパターン1を応用)
- Jira APIと連携するMCPサーバーを追加し、Cursorからチケットの検索・コメント追加を可能にした
- チームのコーディング規約とアーキテクチャドキュメントをリソースとして公開するMCPサーバーも構築した
- 3つのMCPサーバーをCursorに登録し、開発作業中にエディタから直接操作できる環境を整えた
結果(After)
- コンテキストスイッチの時間が1日40分から10分に削減(75%減)。ブラウザを開く回数が激減した
- コードレビューのオーバーヘッドが15分から3分に短縮。AIがスキーマ情報やチケット情報を即座に取得してくれるため、確認作業がほぼゼロになった
- チーム内でMCPサーバーを共有したところ、他のメンバーからも「開発体験が劇的に変わった」と好評で、現在はチーム全体で5つのMCPサーバーを運用している
Fさんのケースが示す通り、MCPサーバーの自作は初期投資こそ必要ですが、日々の開発効率を大幅に改善します。Gemini×NotebookLMナレッジベース構築の記事でも触れた通り、AIツールの真価は「構築コスト vs 継続的な時間削減」で評価すべきです。



さらなる実践・活用に向けて
MCPサーバーの自作に慣れたら、次のステップとして以下の発展的な活用を検討してみてください。生成AI時代のリスキリング戦略でも解説した通り、AIツールを「使う側」から「作る側」へ回ることが、エンジニアの市場価値を高める鍵です。
Cursorへの登録方法
Cursorの場合、プロジェクトルートに.cursor/mcp.jsonを作成し、以下のように設定します。
{
"mcpServers": {
"my-db-server": {
"command": "python",
"args": ["path/to/db_server.py"]
}
}
}
Claude Desktopへの登録方法
Claude Desktopの場合は、設定ファイル(macOSでは~/Library/Application Support/Claude/claude_desktop_config.json)に同様の形式で追記します。
発展的な活用アイデア
- CI/CDパイプラインとの連携:GitHub ActionsやJenkinsのビルド状況をMCP経由で取得し、AIエディタ内でデプロイ判断を支援する
- 監視ツールとの連携:DatadogやGrafanaのメトリクスをMCPサーバー経由で取得し、パフォーマンス問題の原因調査をAIに支援させる
- ドキュメント生成の自動化:コードベースの情報をMCPリソースとして公開し、AIにAPI仕様書やREADMEの自動生成を依頼する
本記事で解説したようなAI技術を、基礎から体系的に身につけたい方は、以下のスクールも検討してみてください。
| 比較項目 | Winスクール | Aidemy Premium |
|---|---|---|
| 目的・ゴール | 資格取得・スキルアップ初心者〜社会人向け | エンジニア転身・E資格Python/AI開発 |
| 難易度 | 個人レッスン形式 | コード記述あり |
| 補助金・給付金 | 教育訓練給付金対象 | 教育訓練給付金対象 |
| おすすめ度 | 幅広くITスキルを学ぶなら | AIエンジニアになるなら |
| 公式サイト | 詳細を見る | − |



まとめ
MCPサーバーの自作は、AIエディタの活用を「受動的な利用」から「能動的な拡張」へと進化させる重要なスキルです。
この記事のポイントを振り返ります。
- MCPはAIとツールの接続を標準化するプロトコル:一度作れば複数のAIエディタから共通して利用できる
- FastMCPで50行から始められる:Pythonのデコレータベースで直感的にサーバーを構築可能
- 3つの構築パターン:DB連携、API連携、リソース公開を組み合わせて実務に適用する
- セキュリティは必須:アクセス制御、トークン管理、ログ記録を忘れずに実装する
- 投資対効果が高い:初期構築に数時間、日々の時間削減は数十分単位で回収できる
まずは本記事の最小構成サーバーを動かしてみてください。MCPの仕組みを体感すれば、「次は何を接続しよう」というアイデアが自然と湧いてくるはずです。













