codex-hermes-a2a-bridge
Codex Hermes A2A Bridge
ローカルブリッジはCodexを「受付」として機能させます。Codexはstdio経由でMCPツールを呼び出し、ブリッジはリクエストをA2A v1.0/JSON-RPCに変換してHermesのdefaultプロファイルへ送信し、会話/タスクのマッピングをSQLiteに保持します。Hermesは引き続き「頭脳」として、エージェントループ、メモリ、スキル、ツール、および内部オーケストレーションを実行します。
現在のバージョン: v0.1.1。ループバックのバインド/コールのみ対応。モデル変更、プラグイン、設定、更新、シェル、またはHermesサービス制御するツールはありません。
独立プロジェクト: これは独立したコュニティ・ソフトウェアであり、公式製品ではなく、スポンサーの提ずけもなく、Nous Research/Hermes Agentや OpenAI/Codexを代表するものでもありません。ブランド名は相互操作互の説明だけに用れていいます。
アーキテクチャ
Codex client --MCP stdio--> MCP server --> bridge core --> Hermes A2A :9900
\--> SQLite context/task mappingPython 3.11と専用のvenvを使用し、Herm世界のvenvは使用しまません。
公式のPython MCP SDK、
httpxasync、Pydantic、SQLite stdlibを使用します。各
conversation_keyはHermesのcontextIdにマッピングできます。続の続いてのターンはそのマッピングを再利ます。元のプロンプトは永続化されません。ブリッジは指紋、ルート、状態、結果、最小限のエラーを保存します。
Related MCP server: hermes-mcp-bridge
要件とクイックインストール
Python 3.11。
A2Aゲートウェイをループバックで動さたるHermes Agent 0.20.5。
MCP stdio対応のCodexクライアント。
cd /absolute/path/to/codex-hermes-a2a-bridge
python3.11 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/codex-hermes-a2a-bridge doctorコントリビューターは、python -m pip install -e '.[dev]でテスティンギツールを追加インストールできます。オーバライドについては.ee.exampleを参照してください。実の.envファイルはコミットしらないでください。
安全なデフォルト設定:
環境変数 | デフォルト | 意味 |
|
| A2Aルート。ループバックURLののみ受付けます。 |
| 空 | Bearerトークンは環境変数から読取し、ツール引数では受付しません。 |
|
| SQLite file |
|
| デフォルト・タイムアウト。最大300秒にクランプします。 |
|
|
|
|
|
|
|
| 初タイムアウト以降もA2AタスクID/結果を保持するSSEワーカーの寿命。 |
|
| インメモリTaskStoreが無い場合の読取専用のフォールバック。 |
|
| エージェント・ループを防ぐター予算/コンテキスト。 |
|
| 同時なウトバウンドコール数。 |
Hermes A2Aを有効にしてCodex2に登録する
ローカルにインストールられたHermes 0.20.5で:
hermes plugins enable a2a-platform --no-allow-tool-override
hermes config set gateway.platforms.a2a.enabled true
hermes gateway run --no-superviseフォアグラウンドで実行する場合は、ユーザーサービスもインストールできます(sudoなし):
hermes gateway install --start-now --start-on-loginCodexの共通MCP設定にブリッジを登録します:
codex mcp add codex-hermes-a2a-bridge -- \
/absolute/path/to/codex-hermes-a2a-bridge/.venv/bin/codex-hermes-a2a-bridge serve
codex mcp get codex-hermes-a2a-bridge新しいエントリを読み込むには、新しいCodexクライアントを開く・再起動する必要があります。MCP stdioはプロトコルフレームのみをstdoutに書き出し、診断はstderrに出力されます。
7つのMCPツール v0.1
ツール | 用途 |
| ヘルスチェック、Agent Cardの要約、DBカウント、接続状態。 |
| 会話の作成・続行。 |
| ステータス・結果・エラーまたは |
| 会話/状態ごとにブリッジの維持タスクを一覧します。 |
| アクティブなストリームを待つか、SSEを購読してから、フォールバックとしてポーリング。 |
| ベストエフォートのキャンセルを送信。計算が停止したとは宣言しません。 |
| マッピングの一覧・検査・クローズ。クローズしてもHermesの会話データ消しません。 |
調査ので既に示した4つのMVP操作(discover・send・get・continue)は完全なA2Aではありません。v0.1ではこれらを、会話・タスク向けの7つの高レベルツールに統合しています。プッシュ通知のCRUDやHermesの管理などの下位のA2A操作は直接公開していません。
サンプルワークフロー
Codexが
hermes_statusを呼び出す。Codexが
hermes_chat(message=..., conversation_key=<安定した値>, mode="auto")を呼び出す。タスクが実行中の場合は、
hermes_task_waitかhermes_task_getを使います。曖昧なタイムアウト既定で無差別に再送信しないてください。needs_input=trueの場合はユーザユーザに聞いてから、同じconversation_key/context_idでhermes_chatを呼び出す。その後のターンは同じマッピングを引き続き使用します。
hermes_contexts(action="close")はブリッジのマッピングのみを閉じます。
副作用のあるタスクには、idempotency_keyを指定してください。Hermes 0.20.5には電文レベルの冪等性はありません。そのため、ブリッジは配信結果が不明の場合にミューティング送信を再試行しません。
v0.1.1から全モードがSendStreamingMessageを使うため、最初のイベントでA2AタスクIDをすぐ受信します。syncはインライン最大30秒(timeoutに指定されあればその値)だけ待ってか次へ進みます。ストリームはコレーションタイムアウトまで生き続けます。A2A IDがない古いoutcome_unknownレコードは、hermes_task_get/hermes_task_waitが最初にListTasks(contextId)を試し、その後Hermesの公式である会話持続を確認します。ローカルの未解決タスクが1件と、リモート/ディスクの候補が1件である場合のみ、リカバリが結果をリコンサエルします。不明確な場合は文字に残し、再送も予測判断も行いません。ディスクフォールバックにはA2Aの状態がないため、警告を返し、既に保存されたエ一ジェントの応答はcompletedと見なます。
テストと運用
.venv/bin/pytest --cov=codex_hermes_a2a_bridge --cov-report=term-missing
.venv/bin/codex-hermes-a2a-bridge doctor
.venv/bin/codex-hermes-a2a-bridge smoke \
'Reply with exactly MY_MARKER and nothing else.' \
--conversation-key manual-smoke
.venv/bin/python scripts/live_check.py manual-smokepytestは一時的なループバックPOSTでフェイクA2Aサーバーを使うため、実際のHermesは不要です。doctorとlive_check.pyは読み取り専用です。smokeコマンドは実際のタスクを送ります。無害な内容もので能動的手動実行してください。
Security and privacy
v0.1.1ではループバック以外のルートエンドポイントとAgent Card URLを拒否し、リダイレクトは従わず、MCPツール引数からトークンを受け付いません。
SQLiteは既定ではソースツリーの外のファイルに
0600権限で置きます。マッピング、指紋、状態、結果/アーティフケート、最小限のエラーを保存します。結果には情価度の高い情報が含まれ得るため、適切な保持・バックアップ計画が必用です。元のプロンプトはブリッジに永続化しませんが、Hermesは固有の会話・監査記録を書くこがあります。フォールバックの復旧は設定されたHermes会話ディレクトリを読取りのみでアクセス。
MCPサーバーは信頼のおけるユーザー資格で実動してださい。7つのツールには、副作用のあるスキール/ツールを動作させるHermesを発動することが可能です。
idempotency_keyを使用し、outcome_unknownでは行きあたりの再送しでください。ぜ弱性報告は SEC.RICY.md を従って下さい。トークン・トランスクリプト・SQLiteを issue に投稿しないでください。
補証と上游の制り
ブリッジは、ループバック・ポリシー、永続的なローカル・マッピング、曖味さの後のミューティンング送信の再行省略、および誠実な cancel のセマンティクスを保証します。ブリッジは、Hermes anticが計算を停止したこと、tokenレベルストリーミング、wireーレビル冪等性、そししHermes再起動間のタスク持続性を保証しません。
Hermes 0.20.5はイメモリ上の TaskStore とライフタイクルSSEを使用します。プロトコル Cancel は実行中のターンを中断しません。ブリッジの会話ストア・リカバリは条付の読取専用フォールバックであり、上游の永続タスクストア代替しません。検証済みの詳細は Hermes A2Aレファレンス をご覧ください。
Troublesholding
a2a_unreachable:hermes gateway のstatusを実、行し、`http://127.0.0.1:9900/.well-known/agent-card.json のカードを確。A2Aプラグインが有効ではあるがポートがあるらない場合:
hermes config get agentp.platforms.a2.a.enabledを確認し、サを再起動します。Codexがツールを見ない場合:
codex mcp get codex-hermes-a2a-bridgeを実行し、新しいCodex clientト・プロセスを使してください。outcome_unknown:hermes_task_get/hermes_task_waitを呼び出してブリッジに整解させます。それでも明確でない場合、副作用のあるタスクを再送せず、ユーザーに質てください。turn_gs: マッピングを閉じて新しい会話を作成します。エージェントループを無限に続継させるだめにもバジェットを増やさないください。Hermes 0.20.5は再起動すると A2A TaskStore が消えます。ブリッジ側はローカルのタスク/結果れを保たまが、リモト側のリフレッシではタスクが見つかしいと報告ることがあります。
現在のmacOSで
unchctl bootstrapが exit 5 を返した場合流、Hermes はデタッチのフォールバックします: 実動はしますが自動起動/自動再起動のしません。hermes gateway statusで確認してください。
ロールバック
scripts/rollback.sh を参照し。デフォルトでスクリーンは計画ツ用。 scripts/rollback.sh--apply は MCPエン etry と A2A設定/ぢラグインを解除しますンが、ゲートウェイ・サーが他プラットフー・のを務めて発する可能性があるため、ゲートウェイ・サーを保持します。ゲトウェイがそのロールアウントにののみでが設される場合にだけ、--include-gateway-service を追加してください。ソース、.venv`、SQLite、Hermes のトランスクプトは保持します。
構成ファイルの付近には、.pre-codex-hermes-a2a-bridge-v0.1.ak という接尾辞のスコープ付きバックアップが作らます。エーザーが変更したかも知れないファイル全体を自動復元せず、ファイル全体の自動レストアは行いません。
ドキュメント
公式の準拠: OpenAI Codex MCP、Hermes A2A guide、NousResearch/hermes-agent。矛盾する場は、ローカルの Hermes 0.20.5 ソリースのコミット d736f5d53f1d33fa0a5f17ce0070ebd38f618f8 を優先します。
Available Tools
7 toolshermes_chatA
Start or continue a Hermes conversation; returns a durable bridge task and A2A context mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto waits briefly, sync waits, async returns early | auto |
| message | Yes | User request for Hermes | |
| profile | No | Hermes profile; v0.1 supports default only | default |
| timeout | No | Absolute task/stream timeout in seconds | |
| context_id | No | Existing A2A contextId; normally reuse the returned value | |
| idempotency_key | No | Client key used to deduplicate exactly matching submissions | |
| conversation_key | No | Stable Codex conversation identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations false, the description must carry the full behavioral burden. It discloses that the tool returns a durable task and A2A context mapping, hinting at persistence and a follow-up workflow, but it does not state side effects (e.g., that it sends a message, creates a task, or persists state) or mention synchronous vs. asynchronous behavior. That's a clear gap, though the return-value hint adds some value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and key return values. No wasted words—it efficiently communicates the core purpose and output. This is an exemplar of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity (7 params, async modes), the description is minimal. However, the rich input schema and presence of an output schema cover parameter semantics and return formats. The description omits guidance on when to use async vs. sync modes, though that lives in the mode parameter's description. Overall, it's adequate but not enriched for a tool with this many options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — every parameter has a description (e.g., mode, context_id, idempotency_key). The tool description adds no parameter-level detail beyond what the schema already provides. Per the baseline for high coverage, this scores a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Start or continue') and the resource ('a Hermes conversation'), and it specifies what's returned ('a durable bridge task and A2A context mapping'). This distinguishes it from siblings like hermes_status or hermes_task_get, which focus on inspecting tasks rather than initiating interaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is the entry point for sending messages to Hermes, but it gives no explicit guidance on when to use it versus alternatives (e.g., when to call hermes_status or hermes_task_get instead). The context is clear but lacks exclusions or references to sibling tools, so it stays at an adequate level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_contextsAIdempotent
List, inspect, or close bridge-owned conversation/context mappings; close never deletes Hermes data.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows/tasks | |
| action | No | Mapping operation | list |
| context_id | No | Select a mapping by A2A contextId | |
| conversation_key | No | Select a mapping by Codex conversation |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds a specific behavioral guarantee that 'close never deletes Hermes data,' which goes beyond the annotations and clarifies safety. No contradictions with annotations, and the tool is low-risk, so this level of disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core actions (list, inspect, close) and adds a crucial caveat about data safety. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with all parameters optional and documented, an output schema present, and annotations covering idempotency and destructiveness. The description adequately covers the actions and a behavioral guarantee. It does not explicitly address parameter-action pairing, but the schema descriptions already convey that, so the overall context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a clear description (e.g., 'Mapping operation', 'Select a mapping by A2A contextId'). The tool description does not add additional parameter-level meaning, so the baseline of 3 for full schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing, inspecting, or closing bridge-owned conversation/context mappings. It names the specific resource and actions, making the purpose unambiguous. While it does not explicitly name sibling tools for differentiation, the resource is distinct enough that the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its usage for managing context mappings but provides no explicit guidance on when to choose this over alternatives or when not to use it. Siblings are clearly different in scope, so the decision is straightforward, but the lack of explicit routing or exclusion prevents a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_statusARead-onlyIdempotent
Check bridge persistence, Hermes health, connectivity, and a concise Agent Card summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the specific scopes of the check (bridge persistence, health, connectivity, Agent Card summary), which is useful context, but it does not detail return structure, latency, or other behavioral nuances. This is consistent with the annotations, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler. It front-loads the primary action ('Check') and then lists the elements, making it immediately scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-check tool with no parameters, full read-only annotations, and an output schema present, this description provides all necessary context. It covers the full scope of the tool's function and leaves no ambiguity about what it reports.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. With an empty schema, the baseline of 4 applies, and the description's mention of what is checked is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Check' and enumerates the exact resources checked: bridge persistence, Hermes health, connectivity, and Agent Card summary. This clearly distinguishes it from sibling tools like hermes_chat or hermes_task_get, which perform other functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: the description states it checks various status aspects, making it evident this is for status queries. However, it does not explicitly mention when to use it instead of alternatives or any exclusions, lacking the direct guidance seen in stronger examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_task_cancelA
Request task cancellation; response is explicit that Hermes may continue underlying computation.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | bridge_task_id or known A2A task id | |
| timeout | No | Cancel request timeout in seconds |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (all false) by explicitly warning that cancellation is only a request and that Hermes may continue underlying computation. This is a critical behavioral disclosure that prevents the agent from assuming the task will be stopped, and it surfaces a non-obvious execution semantic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the core action ('Request task cancellation') and immediately follows with the most important caveat. Every word earns its place; there is no redundancy or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two parameters and has an output schema, so the description only needs to cover the critical behavioral uncertainty, which it does. It doesn't discuss edge cases (e.g., cancelling a completed task), but given the presence of an output schema and the straightforward nature of the operation, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters (task_id and timeout) with meaningful descriptions. The tool description adds no additional information about parameter usage or syntax, so it relies on the schema, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Request task cancellation' clearly identifies the action (request cancel) and the target (a task), and the 'request' caveat immediately distinguishes it from guarantee-style operations. This separates it cleanly from sibling tools like hermes_task_get, hermes_tasks_list, and hermes_task_wait.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the name and description, but there is no explicit guidance on when to choose cancel over wait or get, nor any mention of conditions or exclusions. It doesn't tell an agent when cancellation is appropriate or when it might be too late to attempt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_task_getARead-onlyIdempotent
Get one bridge task, its Hermes status/result/input request, and recent lifecycle events.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Refresh a nonterminal task from Hermes when possible | |
| task_id | Yes | bridge_task_id or known A2A task id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds output context (status, result, input request, lifecycle events) but does not disclose behavioral details such as the refresh side effect, which is only mentioned in the schema. Credit is limited because the description adds only mild behavioral nuance beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and the returned data. Every word earns its place, with zero waste or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one required ID parameter, an output schema exists, and annotations cover safety. The description states the purpose and what is returned, which is sufficient for an agent to call it correctly without needing to infer missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (task_id and refresh), so the description is not required to compensate. It mentions 'bridge task' which loosely maps to task_id, but does not add any meaning beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('one bridge task'), and enumerates the exact data returned ('Hermes status/result/input request, and recent lifecycle events'). This clearly differentiates it from siblings like hermes_tasks_list (which lists tasks) and hermes_task_cancel (which cancels tasks).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: fetch detail for a single task when you have its ID. However, the description does not explicitly name alternative tools or state when not to use it, leaving the agent to infer the distinction from sibling names. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_tasks_listARead-onlyIdempotent
List durable bridge tasks, optionally filtered by conversation and bridge state.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum tasks | |
| status | No | Optional bridge state such as working or completed | |
| conversation_key | No | Optional Codex conversation identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds the 'durable' characteristic and filter behavior, which is useful, but it does not disclose ordering, pagination behavior, or how status values map to concrete bridge states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the core operation and the optional filters efficiently, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter listing tool, the description combined with fully documented schema, strong annotations, and an output schema is nearly complete. It could be improved by explicitly directing agents to sibling tools for single-task retrieval, but no critical invocation details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters limit, status, and conversation_key are already documented. The description only loosely echoes the filtering parameters without adding new format constraints, allowed values, or behavioral details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('durable bridge tasks'), and the optional filtering dimensions ('conversation and bridge state'). It clearly distinguishes this tool from siblings like hermes_task_get, hermes_task_wait, and hermes_task_cancel by signaling a listing operation rather than a single-task or mutation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need to list bridge tasks, optionally filtered by conversation or status. However, it provides no explicit guidance about when not to use it or when a sibling such as hermes_task_get or hermes_task_wait would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_task_waitARead-onlyIdempotent
Wait for task progress/result using the active stream, A2A subscribe, then polling fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | bridge_task_id or known A2A task id | |
| timeout | No | Maximum wait in seconds |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the operational mechanism (active stream, A2A subscribe, polling fallback), which adds value beyond the annotations. Since annotations already declare readOnlyHint=true and idempotentHint=true, the description's detail about stream/subscribe/polling provides useful context about how the wait is implemented without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action ('Wait for task progress/result') before detailing the fallback mechanism. No redundant words or filler; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary purpose and mechanism but omits explicit usage scenarios versus alternatives, timeout behavior (e.g., what happens on timeout), and error handling. While the output schema and annotations provide some coverage, the description alone is insufficient for an agent to fully understand when and how to use this tool in a broader workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (task_id with 'bridge_task_id or known A2A task id' and timeout with 'Maximum wait in seconds'), so the description adds no extra parameter meaning. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Wait for task progress/result', which clearly states the action (wait) and resource (task). It differentiates from siblings like hermes_task_get (which likely fetches status without blocking) and hermes_task_cancel (which cancels). The mechanism detail further clarifies intent, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for blocking until a task progresses or completes, but it does not explicitly state when to prefer it over hermes_task_get or hermes_status. No alternatives are named and no 'when not to use' guidance is given, leaving the agent to infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.1- First observed
hermes_chat - First observed
hermes_contexts - First observed
hermes_status - First observed
hermes_task_cancel - First observed
hermes_task_get - First observed
hermes_task_wait - First observed
hermes_tasks_list
TDQS
Each tool targets a distinct concern: status/health, chat initiation/continuation, individual task retrieval, task listing, waiting on tasks, cancellation, and context management. There is no overlap in purpose, and the descriptions further clarify boundaries.
All tools use a consistent 'hermes_' prefix with clear verb/noun patterns: status, chat, task_get, tasks_list, task_wait, task_cancel, contexts. The naming is predictable and follows a uniform style across the entire set.
With 7 tools, the surface is well-scoped for a bridge server. Each tool serves a necessary function without redundancy, making the count appropriate and manageable for an agent.
The tool surface covers the full lifecycle: initiating/continuing conversations, checking status, retrieving individual tasks, listing tasks, waiting for progress/results, canceling, and managing contexts. No obvious gaps for the stated purpose of bridging Codex and Hermes.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseCqualityDmaintenanceBridges MCP clients with local Codex CLI to execute autonomous coding tasks, manage threads, and inspect history via SQLite state.137654Apache 2.0
- AlicenseBqualityBmaintenanceA zero-friction stdio MCP bridge connecting Cursor Desktop to a local Hermes Agent, enabling natural language task delegation with session continuity and profile awareness.42Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables MCP agents to delegate tasks to a local Hermes Agent for terminal, file, browser, and coding operations, and schedule recurring jobs.MIT
- AlicenseNot gradedqualityCmaintenanceProvides an isolated MCP bridge giving Codex Hermes-style long-term memory, checkpoints, and optional tools, while keeping Hermes and Codex data read-only and requiring human approval for skill proposals.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/phamviet86/codex-a2a-gateway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server