導入
社内データをAIに使わせたい、でも「どこまで見せてよいのか」「何を自動化してよいのか」が曖昧なまま進めると、実装は早くても運用でつまずきます。MCPサーバ構築が注目されるのは、まさにこの曖昧さを減らせるからです。MCPはModel Context Protocolの略で、AIモデルと外部ツールやデータをつなぐための共通のやり方を定める考え方です。AnthropicのMCP公式ドキュメントでは、MCPはモデルを外部のデータや機能に接続するためのオープンなプロトコルとして説明されています。[^1]
ここで大事なのは、MCPを「AIに何でもつなげる魔法」と見ないことです。実務では、読み取り専用でよい情報、操作権限が必要な情報、生成AIに渡すべきでない情報が混在します。MCPはその境界を設計しやすくするのが強みです。逆に言えば、設計なしで導入すると、RAGやAPI直結と同じく、便利さの裏で管理が難しくなります。
この記事では、MCP サーバ構築の基本から、Model Context Protocol 使い方、MCP SDK 実装、Claude 自社データ連携を見据えた設計の考え方までを、比較しながら整理します。特に初心者が混同しやすいResourcesとToolsの違いは、ビジネス上の役割まで踏み込んで説明します。
MCPの核心:なぜ「Model Context Protocol」がB2BのAI活用を加速させるのか
AIモデルと外部データの「共通言語」としてのMCP
MCPの価値は、AIに接続する相手ごとに個別実装を増やさず、共通の接続方式を持てる点にあります。Anthropicの公式ドキュメントでは、MCPはモデルとデータソース、ツールをつなぐための標準化された方法として位置づけられています。[^1] これはB2Bの現場ではかなり大きい意味を持ちます。
たとえば、社内の議事録、契約書、在庫台帳、チケット管理、カレンダーは、それぞれ形式も権限も違います。従来は、各システムに対して個別のAPI実装を作り、AI側のプロンプトやRAGの前処理も別々に管理しがちでした。MCPを使うと、AI側から見た接続面をそろえやすくなります。結果として、接続先が増えても設計の見通しが保ちやすい。ここが「標準」が効く場面です。
従来のRAGとの違いと優位性
RAGは、検索してから生成するアプローチです。これは今でも有効ですが、RAGだけでは「読む」ことに寄りやすい。MCPは、読むだけでなく、ツール実行や構造化された操作も含めて扱える点が違います。つまり、単なる知識参照ではなく、業務の一部を安全に委ねるための接続層として使いやすい。
比較すると、RAGは「資料を探して答える」ことに強く、MCPは「資料を探す」「状態を確認する」「許可された操作を実行する」をまとめて設計しやすい。B2Bではこの差が効きます。なぜなら、現場の要件は“答えてほしい”だけでなく、“更新してほしい”“通知してほしい”“申請してほしい”まで含むことが多いからです。
構築前の準備:開発環境のセットアップとMCP SDKの選択
必要なツール群と開発の考え方
MCPサーバを作る前に、まず決めるべきは「何を作るか」より「どの運用形態にするか」です。ローカル実行で十分なのか、チーム共有まで見据えるのか、外部公開を前提にするのかで、認証・ログ・デプロイの設計が変わります。
一般的には、以下のような構成から始めると整理しやすいです。
- 実装言語: TypeScript か Python
- 実行環境: Node.js 系、または Python 実行環境
- MCPクライアント: 公式ドキュメントで案内されるクライアントや、対応エディタ
- 動作確認: MCP Inspector などの検証ツール
Cursor の公式ドキュメントでは、AIコーディング支援やコードベースの文脈利用が案内されています。MCPと組み合わせると、実装時の確認作業を進めやすくなります。[^2] ただし、どのエディタを使うかは組織の標準に合わせれば十分です。重要なのは、開発体験よりも、接続先の権限管理とログ設計です。
公式SDKの選定基準:TypeScript vs Python
MCP SDKは、対応言語ごとに選び方の軸が変わります。一般論としては、次の比較が実用的です。
- TypeScript向き: Web APIや既存のNode資産が多い、型安全を重視したい、フロントエンドチームと共通化したい
- Python向き: データ処理や自動化スクリプトが多い、既存の分析基盤とつなぎたい、実験を素早く回したい
どちらが正解というより、「社内で保守できるか」が最重要です。MCPサーバは作るだけでなく、権限変更、データ項目変更、障害対応が続きます。チームの得意言語と運用体制に合わせるのが、結局いちばん強い選択です。
環境変数と認証情報の安全な管理
MCPサーバ構築で見落とされやすいのが、認証情報の置き方です。APIキーやDB接続情報をコードに埋め込むのは避けるべきです。基本は環境変数、必要なら秘密情報管理サービスを使います。
特に注意したいのは、AIに渡す設定値と、人間が扱う秘密情報を混ぜないことです。AIに見せるのは、あくまで業務上必要なメタデータや許可済みのコンテキストです。接続トークンや管理用の秘密鍵は、MCPサーバ内部で閉じる。ここを分けるだけで、事故の確率はかなり下がります。
【実践】ステップバイステップで進めるMCPサーバの基本構築
プロジェクトの初期化と最小構成
まずは最小構成で動かします。いきなり社内DBや複数ツールをつなぐと、問題の切り分けが難しくなるからです。最初は「Resourcesを1つ」「Toolsを1つ」までで十分です。
// 目的: 最小構成のMCPサーバを作り、Resources と Tools の役割を分けて確認する
// 注意: 実際のSDK名やimport方法は、利用する公式SDKの最新ドキュメントに合わせて調整してください
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// サーバ本体を作成
const server = new Server(
{
name: "internal-data-server",
version: "1.0.0",
},
{
capabilities: {
resources: {},
tools: {},
},
}
);
// Resources: 読み取り専用の社内情報を提供する
// 例: 議事録、FAQ、規程、商品一覧など
server.resource(
"policy-summary",
"internal://policy/summary",
async () => ({
contents: [
{
uri: "internal://policy/summary",
mimeType: "text/plain",
text: "社内規程の要約テキストです。",
},
],
})
);
// Tools: 明示的な操作を実行する
// 例: チケット起票、通知送信、在庫確認、データ更新の申請など
server.tool(
"create-ticket",
{
title: "Create Ticket",
description: "サポートチケットを作成する",
inputSchema: {
type: "object",
properties: {
title: { type: "string" },
body: { type: "string" },
},
required: ["title", "body"],
},
},
async ({ title, body }) => {
// 実運用ではここでチケットシステムAPIを呼ぶ
return {
content: [
{
type: "text",
text: `チケットを作成しました: ${title}\n${body}`,
},
],
};
}
);
// 標準入出力で起動
const transport = new StdioServerTransport();
await server.connect(transport);
この段階では、外部API接続をまだ入れません。まずはMCPサーバがクライアントから見えているか、ResourceとToolが分けて返せるかを確認します。ここで欲張らないのがコツです。
Resources、Prompts、Toolsの実装方法
初心者が最も混同しやすいのが、この3つです。役割を業務に置き換えると理解しやすくなります。
- Resources: AIが参照する「社内資料棚」
- Prompts: よく使う依頼文の「定型テンプレート」
- Tools: 実際に業務を動かす「操作ボタン」
Resourcesは、原則として読み取り中心です。たとえば、就業規則、製品仕様書、会議メモ、FAQを置く場所です。AIはこれを読んで回答しますが、資料そのものを変更するわけではありません。
Toolsは逆です。明示的な実行が伴います。たとえば「在庫を確認する」「承認フローを起動する」「Slackに通知する」などです。Toolsは便利ですが、権限管理と監査ログが必須になります。
Promptsは、業務でよくある問いを再利用しやすくするためのテンプレートです。たとえば「この議事録を要約して、未決事項を抽出して」といった定型依頼を、毎回同じ品質で呼び出せます。
動作確認とテストの考え方
MCPサーバは、単体テストだけでなく、クライアントからの見え方も確認しないと安心できません。最低限、次の3点を見ます。
- Resourcesが一覧できるか
- Toolsが正しい入力スキーマで見えるか
- Tool実行時にエラーが適切に返るか
特に3は重要です。エラー時に例外をそのまま返すと、AI側の対話が不安定になります。ユーザーに見せるメッセージと、内部ログに残すメッセージを分けておくと運用しやすくなります。
ビジネスユースケースへの応用:社内ドキュメントとAIを接続する
SQLiteを用いたローカルデータベースとの連携
社内データ連携の第一歩として、SQLiteのようなローカルDBは扱いやすい選択です。理由は単純で、構造が見えやすく、検証しやすいからです。まずは議事録のメタ情報、FAQ、簡単なマスタデータを入れて、AIが参照できる形にします。
// 目的: SQLiteのデータをResourcesとして安全に公開する
// ポイント: 直接更新ではなく、まずは読み取り専用で始める
import Database from "better-sqlite3";
const db = new Database("./data/internal.db");
server.resource(
"meeting-notes",
"internal://db/meeting-notes",
async () => {
const rows = db.prepare(
"SELECT title, summary, updated_at FROM meeting_notes ORDER BY updated_at DESC LIMIT 20"
).all();
return {
contents: [
{
uri: "internal://db/meeting-notes",
mimeType: "application/json",
text: JSON.stringify(rows, null, 2),
},
],
};
}
);
ここでの判断軸は、AIに「何を見せるか」です。全件を渡す必要はありません。更新日時、担当者、要約など、意思決定に必要な最小限の列から始めるのが安全です。
Google SheetsやNotion APIをMCP経由で操作する
業務でよくあるのは、表計算シートやナレッジツールとつなぎたいケースです。こうした外部サービスは、MCPのToolとして包むと整理しやすくなります。AIに直接APIを触らせるのではなく、MCPサーバが代理で実行する形です。
この構造の利点は2つあります。1つ目は、APIキーや認証更新をサーバ側に閉じ込められること。2つ目は、実行可能な操作を限定できることです。たとえば「行の追加はできるが削除はできない」といった制御がしやすくなります。
Claude 自社データ連携を考えるときの設計ポイント
Claude 自社データ連携を考えるとき、重要なのは「AIが賢いか」ではなく「AIにどの境界まで任せるか」です。MCPサーバを挟むことで、参照できるデータ、実行できる操作、記録すべきログを整理できます。
実務では、次のような分離が有効です。
- 参照系: Resources
- 定型指示: Prompts
- 変更系: Tools
- 人間の承認が必要な操作: Toolの実行前後に確認フローを入れる
この分離ができると、AI導入の議論が「使えるかどうか」から「どこまで安全に使うか」に変わります。ここはかなり大きい前進です。
運用とトラブルシューティング:エラー対応とセキュリティの確保
MCP Inspectorを用いたデバッグ手法
MCPサーバは、作って終わりではありません。接続先が増えるほど、どこで壊れているか分かりにくくなります。そこで役立つのが、MCP Inspectorのような検証ツールです。公式ドキュメントで案内されている検証手段を使うと、ResourcesやToolsの返り値をクライアント視点で確認しやすくなります。[^1]
デバッグ時は、次の順番で切り分けると早いです。
- サーバ起動が成功しているか
- クライアントが接続できるか
- Resource一覧が取れるか
- Toolのスキーマが正しいか
- 実行結果が期待通りか
この順番を守るだけで、原因不明の時間はかなり減ります。
よくある接続エラーとその解消法
よくあるのは、環境変数の未設定、権限不足、入出力形式の不一致です。特にMCPでは、Toolの入力スキーマが少し違うだけで、クライアント側の体験が崩れます。まずは入力項目を少なくし、必須項目を厳選するのが安全です。
また、外部APIの障害をそのままAIに返すと、会話が長く崩れます。内部エラーはログに残し、AIには「現在は取得できません。時間を置いて再試行してください」のような短いメッセージにすると、利用者の混乱を抑えられます。
B2B利用で不可欠なデータガバナンスと認可制御
B2BのMCP導入で最重要なのは、セキュリティです。これは気合いではなく設計で決まります。最低限、次の観点は外せません。
- 誰がどのToolを実行できるか
- どのResourceを見られるか
- どの操作を監査ログに残すか
- 個人情報や機密情報をどこでマスクするか
AIに与えるコンテキストは、必要最小限に絞るべきです。多く渡せば便利に見えますが、漏えい時の影響が大きくなります。MCPは「つなぐ」技術ですが、同時に「絞る」技術でもあります。
完成と次のステップ:MCPエコシステムを拡張するためのリソース
コミュニティが公開するMCPサーバの活用
MCPの良さは、自作だけに閉じないことです。公式ドキュメントやGitHub上の情報をたどると、コミュニティが公開しているMCPサーバや実装例が見つかります。これらは、設計の参考にもなりますし、自社でゼロから作る範囲を減らす判断材料にもなります。[^1]
ただし、外部公開の実装をそのまま本番に入れるのはおすすめしません。認証、ログ、入力検証、エラー処理を必ず見直してください。オープンな実装は便利ですが、業務利用では自社のルールに合わせて調整する必要があります。
組織内でのMCPサーバ共有とデプロイの検討
次の段階では、個人の試作から組織の共通基盤へ進めます。そのときのポイントは、サーバを「一つの便利ツール」として置くのではなく、「社内の接続標準」として扱うことです。
そのためには、以下を先に決めるとよいでしょう。
- どの部署が管理するか
- どのデータを共通化するか
- 変更申請の流れをどうするか
- 監査ログを誰が見るか
このあたりが曖昧なままだと、技術的には動いても運用で止まります。MCPサーバ構築は、実装よりも運用設計で差がつく領域です。
まとめ
MCP サーバ構築の本質は、AIに社内データを「見せる」ことではなく、どこまで「読ませるか」「何を実行させるか」を設計することにあります。Resourcesは参照、Toolsは操作、Promptsは定型化。この分け方ができると、Claude 自社データ連携やAIエージェント 開発は一気に現実味を帯びます。
最初から大きく作る必要はありません。まずは読み取り専用のResourcesを1つ、限定的なToolsを1つ。そこから権限、ログ、承認フローを足していく。これがいちばん安全で、いちばん再現性のある進め方です。
自社のデータ構造、権限設計、既存APIとのつなぎ方は、組織ごとにかなり違います。一般論だけでは決めきれない場面が出てきたら、要件整理の段階で専門家に相談し、どのデータをMCPに載せるか、どこを人手確認に残すかを切り分けると、導入リスクを抑えやすくなります。
参考リンク
[^1]: Anthropic Model Context Protocol 公式ドキュメントによる説明。
[^2]: Cursor 公式ドキュメントによる説明。
コメント