AI開発がもっと楽しくなる!魔法のコンテキスト節約術「Context Mode」とPythonで作る簡単自作MCPサーバー完全ガイド

AIエージェント
この記事は約20分で読めます。

MCPサーバー「Context Mode」のPodcast

下記のPodcastは、Geminiで作成しました。

はじめに

近年、大規模言語モデル(LLM)をベースとしたAIアシスタントや、自律的にコーディングを行うAIエージェントの進化には目覚ましいものがあります。しかし、エージェントが複雑な開発タスクを長時間実行するようになると、避けて通れない深刻な技術的課題に直面します。それが「コンテキストウィンドウ(AIが一度に処理できる記憶容量)の枯渇」と、それに伴う「AIの動作速度の低下やハルシネーション(もっともらしい嘘)の増加」です。

これらの課題を解決し、AIエージェントにローカルデータや外部システムへの安全な接続手段を提供する共通規格として、2024年11月にAnthropic社によって提唱されたのが「Model Context Protocol(MCP)」です。現在ではOpenAI社やGoogle DeepMind社といった主要なAI企業もこぞってこの規格を採用し、AIエージェント時代の新しい標準技術としての地位を確立しています

本報告書では、コンテキスト消費を劇的に削減する注目のオープンソースMCPサーバー「Context Mode」の仕組みを詳しく解説します。その上で、Pythonの強力なフレームワークである「FastMCP」を用いて独自のMCPサーバーを開発し、デバッグツール「MCP Inspector」で検証してAIアシスタントに組み込むまでの全プロセスを、初心者にも分かりやすく丁寧に解説します

1. AIと外部世界を繋ぐ共通規格「Model Context Protocol(MCP)」の基礎

AIエージェントが高度な仕事をするためには、ローカルコンピュータ上のファイル、社内データベース、外部APIなどのデータにアクセスする必要があります。しかし、これまではAIツールごとに個別の接続プログラムを記述せねばならず、開発効率が非常に悪いという問題がありました。

MCPは、この接続方式を標準化することで、まるでPCに「USB-Cポート」を導入したときのように、あらゆるAIクライアントと外部プログラムを一本の規格で接続可能にします

1-1. MCPを構成する3つの登場人物

MCPシステムは、主に以下の3つの役割が連携して動作します

  • ホスト(Host): ユーザーが操作するAIアプリケーションの本体です(Cursor、Claude Desktop、VS Code、Claude Codeなど)。
  • クライアント(Client): ホストの内部で動作し、LLMのリクエストをMCPプロトコルの形式に翻訳してサーバーへ送信する接続仲介者です。
  • サーバー(Server): 外部データベースやAPI、ファイルシステムなどのデータソースに直接繋がり、コンテキストや機能をクライアントに提供するプログラムです。

1-2. クライアントとサーバーを結ぶ通信レイヤー

クライアントとサーバーの通信は、軽量な遠隔手続き呼出し規格である「JSON-RPC 2.0」をベースにしています。ローカル環境で同じPC内のプロセス同士が通信を行う場合は、最もシンプルで高速な「標準入出力(stdio)」が用いられます。一方、ネットワークを越えてリモートのサーバーと連携する場合は、「Server-Sent Events(SSE)」や「HTTP(Streamable HTTP)」といった通信方式が選択されます

以下の表は、MCPサーバーの通信方式(トランスポートレイヤー)の違いを簡潔に比較したものです。

通信方式(トランスポート)主な利用シーン特徴とメリット接続の仕組み
stdio(標準入出力)ローカル開発、デスクトップアプリ、検証環境高速、設定不要、プロセス間で直接メッセージをパイプでやり取りするクライアントがサーバープロセスを子プロセスとして直接起動
SSE(Server-Sent Events)Webダッシュボード、リアルタイム通知、ネットワーク越しの連携サーバーからクライアントへのプッシュ通知が可能、リアルタイム性が高いHTTP接続を確立し、サーバーからイベントをストリーミング送信
Streamable HTTPリモートAPI連携、クラウド上の共有ツール、企業内共有ゲートウェイファイアウォールを越えやすい、堅牢な認証(Bearer / OAuth)に対応標準的なHTTPリクエストとレスポンスをベースにしたRPC通信

1-3. MCPサーバーが提供する「3つの主要な機能(プリミティブ)」

