AIコーディング 2026.05.09

MCPネイティブアーキテクチャ【AIエージェント開発】設計・実装5ステップ

タグ:AI開発 / MCP / 自動化 / アーキテクチャ設計 / AIエージェント

MCPを使ったAIエージェント開発の全体像

最近、AIエージェント(自動で判断して動作する人工知能)の開発が注目されています。その際に「MCP(Model Context Protocol)」という技術を活用すると、より効率的で安全な開発ができるようになってきました。

MCPネイティブなプロンプトツール・アーキテクチャとは、生成AIとの連携ツール設計の新しい手法です。従来は、AIに指示を与える時に複雑な仲介コードを書く必要がありましたが、MCPを最初から前提にして設計することで、AIが直接様々なシステムと安全に連携できるようになります。

ChatGPTやClaude Codeにマップサーバーを接続すると、単なるチャットツールから「リアルタイムで実際のシステムに繋がった開発アシスタント」に進化します。特に@mcp.tool()デコレータを活用することで、AIエージェントにカスタムツールを追加し、以下のようなことが可能になります:

  • GitHub上のコードを直接参照しながら、AIが修正案を提示
  • SQLデータベースにクエリを実行して、実データに基づいた分析・提案
  • Web APIを通じて外部サービスのデータを即座に取得
  • ファイルシステムにアクセスして、プロジェクト全体の構造を理解した上でコード生成

この仕組みを使うと、以下のような業務が自動化できます:

  • ドキュメント作成や更新の自動処理:会議の議事録、提案資料、レポートの雛形作成を自動で行う
  • Webサイトやアプリケーション操作の自動化:定期的なデータ確認作業、フォーム入力、情報抽出を自動実行
  • 複数のシステム間の連携:メール、ファイル、データベースを一つのAIエージェントで統合管理

MCPサーバーとは:AIツール側から見た位置付け

MCPは、AIが外部ツール・システムと安全にやり取りするための通信規格です。Claudeで先に採用された仕組みが、2026年にはChatGPTでも本格的に利用可能になってきました。

MCPの基本動作フロー:

  1. ChatGPT(またはClaude Code)で何か質問・指示をする
  2. その指示がMCPサーバーに送られる
  3. MCPサーバーが(あなたのシステム内で)実際の処理を実行
  4. 結果をAIに返す
  5. AIが結果を解釈して、わかりやすい回答を提示

つまり、MCPサーバーは「AIとあなたのシステムの中間翻訳機」のような役割を果たします。AIが直接あなたのコンピュータやサーバーにアクセスするのではなく、あなたが明示的に「このMCPサーバーを通してなら、このレベルのアクセスを許可する」という形になるため、セキュリティ面でも安全です。

なお、2026年のエージェント設計の主流はメモリとコンテキスト管理の洗練化にシフトしており、@mcp.tool()はそのための必須基盤となっています。

このやり方で何ができるか

MCPネイティブ・アーキテクチャを導入することで、3つの段階での効率化が可能になります。

段階1:設計フェーズ

アーキテクチャの設計段階で、AIエージェントがどのような操作をするのかを明確に定義します。これにより、セキュリティ上の問題を早期に発見し、修正コストを抑えられます。従来は開発後にセキュリティ問題が見つかることが多かったのですが、設計時点で防げるようになります。

段階2:監査・検査フェーズ

AIエージェントが正しく動作しているか、セキュリティ上の懸念がないかを自動で検査できるプロトコルが用意されています。特に、AIが勝手に危険な操作をしないかを監視する仕組みが組み込まれるため、問題の早期発見と対応が可能です。

段階3:実行フェーズ

デスクトップやサーバー環境で、AIエージェントが安全に自動化タスクを実行します。MCPによって、システムのどの機能をAIに使わせるかを厳密に制御できるため、予想外の操作を防ぐことができます。

準備するもの

