Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
独立メディア
いかなるプロジェクトとも無提携
AI知性のフロンティアを探求する
claude-me.com
最新
OpenRouter Fusion API正式公開:3モデル組み合わせがFable 5に迫る、コスト半減——ただしFable本体は米政府の命令で停止中  ·  Claude Cowork実践入門:業務まるごとAIに任せつつ、最後の一歩で事故らせない方法  ·  Claude Code vs Cursor vs GitHub Copilot:どのAIコーディングツールを使うべきか?  ·  Claude Skillsで繰り返し作業を再利用可能な能力に:長い指示を毎回貼り直さない  ·  自分でMCPサーバーを作る:Claudeを社内ツールに安全につなぐ(権限とデバッグ込み)  ·  Claude Code実践入門:インストールから最初の実際のタスク完了までの完全フロー
mcp

自分でMCPサーバーを作る:Claudeを社内ツールに安全につなぐ(権限とデバッグ込み)

30秒バージョン · 忙しい方へ
MCPサーバー作りの最重要の一言:外部要求を信頼しない門番として設計せよ。権限はサーバーのコードに書く。「Claudeに消さないでと伝える」では駄目——それは依頼であって制限ではない。

詳しく読む +
01 · なぜ起きたのか?

必ず自分でサーバーを書く必要がありますか、既製品は?

多くの一般的サービス(クラウドドライブ、プロジェクト管理、メッセージング)には公式やコミュニティ製のMCPサーバーがあり、自作せず直接つなげます。自作すべきは、社内専用で既製の選択肢がないシステム——自社DB、社内API、独自ツール——をつなぐ場合です。

原則:標準的な外部サービスは既製品を優先(速く実証済み)。要件が特殊で既存品が合わないときだけ自作の価値があります。既製で解ける問題に車輪の再発明をしないこと。

02 · 仕組みは?

stdioとSSE/HTTPのどちらのトランスポートを選ぶ?

単純な分け方:サーバーがClaudeと同じマシン(例:ローカルのデスクトップアプリ)で動くならstdio。別の場所にあり、ネットワーク経由で接続(例:クラウドに配置しチーム共用)ならSSE/HTTP。

決め手は「誰がどこから使うか」。一人のローカル開発・テストならstdioが最も簡単で、ネットワークも認証も不要。チーム全体やリモートのClaudeから到達させるならHTTPが必要で、認証を忘れないこと。オンラインになれば到達できる誰もがサーバーを呼べるため、権限と本人確認がより重要になります。

03 · 自分にどう影響する?

ツールを読み取り専用にする以外、権限で注意すべきことは?

読み取り専用は第一層ですが不十分。さらに数層を考えます。一つ目「データ範囲」:読み取り専用でも照会できる範囲を限定——例えば特定部門のデータのみ、DB全体を開放しない。二つ目「入力検証」:Claudeが渡す引数が必ず清浄と仮定せず、あらゆる外部入力同様に検査・フィルタする。

三つ目「監査ログ」:誰がいつどのツールを呼び何を照会したかを記録し、問題時に追跡できるように。これらを重ねても核心は同じ:サーバーは要求が誤りや悪意かもしれないと仮定し、善良と既定しないことです。

04 · どうすればいい?

上級:Claudeが正しく呼ぶには、ツール説明をどう書く?

これはサーバーの使い勝手を左右する見えない鍵で、過小評価されがちです。Claudeはあなたのツール説明を頼りに「いつ使い、何の引数を渡すか」を判断します。曖昧に書けば推測し、誤れば「引数が変」という問題が出ます。

良いツール説明の三要点:一つ目、ツールの用途と適用場面を明確にし、いつ選ぶべきかをClaudeに分からせる。二つ目、各引数が何で、どの形式で、必須か任意かを注記し、闇雲に埋めさせない。三つ目、引数に制約(日付形式、数値範囲)があれば説明に直接書く。

実用的な心得:ツール説明を「社内システムを見られない人向けのAPI文書」として書くこと。相手は文字だけで理解します。明確に書くほど、Claudeは正確に使います。

全文 +

30秒サマリー

「MCPサーバーを構築する際の鉄則:外部からのリクエストを信頼しない門番として設計すること。権限はサーバーコードに書く。『Claudeにデータを削除しないでください』はリクエストであって、制限ではない。」

なぜ自分でサーバーを書く必要があるのか

多くの一般的なサービス(クラウドストレージ、プロジェクト管理、メッセージング)はすでに公式またはコミュニティのMCPサーバーが存在し、自分で書かなくても接続できる。自作が必要になるのは、既製オプションのない社内専用システム——自社のデータベース、内部API、プライベートツール——に接続する場合だ。

原則:標準化された外部サービスには既製品を優先する。速く、実績もある。既存のオプションがニーズに合わない場合のみ自作する価値がある。

メカニズム:トランスポートの選択

stdioとSSE/HTTPの違い

シンプルな判断基準:サーバーがClaudeと同じマシン上で動く場合(ローカルデスクトップアプリなど)はstdioを使う。サーバーが別の場所にあってネットワーク経由で接続する場合(クラウドにデプロイしてチームで共有するなど)はSSE/HTTPを使う。