MCPサーバーは、接続されたAIアシスタントに対して以下の3つの強力な能力を提供します

  • Resources(リソース): AIが参照できる「読み取り専用のデータ」です。設定ファイル、APIログ、データベースのレコードなどをURI形式(例: config://app_settings)で安全に開示します。
  • Tools(ツール): AIが能動的に実行できる「関数(アクション)」です。ファイルの作成、APIを通じた最新の天気情報の取得、システムコマンドの実行など、副作用を伴う処理を実行させます。
  • Prompts(プロンプト): 特定のタスクをAIにうまく実行させるための「指示文テンプレート」です。コードレビューやデバッグの指示内容をあらかじめひな形化しておくことができます。

以下の表は、これらの主要な機能(プリミティブ)の特性をまとめたものです。

機能(プリミティブ)読み書き権限AIにとっての役割具体的な実装例
Resources(リソース)読み取り専用(Read-only)根拠となる正確なデータやログ、ドキュメントの参照file://readme.md の読み込み、DBレコードの開示
Tools(ツール)実行可能(Executable)システムやAPIへの働きかけ、計算、自律的な作業の実行天気APIの取得、ファイルの書き込み、数式計算
Prompts(プロンプト)呼び出し専用(Callable)定型タスクにおける思考プロセスの標準化、テンプレート利用「コードレビュー指示」「エラーログデバッグ支援」

【Model Context Protocol(MCP)の標準的な三層構造】

2. コンテキスト窓の限界を打ち破る「Context Mode」の技術と魅力

AIを使ったコーディング支援が日常化するにつれ、開発者はある深刻な問題に悩まされるようになります。それは、AIエージェントがコマンドを実行したりファイルを読み込んだりした際の、膨大な「ツール出力データ」がチャットの文脈履歴(コンテキストウィンドウ)を埋め尽くしてしまう現象です。

例えば、Web自動化ツールのPlaywrightでWebページのスナップショットを取得すると、一度に56 KB以上のHTMLコードがコンテキストに送り込まれます。GitHubのIssueを20件取得するだけでも約59 KB、エラーログを解析するために500行のテキストを読み込ませれば約45 KBが瞬時に消費されます。このような大きなデータが何回もやり取りされると、AIの頭脳はノイズだらけになり、指示を見失う「コンテキスト・デフォーカス(注意散漫)」と呼ばれる状態に陥ってしまいます

このコンテキスト消費の肥大化を防ぎ、AIが長時間の開発セッションでも賢さを維持し続けられるように設計された画期的なMCPサーバーが「Context Mode」です

2-1. Context Modeが実現する3つのアプローチ

Context Modeは、AIエージェントとOSなどのツールの間に立ち、データ流量をコントロールするインテリジェントな仮想化層として機能します

1) ツール出力のサンドボックス化とインデックス検索(Context Saving)

AIエージェントがツールを実行すると、Context Modeはその巨大な生出力を直接AIに送るのではなく、ローカルの安全なサンドボックス環境内で受け取ります。 出力が5KB未満の極めて小さいものであれば、短い要約だけを生成してAIに返します。一方、出力がそれを超える大きさである場合は、データを複数の塊(チャンク)に分解し、内蔵されている高速な「SQLite FTS5(Full-Text Search)」全文検索データベースに自動で保存・インデックス化します。 AIエージェントには「データを安全にインデックス化しました。検索ツールを使って必要な部分だけを問い合わせてください」という最小限の応答(数百バイト)のみを返却します。AIエージェントは膨大な全コードを読む代わりに、必要な情報をピンポイントで「BM25」という高精度な検索アルゴリズムを用いて検索し、該当セクションのみを取り出します。これにより、実質的なコンテキスト消費量を最大「98%削減」することができます

2) セッション履歴の自動要約と復元(Session Continuity)

AIアシスタントとのチャットが非常に長くなると、古い会話から順番に記憶から消去される「コンパクション(圧縮)」が起こります。Context Modeは、裏側でファイルの修正履歴、Gitのコミットや差分、検出されたエラー、開発者の意思決定履歴などをすべてSQLiteに記録し続けています。 コンパクションが発生した際、Context Modeは「PreCompactフック」を検知して起動し、これらの全イベントから2KB以下の優先度付きの要約XMLデータを自動生成して、新しくクリアされたAIの記憶領域に自動注入します。これにより、通常であれば30分程度で破綻してしまうコーディング作業の文脈を、3時間以上の長時間にわたり維持し続けることが可能になります

3) 「コードで考える」分析手法の強制(Think in Code)