MCPネイティブ・アーキテクチャでの開発を始める際に必要な準備は以下の通りです:

  • ChatGPT Plus/Team 以上のアカウント、またはClaude Code環境:MCPサーバー設定機能はPro・Teamプラン以上が対象(無料プランでは利用不可)
  • Python 3.10以上 または Node.js環境:MCPサーバーをローカル実行する場合に必要。PythonでMCPを使う場合はpip install mcp anthropicが必要
  • 接続したいサービスのAPIキーやアクセストークン:GitHub、データベースなど
  • 開発環境:コマンドラインツールやテキストエディタ(Visual Studio Codeなど)。Claude Codeを使う場合は.claude/mcp.jsonなどの設定ファイルへのアクセス権限も必要
  • プロンプトツール設計の知識:何をAIに指示するか、どう構造化するかの基本的な理解
  • 自動化したい業務の整理:何を自動化したいのか、どんな入出力が必要かをあらかじめまとめておく

特に重要なのは「業務の整理」です。例えば「毎週月曜日の朝、先週の売上レポートをメールで送る」というように、自動化の目標を明確にしておくことが、後の設計をスムーズにします。

2026年おすすめMCPサーバー連携12種類

実際に導入可能なMCP連携を12種類紹介します。これらはChatGPTやClaude Codeをはじめとする対応AIで利用できるものです。

1. GitHub連携(コード閲覧・管理)

リポジトリのコードをリアルタイム参照、Issue・Pull Requestの作成・更新、ブランチ操作の提案・自動化、コミットメッセージの生成補助などが可能です。開発者にとって最も使用頻度が高いプラットフォームで、複数の実装オプションが存在します。設定にはGitHub Personal Access Token(PAT)と対象リポジトリへのアクセス権が必要です。

2. VS Code連携(エディタ内でのAI機能拡張)

VS Code内で編集中のコードをAIにそのまま送信、提案を直接コードに反映、ファイル操作の自動化、デバッグ情報の共有と分析ができます。エディタとの連携により、マウスで往復することなく開発フローがスムーズになります。Claude Codeと組み合わせると、MCPサーバーをVS Codeの設定ファイルで直接定義して管理することも可能です。

3. PostgreSQL・MySQLなどデータベース連携

SQLクエリの提案・自動生成、テーブル構造の分析、データ品質の確認、複雑なJOINやサブクエリの最適化提案が可能です。実データに基づいた分析・提案ができるため、データベース設計の相談やパフォーマンス改善に特に役立ちます。asyncpgなどの非同期ライブラリを組み合わせると、MCPツールからの高速なクエリ実行が可能になります。

4. Slack連携(チーム通知・対話)

Slackチャンネルでの質問へのAI自動応答、エラーログの自動分析と通知、デイリーレポート生成など、チーム全体がAIの恩恵を受けられるようになります。

5. Jira連携(プロジェクト管理・タスク自動化)

Issueの自動作成・更新、進捗状況の自動レポート生成、タスク優先度の提案、バグ分析の自動化により、プロジェクト管理の手作業が大幅に削減されます。

6. Google Workspace連携(ドキュメント・スプレッドシート)

ドキュメント内のテキストを自動編集、スプレッドシートのデータ分析・グラフ化の提案、複数ドキュメント間の情報統合、定型ドキュメントの自動生成が可能です。

7. Docker・Kubernetes連携(インフラ構成管理)

Dockerfileの最適化提案、Kubernetes YAMLの自動生成、デプロイメントエラーの分析、リソース使用量の最適化提案により、インフラ構築・運用の複雑さが軽減されます。

8. Stripe・PayPal連携(決済システム管理)

取引データの分析、定期支払いの設定・変更、払い戻し処理の補助、詐欺検知の提案ができます。金銭データを扱うため、セキュリティ設定が特に重要です。APIキーは必ずツール引数ではなく環境変数で管理し、ログへの記録を防ぎましょう。

9. Sentry・DataDog連携(エラーモニタリング)

エラーログの自動分析、異常検知、インシデント対応手順の提案、パフォーマンスボトルネックの特定により、本番環境の問題に素早く対応できるようになります。

10. npm/PyPI連携(パッケージ管理)

依存関係の脆弱性チェック、アップデート可能なパッケージの提案、バージョン互換性の検証、パッケージ選定のアドバイスにより、セキュリティと開発効率の両立が可能になります。

11. Notion連携(知識管理・ドキュメント)

Notion内のデータベースをAIに参照させる、社内ナレッジの自動検索・統合、ドキュメント内容に基づいた回答生成、チーム内の情報共有の自動化により、組織全体の知識をAIが活用できるようになります。

