AIAI教室AI CLASSROOM

← 講座一覧へ戻る

CHAPTER 08 · CONNECT

AIエージェントとMCP:外部ツール連携の利便性・危険性・作成方法

MCPの構造、外部ツール連携の利便性と危険性、読み取り専用サーバーの作成・試験方法を学びます。

約120分外部ツール連携を学ぶ

8章 AIエージェントとMCP:外部ツール連携の利便性・危険性・作成方法

生成AIは、文章を作るだけでなく、ファイルやデータベースを調べ、業務システムへ処理を依頼する形でも利用されるようになっています。MCP(Model Context Protocol:モデルコンテキストプロトコル)は、AIアプリケーションと外部のデータ・ツールを接続するためのオープンなプロトコルです。【E1】

接続できることと、安全に任せられることは別です。外部ツールを使うAIは、誤った回答を返すだけでなく、権限の範囲で現実のデータやシステムを変更する可能性があります。この章では、MCPの基本構造、利便性と限界、主な危険性、安全なMCPサーバーの設計・作成・試験方法を学びます。

本章の前提
MCPの仕様、SDK、対応するAIアプリケーションは更新されます。本章は2026年7月17日時点のMCPプロトコルと公式資料を基準にしています。実装・公開時には、利用するクライアント、SDK、プロトコル版、認証方式の公式資料を再確認してください。【E8】【E9】

この章の対象者

  • 生成AIからファイル、データベース、API、業務ソフトウェアを利用したい方
  • MCP、プラグイン、API、RAG、画面操作の違いを整理したい方
  • 小さなMCPサーバーを作成し、安全に試したい方
  • 組織でMCPサーバーやAIエージェントを評価・導入する方

この章でできるようになること

  1. MCPホスト、MCPクライアント、MCPサーバーの役割を説明できる。
  2. Tools、Resources、Promptsの違いと、外部連携にMCPを使う利点・限界を説明できる。
  3. 過剰権限、プロンプトインジェクション、情報流出、不正なサーバーなどの危険性を確認できる。
  4. 読み取り専用の小さなMCPサーバーを設計・作成・試験できる。
  5. 書き込みや外部送信を追加する前に、承認、権限、ログ、停止方法を設計できる。

8-1. 「回答するAI」から「操作するAI」へ

通常のチャットでは、利用者が質問し、AIが文章を返します。外部ツール連携を加えると、AIアプリケーションは、利用可能な機能を確認し、必要な引数を組み立て、ツールを呼び出し、その結果を使って次の回答や処理を行えます。

利用形態現実のシステムへの影響
文章生成メール本文の下書きを作る下書きが返るだけなら直接の変更はない
情報取得公開資料、ファイル、データベースを検索する読み取り範囲の情報がAIへ渡る
下書き作成予定、申請、記事を未確定状態で登録するシステム内に変更が生じるが確認しやすい
外部操作メール送信、ファイル削除、注文、公開を行う他者・資産・公開情報へ影響する

この違いは重要です。AIが予定を提案することと、カレンダーへ予定を登録すること、メール文を作ることと、宛先へ送信することは、必要な権限と事故時の影響が異なります。

MCPは何を標準化するのか

MCPは、AIアプリケーションと外部機能の間で、利用可能な機能、その入力形式、結果、接続方法などをやり取りする共通の仕組みを定めます。MCPサーバーは、外部データや処理をMCPの機能として公開し、MCPクライアントはそれを発見して利用します。【E1】【E2】

ただし、MCPは次のことを自動的には保証しません。

  • AIの判断やツールの結果が正しいこと
  • 接続したMCPサーバーが安全であること
  • 利用者が操作内容を理解して承認したこと
  • 外部サービスの権限・契約・法令に適合すること
  • 異なる製品間ですべての機能が同じように動くこと

MCPは接続のためのプロトコルです。実際に何を実行できるかは、MCPサーバーの実装、接続先のAPI、OSの権限、認証情報、MCPホスト側の承認画面や安全機能で決まります。

似た仕組みとの違い