多くのファイルを読み込んで特定の単語や関数の数を集計するようなタスクにおいて、通常のAIエージェントはすべてのファイルを順番に開き、自分で数えようとします。Context Modeはこのような非効率な動作を禁止し、AIに対して「集計を行うためのスクリプト(JavaScriptなど)を記述し、サンドボックス内で直接実行する」ように促します。 「ファイルの読み込みツールを50回呼び出して700KBを消費する」代わりに、「スクリプトを1回だけ実行して、計算結果の数ミリバイトだけを受け取る」という高度なアプローチを強制することで、AIはデータ処理装置ではなく「優秀なコードジェネレーター」として極めて効率的に動作します

以下の表は、実際の開発現場でContext Modeを導入した際の、トークン(データ量)の劇的な節約効果を示したものです

開発における一般的な操作生の出力データサイズContext Mode導入後のデータサイズトークン(記憶容量)削減率
PlaywrightによるWeb画面スナップショット56.2 KB299 B99%[cite: 2]
GitHub Issuesの取得(20件分)58.9 KB1.1 KB98%[cite: 2]
サーバーアクセスログの読み込み(500行)45.1 KB155 B100%[cite: 2]
解析用CSVデータの統計処理(500行)85.5 KB222 B100%[cite: 2]
サブエージェントによるリポジトリ全体調査986.0 KB62.0 KB94%[cite: 2]
合計約 315.0 KB約 5.4 KB約 98% 削減[cite: 2]

【Context Modeによる巨大データ処理の最適化フロー】

3. Pythonと「FastMCP」で始める!初めてのMCPサーバー開発

Context Modeのようにコンテキストをスマートに管理したり、自分専用のAPIやデータをAIに提供したりしたい場合、一から接続仕様を書き下ろす必要はありません。

Prefect社が開発を主導しているオープンソースライブラリ「FastMCP」を使用すれば、初心者でもわずか数行の記述で完璧なMCPサーバーを作ることができます

3-1. FastMCPが支持される理由

FastMCPは、Pythonの型ヒント(Type Hints)や関数の説明書き(Docstring)を自動解析して、LLMが理解するための複雑なJSONスキーマ(関数の使い方やデータの構造を定義した仕様書)を全自動で作成してくれます

なお、2024年にFastMCPがMCPの公式Python SDKに統合されて以降も開発が活発に続けられており、現在の最新バージョンである「FastMCP v3」では、サーバーの役割(認証や接続構成など)とビジネスロジックが綺麗に分離され、より開発しやすくなっています

3-2. 開発環境の準備(uvによる快適なプロジェクト構築)

まずは、最新の高速パッケージマネージャーである uv を使って、Pythonの仮想開発環境を構築します。ターミナルを開き、以下のコマンドを順番に実行します

Bash

# プロジェクト用の新しいフォルダを作成し、その中に入ります
mkdir my-friendly-mcp
cd my-friendly-mcp

# プロジェクトを初期化して、pyproject.tomlファイルを生成します
uv init

# FastMCPライブラリを追加します
uv add fastmcp

これにより、クリーンなPython仮想環境が自動的に用意され、FastMCPがインストールされます

3-3. MCPサーバーコード(server.py)の実装

それでは、実際にAIアシスタントが利用できる機能を記述していきます。プロジェクトの直下に server.py という名前でファイルを新規作成し、以下のコードを記述します。

Python

# server.py
from typing import Optional
from pydantic import BaseModel, Field
from fastmcp import FastMCP

# サーバーに付ける、フレンドリーで分かりやすい名前を定義します
mcp = FastMCP("Smart Friendly Server")

# 1. シンプルなツールの作成: 2つの数値を足し合わせる
@mcp.tool()
def add_values(a: float, b: float) -> float:
    """2つの数値を優しく足し算します。

    Args:
        a: 1つ目の数値です
        b: 2つ目の数値です
    """
    return a + b

# 2. 構造化データ(クラス)を受け取る高度なツールの作成
class BookmarkInfo(BaseModel):
    title: str = Field(description="ブックマークするページのタイトルです")
    url: str = Field(description="Webページの完全なURLです")
    memo: Optional[str] = Field(default=None, description="ページに関する簡単なメモです")

@mcp.tool()
def save_bookmark(info: BookmarkInfo) -> dict:
    """ユーザーのお気に入りのWebサイト情報を記録します。"""
    # ここにSQLiteデータベース等への保存ロジックを書くことができます
    return {
        "status": "success",
        "saved_title": info.title,
        "message": f"「{info.title}」を無事に保存しました!"
    }

