MCPサーバー自作入門:Model Context Protocolでエディタと外部ツールを連携させる実装ガイド

当ページのリンクには広告が含まれています。
IT女子 アラ美
🚀 ツールを使うだけで満足してるの?自分で作りなさい!
資格と仕事に強い!個人レッスンのプログラミングスクール【Winスクール】

お疲れ様です!IT業界で働くアライグマです!

結論から言います。MCPサーバーはPythonで50行程度のコードから自作できます。そして、一度作れば社内ツール、データベース、外部APIなど、あらゆるリソースをCursorやClaude Codeから直接操作できるようになります。

「MCPって聞いたことはあるけど、具体的に何ができるのかわからない」「既存のMCPサーバーは使っているが、自分の業務に合ったものを作りたい」——こうした声をよく耳にします。

Model Context Protocol(MCP)は、Anthropicが2024年末に公開したオープンプロトコルで、AIアシスタントと外部データソースを標準化された方法で接続するための仕組みです。
本記事では、MCPの仕組みを理解した上で、実際にPythonでMCPサーバーを自作し、CursorやClaude Desktopから利用するまでの手順を解説します。

目次

MCPの全体像と背景

IT女子 アラ美
💡 MCPの仕組みをちゃんと理解しなさい!
「なんとなく動いてる」じゃ応用が利かないのよ。基礎から押さえなさい。
ITエンジニアのハイクラス転職なら【TechGo(テックゴー)】

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(プロンプト):再利用可能なプロンプトテンプレート。特定のワークフローに最適化された指示セット

IT女子 アラ美
MCPとREST APIの違いは何ですか?既存のAPIがあればMCPは不要では?

ITアライグマ
REST APIはHTTP越しにデータをやり取りし、意思決定は人間側が担います。一方MCPはAIが文脈に応じてツールを選び、実行まで委ねられる点が決定的に異なります。

前提条件と環境整理

本記事で使用する環境とバージョンを整理します。

  • 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エディタから共通して利用できるのが大きなメリットです。

IT女子 アラ美
Pythonの経験が浅くても大丈夫ですか?TypeScript版もあると聞きましたが。

ITアライグマ
TypeScript版のSDKも公式に提供されています。本記事ではPython版を使いますが、基本的な関数定義とデコレータがわかれば十分です。

ステップ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対応機能数(2025年)

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

IT女子 アラ美
MCPサーバーはローカルで動かすのですか?リモートサーバーに置くこともできますか?

ITアライグマ
stdio(ローカル)とSSE(HTTP経由)の2種類のトランスポートがあります。ローカル開発ではstdioが主流で、チーム共有にはSSEでリモート公開も可能です。

ステップ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エージェントの能力は「どれだけ多くのツールとデータにアクセスできるか」で決まります。

IT女子 アラ美
複数のツールを1つのMCPサーバーにまとめるべきですか?それとも分けるべきですか?

ITアライグマ
関連機能は1サーバーにまとめ、異なるドメインは分けるのが推奨です。「DB操作」と「Slack通知」は別、「Jira検索」と「Jira作成」は同じサーバーが自然です。

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

IT女子 アラ美
💡 手作業で消耗してるなんてもったいない!
MCPで自動化すれば、もっと価値のある仕事に集中できるのよ。
自分らしく働けるエンジニア転職を目指すなら【strategy career】

状況(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 継続的な時間削減」で評価すべきです。

IT女子 アラ美
MCPサーバーにセキュリティ上のリスクはありませんか?社内DBに接続するのは怖いです。

ITアライグマ
重要な懸念です。DB連携はSELECTのみに制限、APIトークンは環境変数で管理、ログ記録を必ず実装してください。stdioならローカル完結なのでネットワークリスクも最小限です。

さらなる実践・活用に向けて

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開発
難易度 初心者◎個人レッスン形式 中級者〜コード記述あり
補助金・給付金 最大70%還元教育訓練給付金対象 最大70%還元教育訓練給付金対象
おすすめ度 S幅広くITスキルを学ぶなら AAIエンジニアになるなら
公式サイト 詳細を見る
IT女子 アラ美
AIスキルを身につけたいけど、どのスクールを選べばいいかわからないです…
ITアライグマ
現場で即・ITスキルを身につけたいならWinスクールがおすすめです!個人レッスン形式で初心者でも取り組みやすいですよ。

まとめ

MCPサーバーの自作は、AIエディタの活用を「受動的な利用」から「能動的な拡張」へと進化させる重要なスキルです。
この記事のポイントを振り返ります。

  • MCPはAIとツールの接続を標準化するプロトコル:一度作れば複数のAIエディタから共通して利用できる
  • FastMCPで50行から始められる:Pythonのデコレータベースで直感的にサーバーを構築可能
  • 3つの構築パターン:DB連携、API連携、リソース公開を組み合わせて実務に適用する
  • セキュリティは必須:アクセス制御、トークン管理、ログ記録を忘れずに実装する
  • 投資対効果が高い:初期構築に数時間、日々の時間削減は数十分単位で回収できる

まずは本記事の最小構成サーバーを動かしてみてください。MCPの仕組みを体感すれば、「次は何を接続しよう」というアイデアが自然と湧いてくるはずです。

IT女子 アラ美
MCPの仕様は今後変わる可能性がありますか?今作ったサーバーが使えなくなる心配は?

ITアライグマ
MCPはまだ発展途上のプロトコルなので、仕様の変更は十分にあり得ます。ただし、公式SDKを使っていれば、ライブラリのアップデートで大部分は吸収されます。コアとなるツール・リソース・プロンプトの3プリミティブは安定しているため、現時点で作ったサーバーが完全に無駄になるリスクは低いです。

厳しめIT女子 アラ美による解説ショート動画はこちら

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITアライグマのアバター ITアライグマ ITエンジニア / PM

都内で働くPM兼Webエンジニア(既婚・子持ち)です。
AIで作業時間を削って実務をラクにしつつ、市場価値を高めて「高年収・自由な働き方」を手に入れるキャリア戦略を発信しています。

目次