Skip to main content
Glama

Claude Bridge

一个面向独立编码代理的本地优先、跨机器消息总线。

CI Python License MCP

Claude Bridge 允许不同机器上的编码代理会话通过命名通道交换有序消息。中继是自托管的,默认使用 SQLite,并暴露 MCP、一个小型 JSON API、一个仪表盘和一个终端 UI。

它不调用模型 API,也不要求代理共享文件系统或进程。Claude Code 是项目的动机,但核心基于 MCP,并不与 Anthropic 耦合。

前瞻构建通知: 此源代码树标识为 1.2.0.dev1。它是超出最新稳定 PyPI 版本的开发构建。在替换稳定部署之前,请查看变更日志0.9 到 1.2 迁移指南

为什么使用它?

  • 让 Windows、macOS、Linux 或远程主机上的代理保持在自己的会话中。

  • 无需远程 shell 访问即可发送工作、结果、审查请求和工件引用。

  • 使用持久化历史和消费者游标在客户端重启后恢复。

  • 使用幂等键安全地重试发送。

  • 通过 MCP、浏览器仪表盘、TUI 或 REST 观察同一个中继。

  • 在本地或私有 LAN/tailnet 上运行,并带有明确的安全策略。

Claude Bridge 是一个传输层,不是自主编排器。接收消息永远不会授权代理执行它。

Related MCP server: neighbors

传输方式

接口

路径或命令

用途

MCP Streamable HTTP

/mcp

推荐的远程 MCP 传输

MCP stdio

claude-bridge --stdio

本地子进程传输

旧版 MCP HTTP+SSE

/sse/messages/

迁移期间的现有配置

通道事件 SSE

/events/channel/<channel>

仪表盘、TUI 和自定义监听器;不是 MCP

JSON API