用語主な役割MCPとの関係
APIソフトウェア同士が機能やデータを利用する入口MCPサーバーが既存APIを呼び出すことがある
RAG関連資料を検索し、生成時の文脈として渡す構成MCP ResourcesやToolsを検索経路に使えるが、MCPだけがRAGの実装方法ではない
プラグイン/コネクタ製品ごとに使われる追加機能・接続機能の呼称内部でMCPを使う場合も、別方式の場合もある
画面操作・RPA人のように画面やキーボードを操作するMCPは通常、名前と入力形式を持つ構造化された機能として操作を公開する
AIエージェント目標に応じて手順やツール利用を組み立てるシステムの総称MCPは、エージェントが外部機能へ接続する方法の一つ

8-2. MCPの基本構造

MCPは、ホスト・クライアント・サーバーからなる構造を取ります。MCPホストはAIアプリケーション全体を管理し、通常は接続先のMCPサーバーごとにMCPクライアントを作成します。MCPサーバーはローカルPC上のプログラムでも、ネットワーク上のサービスでも構いません。【E1】

図表案(Mermaid記法)
flowchart LR
  U[利用者] --> H[AIアプリケーション / MCPホスト]
  H --> L[言語モデル]
  H --> C[MCPクライアント]
  C <-->|MCP| S[MCPサーバー]
  S --> D1[ファイル / データベース]
  S --> D2[Web API / 業務ソフトウェア]
  S --> D3[計算 / 検索 / 自動処理]
構成要素役割主な安全上の責任
MCPホストAI、会話、接続、利用者との画面をまとめる接続許可、ツール表示、承認、結果の扱い
MCPクライアント1つのMCPサーバーとの通信を維持する版・機能の交渉、メッセージの受け渡し、接続境界
MCPサーバーデータや処理をMCPの機能として公開する入力検証、アクセス制御、出力処理、ログ、レート制限
外部システム実際のデータ保存・検索・更新を行う認証、権限、監査、バックアップ、取消手段

サーバーが公開する3つの基本機能

MCPサーバーは、主にTools、Resources、Promptsを公開できます。【E1】【E7】

機能平易な説明主な制御主体
Tools入力を受け取り、検索・計算・操作を行う機能在庫検索、予定作成、ファイル変換モデルが候補を選び得るため、重要操作は人が確認する
ResourcesAIアプリケーションへ渡せるデータ公開資料、DBスキーマ、設定例アプリケーション側が文脈への追加を管理する
Prompts再利用できる指示や対話テンプレート議事録整理、障害調査の手順利用者が選択して使う形が基本となる

Toolsは入力をJSON Schemaで表現でき、クライアントはツール一覧を取得して、名前、説明、入力形式を確認してから呼び出せます。公式仕様は、人がツール呼び出しを拒否できること、機密性のある操作では入力を表示して確認すること、サーバー側で入力検証・アクセス制御・レート制限・出力の無害化を行うことを推奨しています。【E2】

注意
「Toolsはモデルが利用を選べる」ことと、「モデルに最終決定を任せる」ことは同じではありません。MCPプロトコルは特定の承認画面を強制しないため、重要操作の確認方法はMCPホストとシステム設計で補います。【E2】

ローカル接続とリモート接続

現在の標準トランスポートには、主にstdioStreamable HTTPがあります。【E3】

接続方式主な利用場面特徴確認する危険性
stdio同じPC上でクライアントがサーバーを起動標準入力・標準出力で直接通信する起動コマンド、実行ファイル、OS権限、読めるフォルダ
Streamable HTTPネットワーク上の共有・リモートサーバーHTTPで複数クライアントへ提供できる認証、HTTPS、公開範囲、Origin検証、セッション管理

ローカルサーバーでも安全とは限りません。起動されたプログラムは、原則として起動した利用者やクライアントの権限でファイル・ネットワーク等へアクセスし得ます。リモート接続では、認証・認可、暗号化、ネットワーク公開、セッションの保護が加わります。【E3】【E4】【E5】


8-3. MCPの利便性と、採用しない判断

MCPの利点は、AIアプリケーションと外部機能の間に共通の境界を設けられることです。