# 3. リソースの作成: 静的なシステム設定データを公開する
@mcp.resource("config://app_settings")
def get_app_settings() -> dict:
    """本システムに関する基本のテーマカラーと言語設定を返します。"""
    return {
        "theme": "warm_orange",
        "language": "japanese",
        "api_status": "healthy"
    }

# 4. プロンプトの作成: AIアシスタントへのキャラクター指示書
@mcp.prompt()
def friendly_agent_prompt(nickname: str) -> str:
    """指定されたニックネームのユーザーに対し、超親切で明るい言葉遣いでサポートする指示書を生成します。"""
    return f"""
    あなたのミッションは、親愛なるユーザー「{nickname}」さんを全面的にサポートすることです。
    専門用語を使う場合は、必ず中学生でも直感的に理解できるように分かりやすく説明してください。
    語尾には「〜ですよ!」「〜ですね!」など、優しく明るいトーンを意識してください。
    """

# サーバーをSTDIO(標準入出力)モードで起動します
if __name__ == "__main__":
    mcp.run()

3-4. コード解説とFastMCPのスキーマ自動生成機能

このコードでは、@mcp.tool() デコレータを関数に付与するだけで、Pythonの型ヒント(a: float, b: float)から自動的に引数チェック用のスキーマが生成されます

また、BookmarkInfo のように、入力検証ライブラリである「Pydantic」を用いた複雑な入力データも、FastMCPが解析して型定義や文字数の制限などを全て自動的にAIクライアントへと伝達してくれます

【FastMCPによるPythonコードからMCPスキーマへの自動変換プロセス】

4. 開発を爆速にするテスト用Webツール「MCP Inspector」の使い方

書いたコードが本当に動作するか確かめるために、毎回AIアシスタントを再起動するのは非常に時間がかかり、非効率です。そこで、公式が提供している優れたビジュアルデバッグツール「MCP Inspector」を活用します

MCP Inspectorは、Webブラウザ上で動作する「Postman」のようなグラフィカルな検証ツールです。AIを直接動かすことなく、自分が開発したツールの挙動やデータの返却結果を直接確認できます

4-1. MCP Inspectorの起動

MCP Inspectorは、Node.js(npm)の実行環境があれば、追加のインストールをすることなく npx コマンドで一瞬にして起動できます。ターミナルで以下のコマンドを入力します

Bash

# 作成したserver.pyをInspector越しに直接起動します
npx @modelcontextprotocol/inspector uv run server.py

コマンドを実行すると、以下のようにローカルのテスト用URLと認証用セッションキーが発行されます

Starting MCP inspector...

MCP Inspector is now available at http://127.0.0.1:6274

4-2. ブラウザ画面でのテスト手順

ブラウザで http://127.0.0.1:6274 にアクセスし、左下にある「Connect」ボタンをクリックします

  • Tools タブ: 公開した add_valuessave_bookmark が一覧で表示されます。これらをクリックすると、自動的に引数入力用の入力フォームが生成されます。フォームに適当な値を入れて「Run Tool」をクリックすると、サーバー側でPythonが計算を実行し、瞬時に正しいレスポンス(JSONデータ)が返ってくることをビジュアルで確認できます。
  • Resources タブ: config://app_settings が登録されているのが見えます。クリックすることで、設定された辞書(JSON)データが綺麗に展開されて表示されます。
  • Prompts タブ: ユーザー名のニックネームを入力して、生成されるプロンプトテンプレートの内容が正しく意図通りになっているかをシミュレーションできます。

このように、開発段階において「プログラム側の不具合」と「AIアシスタント側の認識不足」を早期に切り分けられることが、MCP開発を何倍もスピードアップさせる秘訣です

【MCP Inspectorによるツールのビジュアルデバッグ画面イメージ】

5. 日常を自動化する!主要なAIツールへの組み込み手順

作成したMCPサーバーやContext Modeを、日常的に愛用しているAIエージェントやコーディングアシスタントに組み込みます。設定は非常にシンプルで、接続用の設定ファイルに「サーバープログラムの起動方法」を追記するだけです

5-1. Claude Desktopへの組み込み手順

Anthropic社の公式デスクトップクライアントである「Claude Desktop」に、自作したサーバーを連携させます

  1. Claude Desktopを開き、設定(Settings)内の「Developer(開発者)」メニューから「Edit Config(設定ファイルの編集)」をクリックします。
  2. エディタで開かれる claude_desktop_config.json ファイル(Macの場合は ~/Library/Application Support/Claude/ 以下にあります)を、以下のように編集して保存します。

JSON

{
  "mcpServers": {
    "my-friendly-server": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/Users/YOUR_USER_NAME/Desktop/my-friendly-mcp",
        "server.py"
      ]
    }
  }
}

※注意: --directory に指定するパスは、絶対に相対パスではなく、PC内のファイルシステムの「絶対パス(例: /Users/username/..., Windowsなら C:\Users\...)」で指定してください。ここを正しく指定しないと、Claudeの起動時にエラーとなり、接続アイコンが表示されなくなります

設定ファイルを保存したら、必ずClaude Desktopアプリを一度「完全に終了」させてから再起動します。 再起動後、新しくチャット欄を開き、メッセージ入力エリアの右下、あるいはツールチップ内に「プラグ(コンセント)」のアイコンが表示されていれば、連携は完璧に成功しています。

5-2. Cursor(AI搭載エディタ)への登録手順

エンジニアに圧倒的な支持を受けるコードエディタ「Cursor」にも、簡単に登録できます

  1. Cursorの設定画面(Cursor Settings)から「Features」タブを開き、下部にある「MCP」セクションにスクロールします。
  2. 「+ Add New MCP Server」ボタンをクリックします。
  3. 以下の設定内容を入力し、「Save」をクリックします。
    • Name: my-friendly-server
    • Type: stdio
    • Command: uv run --directory /Users/YOUR_USER_NAME/Desktop/my-friendly-mcp server.py を引数に設定する、あるいは uv と記述した上で個別に引数を渡します。

登録が完了すると、CursorのAIチャットや「Composer(自律編集機能)」の実行時に、自作したツール(add_values など)をエディタ内のAIが自ら認識して実行してくれるようになります。

5-3. セキュリティと安全な運用のためのアドバイス

MCPサーバーは、AIアシスタントに強力なローカルコマンドの実行やファイルアクセスを許可するため、適切な安全対策が必要です

  • 人間による確認(Human-in-the-Loop): AIがファイルの削除や機密データの外部への転送などを実行しようとした場合は、必ず画面上で人間の確認を要求する設計にしておくことが大切です。
  • 機密情報のマスキング: 外部APIを叩いて取得した顧客情報やAPIキーなどが、意図せずAIのプロンプトに流出してしまわないよう、Context Modeのような自動セキュリティフィルターや、アクセス権限を最小限に絞ったAPIキーを利用する運用が推奨されます。

7. まとめとこれからのAIエージェント開発

Model Context Protocol(MCP)は、AIアシスタントに「手」と「目」を与えることで、これまで孤立していた大規模言語モデル(LLM)と現実のシステムやデータベースをシームレスに繋ぐ、まさにインターネット黎明期のような画期的なインフラ技術です

特に本稿で紹介した「Context Mode」は、無限に増大する情報の中から必要な「コンテキストのみを賢くろ過する」という、これからのAI開発に必須の設計思考を提供しています。また、Pythonの「FastMCP」を用いることで、高度なスキルを持たない開発者であっても、実用的な自作MCPツールを短時間で作成することが可能になります

本報告書でご紹介した手順を第一歩として、ぜひ自らコーディング環境にMCPサーバーを導入し、驚くほどスピーディで賢い、次世代のAIアシスタント環境を構築してみてください。

参考資料

  1. Model Context Protocol Official Website、https://modelcontextprotocol.io/
  2. Model Context Protocol Documentation: Getting Started Intro、https://modelcontextprotocol.io/docs/getting-started/intro
  3. FastMCP Repository (GitHub)、https://github.com/PrefectHQ/fastmcp
  4. mksglu/context-mode Repository (GitHub)、https://github.com/mksglu/context-mode
  5. FastMCP Official Website、https://gofastmcp.com/
  6. Better Stack Community Guides: Context Mode MCP、https://betterstack.com/community/guides/ai/context-mode-mcp/
  7. Model Context Protocol Documentation: MCP Inspector、https://modelcontextprotocol.io/docs/tools/inspector
  8. Wikipedia: Model Context Protocol、https://en.wikipedia.org/wiki/Model_Context_Protocol

コメント

タイトルとURLをコピーしました