Hermes AgentのMCPを最小権限にする|21ツールを接続前に棚卸しする

MCP サーバーを 1 台つなぐだけで、21 個のツールがエージェントへ増えました。その中には検索データの読み取りだけでなく、サイト登録や Sitemap 削除も含まれます。接続できたことと、安全に任せられることは別です。
2026 年 9 月 5 日、Hermes Agent v0.21.0 で Search Console 用 MCP を調べました。今回は新しい連携を増やさず、既存接続の transport とツール一覧を CLI から確認します。
前回から今回への差分
前回のTool・MCP・Plugin・Computer Useの選び方では、外部操作の経路を選びました。今回は MCP を選んだ後に、見せるツールを絞るところまで進めます。
| 前回完了時 | 今回完了後 |
|---|---|
| MCPを使う場面を判断できます | 接続先と提供ツールを実測できます |
| server単位で権限を考えます | tool単位の許可リストを作れます |
| 接続成功を確認します | 書き込み操作を会話へ出さない設計にできます |
MCP をまだ追加していない場合は「カタログを先に読む」から始めます。すでに接続済みなら、その章は飛ばせます。接続と呼び出しが正常なら「よくあるエラー」も飛ばせます。
なぜ接続後ではなく接続前に絞るのか
エージェントは、見えているツールから目的に合うものを選びます。削除ツールが不要でも、登録されたままなら選択肢には残ります。承認画面は最後の防壁ですが、不要な操作を最初から隠す方が単純です。
私は権限を三段階で考えます。
MCPサーバー
│
├── 接続を許すか enabled / transport
│
├── どの道具を見せるか tools.include / tools.exclude
│
└── 実行時に止めるか trust / approval
│
└── 外部サービスの権限
tools.includeはツールの登録範囲を狭めます。trust: untrustedは、読み取り専用と注釈されていない呼び出しを承認対象にします。さらに、Google や GitHub 側のアカウント権限も残ります。どれか 1 つで全部を守る構造ではありません。
用語表
| 用語 | ここでの意味 |
|---|---|
| MCP | 外部のツールサーバーとエージェントを接続する規格です |
| transport | stdioまたはHTTPで接続する経路です |
| discovery | 接続時にサーバーからツール定義を取得する処理です |
| include | 登録するツールだけを指定する許可リストです |
| exclude | 指定したツールを登録対象から外す拒否リストです |
| trust | 書き込み系ツールを承認対象にする信頼区分です |
| readOnlyHint | サーバーが示す読み取り専用の注釈です |
まずCLIと接続先を確認する
Hermes Agent v0.21.0 のmcpサブコマンドには、list、test、configure、catalog、installなどがあります。
hermes mcp --help
確認した出力の要点です。
{serve,add,remove,rm,list,ls,test,configure,config,login,reauth,picker,catalog,install}
次に、設定済みサーバーを一覧にします。
hermes mcp list
2026 年 9 月 5 日の実行では、search-consoleが stdio transport で有効になっていました。表示には server 名、transport、tool filter、status が並びます。ここで覚えのない接続があれば、先へ進む前に設定元を確認します。
21ツールを実際に列挙する
testは疎通だけでなく、discovery で見つけたツール名も返します。
hermes mcp test search-console
実行結果は接続成功で、21 個のツールを検出しました。
Testing 'search-console'...
Auth: none
✓ Connected (10005ms)
✓ Tools discovered: 21
一覧にはanalytics_queryやinspection_inspectのような読み取り操作がありました。一方で、sites_manage、sitemaps_delete、indexing_submitも含まれます。検索実績を読むだけの定期処理なら、この 3 つを常時見せる理由はありません。
接続時間の10005msは今回の実測値です。毎回同じ時間になるわけではありません。成功判定では、秒数よりConnectedと検出数を見ます。
許可リストは用途から作る
日次の検索レポートなら、最初は読み取りに必要な関数だけで足ります。Hermes の対話式設定は、現在の選択を保ったままツールを切り替えられます。
hermes mcp configure search-console
私なら、検索分析用として次の候補から始めます。
sites_list
analytics_query
analytics_compare
analytics_anomalies
inspection_inspect
seo_audit
site_health_check
これは Search Console MCP が公開した 21 個のうち、今回の読み取り用途に合う候補です。Sitemap の送信や削除、site property の変更、Indexing API への送信は外します。後で必要になった時だけconfigureを開き直します。
YAML ではtools.includeが許可リストです。server 固有の command や資格情報を記事へ写さず、tool policy だけを示すと次の形になります。
tools:
include:
- sites_list
- analytics_query
- analytics_compare
- analytics_anomalies
- inspection_inspect
- seo_audit
- site_health_check
resources: false
prompts: false
includeとexcludeを同時に指定すると、公式仕様ではincludeが優先されます。私は両方を重ねません。許可する名前だけを読み返せる形にします。
設定を保存した後、起動中の Hermes セッションでは次を実行します。
/reload-mcp
設定を読み直し、利用可能なツール一覧を更新する操作です。再読み込み後に許可したツールだけが残っていることを確認します。設定ファイルの変更だけで、起動済みの一覧も変わったとは判断しません。
信頼できないサーバーは実行時にも止める
ツール名を絞っても、外部サーバーの実装が説明どおりとは限りません。自分で管理していない接続にはtrust: untrustedを使います。
trust: untrusted
この設定では、readOnlyHint: trueが付かないツール呼び出しに承認が必要です。ただし、注釈はサーバー自身が返します。公式リファレンスも、虚偽の注釈を前提に境界を考えるよう示しています。そこで、許可リスト、実行時承認、外部アカウントの最小権限を重ねます。
無人 cron では、承認待ちが処理停止になります。だからといって承認を外すのではなく、cron 専用 profile に読み取り専用の資格情報と tool filter を置く方が追いやすいです。対話用 profile と同じ接続を使い回さない設計が合います。
カタログを先に読む
新規導入では、install より先に catalog を読みます。
hermes mcp catalog
Hermes の公式カタログは、Nous Research が review して取り込んだ manifest を掲載します。ただし、掲載済みでも外部コードは動きます。公式ドキュメントは、manifest のsource、install.bootstrap、transport.commandを確認してから導入するよう求めています。
導入後は、同じ 3 つのコマンドで確認できます。
hermes mcp list
hermes mcp test search-console
hermes mcp configure search-console
listで設定状態を見て、testで実際の提供ツールを読み、configureで公開範囲を狭めます。この順番なら、接続できない状態と権限が広すぎる状態を分けて調べられます。
よくあるエラー
| 症状 | 原因 | 対処 |
|---|---|---|
| serverはenabledなのにツールが出ません | 接続失敗、またはfilterで全toolを外しています | hermes mcp test search-consoleでdiscovery結果を確認します |
| 想定より多くのツールが見えます | includeが未設定です | hermes mcp configure search-consoleで必要な名前だけを選びます |
excludeしたtoolが残ります | includeもあり、そちらが優先されています | policyをincludeだけに統一します |
| OAuth後も呼び出しが止まります | token未保存やheadless callback失敗が考えられます | Linearの場合は、新しいterminalからhermes mcp login linearを実行します |
| cronが承認待ちで終わりません | 書き込み系toolが無人処理へ残っています | 読み取り専用profileへ分け、toolと外部権限を絞ります |
| testは通るのに操作が失敗します | discovery成功とAPI権限は別です | 外部serviceのaccount権限と対象resourceを確認します |
MCP の数より、公開した操作の範囲を管理します。今回の接続は 1 台でしたが、検出されたツールは 21 個でした。私は server 名だけで安全性を判断せず、実際の tool list を読み、日次処理に必要な読み取り操作だけを残します。
一次情報
| 資料 | 確認した内容 |
|---|---|
| Hermes Agent公式ドキュメント: MCP | catalog、install、configure、stdioとHTTP、tool選択の流れ |
| Hermes Agent公式: MCP Config Reference | includeとexcludeの優先、trust、readOnlyHint、timeoutの仕様 |
| Hermes Agent公式source: optional-mcps | 公式catalogでreview済みmanifestを管理する場所 |
| Model Context Protocol公式仕様: Security Best Practices | MCP実装で考慮する攻撃経路と安全対策 |