利便性具体的な効果残る課題
機能の発見クライアントが利用可能なTools等の一覧と形式を取得できる説明が曖昧なら、モデルが誤ったツールを選ぶ可能性がある
入出力の構造化引数をスキーマで示し、形式を検証しやすい業務上正しい値か、実行してよいかは別に確認する
接続部の再利用対応する複数のAIアプリケーションから同じサーバーを利用しやすい対応機能、プロトコル版、認証方式には差があり得る
関心の分離モデルとの対話と、データ・業務処理の実装を分けられるサーバー側の保守、脆弱性対応、監査は必要になる
小さな機能の組合せ検索、計算、変換などを目的に応じて組み合わせられる組合せにより、単体では想定しない権限や情報の流れが生じる

一方、外部連携であれば常にMCPを採用する必要はありません。

状況検討しやすい方法
1つの固定アプリから1つのAPIを呼ぶだけ通常のAPI連携の方が単純な場合がある
複数のAIアプリケーションから同じ機能を使いたいMCPによる共通化を検討する
APIがなく、人向け画面しかない公式APIの有無を再確認し、必要ならRPA等を検討する
高頻度・低遅延の内部処理MCPを経由する効果と性能を実測する
決済・医療・法的判断など高リスクの確定処理自動実行を前提にせず、専用画面と人の承認を中心に設計する

「標準に対応しているから導入する」のではなく、接続先の数、再利用性、権限、監査、障害時の影響を比較して選びます。


8-4. 外部ツール連携の危険性と安全設計

外部ツールを使うAIでは、入力資料の内容、モデルの判断、ツールの権限、サーバーの実装、認証情報が連鎖します。一つの対策だけで安全になるわけではありません。

危険性起こり得ること主な対策
過剰な権限検索だけの用途なのに全フォルダの削除権限を持つ読み取り専用、対象範囲の固定、最小スコープ、権限分離
プロンプトインジェクションWebページや文書内の命令をAIが指示と誤認し、別のツールを呼ぶ外部データを命令として扱わない、ツールを限定する、重要操作を承認する
情報流出ツール入力に会話履歴、機密文書、認証情報が混ざる呼び出し前に入力を表示・最小化し、送信先とログを確認する
不正・改ざん済みサーバー起動コマンドや依存パッケージが任意コードを実行する配布元、署名・ハッシュ、依存関係、実行コマンドを確認し、隔離環境で試す
入力・出力の未検証パス、URL、SQL、コマンド等が想定外の処理へ使われる許可リスト、型・長さ・範囲検証、出力の無害化、タイムアウト
認証情報の誤用トークンの漏えい、別サービス向けトークンの受入れ秘密情報をコード・設定・ログへ直書きせず、対象・期限・スコープを検証する
誤操作・重複実行削除、送信、登録、注文を誤って、または複数回実行するプレビュー、確認、冪等性、件数上限、取消・復元、再実行試験
監査不能誰の依頼で何を実行したか追跡できない利用者、時刻、ツール、対象、承認、結果を記録する

MCPの公式セキュリティ資料は、ローカルMCPサーバーが任意コード実行、情報流出、データ消失につながり得ることを示し、起動コマンドの完全表示、明示的な同意、サンドボックス、ファイル・ネットワーク権限の制限を推奨しています。【E4】

安全設計の8原則

  1. 読み取り専用から始める。 最初の実習・検証では、書き込み、削除、送信、コマンド実行を持たせません。
  2. 対象を固定する。 「任意のパス」「任意のURL」「任意のSQL」ではなく、許可済みのフォルダ、API、操作だけを公開します。
  3. 権限を分ける。 読み取りと書き込み、一般利用と管理操作、テスト環境と本番環境を別の認証情報・サーバー・ツールに分けます。
  4. 実行直前に確認する。 送信先、変更内容、件数、費用などを具体的に表示し、古い包括承認を使い回しません。
  5. 入出力を検証する。 型だけでなく、長さ、範囲、許可値、件数、パス、URL、返却データを確認します。【E2】
  6. 秘密情報を分離する。 APIキーやトークンはコード、プロンプト、ツール結果、通常ログへ含めません。
  7. 記録して止められるようにする。 監査ログ、タイムアウト、レート制限、接続解除、トークン失効、緊急停止を用意します。
  8. 失敗を前提にする。 バックアップ、下書き、ゴミ箱、取引取消、二重実行防止など、復旧できる設計を優先します。

