Claude Bridge
Claude Bridge
독립 코딩 에이전트를 위한 로컬 우선(local-first), 크로스 머신 메시지 버스.
Claude Bridge는 서로 다른 머신에서 실행되는 코딩 에이전트 세션이 명명된 채널을 통해 순서가 보장된 메시지를 교환할 수 있게 해줍니다. 릴레이는 자체 호스팅되며, 기본적으로 SQLite를 사용하고, MCP, 소형 JSON API, 대시보드, 터미널 UI를 제공합니다.
모델 API를 호출하지 않으며, 에이전트가 파일시스템이나 프로세스를 공유할 필요도 없습니다. Claude Code가 이 프로젝트의 동기가 되었지만, 핵심은 MCP 기반이며 Anthropic에 결합되어 있지 않습니다.
포워드 빌드 공지: 이 소스 트리는
1.2.0.dev1로 식별됩니다. 최신 안정 PyPI 릴리스를 넘어선 개발 빌드입니다. 안정 배포를 교체하기 전에 변경 로그와 0.9에서 1.2로의 마이그레이션 가이드를 검토하세요.
왜 사용하나요?
Windows, macOS, Linux 또는 원격 호스트의 에이전트를 각자의 세션에서 유지하세요.
원격 셸 접근 없이 작업, 결과, 검토 요청, 아티팩트 참조를 보내세요.
영구 기록과 소비자 커서를 사용하여 클라이언트 재시작 후 복구하세요.
멱등성 키로 안전하게 재전송하세요.
MCP, 브라우저 대시보드, TUI 또는 REST를 통해 동일한 릴레이를 관찰하세요.
명시적 보안 정책과 함께 로컬 또는 사설 LAN/tailnet에서 실행하세요.
Claude Bridge는 전송 계층이지 자율 오케스트레이터가 아닙니다. 메시지를 수신한다고 해서 에이전트가 이를 실행할 권한이 부여되는 것은 아닙니다.
Related MCP server: neighbors
전송 방식
인터페이스 | 경로 또는 명령어 | 용도 |
MCP Streamable HTTP |
| 권장 원격 MCP 전송 방식 |
MCP stdio |
| 로컬 하위 프로세스 전송 방식 |
레거시 MCP HTTP+SSE |
| 마이그레이션 중 기존 구성 |
채널 이벤트 SSE |
| 대시보드, TUI 및 사용자 지정 리스너; MCP 아님 |
JSON 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 프로세스는 해당 영구 아웃박스를 폴링하므로(기본 500ms), 별도의 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-bridge 및 claude_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크로스 머신 서버
네트워크 바인딩은 의도적으로 실패 시 폐쇄(fail-closed) 방식입니다. 클라이언트가 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 값은
URL 스킴이나 경로가 없는 호스트 이름 또는 IP 주소이며, 이 옵션은 반복할 수 있습니다.
두 가지 독립적인 검사가 필요합니다:
--trusted-host는 허용되는 HTTP Host 이름을 제어합니다; 그리고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:latestSQLite 데이터베이스는 /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 도구
도구 | 용도 |
| 레거시 텍스트 또는 프로토콜 v1 메시지 전송; 멱등 재시도 지원 |
| 메시지 커서 또는 영구 소비자 커서를 사용하여 제한된 페이지 읽기 |
| 빠른 폴링 없이 최대 55초 동안 새 메시지 대기 |
| 소비자의 채널 범위 커서를 단조롭게 전진 |
| 활성 채널 및 카운트 나열 |
| 브리지 상태 및 기능 확인 |
| 채널 전반의 최근 활동 요약 |
| 한 채널의 모든 메시지(및 작업) 삭제 |
| 채널의 작업 큐에 작업 추가(독점적; 한 번만 클레임됨) |
| 임대와 함께 다음 작업을 원자적으로 클레임; |
| 클레임된 작업을 |
| 클레임된 작업 실패 처리 — 백오프로 재큐 또는 데드레터 |
| 채널의 큐 검사: 상태별 카운트 및 작업 목록 |
도구 결과에는 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"
}
)워커는 지속된 소비자 ID를 사용하여 대기합니다:
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_id와 correlation_id를 사용하여 반환 채널에 결과를
보낼 수 있습니다. 확인(acknowledgement)은 최소 한 번 이상(at-least-once) 처리
의미론을 제공합니다. 임의의 외부 부작용을 정확히 한 번(exactly once)으로
만들지는 않습니다.
전체 봉투, 재시도, 커서 및 보존 계약은 프로토콜 참조에 문서화되어 있습니다.
작업 큐(작업 분배)
메시지는 팬아웃됩니다 — 모든 소비자 커서가 모든 메시지를 봅니다. 작업 큐는 그 반대입니다: 각 작업은 정확히 한 명의 워커에 의해 클레임됩니다. 워커 에이전트 집단을 한 채널에 연결하면 이중 처리 없이 작업을 공유합니다.
오케스트레이터는 작업을 큐에 넣습니다(멱등성 키로 중복 제거 안전):
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에 접촉하지
않습니다. 정적 애플리케이션에는 제한적인 Content Security Policy가 적용됩니다.
TUI 실행:
python -m claude_bridge.tui
python -m claude_bridge.tui \
--url http://100.64.0.10:8765 \
--sender macTUI는 환경에서 CLAUDE_BRIDGE_AUTH_TOKEN을 읽으므로 비밀이 프로세스
명령줄에 노출되지 않습니다.
핵심 HTTP 엔드포인트:
엔드포인트 | 용도 |
| 최소한의 인증 없는 상태 확인 |
| 채널 수, 발신자, 버전 및 가동 시간 |
| 제한된 채널 기록 |
| 단일 메시지 상세 정보 |
| 소비자 또는 메시지 커서를 사용한 제한된 롱폴 |
| 선택적 멱등성과 함께 레거시 텍스트 또는 프로토콜 v1 메시지 전송 |
| 하나의 영구 소비자 커서 전진 |
| 한 채널 지우기 |
| 불투명 대시보드 세션 검사, 생성 또는 폐기 |
| 활성화된 경우 최근 감사 이벤트 |
| 제한된 리플레이가 있는 실시간 이벤트 스트림 |
이벤트 스트림은 버퍼가 가득 차면 느린 구독자를 놓칠 수 있습니다. 영구 기록은
권위 있는 소스로 유지됩니다. 마지막 메시지 ID로 재연결하고 cursor_stale 또는
replay_truncated를 존중하여 기록을 명시적으로 가져오세요.
인증 및 브라우저 경계
CLAUDE_BRIDGE_AUTH_TOKEN, --auth-token-file 또는 --auth-token을 설정하세요.
리터럴 CLI 형식은 프로세스 목록에 나타날 수 있습니다. 환경 변수 또는
권한이 제한된 파일을 선호합니다.
활성화되면 보호된 REST, MCP 및 이벤트 엔드포인트는 다음을 요구합니다:
Authorization: Bearer <token>/status는 공개 상태로 유지되며 의도적으로 최소한의 정보만 포함합니다. 정적 대시보드 셸에는 접근할 수 있지만, 보호된 데이터 API는 여전히 토큰을 요구합니다.
안전하지 않은 브라우저 변형은 Origin으로 제한되고, JSON 엔드포인트는 JSON 미디어 타입을 요구하며, Host 헤더는 허용 목록에 등록됩니다. 추가 브라우저 Origin은 반복 가능한 --cors-origin 플래그로 독립적으로 구성됩니다.
대시보드는 Bearer 토큰을 POST /api/session에 한 번 제출하고 단기 유효한 불투명 HttpOnly, SameSite=Strict 쿠키를 받습니다. 마스터 토큰은 로컬 저장소나 URL에 기록되지 않습니다. 이벤트 스트림은 해당 쿠키로 인증하며, ?token= 쿼리 인증은 거부됩니다. 로그아웃하면 세션이 폐기되고, 서버를 재시작하면 메모리 내 모든 대시보드 세션이 무효화됩니다.
구성
CLI/환경 변수 | 기본값 | 용도 |
|
| HTTP 바인드 인터페이스 |
|
| HTTP 포트 |
|
| SQLite 경로 |
| 루프백 호스트 | 허용되는 Host 이름/IP |
| 설정 안 됨 | 공유 Bearer 인증 |
| 꺼짐 | 명시적 비루프백 인증 우회 |
| 동일 출처만 | 추가 브라우저 Origin(다른 localhost 포트 포함) |
| 설정 안 됨 | 직접 HTTPS 리스너 |
|
| N일보다 오래된 메시지 삭제, |
| 꺼짐 | 보안 관련 이벤트 기록 |
|
| 감사 기록 보존 기한 |
|
| 불투명 대시보드 세션 수명 |
|
| 프로세스 간 아웃박스 폴링 간격 |
|
| 전달된 아웃박스 레코드 보존 |
| 꺼짐 | 브라우저 자산을 마운트하지 않음 |
|
| 최대 HTTP 요청 본문 |
|
| 최대 인코딩 메시지 |
|
| 총 채널 이벤트 구독자 수 |
|
| 단일 채널의 구독자 수 |
|
| 재연결 백로그 상한 |
| 꺼짐 | 무상태 Streamable HTTP 세션 사용 |
일치하는 플래그가 있으면 CLI 값이 우선합니다. 잘못된 숫자 또는 부울 환경 변수 값은 시작 중 구성 오류로 실패합니다.
영속성 및 운영 제한
SQLite는 WAL 모드로 실행되며 개인용 또는 소규모 팀 릴레이에 적합합니다.
서버는 현재 다중 노드 또는 고가용성 메시지 브로커가 아닙니다.
하나의 HTTP 워커와 협력하는 stdio 프로세스가 WAL 데이터베이스를 공유할 수 있으며, 영속 아웃박스가 실시간 이벤트를 전파합니다. 이는 다중 노드 또는 엔터프라이즈 브로커가 아닌 소규모 SQLite 설계로 유지됩니다.
보존 정책은 오래된 커서를 무효화할 수 있습니다. 중요한 작업 산출물은 브리지 기록에만 두지 말고 저장소나 아티팩트 저장소에 보관해야 합니다.
공유 Bearer 토큰은 신원 또는 채널별 권한을 제공하지 않습니다.
재현 가능한 벤치마크와 환경 없이는 벤치마크 주장을 하지 않습니다.
향후 운영 및 권한 부여 마일스톤은 로드맵에 있습니다.
개발
python -m pip install -e ".[dev]"
ruff check claude_bridge tests
pytest -v
python -m buildCI는 Linux에서 Python 3.10–3.13을 테스트하고 Windows와 macOS에서 현재 버전 스모크 작업을 실행합니다. 실제 소켓 MCP 테스트는 공식 SDK를 통한 초기화, 도구 목록, 전송, 수신, 대기 및 확인을 다룹니다. 별도의 작업이 sdist와 wheel을 빌드하고, 메타데이터를 검증하며, 각 아티팩트를 깨끗한 환경에 설치하고 CLI를 확인합니다.
새 기능을 제안하기 전에 기여 가이드를 읽으십시오. 취약점의 경우 공개 이슈가 아닌 보안 정책의 비공개 프로세스를 사용하십시오.
로드맵
현재 순서는 다음과 같습니다:
1.2— 보안 Streamable HTTP, 구조화된 메시지, 멱등성, 영속 소비자;1.3— 네이티브 클라이언트 진단 및 실험적 Claude Channels 컴패니언;1.4— 개별 신원, 범위, ACL, 할당량, 토큰 순환;1.5— 관측 가능성, 운영 도구, 선택적 확장 가능 백엔드; 그리고2.0— 실제 사용 수요가 있다면 페더레이션 및 선택적 A2A 어댑터.
각 마일스톤과 비목표는 로드맵에 정의되어 있습니다.
라이선스
MIT — 라이선스를 참조하십시오.
Constripacity가 설립하고 유지 관리합니다.
Available Tools
13 toolsbridge_ackAIdempotent
Acknowledge a message for a named consumer. The durable cursor advances monotonically and is scoped to this channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| metadata | No | ||
| message_id | Yes | ||
| consumer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_channelsARead-only
List all active channels and their message counts.
| 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=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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| consumer | Yes | ||
| wait_seconds | No | ||
| lease_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_clearADestructiveIdempotent
Clear all messages from a specific channel. Useful for resetting state.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| result | No | Optional structured JSON result | |
| channel | Yes | ||
| task_id | Yes | ||
| lease_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| content | No | String task payload | |
| payload | No | Structured JSON task payload | |
| priority | No | Higher priority is claimed sooner | |
| enqueued_by | No | ||
| max_attempts | No | ||
| delay_seconds | No | Delay before the task becomes claimable | |
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | Optional failure detail | |
| channel | Yes | ||
| requeue | No | ||
| task_id | Yes | ||
| lease_token | Yes | ||
| retry_delay_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_pingARead-only
Check if the bridge server is alive and get a status 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?
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.
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.
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.
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.
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.
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_receiveARead-only
Read durable messages. Pass since_id for an explicit cursor or consumer_id to resume from that consumer's last acknowledged message.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel | Yes | ||
| since_id | No | ||
| consumer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | ||
| channel | Yes | ||
| content | No | Legacy text or JSON | |
| message | No | Structured protocol-v1 envelope | |
| idempotency_key | No |
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=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.
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.
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.
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.
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.
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_statusARead-only
Get the last N messages from ALL channels at once. Useful for getting a full picture of what's happening across agents.
| Name | Required | Description | Default |
|---|---|---|---|
| per_channel | No | How many recent messages to show per channel (default: 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_tasksBRead-only
Inspect a channel's task queue: per-status counts plus a recent task list. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_waitARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel | Yes | ||
| since_id | No | ||
| consumer_id | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
- Added
bridge_claim - Added
bridge_complete - Added
bridge_enqueue - Added
bridge_fail - Added
bridge_tasks
8 tool updates
v1.3.0- Added
bridge_ack - Changed
bridge_channels2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
bridge_clear4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / channel / descriptionRemoved value: -"Channel to clear" - added
Input schema / properties / channel / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
bridge_ping2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
bridge_receive10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / channel / descriptionRemoved value: -"Channel to read from" - added
Input schema / properties / channel / minLengthAdded value: +1 - added
Input schema / properties / consumer_idAdded value: +{ + "minLength": 1, + "type": "string" +} - removed
Input schema / properties / limit / descriptionRemoved value: -"Max messages to return (default: 20)" - added
Input schema / properties / limit / maximumAdded value: +500 - added
Input schema / properties / limit / minimumAdded value: +1 - removed
Input schema / properties / since_id / descriptionRemoved value: -"Only return messages after this message ID (exclusive). Get from a previous receive." - added
Input schema / properties / since_id / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
bridge_send13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / oneOfAdded value: +[ + { + "not": { + "required": [ + "message" + ] + }, + "required": [ + "content" + ] + }, + { + "not": { + "required": [ + "content" + ] + }, + "required": [ + "message" + ] + } +] - removed
Input schema / properties / channel / descriptionRemoved value: -"Channel name, e.g. 'demo:orchestrator'" - added
Input schema / properties / channel / maxLengthAdded value: +256 - added
Input schema / properties / channel / minLengthAdded value: +1 - changed
Input schema / properties / content / descriptionPrevious value: -"Message content — can be plain text or JSON"New value: +"Legacy text or JSON" - added
Input schema / properties / idempotency_keyAdded value: +{ + "maxLength": 256, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "additionalProperties": true, + "description": "Structured protocol-v1 envelope", + "properties": { + "content": {}, + "schema_version": { + "const": 1 + }, + "type": { + "type": "string" + } + }, + "required": [ + "schema_version", + "type", + "content" + ], + "type": "object" +} - removed
Input schema / properties / sender / descriptionRemoved value: -"Your identity, e.g. 'windows' or 'mac'" - added
Input schema / properties / sender / maxLengthAdded value: +128 - added
Input schema / properties / sender / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "channel", - "sender", - "content" -]New value: +[ + "channel", + "sender" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
bridge_status2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Added
bridge_wait
6 tool updates
v1.0.0- First observed
bridge_channels - First observed
bridge_clear - First observed
bridge_ping - First observed
bridge_receive - First observed
bridge_send - First observed
bridge_status
TDQS
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.
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).
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.
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
Related MCP Connectors
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables real-time communication between Claude Code instances across multiple machines via WebSocket, allowing context sharing, task handoffs, and coordination between sessions.6,7703MIT
- AlicenseNot gradedqualityBmaintenanceEnables multiple Claude Code sessions to communicate and coordinate through broadcast and peer-to-peer messaging.21MIT
- AlicenseAqualityDmaintenanceMCP 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.853MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.20MIT
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/constripacity/Claude-Bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server