CLAUDE LABEN
SUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は明日8月17日です。残り1日となりましたLATEST — 最新は8月15日の v2.1.233 です。GitLab のマージリクエスト URL が --worktree と claude agents で扱えるようになり、MR は !N 形式で表示されますSECURITY — Windows で NT の \??\ デバイスプレフィックスを含むパスが UNC 検証をすり抜ける問題が直りました。NTLM 資格情報が漏れる経路が塞がれていますTODO — Opus 4.8・Sonnet 5・Fable 5・Mythos 5 以降では TodoWrite と Task 系ツールが既定で無効になりました。CLAUDE_CODE_ENABLE_TODO_TOOLS=1 で戻せますFORK — 8月14日の v2.1.232 で subagent_type: 'fork' が既定になり、会話全体とプロンプトキャッシュをそのまま引き継げるようになっていますMENTION — プロンプトで @ を打つと別のセッションを名前で呼び出せます。SendMessage がそのセッションへ直接届きますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は明日8月17日です。残り1日となりましたLATEST — 最新は8月15日の v2.1.233 です。GitLab のマージリクエスト URL が --worktree と claude agents で扱えるようになり、MR は !N 形式で表示されますSECURITY — Windows で NT の \??\ デバイスプレフィックスを含むパスが UNC 検証をすり抜ける問題が直りました。NTLM 資格情報が漏れる経路が塞がれていますTODO — Opus 4.8・Sonnet 5・Fable 5・Mythos 5 以降では TodoWrite と Task 系ツールが既定で無効になりました。CLAUDE_CODE_ENABLE_TODO_TOOLS=1 で戻せますFORK — 8月14日の v2.1.232 で subagent_type: 'fork' が既定になり、会話全体とプロンプトキャッシュをそのまま引き継げるようになっていますMENTION — プロンプトで @ を打つと別のセッションを名前で呼び出せます。SendMessage がそのセッションへ直接届きます
記事一覧/Cowork
Cowork/2026-07-12上級

コネクタに書き込みツールが増えた夜、無人ジョブは黙って何かを送れるようになる

コネクタの更新で書き込みツールが静かに増えた瞬間、無人で回している定期処理はメール送信やファイル削除まで手が届くようになります。ツール表面のスナップショットと差分検知で、未承認の書き込みを実行前に止める関所の作り方を、個人開発の実務からまとめます。

cowork13mcp19connectorunattended3security9

プレミアム記事

いつも通り夜間の定期処理を走らせて、翌朝ログを見返していたときのことです。処理そのものは成功していました。ただ、使っているコネクタのツール一覧に、前の週にはなかった名前がいくつか並んでいました。create_messagesend_messagedelete_file。連携先が更新され、これまで読み取りしかできなかったコネクタが、メールの作成・送信やファイル操作にまで対応したのです。

そのこと自体は歓迎すべき進化です。けれど私は少し背筋が冷えました。私の夜間ジョブは、コネクタが差し出すツールを状況に応じて自律的に選びます。昨日までは、どれだけ判断を誤っても最悪「読み違える」だけで済みました。今夜からは、同じ判断ミスが「送ってしまう」「消してしまう」に化けます。危険は私のコードが変わった瞬間ではなく、連携先のツール表面が静かに広がった瞬間に生まれていたのです。

2026年7月には Microsoft 365 コネクタが書き込みツールに対応し、メールの作成・送信・整理、カレンダー操作、OneDrive や SharePoint のファイル作成・更新まで扱えるようになりました。人が横にいれば「送信」ボタンの前で一呼吸置けます。無人運用では、その一呼吸を自分で設計に埋め込んでおかない限り、誰も止めてくれません。個人開発で4サイトを無人運用している立場から、ツールが増えたことを検知し、未承認の書き込みを実行前に堰き止める関所を、実際に動くコードとして組み立てていきます。落とし穴は、コネクタが賢くなるほど静かに深くなります。

危険は「新しいツールが増えた瞬間」に生まれる

無人ジョブのセキュリティを考えるとき、私たちはつい自分のプロンプトや権限設定に目を向けます。けれど、エージェントが実際に呼べる操作の範囲は、最終的にはコネクタが公開するツール一覧が決めています。ここが盲点でした。私のコードも権限スコープも一文字も変えていないのに、連携先がバージョンを上げただけで、実行可能な操作の集合が広がってしまうのです。

読み取り専用のコネクタなら、最悪の失敗は「間違った情報を読む」で止まります。ここに書き込みツールが一つ加わると、失敗の質が変わります。読み違えは巻き戻せますが、送信済みのメールや削除したファイルは簡単には戻りません。つまり監視すべきは「今どんなツールがあるか」ではなく、「先週から何が増えたか」という差分のほうなのです。