権限を段階的に上げる

段階基本方針
1. 読み取り公開講座を検索する固定された公開データだけを対象にする
2. 下書きメールや予定の下書きを作る外部へ送信せず、利用者が内容を確認する
3. 可逆的な更新専用テスト領域へファイルを作る対象・件数を限定し、履歴・取消・復元を用意する
4. 外部送信・高影響操作送信、公開、削除、注文、権限変更専用承認、多要素の確認、操作上限、監査を設け、自動化しない判断も持つ

8-5. 読み取り専用MCPサーバーを作る

最初の実装では、固定された公開講座データを検索するToolを1つだけ作ります。ファイル、ネットワーク、環境変数、外部APIにはアクセスしません。これにより、MCPの接続・ツール発見・入力・出力を、影響の小さい状態で確認できます。

先にツールの契約を書く

項目設計内容
Tool名search_public_courses
目的公開講座のタイトルと概要をキーワード検索する
入力keywordmax_results(1〜10)
出力件数と、タイトル・概要の一覧
読み取り範囲プログラム内のサンプル公開データのみ
禁止する処理ファイル入出力、ネットワーク通信、シェル実行、データ更新
エラー空のキーワード、範囲外の件数を拒否する

この契約を先に決めると、「便利そうだから任意ファイル検索も追加する」といった権限の膨張を発見しやすくなります。

1. 開発環境を用意する

以下はPythonと公式MCP Python SDKを使う例です。2026年7月17日時点ではPython SDK 1.xが安定版であり、2.xはプレリリースです。本番用途では依存関係の上限を固定し、移行時にコードと試験を更新します。【E8】

uv init safe-course-mcp
cd safe-course-mcp
uv add "mcp[cli]>=1.27,<2"

uv、Python、SDKの導入方法はOSや組織の管理方法に従ってください。インストールコマンドを実行する前に、公式配布元、導入されるパッケージ、実行権限を確認します。

2. server.pyを作る

from typing import TypedDict

from mcp.server.fastmcp import FastMCP


class Course(TypedDict):
    title: str
    summary: str


mcp = FastMCP("ai-classroom-course-search")

COURSES: list[Course] = [
    {
        "title": "生成AI基礎",
        "summary": "質問、回答の確認、情報を安全に扱う基本を学ぶ。",
    },
    {
        "title": "AIを活用したプログラミング",
        "summary": "仕様、生成コードの確認、テスト、セキュリティを学ぶ。",
    },
    {
        "title": "AIエージェントとMCP",
        "summary": "外部ツール連携の利便性、危険性、安全な作成方法を学ぶ。",
    },
]


@mcp.tool()
def search_public_courses(
    keyword: str,
    max_results: int = 5,
) -> dict[str, object]:
    """公開講座をキーワードで検索する。"""
    normalized = keyword.strip().casefold()
    if not normalized:
        raise ValueError("keywordを1文字以上指定してください。")
    if not 1 <= max_results <= 10:
        raise ValueError("max_resultsは1から10の範囲で指定してください。")

    matches: list[Course] = []
    for course in COURSES:
        searchable_text = f"{course['title']} {course['summary']}".casefold()
        if normalized in searchable_text:
            matches.append(course)

    items = matches[:max_results]
    return {"count": len(items), "items": items}


if __name__ == "__main__":
    mcp.run(transport="stdio")

公式Python SDKのFastMCPは、関数の型ヒントやdocstringからツール定義を作成できます。この例では型と範囲の両方を検証し、検索結果を構造化して返します。【E7】【E8】

3. Inspectorで試験する

MCP Inspectorは、サーバーへの接続、Tools・Resources・Promptsの一覧、入力スキーマ、実行結果、通知などを確認する公式の開発ツールです。【E6】

npx -y @modelcontextprotocol/inspector uv --directory C:/ABSOLUTE/PATH/safe-course-mcp run server.py

C:/ABSOLUTE/PATH/safe-course-mcpは、作成したフォルダの絶対パスへ置き換えます。Inspectorやnpxの利用方法は更新されるため、実行前に公式手順とパッケージ名を確認してください。