判断の軸は「誰がどこから使うか」だ。個人のローカル開発とテストならstdioが最もシンプルで、ネットワークや認証の問題がない。チーム全体に提供したり、リモートのClaudeからアクセスさせたりするにはHTTPが必要で、その場合は認証も忘れずに。一度オンラインになると、アクセスできる人なら誰でもサーバーを呼び出せるため、権限と本人確認がより重要になる。

権限管理:サーバーに書く、プロンプトに書かない

読み取り専用は最初の層であって、十分ではない。さらに考慮すべき点:

  1. データスコープ:読み取り専用であっても、クエリ可能な範囲を限定する。データベース全体を開放するのではなく、特定の部門のデータのみなど。
  2. 入力バリデーション:Claudeが持ってくるパラメータが正しいと仮定しない。外部入力と同様にチェックとフィルタリングを行う。
  3. 監査ログ:誰がいつどのツールを呼び出し何をクエリしたかを記録する。問題が発生したときに調査できるようにするため。

これらの層を重ねる核心的な考え方は同じだ:サーバーはリクエストが間違っているかもしれない、あるいは悪意があるかもしれないと前提にする。デフォルトで信頼しない。

MCPサーバーがチェーンの中でどこに位置するか

Chainは:Claude → あなたのMCPサーバー → 社内システム、そして同じ経路で戻る。ClaudeはデータベースにはアクセスせずClaudeに「query_customerツールをこのパラメータで使って」と伝えるだけだ。サーバーはそれを受け取り、まずリクエストを許可すべきか検証し、通過すれば社内システムをクエリし、Claudeが読める形式にフォーマットして返す。

この設計の利点:機密情報(データベースパスワード、APIキー)はサーバー内にのみ存在し、Claudeには渡されない。 ClaudeはあなたがDefineしたツールを通じてのみアクセスし、基盤レイヤーには直接届かない。

サーバーの3つの基本部品

  1. ツール定義:どんなツールが存在し、各ツールがどんなパラメータを取り、何を返すかをClaudeに伝える。Claudeに開くメニューであり、メニューにないものは注文できない。
  2. 実行ロジック:Claudeがツールを選んだとき、実際にデータベースをクエリしたりAPIを呼び出したりするコード。
  3. トランスポート:ローカルならstdio、リモートならSSE/HTTP。Claudeがサーバーとどうやってやりとりするかを決定する。

ツール説明の書き方

ツール説明はサーバーが使いやすいかどうかを左右する隠れた鍵で、よく過小評価される。Claudeはツール説明を頼りに「いつ使うか、どんなパラメータを渡すか」を判断する。曖昧に書けば推測し、推測が外れれば「おかしなパラメータで呼ばれた」問題が発生する。

良いツール説明の3つのポイント:

  1. ツールの目的と適した状況を明確に述べる——Claudeがいつ選ぶかわかるように。
  2. 各パラメータに注釈をつける——何のためか、どんな形式か、必須か任意か。
  3. パラメータに制約(日付フォーマット、値の範囲)があれば説明に直接書く。

実用的な原則:社内システムを見ることができない人向けに書くAPIドキュメントとしてツール説明を扱う。読者はあなたの言葉からのみツールを理解できる——明確に書けば書くほど、Claudeは正確に使う。

デバッグ:問題が起きたとき

よくある3つのMCPデバッグ問題:

  1. 「Claudeがツールを認識できない」:通常、ツール定義が正しく登録されていないか、トランスポートが接続されていないことが原因。
  2. 「ツールは呼ばれるが、おかしなパラメータで来る」:通常、ツール説明が不明確でClaudeが推測したことが原因。
  3. 「Claudeが返ってきた内容を誤読する」:通常、戻り値フォーマットが乱雑なことが原因。

実際には、まずサーバー側ですべてのリクエストとレスポンスをログに記録する。10件中9件の問題はログを読むだけで特定できる。

まとめ

  • MCPサーバー = ClaudeとあなたのツールをつなぐTranslatorと門番。機密情報はサーバーにのみ存在し、Claudeには渡されない
  • チェーン:Claude → サーバー(権限チェック)→ 社内システム、そして戻る
  • 3つの基本部品:ツール定義(メニュー)、実行ロジック(実際のクエリ)、トランスポート(stdioまたはHTTP)
  • 権限はサーバーコードに書く。「Claudeにお願いする」ではリクエストにすぎず制限ではない
  • デバッグはまずログを読む:認識できない・おかしなパラメータ・誤読——10件中9件はリクエスト/レスポンスのログで特定できる
図解
How a custom MCP server bridges Claude and internal systemsAn architecture diagram showing Claude sending tool requests to a custom MCP server, which performs a permission check and queries an internal database or API, Your MCP server sits between Claude and your internal tools Claude asks to use a tool MCP Server (you build this) permission check here exposes tools + resources Internal tool DB / API / files request query data result Transport: stdio (local) or SSE/HTTP (remote). The server, not Claude, holds your credentials. Claude Me · claude-me.com
スクリーンショット歓迎。転載時は出典を明記してください。
質問する
10文字以上入力してください
関連記事
MCPとは?一午後でClaudeをあなたのツールに接続する
mcp · 06/08
開発者向けMCP実装:ゼロからはじめる初めてのMCPサーバー構築
mcp · 06/03
MCPとは何か?Claudeを現実世界に接続するプロトコル完全解説
mcp · 06/02
MCP クイックスタート:5分でClaude DesktopをGoogle Driveに接続する
mcp · 06/14
関連ニュース
関連トピック