12. API Gateway・REST API連携(カスタム連携)

独自開発したシステムへの接続、外部サービスとの複合連携、カスタムワークフロー自動化、組織固有のビジネスロジックの自動化が可能です。Next.jsなどのフルスタックアプリケーションでもMCP経由でツールを呼び出すことができ、あらゆるシステムに対してAIを繋ぎ込む汎用的な方法です。

手順(番号付き)

1. 自動化したい業務を選ぶ(目安時間:30分)

まず、今の仕事の中で「毎回同じ手順を繰り返している業務」を見つけます。以下のような業務が候補になります:

  • 定期的な情報収集や集計
  • フォーム入力や書類作成
  • メールの下書きや整形
  • Webサイトからのデータ抽出
  • ファイルの名前変更や移動

この段階では、完璧さを求めず、「何となく繰り返している」という感覚で大丈夫です。所要時間が短い業務でも構いません。複数候補があれば、それらをリストアップしておきましょう。

2. プロンプトツール設計書を作成する(目安時間:1〜2時間)

選んだ業務について、以下の項目をまとめた設計書を作ります。これは紙でもテキストファイルでも構いません:

  • 入力:AIに与える情報は何か(テキスト、ファイル、WebサイトのURLなど)
  • 処理:AIが何をするのか(データの分析、文章の作成、判断など)
  • 出力:結果をどこにどの形式で出すか(メール、ファイル、画面表示など)
  • 制約:AIが絶対にしてはいけないことは何か(機密情報の外部送信など)

例えば「週報の下書き自動作成」なら、以下のようになります:

入力 → 今週のタスク完了リスト、プロジェクトの進捗状況 処理 → 項目ごとに要点をまとめ、来週の予定を予測 出力 → メールの本文形式で、管理者へ送信可能な形式 制約 → 個人の感情的な意見は含めない、数字は前週比較で表記

3. MCPプロトコルの要件を定義する(目安時間:2〜3時間)

設計書をもとに、MCPで定義すべき項目を整理します。主に以下の内容です:

  • どのツールをAIに使わせるか:メール送信、ファイル操作、Webアクセスなど
  • 権限の範囲:特定のフォルダだけ操作可、機密情報は閲覧禁止など
  • エラー時の動作:AIが困った時にどうするか
  • ログとモニタリング:何をいつ記録するか

MCPネイティブ・アーキテクチャでは、この段階で厳密に定義することが大切です。後から「ここまでしか操作させたくなかった」という問題を防げるからです。

4. 簡単なテストケースを作成する(目安時間:1〜2時間)

実際に動かす前に、テスト用の入力データを3〜5パターン用意します。例えば:

  • 正常系:想定通りの入力でAIが正しく処理できるか
  • 変わった形式の入力:いつもと異なるフォーマットで、AIが対応できるか
  • 境界値:非常に大きなデータや小さなデータでエラーが出ないか

テストケースを決めておくことで、後で「これはうまくいった、これは失敗した」と結果を比較しやすくなります。

5. MCPサーバーを設定・接続する(目安時間:1〜2時間)

ChatGPT Plusなど対応サービスの設定画面、またはClaude Code環境でMCPサーバーの接続を行います。

ChatGPTでの設定手順:

  1. 「Settings」→「Projects」を開く
  2. 「Add Integration」または「Connect Tools」を選択
  3. 接続したいサービス(例:GitHub)を選ぶ
  4. 認証情報(APIキーやトークン)を入力する

Claude Code(VS Code)での設定手順:

VS Codeの設定ファイル(settings.jsonまたはワークスペース設定)にMCPサーバーエンドポイントを登録します。

{
  "claude.mcp.servers": {
    "my-agent-tools": {
      "command": "python",
      "args": ["mcp_server.py"],
      "disabled": false
    }
  }
}

HTTPでリモート実行する場合は以下のように設定します:

{
  "claude.mcp.servers": {
    "my-agent-tools": {
      "type": "http",
      "url": "http://127.0.0.1:8000",
      "disabled": false
    }
  }
}

GitHub PATの発行手順:

  1. GitHub Settings → Developer settings → Personal access tokens
  2. 「Generate new token」をクリック
  3. スコープを選択(reporead:user など)
  4. 生成されたトークンをコピーして設定画面に貼り付ける(この画面を離れると二度と表示されないので注意)