試験では、成功例だけでなく次も確認します。

試験期待する結果
keywordに「AI」を指定該当する公開講座だけを返す
keywordを空にする入力エラーになる
max_resultsを0または11にする入力エラーになる
該当しない語を指定countが0、itemsが空になる
任意のファイルパスを入力パスを受け取る引数がなく、ファイルを読めない
サーバー停止後に呼び出す接続エラーとなり、外部処理は行われない

4. MCPホストへ接続する

ローカルstdioサーバーの一般的な設定は、MCPホストへ「どのコマンドを、どの引数で起動するか」を登録する形です。設定場所と項目名は製品ごとに異なるため、次は構造例として扱ってください。

{
  "mcpServers": {
    "ai-classroom-course-search": {
      "command": "uv",
      "args": [
        "--directory",
        "C:/ABSOLUTE/PATH/safe-course-mcp",
        "run",
        "server.py"
      ]
    }
  }
}

接続前に、表示された起動コマンドと絶対パスを省略せず確認します。設定ファイルへAPIキー等を直書きせず、MCPホストとOSが提供する安全な秘密情報管理を利用します。


8-6. 書き込み機能を追加する前の設計

読み取り専用サーバーが動いても、そのまま書き込み権限を追加しません。次の順で設計します。

図表案(Mermaid記法)
flowchart LR
  A[目的と対象を固定] --> B[読み取り専用で試験]
  B --> C[変更内容をプレビュー]
  C --> D{人が具体的内容を承認}
  D -->|拒否| E[実行せず記録]
  D -->|承認| F[限定権限で実行]
  F --> G[結果確認・監査ログ]
  G --> H[取消・復元または停止]

書き込みToolの確認表

観点確認する質問
対象どの環境、フォルダ、テーブル、アカウントだけを変更できるか
内容実行前に、変更前後の差分を人が読めるか
件数1回・1日・1利用者あたりの上限があるか
承認実行するTool、対象、内容、費用を示して直前に承認するか
再実行通信切断や再試行で二重登録・二重送信にならないか
復旧取消、ゴミ箱、版履歴、バックアップ、補償手順があるか
認証利用者ごとの権限か。共有管理者トークンになっていないか
監査誰が、いつ、どの入力で、何を承認し、結果がどうなったか残るか
停止接続解除、トークン失効、サーバー停止を誰が実行できるか

リモートMCPサーバーで利用者固有のデータや操作を扱う場合、MCPの認可仕様はOAuth 2.1に基づく仕組みを定めています。これは発展的な実装であり、認可サーバーの発見、トークンの対象確認、スコープ、HTTPS、失効等を公式仕様に沿って設計します。単にAPIキーをToolの引数へ渡す方法で代用しません。【E5】


8-7. ミニ演習:安全な予定登録MCPを設計する

次の要望を、安全なMCPサーバーの設計へ分解します。実在するカレンダーやアカウントへは接続せず、設計だけを行います。

「AIとの会話から、研修会の日程を社内カレンダーへ自動登録したい」

まず、Toolを一つにまとめず、段階に分けます。

Tool案処理権限
find_available_slots指定期間の空き時間を検索する読み取り
preview_training_event登録予定の件名・日時・参加者を表示する外部変更なし
create_training_event承認済みの内容を登録する書き込み

次の設計シートを埋めます。

# 予定登録MCPの安全設計

## 目的
- 何の予定だけを扱うか:

## 読み取り範囲
- 誰の予定表を、どの期間だけ読めるか:

## 書き込み範囲
- 登録できるカレンダー、件数、時間帯:

## 実行前に表示する内容
- 件名、開始・終了、参加者、通知、公開範囲:

## 拒否する入力
- 過去日時、組織外宛先、大量参加者など:

## 誤実行への備え
- 二重登録防止、取消、版履歴:

## ログと秘密情報
- 記録する項目、記録しない認証情報:

## 停止方法
- 接続解除、トークン失効、担当者:

振り返り

  • MCPホスト、クライアント、サーバー、カレンダーAPIの責任を分けられたか。
  • 外部の予定説明に書かれた命令を、AIへの指示として扱わない設計になっているか。
  • 空き時間の検索と予定登録に、同じ強い権限を使っていないか。
  • 「登録してよいですか」だけでなく、実際の日時・参加者・公開範囲を示して承認できるか。
  • 通信再試行時の二重登録と、誤登録の取消方法を決めたか。