方針はこう決めました。ツールの増減、とりわけ書き込み・破壊的なツールが新しく現れたことを毎回検知する。そして未承認のまま実行に進ませない。承認は私が明示的にポリシーファイルへ書き込んだときにだけ成立させる。この「新しく増えた書き込みツールは、既定では拒否」という向きを、無人ジョブの一番外側に置きます。

ツールを read / write / destructive に自動仕分けする

最初の部品は、ツール一覧を危険度で仕分けする分類器です。MCP のツールは名前と説明を持っています。完璧な意味解析は要りません。名前の動詞を手掛かりに三段階へ振り分けるだけでも、実務上は十分に効きます。判断がつかないものは、安全側に倒して「要確認」に集めます。

# classify_tools.py
import re
from enum import IntEnum
 
class Risk(IntEnum):
    READ = 0        # 参照のみ。巻き戻し不要
    WRITE = 1       # 状態を変える。多くは巻き戻せる
    DESTRUCTIVE = 2 # 送信・削除・決済など、巻き戻しにくい
 
# 破壊的とみなす動詞(送ってしまう・消してしまう類)
DESTRUCTIVE = r"(send|delete|remove|purge|archive|pay|charge|transfer|deploy|publish|revoke)"
# 一般的な書き込み動詞
WRITE = r"(create|update|write|edit|insert|upsert|move|rename|set|add|append|patch|put|post)"
# 読み取り動詞
READ = r"(get|list|search|read|fetch|find|query|describe|lookup|view)"
 
def classify(tool_name: str) -> Risk:
    name = tool_name.lower()
    verb = re.split(r"[_\-.]", name)[0]  # 先頭トークンを動詞とみなす
    if re.fullmatch(DESTRUCTIVE, verb):
        return Risk.DESTRUCTIVE
    if re.fullmatch(WRITE, verb):
        return Risk.WRITE
    if re.fullmatch(READ, verb):
        return Risk.READ
    # 動詞が語彙に無ければ、名前全体で破壊的語を探す
    if re.search(DESTRUCTIVE, name):
        return Risk.DESTRUCTIVE
    if re.search(WRITE, name):
        return Risk.WRITE
    # それでも不明なら、READ とは決めつけず WRITE 扱いで拾い上げる
    return Risk.WRITE

破壊的な動詞に paycharge を含めているのは、決済系のコネクタを想定しているからです。たとえば Stripe のような課金コネクタが create_chargerefund を差し出すようになれば、無人ジョブが実際にお金を動かせてしまいます。こうした取り返しのつかない操作こそ、既定で止めて事故を回避したい対象です。

ここで大切にしたのは、最後の一行です。語彙に載っていない未知の動詞を READ と楽観視すると、分類器そのものが抜け穴になります。「分からないものは書き込み以上」に寄せておけば、取りこぼしは過剰検知の側に出ます。過剰検知は私が承認一つで解消できますが、見逃した破壊的ツールは翌朝まで気づけません。どちらの誤りを引き受けるかを、あらかじめ決めておくわけです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
コネクタが公開するツール一覧をスナップショットし、前回との差分から新しく増えた書き込みツールだけを検知する仕組み
ツール名の動詞から read / write / destructive を自動仕分けし、未承認の破壊的ツールを実行前に止める関所コード
「送るつもり・消すつもり」をドライラン台帳に落として翌朝に確認へ回す、無人運用向けの二段構えの実測値
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Cowork2026-07-17
手元では動くのに、配ると呼び出されない — Cowork プラグインから剥がした4つの前提
自分の環境で動いていたスキル4本をプラグインにまとめて渡したところ、発火したのは1本だけでした。発火率の測り方と、配布前に剥がすべき環境依存・description・権限・命名衝突の4前提を実装込みで整理します。
Cowork2026-07-05
Claudeが安全上の理由で応答を断ったとき、無人パイプラインは何を返すべきか
HTTPは200なのに、本文は「お応えできません」——安全上の理由でモデルが応答を断る第三の結末を、無人パイプラインにどう組み込むかを設計します。拒否とインフラエラーを混同しない判別、自動言い換えで押し通してはいけない理由、レビューキューへの退避までを実務からまとめます。
Cowork2026-04-29
Cowork mode の Artifacts で「毎朝開く1ページ」を設計する — MCP連携で生きたダッシュボードを作る方法
毎朝同じ問いをClaudeに投げていませんか。Cowork modeのArtifactsとMCP連携で、未対応メールやレビュー待ちPRの確認を1クリックに集約する生きたダッシュボードを設計します。MCP応答を先にプローブする理由、実装サンプル、つまずきやすい落とし穴3つ、育てる運用まで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →