手元の作業環境に並んでいるコネクタのツール名を、ふと数えてみたことがあります。ドキュメント、メモリ、スケジュール、デザインの四つの接続で、合わせて32個でした。
どれを自動で通し、どれに承認を挟むか——その線を引く前に、名前だけでどこまで仕分けられるのかを試したくなりました。個人開発の合間に Cowork を使っていると、「これは読むだけ」「これは書き込みまである」を毎回目で追う余裕はなかなかないからです。
最初にお伝えしたいのは結果です。動詞で機械的に仕分けると、一度目は32個中9個、直したあとでも4個が「名前では決められない」まま残りました。
公式の権限画面は、何を分けているのか
仕分けの前に、コネクタの権限が公式ではどう分かれているのかを確かめました。Claude のヘルプ記事「Use connectors to extend Claude's capabilities」(2026-10-20 に確認)には、Team と Enterprise の節に次の説明があります。
| 項目 | 書かれていること |
|---|---|
| 場所 | Customize の Connectors で対象のコネクタを選び、「Tool permissions」を開く |
| 分け方 | 「read-only tools」「write/delete tools」のように種類ごとにまとまっている |
| 選べる状態 | Always allow / Needs approval / Blocked |
| 設定できる人 | Owner。組織全体に適用され、個々のユーザーは上書きできない |
| 効き方 | 狭める方向にだけ働く。元のサービスが許す以上の権限は与えない |
ここで私が気づいたのは、公式の分け方がそもそも「読む」と「書く・消す」の二群だということです。書くと消すは同じ箱に入っています。
なお、この設定が個人の Pro や Max でも同じように見えるのかは、ヘルプ記事の文面からは確認できませんでした。見えない場合は、接続時と実行時に出る承認の表示が頼りになります。
一度目:先頭の単語だけで仕分けたら、9個が残った
まず素朴に、ツール名の先頭の動詞を見る方法で書きました。get や list は読む、create や send は書く、delete は消す、という辞書です。
import re, sys
from collections import defaultdict
READ = {"get","list","read","query","search","find","fetch","describe","export","download","whoami"}
WRITE = {"create","update","add","set","send","write","upload","append","edit","post","run","start","fire","batch"}
DELETE = {"delete","remove","drop","cancel","stop","clear","reset","kill"}
def split_name(full):
# 例: mcp__Claude_Docs__delete -> ("Claude_Docs", "delete")
parts = full.split("__")
if len(parts) >= 3 and parts[0] == "mcp":
return parts[1], parts[-1]
return "(unknown)", full
def classify(tool):
words = re.split(r"[_\-]+", tool.lower())
verb = words[0] # 先頭の単語だけを見る(一度目)
if verb in DELETE or any(w in DELETE for w in words): return "delete"
if verb in WRITE: return "write"
if verb in READ: return "read"
return "check" # 迷うものは人間が見る
groups = defaultdict(lambda: defaultdict(list))
for line in sys.stdin:
line = line.strip()
if line:
server, tool = split_name(line)
groups[server][classify(tool)].append(tool)
for server in sorted(groups):
g = groups[server]
print(f"{server}: read={len(g['read'])} write={len(g['write'])} delete={len(g['delete'])} check={len(g['check'])}")
for t in g["check"]:
print(f" 要確認 -> {t}")ツール名は一行に一つ、mcp__サーバー名__ツール名 の形で names.txt に並べておきます。実行は python3 -I sort_tools.py < names.txt です。
結果の中で、メモリ系の五つがそっくり「要確認」に落ちていました。原因は名前の付け方で、memory_read や memory_list は先頭が memory という名前空間で、動詞は二語目にあったのです。先頭だけを見る作りでは、読むための二つも、書くための三つも見分けられませんでした。
二度目:全単語を見て、重い方へ倒す
直したのは classify の一か所だけです。先頭に引きずられないよう、全単語を調べます。複数にあてはまるときは「消す」「書く」「読む」の順に、重い方を採ります。
def classify(tool):
words = re.split(r"[_\-]+", tool.lower())
# 優先順位は 消す > 書く > 読む。迷ったら重い方に倒す
if any(w in DELETE for w in words): return "delete"
if any(w in WRITE for w in words): return "write"
if any(w in READ for w in words): return "read"
return "check"同じ32個で動かした結果を、サーバーごとにまとめます。
| 接続 | 読む | 書く | 消す | 要確認 |
|---|---|---|---|---|
| ドキュメント系 | 3 | 3 | 1 | 1(guide) |
| メモリ系 | 2 | 2 | 1 | 1(memory_str_replace) |
| スケジュール系 | 1 | 4 | 1 | 0 |
| デザイン系 | 5 | 4 | 1 | 2(use_figma、generate_diagram) |
| 合計 | 11 | 13 | 4 | 4 |
9個が4個まで減りました。ただ、残った4個は辞書をいくら足しても同じ理由で残ります。
残った4つは、名前が動詞になっていませんでした
guide は案内を返すだけに見えますが、名前からは断言できません。use_figma は「使う」という動詞で、読むのか書くのかが名前に現れていません。generate_diagram は生成の結果をどこに置くのかが、名前の外にあります。
memory_str_replace は、中身を読めば明らかに書き換えです。それでも replace を辞書に入れていなかったため、機械は見送りました。こちらは辞書の側の漏れで、足せば消えます。
つまり、残りの4個には二種類あります。辞書を足せば消えるものと、名前の外に答えがあるものです。
名前で決められるものは機械に任せ、名前で決められないものは「重い方」として扱い、中身を見るまで承認を外しません。 この一文が、今回の仕分けから引いた線です。
仕分けのあとで、承認をどう置くか
仕分け結果をそのまま承認の置き方に写すと、次の表になります。公式の Always allow / Needs approval / Blocked に、そのまま対応させた案です。
| 仕分け | 置き方の案 | 理由 |
|---|---|---|
| 読む | Always allow | 元のサービスで見える範囲しか読めないので、まず任せて様子を見られる |
| 書く | Needs approval | 戻せるかどうかが、ツールごとに違う |
| 消す | Needs approval か Blocked | 戻せない操作は、頼む場面を自分で決めておく |
| 要確認 | Needs approval | 中身を見て仕分けが決まるまで、重い方に置く |
読むを自動にして、書くからは承認を挟む——この順は、フォルダを渡すときの考え方と同じです。フォルダの方は 書き込みを任せたのは三番目でした — Cowork にフォルダを渡す順番 に書いています。
動詞辞書が外れる場所
辞書は仮説にすぎません。今回の32個のなかにも、疑わしい名前がありました。export は読むに入れましたが、書き出し先にファイルを作る動きがあるかもしれません。download_assets も、読むに入れつつ手元のディスクには書き込みます。
batch は書くに入れました。複数の操作をまとめて実行する名前なので、中に消す操作が入っていても名前には現れません。
ですので、辞書で仕分けた結果は「承認を軽くしてよい候補」を絞る道具として使い、最終的な判断は各ツールの説明文を読んで行うのが安全です。コネクタ側のツールが増減したときの見張り方は コネクタに書き込みツールが増えた夜、無人ジョブは黙って何かを送れるようになる に詳しく書いています。
次の一歩
次に接続するコネクタが一つあれば、そのツール名を names.txt に貼って、上のスクリプトを一度動かしてみてください。要確認として残ったものだけ、説明文を読みます。それだけで、承認の置き場所の半分は決まります。
私自身、残った4個のうち二つは、辞書を足すよりも説明文を読む方が早い名前でした。仕分けを機械に任せる範囲と、人が見る範囲の境目を、これからも少しずつ見直してまいります。