まとめ

  • MCPは、AIアプリケーションと外部のデータ・ツールを接続するためのプロトコルである。
  • MCPホスト、MCPクライアント、MCPサーバー、外部システムは別の役割と安全上の責任を持つ。
  • Tools、Resources、Promptsを使い分け、操作を必要以上に強いToolへまとめない。
  • MCPへの対応は、AIの判断、サーバー、権限、外部サービスの安全性を保証しない。
  • 最初は固定された公開データの読み取り専用Toolから作り、入力検証と失敗試験を行う。
  • 書き込み、削除、送信、注文等は、プレビュー、具体的な承認、最小権限、上限、ログ、取消・停止を設計してから追加する。
  • 仕様・SDK・クライアント機能は変わるため、版を記録し、公開・導入前に公式資料を再確認する。

次の学習

次は、実際の用途に応じて「MCPサーバーの自動テスト」「OAuth 2.1によるリモート認可」「プロンプトインジェクション対策」「監査ログとインシデント対応」を個別に学びます。業務システムへ接続する場合は、第6章の導入目的、利用ルール、監査可能性と組み合わせて検証計画を作ります。

出典・エビデンス

本文の対象根拠資料確認した内容
MCPの目的・構造・基本機能【E1】ホスト、クライアント、サーバー、データ層・トランスポート層、Tools・Resources・Prompts
Toolsの発見・スキーマ・安全策【E2】Tool一覧と呼び出し、人による確認、入力検証、アクセス制御、レート制限、ログ
stdioとStreamable HTTP【E3】標準トランスポート、stdioの入出力、HTTPのOrigin検証・待受・認証
MCP固有の攻撃と対策【E4】ローカルサーバー侵害、任意コード実行、情報流出、サンドボックス、明示的同意
リモートサーバーの認可【E5】OAuth 2.1、保護対象リソースの発見、トークンの対象確認、HTTPS等
開発時の確認【E6】MCP Inspectorによる接続、ツール、スキーマ、結果、通知の試験
MCPサーバー作成例【E7】【E8】Python SDK、FastMCP、型ヒント、stdioサーバー、SDK安定版の扱い
プロトコル版【E9】日付形式の版番号、現行版、接続初期化時の版交渉
生成AI全般のリスク管理【E10】生成AIシステムの安全性、セキュリティ、評価、ガバナンス
  • 【E1】 Model Context Protocol, *Architecture overview*

https://modelcontextprotocol.io/docs/learn/architecture

  • 【E2】 Model Context Protocol, *Tools — Protocol Revision 2025-11-25*

https://modelcontextprotocol.io/specification/2025-11-25/server/tools

  • 【E3】 Model Context Protocol, *Transports — Protocol Revision 2025-11-25*

https://modelcontextprotocol.io/specification/2025-11-25/basic/transports

  • 【E4】 Model Context Protocol, *Security Best Practices*

https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices

  • 【E5】 Model Context Protocol, *Authorization — Protocol Revision 2025-11-25*

https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization

  • 【E6】 Model Context Protocol, *MCP Inspector*

https://modelcontextprotocol.io/docs/tools/inspector

  • 【E7】 Model Context Protocol, *Build an MCP server*

https://modelcontextprotocol.io/docs/develop/build-server

  • 【E8】 Model Context Protocol, *MCP Python SDK — v1.x*

https://github.com/modelcontextprotocol/python-sdk/tree/v1.x

  • 【E9】 Model Context Protocol, *Versioning*

https://modelcontextprotocol.io/docs/learn/versioning

  • 【E10】 NIST, *Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile*(NIST AI 600-1、2024年7月26日)

https://doi.org/10.6028/NIST.AI.600-1

参照日:2026年7月17日。MCPの仕様、SDK、開発ツール、対応クライアント、認証方式は更新されるため、実装・公開・導入前に対象版の公式資料を再確認してください。

図表案として記載されているMermaid記法は、内容を確認できるコード形式で掲載しています。