1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCP (Model Context Protocol) に入門する

1
Posted at

なぜこれを書くか

現役のAIエンジニアで
現在は教育関係の仕事も実施している遠藤太一です。

本シリーズは、実プロダクト を題材に、自分が次に学ぶべき技術を 1 つずつ消化していく成長過程の記録です。

Part 1 は MCP (Model Context Protocol) です。


MCP とは何か

MCP は Anthropic が 2024 年 11 月に公開した、LLM アプリと外部システムを繋ぐオープン標準 です。USB-C 端子に例えられることが多く、「どんな LLM クライアント (Claude Desktop / Cursor / Cline / Continue 等) からでも、同じ仕様で外部データ・ツールを呼べる」のが本質です。

3 つのプリミティブ

種類 役割
Resources 読み取り専用のデータ lesson://2/section/4exam-question://kokushi/2024_38_AM_62
Tools 副作用ありの関数呼び出し search_lessons(query)generate_quiz(topic, count)
Prompts パラメータ付きテンプレ quiz_me_on(lesson_no=3, level="basic")

プロトコル本体

  • Transport: stdio (ローカル) / SSE (リモート) で JSON-RPC 2.0 を流す
  • SDK: @modelcontextprotocol/sdk (TypeScript) / mcp (Python) / mcp-rust-sdk (Rust)
  • クライアント設定: Claude Desktop なら ~/Library/Application Support/Claude/claude_desktop_config.json にコマンドを書くだけ

なぜ今 MCP を学ぶのか

2025 年後半以降に「生成 AI / LLM / RAG / MCP」を並べて記載する企業が急増しています。生成 AI 系職種の応募者は飽和している一方、MCP を実プロダクトで動かしたことがある人は今でも希少 です。「これから流行る前から触ってる人」のポジションを取りに行ける数少ない技術です。

そして、医療現場こそ MCP の真価が活きる領域です。電子カルテ / 検査機器 / 院内 DB を 個別の API ラッパー無し に AI クライアントに繋げるのは、これまでは現実的じゃありませんでした。MCP なら 1 つの標準で行ける。


自分のプロダクトでどう使うか

私が運用している教材プラットフォーム (Next.js + Supabase + Gemini API) には:

  • 全 10 回分のレッスン本文 (各回 8-12 セクション)
  • ExamQuestion テーブル ( G検定 / 生成AIパスポート 過去問)
  • 掲示板 (Phase B で pgvector ベース RAG 化済み)

これを MCP サーバーとして公開すると、Claude Desktop からこの教材コンテンツを直接参照しながら質問 できるようになります。例えば:

「第 3 回で扱った SaMD と厚労省 Q-26 の関係を、第 7 回の著作権の話と繋げて、資格試験で出そうな形式で問題作って」

これを Claude Desktop で打つと、MCP 経由で:

  1. lesson://3/section/4 (SaMD), lesson://3/section/2 (厚労省 Q-26), lesson://7/section/4 (著作権) を Resources で取得
  2. generate_quiz_in_me2_style Tool を呼び出し
  3. ExamQuestion DB から類似問題を検索して参考に

— という連携が、API 個別実装なしに動きます。


最小 MCP サーバーのコード

TypeScript SDK での骨格はこんな感じ:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { ListResourcesRequestSchema, ReadResourceRequestSchema } from "@modelcontextprotocol/sdk/types.js";

const server = new Server({ name: "lessons-mcp", version: "0.1.0" }, {
    capabilities: { resources: {}, tools: {} }
});

server.setRequestHandler(ListResourcesRequestSchema, async () => ({
    resources: LESSONS.flatMap(l => l.sections.map((s, i) => ({
        uri: `lesson://${l.no}/section/${i}`,
        name: `第${l.no}回 §${i+1} ${s.title}`,
        mimeType: "text/markdown",
    }))),
}));

server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
    const match = req.params.uri.match(/^lesson:\/\/(\d+)\/section\/(\d+)$/);
    if (!match) throw new Error("Invalid URI");
    const lesson = LESSONS.find(l => l.no === Number(match[1]));
    const section = lesson?.sections[Number(match[2])];
    return { contents: [{ uri: req.params.uri, mimeType: "text/markdown", text: section?.content ?? "" }] };
});

await server.connect(new StdioServerTransport());

Claude Desktop 側の設定:

{
  "mcpServers": {
    "lessons": {
      "command": "node",
      "args": ["/Users/tai/AI/Portfolio.lessons/mcp-server/dist/index.js"]
    }
  }
}

これで Claude Desktop 起動時に MCP サーバーが立ち上がり、Resources がドロップダウンに出現します。


次のステップ

このシリーズの次回 (Part 2) では実装記録を書きます:

  • ExamQuestion を Tool として公開し、Claude Desktop から「○○について類題を 5 問」と打つだけで国試問題が手に入る仕組み
  • Phase B で組んだ pgvector RAG を MCP Tool 経由でも叩けるようにする
  • 認証 (現状の MCP は認証が弱いので、ローカル運用前提)
  • 既存ユーザー (40 名の臨床工学技士学科 1 年生) への影響評価

学んだこと (現時点で)

  • MCP は 過剰に複雑じゃない。JSON-RPC + 3 プリミティブだけ
  • ただし 「何を Resources にして何を Tools にするか」の設計判断が肝。ここを間違えると LLM が使いこなせない
  • 医療系では、Resources は読み取り (患者情報の閲覧)、Tools は副作用 (オーダーや投薬指示) で分ける設計が安全
  • 病院 IT の閉域網での運用なら ZDR 契約 LLM + ローカル MCP サーバー の組み合わせが本命

実装記録は次回。


タグ: MCP 生成AI LLM Anthropic Claude 医療AI TypeScript RAG

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?