接続確認後、「Enable」「Save」などで有効化します。

PythonでMCPサーバーをローカル実行する場合:

# 必要なライブラリをインストール
pip install mcp anthropic asyncio

# MCPサーバーの起動確認
curl http://127.0.0.1:8000/health

Node.js環境でMCPサーバーを実行する場合:

# プロジェクト初期化とライブラリインストール
mkdir my-mcp-server
cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk

起動後、設定画面でローカルサーバー(例:localhost:3000)を指定して接続します。ただし、ローカルサーバーへのアクセスはネットワーク設定に注意が必要です。

6. AIエージェントを構築・実行する(目安時間:3〜5時間)

MCPプロトコルに対応した開発環境で、設計書とテストケースをもとにコードを書きます。@mcp.tool()デコレータを使った最小構成の例を示します:

# mcp_server.py
from mcp.server import Server
from mcp.types import TextContent, ToolResult
import json

server = Server("my-agent-tools")

@server.define_tool(
    name="fetch_user_data",
    description="ユーザーIDからユーザー情報を取得します",
    input_schema={
        "type": "object",
        "properties": {
            "user_id": {
                "type": "string",
                "description": "ユーザーID"
            }
        },
        "required": ["user_id"]
    }
)
async def fetch_user_data(user_id: str) -> ToolResult:
    user_info = {
        "user_id": user_id,
        "name": "Sample User",
        "email": "user@example.com",
        "plan": "pro"
    }
    return ToolResult(content=[TextContent(type="text", text=json.dumps(user_info))])

この段階では、手順3と4で用意したテストケースを一つ一つ試します。うまくいったら次へ進み、うまくいかなかったら、設計を見直すか、プロンプトの内容を調整します。

7. 安全性を確認する(目安時間:2〜3時間)

実際の環境で動かす前に、セキュリティ上の問題がないか最終確認を行います。確認項目:

  • 権限の過剰性:AIに与えた権限は本当に必要か
  • 情報漏洩の可能性:機密情報が外部に送信されないか
  • 予期しない動作:設計書に書いていない動作がないか
  • エラーハンドリング:トラブル時に安全に停止できるか

データベースを接続する場合は、読み取り専用のユーザーアカウントを作成してMCPサーバーに使わせると安全性が高まります。

-- PostgreSQL の例:読み取り専用ユーザーの作成
CREATE ROLE chatgpt_readonly WITH LOGIN PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE your_database TO chatgpt_readonly;
GRANT USAGE ON SCHEMA public TO chatgpt_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO chatgpt_readonly;

また、APIキーなどの認証情報はツール引数に含めず、必ず環境変数で管理してください。ログへの記録を防ぐためにも重要です:

import os

@server.define_tool(name="secure_api_call")
async def secure_api_call(resource_id: str) -> ToolResult:
    api_key = os.getenv("STRIPE_API_KEY")  # 環境変数から取得
    # APIキーをツール入力に含めない
    ...

MCPプロトコルに対応したツールなら、自動で一部の検査をしてくれるものもあります。活用しましょう。

8. 本番環境で実行・監視する(目安時間:30分〜、継続的)

実際の業務に適用します。最初は限定的に(例:週に1回だけ)試し、問題がないか観察します。

重要なのは「最初からすべてを自動化しない」ことです。AIエージェントが期待通りに動いているか、想定外の結果が出ていないか確認できる余裕を持たせましょう。問題があれば、その都度設計に立ち戻り改善します。

つまずきやすいところ

入力データの品質が不安定な場合

AIは「いつも同じ形式」の情報があると最も正確に動きます。しかし、現実の業務では入力が様々な形式になることがあります。

例えば「売上データ」なら、ExcelファイルもWebページのテーブルも、メール本文の数字も来るかもしれません。このような場合、あらかじめAIに「複数の形式に対応するよう」プロンプト(指示)を工夫しておくと、安定性が向上します。

思い通りの出力が得られない

「レポートを作って」と指示しても、AIが想定と異なる形式や内容で出力することがあります。この時は、プロンプトをより詳しく書き直します。