/api/*

浏览器、脚本和集成

自动化测试套件对 /mcp 执行真实的 MCP SDK 握手。CI 中不启动供应商客户端。请参阅基于证据的兼容性矩阵

架构

flowchart TB
    A["Claude Code / Codex / MCP client"] -->|"Streamable HTTP /mcp"| B["Claude Bridge"]
    C["Local MCP client"] -->|"stdio"| B
    D["Dashboard / TUI / script"] -->|"REST + event SSE"| B
    B --> E[("SQLite")]

消息和实时通知记录在单个事务中提交到 SQLite。HTTP 进程轮询该持久化发件箱(默认 500 毫秒),因此来自独立 stdio 进程的写入会传播到已连接的仪表盘/TUI 事件流。持久化通道历史在重启后仍然具有权威性。

安装

python -m pip install claude-code-bridge

同时安装终端 UI:

python -m pip install "claude-code-bridge[tui]"

PyPI 发行版名为 claude-code-bridge,因为 claude-bridge 已被分配给一个无关项目。命令和 Python 包仍为 claude-bridgeclaude_bridge

从源代码检出:

git clone https://github.com/constripacity/Claude-Bridge.git
cd Claude-Bridge
python -m pip install -e ".[dev]"

安全启动

默认是仅本地 HTTP 模式:

claude-bridge

这会监听 127.0.0.1:8765。打开 http://127.0.0.1:8765/ 查看仪表盘,或将 MCP 客户端连接到 http://127.0.0.1:8765/mcp

本地 stdio 模式不打开网络监听器:

claude-bridge --stdio

跨机器服务器

网络绑定故意采用失败关闭策略。将客户端 URL 中使用的地址作为受信任主机提供,并要求令牌:

export CLAUDE_BRIDGE_AUTH_TOKEN="$(openssl rand -hex 32)"
claude-bridge \
  --host 0.0.0.0 \
  --trusted-host 100.64.0.10

这里 100.64.0.10 可能是服务器的 tailnet 地址。DNS 部署会使用类似 bridge.example.internal 的值。--trusted-host 值是主机名或 IP 地址,不带 URL 方案或路径,该选项可重复。

需要两个独立的检查:

  1. --trusted-host 控制接受哪些 HTTP Host 名称;以及

  2. Bearer 令牌控制谁可以使用受保护的端点。

对于故意未认证的私有测试网络,将令牌替换为 --allow-unauthenticated-network。这是明确的风险接受,不是推荐的生产设置。

在通过不受信任的网络发送敏感内容之前,请使用 --tls-cert--tls-key、HTTPS 反向代理或加密覆盖网络。请参阅安全策略了解完整的信任模型。

容器

官方镜像也采用失败关闭策略。网络部署必须提供其受信任主机和认证策略:

export CLAUDE_BRIDGE_AUTH_TOKEN="$(openssl rand -hex 32)"
docker run --rm -p 8765:8765 \
  -v claude-bridge-data:/data \
  -e CLAUDE_BRIDGE_AUTH_TOKEN \
  -e CLAUDE_BRIDGE_TRUSTED_HOSTS="100.64.0.10" \
  ghcr.io/constripacity/claude-bridge:latest

SQLite 数据库存储在 /data 中。发布镜像使用精确和主/次版本标签;edge 跟踪 main

连接客户端

Claude Code

远程 Streamable HTTP:

claude mcp add --transport http -s user claude-bridge \
  http://127.0.0.1:8765/mcp

本地 stdio:

claude mcp add -s user claude-bridge -- claude-bridge --stdio

对于受保护的远程端点,使用已安装的 Claude Code 版本支持的选项附加匹配的 Authorization 头。旧配置在迁移期间可以继续使用 --transport sse 指向 /sse

Codex

~/.codex/config.toml 中的本地 stdio:

[mcp_servers.claude_bridge]
command = "claude-bridge"
args = ["--stdio"]

远程 Streamable HTTP:

[mcp_servers.claude_bridge]
url = "http://127.0.0.1:8765/mcp"
bearer_token_env_var = "CLAUDE_BRIDGE_AUTH_TOKEN"

这些示例遵循每个客户端文档化的传输方式。仓库的 CI 验证 MCP 协议行为,而不是完整的供应商客户端启动。在做出支持声明之前,请参阅兼容性矩阵

MCP 工具

工具

用途

bridge_send

发送旧版文本或协议 v1 消息;支持幂等重试

bridge_receive

使用消息游标或持久化消费者游标读取有界页面

bridge_wait

等待最多 55 秒的新消息,无需快速轮询

bridge_ack

单调推进消费者的通道作用域游标

bridge_channels

列出活动通道和计数

bridge_ping

检查桥接健康状态和功能

bridge_status

汇总各通道的近期活动

bridge_clear

删除一个通道中的所有消息(和任务)

bridge_enqueue

向通道的工作队列添加任务(独占;仅认领一次)

bridge_claim

原子认领下一个任务并带有租约;使用 wait_seconds 长轮询

bridge_complete

将已认领的任务标记为完成,由 lease_token 保护

bridge_fail

使已认领的任务失败——重新排队并退避,或死信

bridge_tasks

检查通道的队列:按状态计数和任务列表

工具结果包括支持 MCP 结构化内容的客户端的结构化数据,以及兼容性的可读文本表示。

可靠的任务/结果示例

编排器发送带有稳定重试键的结构化任务:

bridge_send(
  channel="payments:worker",
  sender="windows-orchestrator",
  idempotency_key="job-802-task",
  message={
    "schema_version": 1,
    "type": "task",
    "content": {"action": "run_tests", "target": "payments"},
    "thread_id": "payments-42",
    "correlation_id": "job-802"
  }
)

工作进程使用其持久化的消费者身份等待:

bridge_wait(
  channel="payments:worker",
  consumer_id="mac-worker",
  timeout_seconds=20
)

成功应用任务后,它推进其游标:

bridge_ack(
  channel="payments:worker",
  consumer_id="mac-worker",
  message_id="<processed-message-id>"
)

然后它可以使用相同的 thread_idcorrelation_id 将结果发送到返回通道。确认提供至少一次处理语义;它不会使任意外部副作用恰好一次。

完整的信封、重试、游标和保留契约记录在协议参考中。

任务队列(工作分配)

消息扇出——每个消费者游标都会看到每条消息。任务队列则相反:每个任务恰好由一个工作进程认领。将一组工作代理指向一个通道,它们共享工作而不会重复处理。

编排器入队任务(使用幂等键去重安全):

bridge_enqueue(
  channel="builds",
  payload={"repo": "payments", "action": "run_tests"},
  max_attempts=3,
  idempotency_key="build-802"
)

每个工作进程认领下一个任务,持有租约(可见性超时)。两个工作进程永远不会获得相同的任务;wait_seconds 对空队列进行长轮询:

bridge_claim(channel="builds", consumer="worker-3", lease_seconds=300, wait_seconds=20)
# -> { task_id, payload, attempts, lease_token, lease_expires_at }

它在租约到期前完成——成功时 complete,失败时 fail 重试——两者都由 lease_token 保护,因此被重新认领的任务不会被覆盖:

bridge_complete(channel="builds", task_id="tsk_…", lease_token="…", result={"passed": 105})
bridge_fail(channel="builds", task_id="tsk_…", lease_token="…", requeue=true, retry_delay_seconds=30)

如果工作进程崩溃且从未解决其任务,租约到期,任务会自动重新排队——或者一旦 max_attempts 耗尽则死信。这是至少一次投递,因此请使任务处理程序幂等。bridge_tasks(channel="builds") 显示队列的按状态计数。

通道

通道在首次写入时创建。一个可读的约定是 <project>:<purpose>

payments:orchestrator
payments:worker
payments:events
payments:review
general:status

通道名称是路由,不是授权。在当前共享令牌模型中,任何授权客户端都可以读取、写入或清除任何通道。

仪表盘、TUI 和 JSON API

仪表盘在 / 提供,除非使用 --no-dashboard。它使用 JSON API 和每通道事件流。其 React 应用程序、字体和其他运行时资源与包捆绑在一起,因此加载仪表盘不会联系第三方 CDN。对静态应用程序应用了严格的内容安全策略。

运行 TUI:

python -m claude_bridge.tui
python -m claude_bridge.tui \
  --url http://100.64.0.10:8765 \
  --sender mac

TUI 从环境变量 CLAUDE_BRIDGE_AUTH_TOKEN 读取,使秘密不进入进程命令行。

核心 HTTP 端点:

端点

用途

GET /status

最小的未认证健康检查

GET /api/state

通道计数、发送者、版本和运行时间

GET /api/messages?channel=X&since_id=Y&limit=N

有界通道历史

GET /api/messages/{id}

单条消息详情

GET /api/wait?channel=X&consumer_id=Y

使用消费者或消息游标的有界长轮询

POST /api/send

发送旧版文本或协议 v1 消息,可选幂等性

POST /api/ack

推进一个持久化消费者游标

POST /api/clear

清除一个通道

GET, POST, DELETE /api/session

检查、创建或撤销不透明仪表盘会话

GET /api/audit?limit=N

启用时的近期审计事件

GET /events/channel/<channel>

带有有界重放的实时事件流

事件流可以在缓冲区填满后丢弃慢速订阅者;持久化历史仍然具有权威性。使用最后一条消息 ID 重新连接,并通过显式获取历史来遵循 cursor_stalereplay_truncated

认证和浏览器边界

设置 CLAUDE_BRIDGE_AUTH_TOKEN--auth-token-file--auth-token。字面 CLI 形式可能出现在进程列表中;首选环境变量或权限受限的文件。

启用后,受保护的 REST、MCP 和事件端点需要:

Authorization: Bearer <token>

/status 保持公开,且刻意只包含最少信息。静态仪表盘外壳可能可访问,但受保护的数据 API 仍需要令牌。

不安全的浏览器变更受 Origin 限制,JSON 端点要求 JSON 媒体类型,Host 头采用白名单。额外的浏览器来源通过可重复的 --cors-origin 标志独立配置。

仪表盘将 Bearer 令牌一次性提交到 POST /api/session,并收到一个短期的、不透明的 HttpOnlySameSite=Strict Cookie。主令牌不会写入本地存储或 URL。事件流使用该 Cookie 进行身份验证;?token= 查询身份验证会被拒绝。登出会撤销会话,服务器重启会使所有内存中的仪表盘会话失效。

配置

CLI/环境变量

默认值

用途

--host

127.0.0.1

HTTP 绑定接口

--port

8765

HTTP 端口

--db / CLAUDE_BRIDGE_DB

./claude-bridge.db

SQLite 路径

--trusted-host / CLAUDE_BRIDGE_TRUSTED_HOSTS

环回主机

接受的 Host 名称/IP

--auth-token-file / CLAUDE_BRIDGE_AUTH_TOKEN

未设置

共享 Bearer 身份验证

--allow-unauthenticated-network

关闭

显式的非环回身份验证绕过

--cors-origin / CLAUDE_BRIDGE_CORS_ORIGIN

仅同源

额外的浏览器来源,包括另一个 localhost 端口

--tls-cert + --tls-key

未设置

直接 HTTPS 监听器

--retention-days / CLAUDE_BRIDGE_RETENTION_DAYS

0

删除早于 N 天的消息;0 表示保留

--audit-log / CLAUDE_BRIDGE_AUDIT_LOG

关闭

记录安全相关事件

CLAUDE_BRIDGE_AUDIT_RETENTION_DAYS

90

限制审计历史

CLAUDE_BRIDGE_SESSION_TTL_SECONDS

28800

不透明仪表盘会话的生命周期

CLAUDE_BRIDGE_EVENT_POLL_MS

500

跨进程发件箱轮询间隔

CLAUDE_BRIDGE_EVENT_RETENTION_DAYS

7

保留已投递的发件箱记录

--no-dashboard

关闭

不挂载浏览器资源

CLAUDE_BRIDGE_MAX_REQUEST_BYTES

262144

最大 HTTP 请求体

CLAUDE_BRIDGE_MAX_MESSAGE_BYTES

131072

最大编码消息

CLAUDE_BRIDGE_MAX_SSE

100

通道事件订阅者总数

CLAUDE_BRIDGE_MAX_SSE_PER_CHANNEL

25

单个通道上的订阅者

CLAUDE_BRIDGE_SSE_REPLAY_LIMIT

500

重连积压上限

CLAUDE_BRIDGE_STATELESS_HTTP

关闭

使用无状态 Streamable HTTP 会话

存在匹配标志时,CLI 值优先。无效的数字或布尔环境值会在启动时以配置错误失败。

持久化与运行限制

  • SQLite 以 WAL 模式运行,适用于个人或小团队中继。

  • 服务器目前不是多节点或高可用消息代理。

  • 一个 HTTP worker 加上协作的 stdio 进程可以共享 WAL 数据库;持久化发件箱会传播它们的实时事件。这仍然是小型 SQLite 设计,而非多节点或企业级代理。

  • 保留策略可能使旧游标失效。重要工作成果应存放在仓库或工件存储中,而不仅仅在桥接历史中。

  • 共享 Bearer 令牌不提供身份或按通道的权限。

  • 没有可复现的基准测试和环境,就不做任何基准声明。

未来的运维和授权里程碑见 路线图

开发

python -m pip install -e ".[dev]"
ruff check claude_bridge tests
pytest -v
python -m build

CI 在 Linux 上测试 Python 3.10–3.13,并在 Windows 和 macOS 上运行当前版本的冒烟任务。真实套接字 MCP 测试涵盖初始化、工具列表、发送、接收、等待和确认,均通过官方 SDK 完成。另一个任务构建 sdist 和 wheel,验证其元数据,将每个工件安装到干净环境中,并检查 CLI。

在提出新功能之前,请阅读贡献指南。对于漏洞,请使用安全策略中的私有流程,而不是公开 issue。

路线图

当前顺序是:

  1. 1.2 — 安全的 Streamable HTTP、结构化消息、幂等性和持久化消费者;

  2. 1.3 — 原生客户端诊断和实验性的 Claude Channels 配套组件;

  3. 1.4 — 个体身份、作用域、ACL、配额和令牌轮换;

  4. 1.5 — 可观测性、运维工具和可选的可扩展后端;以及

  5. 2.0 — 联邦和可选的 A2A 适配器(如果实际使用需要的话)。

每个里程碑及其非目标都在路线图中定义。

许可证

MIT — 见许可证

Constripacity 创立并维护。

Available Tools

13 tools
bridge_ackA
Idempotent

Acknowledge a message for a named consumer. The durable cursor advances monotonically and is scoped to this channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
metadataNo
message_idYes
consumer_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by noting that 'the durable cursor advances monotonically and is scoped to this channel.' This explains the side effect of acknowledgment, which is not covered by the annotations. However, it does not discuss error cases or idempotency behavior, though idempotency is hinted by the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, two sentences long, with no filler. It front-loads the purpose and adds a behavioral note in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal. It covers the core purpose and one behavioral effect, but misses details like the meaning of metadata, how to obtain message_id, or error handling. With 4 parameters and a nested object, the description is not complete enough for an agent to know all inputs and expected outcomes, though output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain the individual parameters. It mentions 'for a named consumer' but does not map that to consumer_id. The schema has 4 parameters with 0% coverage in the description, so the description fails to compensate. No information is given about channel, message_id, or metadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Acknowledge a message for a named consumer.' It specifies a specific verb and resource, and mentions scoping to channel, which distinguishes it from other bridge operations like send or receive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions or conditions for using it. There is no reference to sibling tools or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_channelsA
Read-only

List all active channels and their message counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the safety profile. The description adds that it lists active (not all) channels and includes message counts, which is useful context beyond the annotations, but it does not describe any other behavioral aspects such as performance, pagination, or filtering limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no extraneous words. It conveys the core action and the additional data included, making it maximally concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is zero parameters and an output schema exists, the description covers the essential scope ('active channels' and 'message counts'). It does not mention any potential limitations of 'active', but the output schema likely supports understanding the return. The description is sufficient for a simple enumeration tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema requires no elaboration. The description adds no parameter-specific meaning, and per the rubric, a baseline of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a clear resource ('all active channels') with an additional detail ('their message counts'). It is unambiguous and distinct from the sibling operations like bridge_send or bridge_receive, which are clearly not listing operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to choose this tool over siblings such as bridge_status or bridge_ping. The description implies it is for discovering channels, but does not mention exclusions or alternatives, leaving the agent to infer usage without explicit support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_claimA

Atomically claim the next task from a channel's queue — no two workers ever get the same task. The claim holds a lease for lease_seconds; complete or fail it before the lease expires or it is requeued to another worker. Set wait_seconds to long-poll.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
consumerYes
wait_secondsNo
lease_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds a strong behavioral contract beyond the annotations: atomicity semantics, lease expiration, and requeue behavior, plus the long-poll hint. Consistent with annotations (readOnlyHint:false, idempotentHint:false, destructiveHint:false) — 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three lean sentences with the core contract front-loaded ('Atomically claim the next task'), then the lease lifecycle and the key parameter hint. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the full concurrency and discharge lifecycle, and the presence of an output schema removes the need to describe return values. The remaining gap is empty-queue behavior (e.g., whether wait_seconds=0 means immediate failure or return-empty) — a detail that would only surface at the boundary, not in a typical invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Compensates for 0% schema coverage on two of four parameters: lease_seconds defines the lifecycle window and wait_seconds is explicitly tied to long-polling. But channel and consumer are wholly undocumented — especially the required 'consumer', whose meaning is not inferable from the description and doesn't get the accidental context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Says exactly what it does with a specific verb+resource: 'Atomically claim the next task from a channel's queue.' The uniqueness guarantee ('no two workers ever get the same task') plainly differentiates it from siblings like bridge_receive, bridge_ack, and bridge_tasks, so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives actionable context: complete or fail within the lease window or the task gets requeued, and sets wait_seconds to long-poll. It does not explicitly name when NOT to use this tool over bride_receive or bridge_ack, but the lease/atomicity framing makes the intended worker-pool scenario clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_clearA
DestructiveIdempotent

Clear all messages from a specific channel. Useful for resetting state.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description does not need to restate the destructive nature. The description adds the purpose ('resetting state') and the scope ('all messages in a specific channel'), which provides some context beyond the annotations. However, it does not disclose any additional behavioral nuances (e.g., permanence, side effects on channel metadata) that are not already covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two short sentences that immediately convey the action and purpose. There is no redundant or extraneous information, and the key detail (the destructive action) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single parameter, an output schema, and annotations that cover safety (destructive and idempotent hints), the description is largely complete. It explains the purpose and scope, and the output schema addresses return values. However, it does not explicitly warn about the irreversible nature of clearing all messages, although the destructiveHint annotation partially covers this. Minor gap but acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must clarify the parameter semantics. The description only vaguely references 'a specific channel' without explicitly naming the 'channel' parameter or explaining its format, constraints, or how it is used to identify the channel. This adds minimal value over the bare schema definition, leaving the agent to infer the parameter's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'clear' and the resource 'all messages from a specific channel,' making the tool's function unambiguous. It adds a practical use case ('resetting state') that helps distinguish it from sibling tools like bridge_send, bridge_receive, and bridge_status, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context for when to use the tool ('resetting state'), which implies a specific scenario. However, it does not explicitly mention alternatives or when not to use it, such as for partial deletion or non-destructive operations. This is adequate guidance given the tool's simplicity, but it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_completeA

Mark a claimed task completed. Requires the lease_token returned by bridge_claim; a task whose lease expired and was reclaimed cannot be completed by the previous holder.

ParametersJSON Schema
NameRequiredDescriptionDefault
resultNoOptional structured JSON result
channelYes
task_idYes
lease_tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation that is not idempotent and not open-world. The description adds valuable behavioral context beyond those flags: the completion depends on a valid lease_token from bridge_claim, and a stale lease invalidates completion. It does not speculating at all, and the account for possible invalid-token errors, but the main behavioral precondition is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the critical lease on constraint follows immediately. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover mutation/idempotency, the description does not need to explain return values. The lease_token requirement and stale-lease restriction cover the main tricky workflow. The only real gap is the meaning of channel and task_id, which prevents a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, since only result has schema documentation. The description does add meaning to lease_token by identifying bridge_claim as its source, but it never explains channel or task_id, and it does not instruct how result is structured or used. This leaves most required parameters under-documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Mark a claimed task completed.' This clearly differentiates it from related sibling tools like bridge_claim, bridge_fail, and bridge_ack, and the lease_token condition reinforces what makes this tool distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this after a task has been claimed, and the lease_token from bridge_claim is required. It also states an explicit exclusion: a task whose lease expired and was reclaimed cannot be completed by the previous holder. It does not name sibling alternatives such as bridge_fail, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_enqueueA

Add a task to a channel's work queue for a worker to claim. Give payload (structured JSON) or content (a string). Pass idempotency_key so a retried enqueue does not create a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
contentNoString task payload
payloadNoStructured JSON task payload
priorityNoHigher priority is claimed sooner
enqueued_byNo
max_attemptsNo
delay_secondsNoDelay before the task becomes claimable
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a mutating operation, and the description adds useful behavioral nuance: idempotency via idempotency_key prevents duplicate tasks on retry. It also explains that tasks are enqueued pending worker claim, which is meaningfully beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states the main action, and the second covers the critical payload/content distinction plus idempotency. No redundant wording or schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the required invocation pattern and the most important optional safeguard (idempotency_key). With an output schema present and the remaining optional parameters largely self-explanatory or schema-described, the tool is adequately complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies the key design choice between structured payload and string content, and explains idempotency_key's purpose. However, schema coverage is only 50%, and the description does not compensate for undocumented fields like enqueued_by or max_attempts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (add/enqueue), a specific resource (a task in a channel's work queue), and the downstream behavior (held for a worker to claim). This clearly distinguishes it from sibling tools like bridge_claim or bridge_complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to enqueue tasks, distinct from claiming or completing them. It does not explicitly name alternative tools or when not to use it, so it falls just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_failA

Mark a claimed task failed. By default it is requeued (after retry_delay_seconds) until max_attempts is exhausted, then dead-lettered; set requeue=false to dead-letter immediately. Requires the lease_token from bridge_claim.

ParametersJSON Schema
NameRequiredDescriptionDefault
errorNoOptional failure detail
channelYes
requeueNo
task_idYes
lease_tokenYes
retry_delay_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond what annotations already convey (mutation, non-idempotent), the description discloses the full state machine behavior: a failed task is requeued after retry_delay_seconds until max_attempts is exhausted and then dead-lettered. It also exposes the immediate dead-letter path (requeue=false) and the lease_token prerequisite — all operational behaviors the agent cannot infer from the annotations or schema. The description is consistent with annotations; 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler, front-loaded with the action verb. The second sentence efficiently captures the default retry behavior, the terminal dead-letter outcome, the immediate-path alternative, and the required resource. Every clause adds necessary behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary. The description covers the complete contract of this tool: the state transition, the retry/dead-letter timeout behavior, the forcing path to immediate dead-letter, and the token prerequisite from bridge_claim. Nothing missing that an agent needs to invoke this tool correctly within the bridge task lifecycle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description shoulders the explanatory load. It meaningfully explains the critical parameters: requeue (false => immediate dead-letter), retry_delay_seconds (the retry wait), and lease_token (source and meaning). The remaining parameters (channel, task_id, error) are left implicit — task identity is clear from the 'claimed task' context and the schema already describes error — so the compensation is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the direct action 'Mark a claimed task failed,' which names the verb and resource clearly. It further differentiates this operation from the task-lifecycle siblings by spelling out the failure path (requeue/dead-letter), making it easy to distinguish from complementary tools like bridge_ack and bridge_complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete and important prerequisite — 'Requires the lease_token from bridge_claim' — which tells the agent exactly when in the workflow this tool is valid. It also spells out the two usage paths (default requeue vs. requeue=false for immediate dead-letter), but it does not explicitly name the alternative tools (e.g., 'use bridge_complete when the task succeeded'), so the when-not guidance is implicit rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_pingA
Read-only

Check if the bridge server is alive and get a status summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates this is a safe read operation, and the description adds minimal context by mentioning a status summary. It does not elaborate on potential side effects, authentication requirements, or rate limits, but given the annotation coverage, a baseline score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no redundant words. It front-loads the core action (check if alive) and quickly mentions the secondary outcome (status summary), making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the operation (no parameters, no side effects) and the presence of an output schema, the description provides sufficient context. It hints at the return content (status summary), and the output schema would fill in exact details, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters to describe, so schema coverage is trivially complete. The description adds nothing about parameters, but with zero params the baseline score is 4, as there is nothing to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'check' and identifies the resource as the bridge server, clearly indicating a liveness/health check. It also mentions getting a status summary, which distinguishes it from other bridge operations like send, receive, or wait.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention specific conditions or contrast it with sibling tools such as bridge_status or bridge_receive, leaving the agent to infer the appropriate usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_receiveA
Read-only

Read durable messages. Pass since_id for an explicit cursor or consumer_id to resume from that consumer's last acknowledged message.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes
since_idNo
consumer_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description does not contradict these. However, the description does not clarify whether reading messages removes them from the queue or if they persist until acknowledged. Since a separate bridge_ack tool exists, this behavior is important but not specified, so the description adds only partial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that avoids unnecessary detail or verbosity. It is well-structured, front-loading the primary purpose and then adding parameter-specific guidance in a clear order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool lacks an explanation of its output schema, which is present but not described. It also does not mention how it interacts with bridge_ack (e.g., whether messages are auto-acknowledged or require explicit ack). This incomplete context makes it difficult for an agent to fully understand the flow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only explains two of the four parameters: 'since_id' and 'consumer_id'. It does not explain the 'limit' parameter (pagination/volume control) or the required 'channel' parameter (which channel to read from). With 0% schema description coverage, this leaves significant gaps in understanding the correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Read durable messages.' This is a specific verb with a defined resource, and it distinguishes itself from sibling tools like bridge_send, bridge_ack, and bridge_clear by focusing on reading rather than sending, acknowledging, or clearing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides parameter usage guidance for 'since_id' and 'consumer_id' but does not explicitly state when to use this tool versus alternatives such as bridge_wait (likely a blocking wait) or how it relates to bridge_ack. The absence of contextual usage instructions leaves some ambiguity for an agent deciding between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_sendA

Publish a durable message. Use content for legacy text/JSON, or message for the versioned structured envelope. Supply idempotency_key when a retry must not create a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
senderYes
channelYes
contentNoLegacy text or JSON
messageNoStructured protocol-v1 envelope
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds the idempotency_key behavior (retry must not create duplicate), which is useful. It doesn't disclose what happens on failure, delivery guarantees, or whether the message is persisted. With annotations covering the basic safety profile, the description adds some value but not deep behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place. The first states the action, the second explains the two payload options, the third covers idempotency. No fluff, front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, 2 required, nested objects, and an output schema. The description covers the key decision points (content vs message, idempotency_key). It doesn't explain the output schema, but that's available separately. It doesn't mention channel/sender requirements, but those are self-explanatory from the schema. Given the complexity, the description is reasonably complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 40%, so the description must compensate. It explains the distinction between content (legacy) and message (versioned structured envelope), and the purpose of idempotency_key. This adds meaning beyond the schema, which only describes content as 'Legacy text or JSON' and message as 'Structured protocol-v1 envelope'. The description clarifies the semantic difference and the idempotency use case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Publish') and resource ('durable message'), and distinguishes between two payload formats (content vs message). It doesn't explicitly name sibling tools, but the purpose is clear enough to differentiate from bridge_receive, bridge_ack, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on when to use content vs message, and when to supply idempotency_key. It doesn't explicitly state when not to use this tool or name alternatives, but the context of siblings (receive, ack, wait) implies this is the send operation. The guidance is practical and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_statusA
Read-only

Get the last N messages from ALL channels at once. Useful for getting a full picture of what's happening across agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
per_channelNoHow many recent messages to show per channel (default: 5)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint=true and destructiveHint=false, the safety profile is covered. The description adds useful behavioral context by stating the tool aggregates messages across all channels rather than a single channel or a wait/ack mechanism, and frames it as a status-viewing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two purposeful sentences with no filler. The core action and scope are front-loaded in the first sentence, and the second sentence provides brief utility. Every word contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status tool with one optional parameter, complete schema coverage, and an output schema, the description is sufficient. It explains the core result, the scope, and the likely use case without needing to document return fields or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the only parameter, per_channel, with a clear description and default. The tool description does not add much about parameter details, but the schema fully documents it, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the last N messages from ALL channels at once.' It clearly identifies the tool's unique aggregation behavior, distinguishing it from likely siblings like bridge_receive or bridge_channels that might target individual channels or channel metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you want a cross-channel snapshot, as suggested by 'full picture of what's happening across agents.' It does not explicitly name alternatives or state when not to use it, but the scope 'ALL channels at once' alone is a strong routing signal against channel-specific tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_tasksB
Read-only

Inspect a channel's task queue: per-status counts plus a recent task list. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint and destructiveHint, so the description's 'Read-only' adds little. It does add that the response contains per-status counts and a recent task list, which is useful behavior context. However, it does not explain ordering, pagination, or what happens when the channel does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one focused sentence with no wasted words and front-loads the core operation. 'Read-only' adds a compact safety signal even though it is already captured by annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and has an output schema, so return shape does not need to be repeated. Still, the description leaves important gaps: distinguishing bridge_tasks from bridge_status, explaining how the optional status parameter interacts with the counts, and noting any channel not found or permission behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for parameter meaning, but it only weakly supports 'channel' and 'status' via wording. It does not explain how status affects the counts and list, what the limit bounds mean in practice, or what values like 'dead' imply semantically.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that bridge_tasks inspects a channel's task queue and summarizes it via per-status counts and a recent task list. It is specific about the resource and operation, but it does not explicitly distinguish itself from sibling tools like bridge_status or bridge_channels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this is for inspection and is safe to call, but it gives no explicit guidance about when to use it versus send, wait, ack, or status tools. It offers no scenarios, exclusions, or alternative tool recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_waitA
Read-only

Wait efficiently for new messages after since_id or a durable consumer cursor. Use this instead of repeated polling; timeout is capped at 55 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes
since_idNo
consumer_idNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: it explains the waiting mechanism (after since_id or durable cursor) and caps timeout at 55 seconds, which directly informs call behavior. The readOnlyHint and destructiveHint annotations already cover safety, and the description complements them without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Exactly two sentences with no filler. The core guidance ('use instead of repeated polling') is front-loaded, and the timeout constraint is concise and essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not detail return format. It covers the primary usage pattern (waiting after a cursor), the key cap (55s), and the polling alternative. The anyOf logic (since_id vs consumer_id) is inferable from the wording. Only minor gaps like limit semantics remain, but these are self-evident from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It explains since_id and consumer_id (the two trigger parameters) and mentions the timeout cap (relating to timeout_seconds), but does not explain limit or channel. Since those have defaults and are straightforward, partial compensation is acceptable but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for new messages, anchored by since_id or a consumer cursor. It names the resource and verb ('Wait efficiently for new messages'), and implicitly distinguishes itself from polling, though it does not explicitly contrast with sibling tools like bridge_receive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly recommends using this instead of repeated polling, which provides a clear alternative. It does not define when not to use it (e.g., when immediate reply is needed), but the guidance is actionable and unambiguous.

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.

  1. 5 tool updates
    • Addedbridge_claim
    • Addedbridge_complete
    • Addedbridge_enqueue
    • Addedbridge_fail
    • Addedbridge_tasks
  2. 8 tool updatesv1.3.0
    • Addedbridge_ack
    • Changedbridge_channels2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbridge_clear4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / channel / description
        Removed value: -"Channel to clear"
      • addedInput schema / properties / channel / minLength
        Added value: +1
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbridge_ping2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbridge_receive10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / channel / description
        Removed value: -"Channel to read from"
      • addedInput schema / properties / channel / minLength
        Added value: +1
      • addedInput schema / properties / consumer_id
        Added value: +{
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / limit / description
        Removed value: -"Max messages to return (default: 20)"
      • addedInput schema / properties / limit / maximum
        Added value: +500
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • removedInput schema / properties / since_id / description
        Removed value: -"Only return messages after this message ID (exclusive). Get from a previous receive."
      • addedInput schema / properties / since_id / minLength
        Added value: +1
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbridge_send13 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / oneOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "message"
        +      ]
        +    },
        +    "required": [
        +      "content"
        +    ]
        +  },
        +  {
        +    "not": {
        +      "required": [
        +        "content"
        +      ]
        +    },
        +    "required": [
        +      "message"
        +    ]
        +  }
        +]
      • removedInput schema / properties / channel / description
        Removed value: -"Channel name, e.g. 'demo:orchestrator'"
      • addedInput schema / properties / channel / maxLength
        Added value: +256
      • addedInput schema / properties / channel / minLength
        Added value: +1
      • changedInput schema / properties / content / description
        Previous value: -"Message content — can be plain text or JSON"New value: +"Legacy text or JSON"
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "maxLength": 256,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / message
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Structured protocol-v1 envelope",
        +  "properties": {
        +    "content": {},
        +    "schema_version": {
        +      "const": 1
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "schema_version",
        +    "type",
        +    "content"
        +  ],
        +  "type": "object"
        +}
      • removedInput schema / properties / sender / description
        Removed value: -"Your identity, e.g. 'windows' or 'mac'"
      • addedInput schema / properties / sender / maxLength
        Added value: +128
      • addedInput schema / properties / sender / minLength
        Added value: +1
      • changedInput schema / required
        Previous value: -[
        -  "channel",
        -  "sender",
        -  "content"
        -]New value: +[
        +  "channel",
        +  "sender"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbridge_status2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Addedbridge_wait
  3. 6 tool updatesv1.0.0
    • First observedbridge_channels
    • First observedbridge_clear
    • First observedbridge_ping
    • First observedbridge_receive
    • First observedbridge_send
    • First observedbridge_status

TDQS

A3.8/5.0
Disambiguation4/5

The message and work-queue tools are mostly clearly separated, but a few pairs have fuzzy boundaries: bridge_receive/bridge_wait and bridge_send/bridge_enqueue could easily be selected incorrectly before reading the full descriptions. The lease-token and consumer-cursor mechanisms do, however, keep the intended workflows distinct.

Naming Consistency4/5

All tools consistently share the bridge_ prefix and use lowercase_snake_case, making the family predictable and discoverable. However, the naming is not uniformly verb_noun: some tools are bare verbs (bridge_send, bridge_receive, bridge_fail), while others are nouns (bridge_channels, bridge_status, bridge_tasks).

Tool Count5/5

Thirteen tools is reasonable for a combined durable-message bus and task-queue server, and each tool covers a distinct lifecycle step or inspection need. The count stays within the sweet spot and does not feel padded.

Completeness4/5

The overall surface is functionally strong: messaging covers send, consume, wait, acknowledge, clear, and inspect, while the queue side claims, completes, fails, and reviews tasks. Minor gaps remain around single-message deletion, task-queue clearing, and direct dead-letter replay, but they are likely workable via the existing inspect/enqueue operations.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for inter-agent communication. Gives multiple Claude Code sessions a shared message board, agent registry, and orchestration layer — backed by a cloud relay so agents can coordinate across machines, repos, and teams.
    8
    53
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables bidirectional A2A communication between AI coding agents, allowing Claude Code to reach out to and be reached by other A2A agents via an MCP bridge and an HTTP server.
    20
    MIT

Latest Blog Posts

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/constripacity/Claude-Bridge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server