Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
権限は渡さない、操作だけ切り出す ― 自前MCPサーバー実践入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
西岡 賢一郎 (Kenichiro Nishioka)
June 27, 2026
Technology
67
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
権限は渡さない、操作だけ切り出す ― 自前MCPサーバー実践入門
AI社会実装勉強会第60回 (
https://machine-learning-workshop.connpass.com/event/397325/
) の発表資料です。
西岡 賢一郎 (Kenichiro Nishioka)
June 27, 2026
More Decks by 西岡 賢一郎 (Kenichiro Nishioka)
See All by 西岡 賢一郎 (Kenichiro Nishioka)
会計士・税理士向け AI活用勉強会第1回
knishioka
0
71
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
220
データサイエンスの現場から学ぶ 成功と失敗の実像と生成AI時代の展望
knishioka
0
96
ハーネスエンジニアリング入門
knishioka
0
490
OpenClawでPM業務を自動化
knishioka
2
600
Claude Cowork Plugins を読む - Skills駆動型業務エージェント設計の実像と構造
knishioka
0
690
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
900
Claude Codeを使った情報整理術
knishioka
20
13k
Claude Skillsで"仕事の型"を配布する
knishioka
0
400
Other Decks in Technology
See All in Technology
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
160
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
220
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
180
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
220
最近評価が難しくなった
maroon8021
0
340
Claude Codeとハーネスについて考えてみる
oikon48
18
9.4k
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
100
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
740
DatabricksにおけるMCPソリューション
taka_aki
1
240
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
0
140
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
WENDY [Excerpt]
tessaabrams
11
38k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Designing Experiences People Love
moore
143
24k
Transcript
A I 社 会 実 装 勉 強 会 第
6 0 回 権限は渡さない、 操作だけ切り出 す ― 自前MCPサーバー実践入門 西岡 賢一郎 Data Informed CEO ・ D-stats CTO ・ NOBULL AI CTO 01
0 0 — 全 体 構 成 今日の道筋 ― 「簡単」で挟んで、真ん中で折り返す
MCPサーバーは “AIに何でも触らせる仕組み” ではなく、“渡してよい操作だけを切り出す受付窓口” 。この一軸で全体が つながります。 1 導入 結論先出し → なぜ今 → 問題提起 S1–S4 2 簡単さ 持ち帰り① MCPとは → 10行で動く → 切り出せる S5–S7 3 転換 その簡単さが、そのまま罠になる S8 4 危険の構造 指示とデータ → トライフェクタ → 1つ断つ S9–S12 5 最低限の対策 持ち帰り② read-only → 入力制限 → redaction → 再結合防止 S13–S16 6 実例 → 結び 私の構成 → 簡単さに回帰 S17–S18 00
0 1 — 今 日 の ゴ ー ル 今日、持ち帰ってほしい2つのこと
持ち帰り ① 作るのは、 驚くほど簡単 関数にデコレータを1つ付けるだけ。 本当に10行で動きます。 ! 持ち帰り ② 無防備な導入は、 危険 10行で作れる = 10行で “機密を外に出す裏口”も作れる。 この2つは矛盾しません。「簡単」で、前後を挟みます。 02
0 2 — な ぜ 今 これは、ニッチな話ではない Claude Desktop や
Microsoft のエージェントが急速に普及。AIと外部をつなぐ共通規格が MCP です。 1万超 公開MCPサーバー 2025年末・Anthropic報告(概数) 事実上の標準 OpenAI / Google / Microsoft が採用 中立な団体が管理する規格へ(特定企業のもので はない) もうすぐ 当然に 自分でMCPを作る それが特別なことでなくなる ※ 開発キット(SDK)は月間およそ9,700万ダウンロード規模。数字はいずれも概数・〜時点の値。 03
0 3 — 問 題 提 起 みんなが作り始める前に、握っておきたい 作れるという「自信」 10行で動く。インフラもデプロイも要らない。
守れるという「作法」 何を見せ、何をさせないか。境界を決める。 ― この2つを、セットで。 04
0 4 — 復 習 復習:MCPは「AIの拡張口」をそろえた共通規格 2024年11月、Anthropic が公開したオープン規格。AIアプリと外部ツール・データの“つなぎ方”を1つに統一する。 ホスト(host) AIアプリ本体
Claude Desktop・IDE など。中で MCP クライア ントを動かす。 MCPサーバー 外部ツール側 1機能=1サーバーで動く。 今日の主役はここ。 公開するもの tool & resource tool=呼べる操作(関数)/resource=読めるデー タ。 たとえると 「AIにとっての USB-C」 ― つなぎ方が1つだから、対応AIならどれからでも挿せる。 05
0 5 — そ も そ も M C P
と は MCP=「呼べる関数」を作法どおり外に出すだけ AIエージェント Claude など read-only → MCPサーバー 同じPC内の1プロセス → リソース PC / クラウド / 端末画面 ― デプロイもインフラも要らない 同じPCでプログラムが1つ立つだけ ― 既製コネクタも中身は同じ 仕組みは変わらない ― 違いは「公開範囲を自分で決められる」こと 06
0 6 — 山 場 10行で、動く from fastmcp import FastMCP
mcp = FastMCP("sysmon") @mcp.tool def agent_health(target: str) -> str: return check_status(target) mcp.run() ― 関数に デコレータを付けるだけ ― 型ヒントから スキーマ自動生成 ― uv run server.py で即接続 ― 検証・型変換は フレームワーク任せ 07
0 6 — 実 例 これくらいで、もう動く ― 私の場合 特別な仕組みは無し。さっきの作法のまま書いた小さなサーバーが、手元で毎日動いています。 08
0 7 — 切 り 出 せ る なぜ自分で作るのか ―
「ちょうど」に作れて、「ちょうど」に絞れる 価値① 適合 ― できる 既製では「痒いところに手が届かない」 自前なら、やりたいことを “ちょうど”の形で作れる 価値② 安全 ― 絞れる 既製は「公開範囲が広すぎる」 必要な操作だけ、 “ちょうど”の範囲で渡せる だから、自分で作る ― “できる” と “安全” は、自作で両立する。 09
0 8 — 転 換 その「簡単さ」が、 そのまま罠にな る 10行で作れる =
10行で“機密を外に出す裏口”も作れる run_command(cmd)(何でも実行)や read_file(path)(何でも読む)のような 「全部できる便利ツール」に 流されやすい。 10
0 9 — 指 示 と デ ー タ AIは「指示」と「データ」を区別できない
prompt injection(不正な指示の混入) 指示も、ログも、Webも ― AIには すべて同じ “読み物” 。 攻撃 者が紛れ込ませた文字列が、 “指示”として実行されうる。 どこから紛れ込む? ・ ログ ・ 端末(ターミナル)の画面 ・ メール・チャット ・ Webページ ・ ドキュメント 11
1 0 — リ ー サ ル ・ ト ラ
イ フ ェ ク タ リーサル・トライフェクタ ― 危険な3つの条件 3つが揃った瞬間に、データは盗まれる。 ― Simon Willison が2025年に定式化 12
1 1 — 防 御 防御は ―「1つ断てば、崩れる」 3つが同時に揃って、はじめて攻撃が成立する。どれか1つを断てば、崩れる―全部を塞ぐ必要はない。 条件 ①
データ 絞れるが、 ゼロにしにくい 条件 ② 外部入力 ほぼ、 防げない 条件 ③ 送信 ここを断つのが 現実解 13
1 2 — コ ネ ク タ へ の 答
え 「既製コネクタでよくない?」への答え コネクタは“敵”ではない。が… SlackやGoogleドライブを「フ ル接続」すると、3つの条件が最初から組み上がる: ① 社内チャット・ファイル(機密データ) ② 誰からでも投稿・共有できる = 外部の文章が入ってくる(外部入力) ③ メッセージ送信・外部共有(外部送信) しかも“1つだけ外す”がやりにくい。 読むだけ(read-only)に絞れば ③ は消せる 。 だから、自前MCPを作る意味 ― 多くはコネクタでよい(便利さは本物) ― 自作は“ゼロから作り直す無駄”ではない ― 範囲が広すぎる時、境界を自分で選ぶ手段 ― read-onlyに絞れる = ③ を外せる 論点は「コネクタか自作か」ではない ― 3つの条件を意識しているか、だ。 14
1 3 — 対 策 ① ③を断つ ― read-only &
固定機能 AIに「読むだけ」の道具しか渡さなければ、データを外へ送り出す手段がない。= 条件③(外部送信)が、そもそも成立しない。 ◦ 良い例 get_status(server) サーバーの状態を返すだけ。 読むだけ/できることは固定。 × 悪い例 run_shell(command) read_any_file(path) gcloud(args) docker(args) restart / deploy / 送信を入れない。これだけで ③の条件が消える。 15
1 4 — 対 策 ② 入力を絞る ― 自由入力を「選択肢」と「範囲」に縛る 対象
= 決まった一覧から選ぶ(自由入力させない) 提供元 = AWS / GCP から選ぶ 期間 = 今日 / 今週 / 今月 から選ぶ 件数 = 上限つきの数字(最大100件 など) 自由文字列を1つ残すだけで、injectionの通り道になる。 16
1 5 — 対 策 ③ ①を薄める ― 黒塗り(redaction)&鍵を置かない 1
返す前に、機械的に黒塗りする 「隠してね」とAIにお願いするだけでは不十分。コードで落とす。 2 認証情報(鍵)を手元に置かない 鍵は中継サーバー側へ。手元が乗っ取られても被害を最小に。 17
1 6 — 対 策 ④ 全体で“3つを再び揃えない” トライフェクタは “AI全体”の性質。自分のMCPが安全でも、別のツールや隔離環境の外向き通信で ③が復活する。
信頼境界ごとに分ける 境界を越えて、分けた条件が再び揃わないよう設計する。 権限を見える化・監査する どのAIに何を見せ、送信能力が無効かを確かめる。 18
1 7 — 補 足 補足:私の場合 ― 3つの実例 あくまで一例。どれも「目的をひとつに絞り、読むだけに限定」しています。 sysmon
目的 PC・サーバーが今ちゃんと動いているかを、その場 で確認したい。 セキュリティ 状態を読むだけ。再起動・デプロイは持たせない( read-only)。 cloud-cost 目的 AWS / GCP の料金を、AIに集計・説明させたい。 セキュリティ 鍵は手元に置かず中継サーバー側へ。providerは選 択肢に限定。 tmux-capture 目的 作業中のターミナル画面を、AIに要約させたい。 セキュリティ 読み取りのみ。取得する行数に上限を付ける。 「権限を渡す仕組み」ではなく、「渡してよい操作だけを切り出す受付窓口」 19
結 び 難しいのは「作ること」じゃない。 「境界を決めること」だ。 ― 作るのは10行。身構えるほどではない。 ― 考えるべきは“何を見せ、何をさせないか” = 誰でもできる判断。
― 最低限③を断ってread-onlyで始める = 安全側から入れる。だから ― 作れる。 権限は渡さない、操作だけ切り出す。 20