例えば「要点を3つまでまとめる」「日本語で箇条書き」「1行50字以内」というように、具体的な指示に変えると、結果が改善することが多いです。

MCPサーバーに接続できない

よくあるエラーと対処法は以下の通りです:

  • 「Connection refused」や「Unable to connect」:MCPサーバーが起動していない、またはポートが間違っている。ローカルサーバーの起動状態とポート番号を確認する。curl http://127.0.0.1:8000/healthで起動確認もできます
  • 「Authentication failed」や「Invalid token」:APIキーやトークンが不正または有効期限切れ。新しいトークンを生成して設定を更新する
  • 「Permission denied」:接続しているアカウントに十分な権限がない。GitHub側のリポジトリアクセス権やAPIスコープを確認する
  • Claude Codeで認識されないsettings.jsonの設定パスが誤っているか、サーバーが起動していない。VS CodeでCmd+Shift+P →「Developer: Reload Window」で設定をリロードする

ツール呼び出しがタイムアウトする

非同期処理が正しく実装されていないか、処理時間が長すぎる場合に発生します。以下のようにタイムアウト設定を追加しましょう:

import asyncio

@server.define_tool(name="long_process")
async def long_process(task_id: str) -> ToolResult:
    try:
        result = await asyncio.wait_for(
            expensive_operation(task_id),
            timeout=30.0  # 30秒タイムアウト
        )
        return ToolResult(content=[TextContent(type="text", text=result)])
    except asyncio.TimeoutError:
        return ToolResult(content=[TextContent(type="text", text="処理がタイムアウトしました")])

セキュリティ設定が複雑に感じられる

MCPプロトコルで権限を細かく設定すると、その分設定項目が増えます。「この権限は本当に必要か」と何度も自問することになるかもしれません。

ここでは、焦らず「今この業務に必要な最小限の権限」だけを設定することを心がけましょう。後から権限を増やすことはできますが、一度与えた権限を取り上げるのは大変です。また、APIキーは環境変数(.envファイル)で管理し、定期的(3〜6ヶ月ごと)にローテーションする習慣をつけましょう。

AIが勝手に余計な操作をしてしまう

指示していない操作をAIが実行してしまう場合があります。例えば「メール送信」と指示したのに「メール送信+ファイル保存」まで実行してしまうような場合です。

このような時は、MCPの「制約」や「権限範囲」の設定を厳しくします。また、プロンプトに「メール送信だけをして、それ以外は何もしない」と明確に書く工夫も効果的です。ツール側でもエラーハンドリングを明示的に実装し、不正な入力でエージェントが停止しないようにしましょう:

@server.define_tool(name="robust_tool")
async def robust_tool(input_data: str) -> ToolResult:
    try:
        if not input_data or len(input_data) > 1000:
            return ToolResult(
                content=[TextContent(type="text", text="エラー: 入力が無効です")]
            )
        result = perform_operation(input_data)
        return ToolResult(content=[TextContent(type="text", text=result)])
    except Exception as e:
        return ToolResult(
            content=[TextContent(type="text", text=f"エラーが発生しました: {str(e)}")]
        )

慣れてきたら試したいこと

複数の業務を組み合わせる

一つの自動化がうまくいったら、複数の業務を連鎖させることができます。例えば「売上レポート作成 → メール送信 → 保存」といった流れです。複数のMCPサーバー(GitHub + Jira + Slackなど)を同時に接続し、コード変更がJiraのタスクとSlack通知に自動で反映されるような構成も実現できます。さらに、複数のツールを組み合わせたマルチステップワークフローも組めます:

@server.define_tool(name="end_to_end_workflow")
async def end_to_end_workflow(user_id: str) -> ToolResult:
    user = await get_user(user_id)
    payment = await check_payment(user_id)
    await update_license(user_id, payment['status'])
    return ToolResult(content=[TextContent(
        type="text",
        text=f"ユーザー {user_id} のワークフロー完了"
    )])

例外処理の自動対応

AIが「これはいつもと違う」と気づいた時に、自動で別の処理をするように設定できます。例えば「数字がおかしい場合はチャットで報告」といった工夫です。

ほかのチームメンバーとの共有

AIエージェントの設定や使い方を、ほかのメン


あわせて読みたい

参考ソース