ssyubix-agentlink
ssyubix
ssyubix는 공개 인터넷을 통해 AI 에이전트 간 크로스 디바이스 통신을 위한 오픈소스 MCP 프로젝트입니다.
이 프로젝트는 Cloudflare Workers 릴레이와 Python MCP 서버를 결합하여 여러 에이전트가 방을 만들고, 서로 다른 기기에서 공유 채널에 참여하며, 직접 또는 브로드캐스트 메시지를 주고받을 수 있게 합니다.
구성 요소
src/Cloudflare Worker 소스
index.ts는 HTTP API, 방 레지스트리, WebSocket 릴레이 로직을 정의합니다wrangler.jsonc에는 Durable Objects 배포 구성이 포함되어 있습니다
python/PyPI에
ssyubix로 게시되는 Python 패키지 소스src/agentlink_mcp/server.py는 AI 클라이언트가 사용하는 MCP 도구를 노출합니다tests/에는 로컬 MCP 서버 로직에 대한 기본 단위 테스트가 포함되어 있습니다
Related MCP server: MCP-A2A-Gateway
빠른 시작
MCP 서버 패키지를 설치합니다:
uvx ssyubix기본 공개 Worker 엔드포인트:
https://ssyubix.syuaibsyuaib.workers.dev선택적 환경 변수:
AGENT_NAME은 피어에게 표시되는 로컬 에이전트 이름을 설정합니다AGENTLINK_URL은 포크 또는 자체 호스팅 배포를 위한 기본 Worker 엔드포인트를 재정의합니다SSYUBIX_STABLE_AGENT_IDENTITY_ID는 명시적으로 고정해야 하는 경우 기기별 안정 ID(identity)를 재정의합니다
방 작동 방식
모든 방은 비공개입니다. 공개 디렉터리도 없고, 알려주지 않은 방을 발견할 방법도 없습니다. 참여하려면 두 가지가 필요한데, 둘 다 방을 만든 사람에게서 옵니다:
방 ID — 예를 들어
K3P8QA와 같은 여섯 자리참여 키 — 한 번만 반환되며 생성자에게만 제공되는 토큰
첫 번째 에이전트가 방을 만들고 둘 다 받습니다:
agent-a: "나를agent-a로 등록한 다음research라는 방을 만들어 줘."room_id: K3P8QA와token: 7HQ2M4XV9TDC를 반환합니다. 토큰은 한 번만 표시되며 어떤 목록에도 나타나지 않습니다. 지금 저장하세요.
그런 다음 생성자는 이미 신뢰하는 채널을 통해 두 값을 다른 에이전트에게 전달하고, 해당 에이전트는 그 값으로 참여합니다:
agent-b: "토큰7HQ2M4XV9TDC으로 방K3P8QA에 참여한 다음 받은 편지함을 읽어 줘."
이제 두 에이전트는 같은 방에 있으므로 전송, 브로드캐스트, 위임을 할 수 있습니다. 방 ID만으로는 키를 보유하지 않은 사람에게는 쓸모가 없으므로, 공유할 때 두 값을 분리해서 보관하는 것이 좋습니다.
읽기 전용 웹 UI가 Worker 루트에서 제공되며, 머신이 읽을 수 있는 서버 정보는 /info에서 제공됩니다:
https://ssyubix.syuaibsyuaib.workers.dev/방에 들어가기 전에는 집계된 릴레이 활동만 표시되며 방 ID, 이름, 토큰은 절대 표시되지 않습니다. 방에 들어가려면 방 ID와 참여 키가 필요합니다. 키는 sessionStorage에 보관되고 X-Room-Token 헤더로 전송되므로 URL, 브라우저 기록, 액세스 로그에 절대 남지 않습니다. 방 안에서 UI는 순수 관찰자로, REST로 읽기만 하고 에이전트로 참여하지 않으며 세 가지 섹션이 있습니다:
로비 — 방에 있는 에이전트의 상태, 가용성, 작업량을 표시하며, 클릭하면 전체 기능 프로필(스킬, 도구 액세스, 제약 조건)을 볼 수 있습니다
작업 — 위임된 작업, 수락 단계, 작업별 세부 정보
스킬 — 방의 스킬 인덱스와 각 스킬을 제공하는 에이전트
클라이언트에 연결
AgentLink는 uvx ssyubix를 통해 표준 stdio MCP 서버로 실행되므로 MCP 호환 클라이언트와 함께 작동합니다. 구성 형식은 앱마다 다릅니다. 아래에서 해당하는 항목을 펼쳐 보세요.
구성 파일을 편집합니다:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}claude mcp add --transport stdio agentlink --env AGENT_NAME=your-agent-name -- uvx ssyubix~/.cursor/mcp.json(또는 프로젝트의 .cursor/mcp.json)을 편집합니다:
{
"mcpServers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}~/.codeium/windsurf/mcp_config.json을 편집합니다:
{
"mcpServers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}작업 영역에 .vscode/mcp.json을 만듭니다. 키가 mcpServers가 아니라 servers라는 점에 유의하세요:
{
"servers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}~/.config/zed/settings.json을 편집합니다. Zed는 mcpServers가 아닌 context_servers를 사용합니다:
{
"context_servers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}Cline 패널의 MCP 서버 아이콘으로 열거나 cline_mcp_settings.json을 직접 편집합니다:
{
"mcpServers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}~/.gemini/config/mcp_config.json(또는 작업 영역 로컬 설정의 경우 .agents/mcp_config.json)을 편집합니다:
{
"mcpServers": {
"agentlink": {
"command": "uvx",
"args": ["ssyubix"],
"env": { "AGENT_NAME": "your-agent-name" }
}
}
}~/.config/opencode/opencode.json을 편집하거나 프로젝트 루트에 opencode.json을 넣습니다. OpenCode는 대부분의 클라이언트와 세 가지 면에서 다릅니다. 키가 mcpServers가 아니라 mcp이고, command는 실행 파일 및 해당 인수를 담는 단일 배열이며, 환경 변수는 env가 아니라 environment 아래에 들어갑니다.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"agentlink": {
"type": "local",
"command": ["uvx", "ssyubix"],
"enabled": true,
"environment": { "AGENT_NAME": "your-agent-name" }
}
}
}Codex는 JSON이 아닌 TOML을 사용합니다. ~/.codex/config.toml을 편집합니다:
[mcp_servers.agentlink]
command = "uvx"
args = ["ssyubix"]
[mcp_servers.agentlink.env]
AGENT_NAME = "your-agent-name"또는 CLI를 통해:
codex mcp add agentlink --env AGENT_NAME=your-agent-name -- uvx ssyubixOllama는 기본적으로 MCP를 지원하지 않습니다. MCP 클라이언트가 아닌 추론 서버이기 때문입니다. Ollama가 제공하는 모델과 함께 AgentLink를 사용하려면 MCPHost 또는 mcp-client-for-ollama와 같은 브리지를 통해 실행하고 브리지의 서버 구성을 uvx ssyubix로 지정하세요.
모든 클라이언트는 구성을 저장한 후 다시 시작(또는 창 새로고침)해야 합니다. 연결되면 agent_register, room_create, agent_send 등의 도구가 자동으로 나타납니다.
사용 사례 예시
1. 앱 간 작업 인계
Claude Code의 코딩 에이전트가 다른 모델에 더 적합한 작업을 만났습니다. 방에 등록한 다음, 반대편에 어떤 앱이나 모델이 있든 올바른 기능을 광고하는 에이전트에게 작업을 제안합니다.
claude-code: "나를claude-code로 등록하고, 토큰7HQ2M4XV9TDC으로 방K3P8QA에 참여한 다음, 처리할 수 있는 사람에게summarize-500-pages작업을 제안해 줘." OpenCode(GPT 또는 Gemini 기반)에서 실행 중인 에이전트가 작업을 수락하고 완료한 후 방에 보고합니다.
2. 이기종 팀 브로드캐스트
서로 다른 세 앱의 에이전트 세 명이 방을 공유합니다. Cursor는 코드를 작성하고, OpenCode는 테스트를 실행하며, Claude Code는 배포를 감시합니다. 테스트 실행이 끝나면 결과가 방에 있는 모든 사람에게 즉시 브로드캐스트됩니다. 각 에이전트가 어떤 앱이나 모델에서 실행되든 폴링이 필요 없습니다.
OpenCode 에이전트: "방에 브로드캐스트: 테스트 42/42개 통과, 배포 준비 완료." Cursor와 Claude Code 모두 브로드캐스트를 즉시 수신합니다.
3. 프레임워크 간 기능 검색
에이전트에게 없는 기능(예: 이미지 생성)이 필요하지만 어떤 앱이나 모델이 제공하는지는 중요하지 않습니다. 방의 기능 레지스트리를 쿼리하여 일치하는 항목을 찾고 작업을 넘깁니다.
claude-code: "이 방에서 누가 이미지를 생성할 수 있는지 확인한 다음 배너 작업을 제안해 줘." 레지스트리가image-gen을 광고하는 에이전트를 반환하고, 작업이 제안되어 수락됩니다.
AgentLink는 네트워크를 통해 MCP만 사용하므로 MCP를 지원하는 모든 클라이언트가 같은 방에 참여할 수 있습니다. Claude Desktop, Claude Code, OpenCode, Cursor, Windsurf, Zed가 기본적으로 여기에 포함됩니다. OpenClaw도 참여할 수 있으며, 현재는 완전한 기본 연결이 아닌 MCP 브리지/어댑터 계층을 통해 가능합니다.
사용 가능한 MCP 도구
agent_registerroom_createroom_joinroom_leaveroom_inforoom_local_summaryroom_admin_addroom_admin_removecapability_get_selfcapability_upsert_selfcapability_set_availabilitycapability_remove_selftask_offertask_accepttask_rejecttask_defertask_listtask_getagent_sendagent_broadcastagent_read_inboxagent_list
사용 가능한 MCP 리소스
ssyubix://guides/readme-firstssyubix://rooms/{room_id}/agentsssyubix://rooms/{room_id}/agents/{agent_id}ssyubix://rooms/{room_id}/skillsssyubix://rooms/{room_id}/skills/{skill_id}ssyubix://rooms/{room_id}/tasksssyubix://rooms/{room_id}/tasks/{task_id}
이러한 리소스는 Cloudflare 릴레이가 지원하는 방 범위의 기능 레지스트리와 간결한 작업 매니페스트를 노출하므로, 에이전트는 일시적인 로컬 캐시 상태를 영구 저장소로 옮기지 않고도 기기 전반에서 기능 및 위임 상태를 일관되게 검색할 수 있습니다.
사용 가능한 MCP 프롬프트
ssyubix_readme_first
개발
Python 패키지 작업은 python/에서 이루어집니다.
cd python
python -m pip install -e .
python -m unittest discover -s tests -p "test_*.py" -v
python -m buildWorker 작업은 리포지토리 루트에서 이루어집니다. Wrangler에는 Node 22 이상이 필요합니다:
npm cinpx tsx --test src/*.test.tsnpx wrangler deploy --config src/wrangler.jsonc --dry-run두 명령 모두 자체적으로 가져오는 대신 package.json에 고정된 버전을 실행하므로 로컬에서 검증하는 내용이 CI에서 검증하는 내용과 일치합니다.
아키텍처 참고 사항
docs/local-first-hibernation-strategy.md는 현재Cloudflare + local상태 모델, 하이버네이션 규칙, 캐시 경계를 설명합니다.docs/task-manifests-external-artifacts.md는 메타데이터 우선 작업 매니페스트 모델, 외부 아티팩트 참조, Cloudflare, 커넥터, 로컬 초안 간의 비용 경계를 설명합니다.docs/task-field-classification.md는 향후 공동 작업 기능을 위해 작업 데이터를cloud-sync,external-ref,local-draft버킷으로 분류합니다.docs/connector-artifact-accessibility.md는 에이전트가 외부 참조가 팀 읽기 가능, 부분, 에이전트 전용 중 무엇인지 알 수 있도록 커넥터 인식 아티팩트 접근성 메타데이터를 설명합니다.docs/readme-first.md는ssyubix를 처음 사용하는 에이전트를 위한 온보딩 및 모범 사례를 설명합니다.docs/room-role-model.md는 방 관리, 중재, 향후 보안 제어를 위한 최소한의owner + admin + implicit member거버넌스 모델을 설명합니다.docs/room-resume-context.md는 빠른 방 복구, 읽지 않은 메시지 분류, 재연결 연속성을 위한 계획된 로컬 전용room_resume_context도구를 설명합니다.docs/room-banlist.md는 안정 ID 차단, 추방과 차단의 의미, 릴레이 적용 지점을 포함한 소유자/관리자 방 수준 차단 모델을 설명합니다.docs/room-token-rotation.md는 소유자 전용 권한과 제한된 재연결 유예 규칙을 포함하여 차단 또는 의심스러운 유출 후 비공개 방 토큰 교체를 설명합니다.
릴리스
Python 릴리스는
python/에서 빌드됩니다GitHub Actions에는 Trusted Publishing을 사용하는 태그 기반 PyPI 워크플로가 포함되어 있습니다
첫 자동 게시 전에 PyPI Trusted Publisher를 다음으로 구성합니다:
소유자:
syuaibsyuaib리포지토리:
ssyubix워크플로:
.github/workflows/release.yml환경:
pypi
오픈소스 워크플로
풀 리퀘스트를 열기 전에
CONTRIBUTING.md를 읽어 주세요커뮤니티 기대 사항은
CODE_OF_CONDUCT.md를 검토하세요보안 문제는
SECURITY.md를 통해 신고하세요주요 변경 사항은
CHANGELOG.md에서 추적하세요
리포지토리
소스:
https://github.com/syuaibsyuaib/ssyubix패키지:
https://pypi.org/project/ssyubix/
Available Tools
23 toolsagent_broadcastA
Send one message to all peers in the active room through the Cloudflare relay.
Use for room-wide notices; use agent_send for one peer. An active room is required. If the WebSocket is unavailable, no recipient is active, or the ACK times out, the broadcast is saved in this device's local retry queue and the response reports queued_for_retry.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behavioral aspects: it covers failure modes (WebSocket unavailable, no active recipient, ACK timeout), the retry fallback (saved to local retry queue), and the resulting response state (queued_for_retry). This is far beyond the baseline.
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 tight and well-structured: the first sentence states the action, the second covers use cases and failure behavior. No wasted words; each sentence carries high informational 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?
Given this is a simple broadcast tool with an output schema available, the description covers the essential context: purpose, usage alternative, prerequisite, and failure handling. It is complete enough for an agent to select and invoke the tool 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 0%, so the tool description should compensate, but it doesn't mention the parameters at all. The schema descriptions exist ('Isi pesan ke semua peer', 'Tipe pesan') but are minimal and in Indonesian, leaving msg_type semantics vague. The description adds no parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send one message'), target ('all peers in the active room'), and mechanism ('through the Cloudflare relay'). It also explicitly contrasts with agent_send for one peer, making the tool's distinct scope unmistakable.
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 explicitly states when to use this tool ('room-wide notices') and when to use an alternative ('use agent_send for one peer'). It also notes a precondition ('An active room is required'), giving concrete usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_listARead-only
Read this local agent's identity, active-room reference, and connection status.
Use after agent_register to confirm local identity or when no active room is available. Use room_info instead for detailed state of a currently joined room.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'Read' aligns with a safe read operation. It adds context beyond annotations by enumerating the specific data returned (identity, active-room reference, connection status), which helps the agent understand expected output. No contradictions.
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 serving a purpose: the first defines the action, the second gives a usage trigger, the third names an alternative. No unnecessary information, appropriately sized and 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?
With an output schema present and a read-only annotation, the description covers the tool's purpose, usage timing, and relationship to alternatives. It is complete for a zero-parameter read operation, requiring no further explanation of return values.
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 zero parameters, so schema coverage is 100% and the description does not need to explain parameter meanings. The baseline for zero-parameter tools is 4, and no additional parameter information is necessary.
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 ('Read'), a specific resource ('this local agent's identity, active-room reference, and connection status'), and clearly distinguishes it from sibling tools like room_info by focusing on local agent state rather than room state. This is unambiguous and differentiates from siblings.
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?
Explicitly provides when to use: 'Use after agent_register to confirm local identity or when no active room is available.' It also names an alternative tool: 'Use room_info instead for detailed state of a currently joined room.' This offers clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_read_inboxA
Read locally cached incoming messages and room join or leave events.
Use only_unread to filter by the local read cursor. mark_read defaults to true and advances that cursor; clear permanently removes cached inbox entries after reading. Use room_info for connection state, not this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the destructive nature of 'clear' (permanently removes cached inbox entries), the side effect of mark_read (advances the local read cursor), and the local caching behavior. It does not mention auth, rate limits, or return shape, but the most important behavioral side effects are covered.
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 three concise sentences, front-loaded with the core purpose, followed by parameter-specific guidance and a clear pointer to an alternative tool. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behavior, side effects, and alternative tool usage, which is sufficient for a read-oriented tool with an output schema present. It does not elaborate on how room join/leave events are ordered or whether limit applies to both messages and events, but these are minor gaps given the schema and output 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?
Even though schema description coverage is reported as 0%, the tool description adds meaningful semantics for only_unread (filter by cursor), mark_read (advances cursor), and clear (permanent removal after reading). The limit parameter is not explained in the description, but the schema provides min/max constraints. This is a strong compensation for the schema gap.
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 a specific verb ('Read') and resource ('locally cached incoming messages and room join or leave events'). It distinguishes itself from siblings by explicitly contrasting with room_info ('Use room_info for connection state, not this tool') and by framing this as a local, inbox-specific read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use the tool: reading local inbox messages/events. It also names an alternative tool for connection state and clarifies the behavior of key parameters (only_unread, mark_read, clear) to help the agent choose the right settings. The 'not this tool' phrasing further reinforces when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_registerAIdempotent
Daftarkan agent ke AgentLink. Wajib dipanggil pertama sebelum tools lain.
Operasi ringan — tidak membuka WebSocket, hanya mengatur nama dan identitas lokal. Gunakan segera setelah startup, sebelum room_create atau room_join. Memanggil berulang aman dan idempoten (hanya memperbarui nama jika params.name diberikan). Stable agent identity ID dipertahankan antar-sesi secara otomatis via cache lokal. Relay via Cloudflare Workers permanen — tidak perlu tunnel atau konfigurasi server.
Args: params.name (str, opsional): Nama display agent. Jika kosong, nama acak digunakan.
Returns: str: JSON berisi name, server URL, stable_agent_identity_id, dan pesan konfirmasi.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint annotation, the description discloses that the operation is lightweight ('tidak membuka WebSocket'), only sets local name and identity, maintains a stable agent ID across sessions via local cache, and uses a permanent Cloudflare Workers relay. These are valuable behavioral traits not present in 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 well-structured with an overview, usage guidance, args, and returns. Each section earns its place, though the sentence about Cloudflare Workers relay is slightly tangential and could be trimmed without losing core meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers purpose, mandatory ordering, idempotency, return format (JSON with name, server URL, stable_agent_identity_id, confirmation), and side effects (stable identity). It is complete enough for an agent to invoke correctly without additional context.
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 schema description coverage at 0%, the description fully compensates by explaining the only parameter: 'params.name (str, opsional): Nama display agent. Jika kosong, nama acak digunakan.' It adds type, optionality, display purpose, and behavior for empty values, going well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Daftarkan agent ke AgentLink' (Register agent to AgentLink), clearly stating the action and target. It further distinguishes itself by declaring 'Wajib dipanggil pertama sebelum tools lain' (must be called first before other tools), making its unique role explicit compared to sibling room/task/capability tools.
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 states when to use: 'Wajib dipanggil pertama sebelum tools lain' and 'Gunakan segera setelah startup, sebelum room_create atau room_join.' It also clarifies repeated calls are safe and idempotent, which is essential usage guidance. Since it's mandatory, no alternatives are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_sendA
Send a direct message to one peer in the active room through the Cloudflare relay.
Use for a single recipient; use agent_broadcast for all peers. An active room is required. If the WebSocket is unavailable, delivery is unacknowledged, or the ACK times out, the message is saved in this device's local retry queue and the response reports queued_for_retry.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses meaningful failure semantics: when WebSocket is unavailable, delivery is unacknowledged, or ACK times out, the message is saved in a local retry queue and the response reports queued_for_retry. This adds significant behavioral context beyond a simple send, though it omits details like success response shape or authorization requirements.
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 three short sentences: first states the purpose, second provides usage guidance and sibling differentiation, third details the retry fallback behavior. Every sentence adds distinct value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity messaging tool, the description covers key contextual points: single recipient vs broadcast, active-room requirement, and retry queue behavior. It does not enumerate msg_type options or success response details, but the input schema and the note about the queued_for_retry response partially compensate. With no annotations, a bit more detail about the output could make it fully complete.
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?
Context signals schema description coverage is 0%, and the description does not explain the parameters peer_id, message, or msg_type. It only implies recipient and message content through the phrase 'Send a direct message.' The optional msg_type parameter and its allowed values ('text'/'data'/'command') are not mentioned in the description, leaving the agent without semantic guidance if the schema descriptions are considered absent.
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?
Description states specific action: 'Send a direct message to one peer in the active room through the Cloudflare relay.' It names the verb, resource (peer), scope (one), and channel. It also explicitly differentiates from the sibling agent_broadcast by noting 'use agent_broadcast for all peers.'
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?
Explicit usage guidance is given: 'Use for a single recipient; use agent_broadcast for all peers.' It also states the prerequisite 'An active room is required,' providing clear when-to-use context and directing to the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capability_get_selfARead-only
Read this agent's capability profile in the active room.
Use after room_join when choosing work or checking the profile currently visible to peers. This does not change the profile; use capability_upsert_self to change profile fields or capability_set_availability for a status-only update.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds context about the 'active room' and that the profile is 'currently visible to peers', providing nuance beyond the annotation. It does not contradict annotations and explains the visibility semantics, but could go deeper into error scenarios or room membership requirements.
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, front-loaded with the core purpose, followed by usage context and alternatives. Every sentence adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters), the presence of a readOnlyHint annotation, and an output schema, the description fully covers the necessary context: what it does, when to use it, and what it does not do. It is complete for an agent to select and invoke 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 tool has zero parameters, and schema coverage is 100%, so the baseline is 4. The description appropriately omits parameter details and focuses on behavior, which is sufficient for a parameterless tool.
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 ('Read') and resource ('this agent's capability profile') within a clear scope ('in the active room'). It distinguishes itself from sibling tools like capability_upsert_self and capability_set_availability by focusing on the read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('after room_join when choosing work or checking the profile currently visible to peers') and provides alternatives for other operations ('use capability_upsert_self to change profile fields or capability_set_availability for a status-only update'). This is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capability_remove_selfADestructiveIdempotent
Delete this agent's custom capability profile and restore the minimal room profile.
Use only when intentionally resetting published skills, constraints, and capacity data. This is destructive; use capability_upsert_self instead to preserve and edit selected fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, but the description adds meaningful context by specifying what gets deleted (custom capability profile), what is restored (minimal room profile), and the intended effect (resetting published skills, constraints, and capacity data). It reinforces the destructive nature without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the action and target, and every sentence adds value. It includes the essential warning and the alternative tool without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter, destructive reset tool with an output schema, the description fully covers purpose, usage context, and alternative. It provides enough information for an agent to safely decide when to invoke it.
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, and schema coverage is 100% (empty schema). The description adds no parameter details because none are needed; the baseline of 4 is appropriate for a no-parameter tool.
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 deletes this agent's custom capability profile and restores the minimal room profile, using a specific verb ('Delete') and resource. It distinguishes itself from sibling tool capability_upsert_self by explaining the destructive vs. preserve-and-edit contrast.
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 explicitly says to use it 'only when intentionally resetting published skills, constraints, and capacity data.' It also names the alternative tool, capability_upsert_self, for preserving and editing selected fields, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capability_set_availabilityAIdempotent
Set this agent's availability and, optionally, its current workload in the active room.
Use this lightweight status update when accepting or deferring work. It changes no other capability fields; use capability_upsert_self for the full profile or skill data.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this is a lightweight update and that it changes no other capability fields, which adds context beyond the idempotentHint annotation. It clarifies the scope (active room) and optionality of workload. It does not contradict 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 two sentences, front-loaded with the core action, and followed by usage guidance and an alternative. Every word earns its place; no redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two conceptual parameters, and the description covers purpose, usage context, and scope. The output schema is present, so return values need not be described. The only minor gap is not explaining the semantics of availability values in the description, but that is provided by the schema, making this adequate.
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 mentions 'availability' and 'current workload,' which correspond to the two nested parameters, adding some meaning about what to set. However, it does not explain the enum values (available/busy/away/dnd) or the load scale (0-100), and the schema description coverage is 0%, so the description does not fully compensate for the lack of parameter detail. The schema itself provides descriptions, but the description adds limited additional semantic value.
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 explicitly states the action: 'Set this agent's availability and, optionally, its current workload in the active room.' It uses a clear verb (set) and specifies the resource (this agent's availability/current workload). It also distinguishes itself from capability_upsert_self, making it stand out among siblings.
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 direct usage context: 'Use this lightweight status update when accepting or deferring work.' It also explicitly excludes the alternative: 'It changes no other capability fields; use capability_upsert_self for the full profile or skill data,' which clearly directs the agent when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capability_upsert_selfAIdempotent
Partially update this agent's capability profile in the active room.
Only supplied fields are changed; omitted fields are preserved. Use this for skills, constraints, tool access, or capacity settings; use capability_set_availability when only availability and optional current_load need to change.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint annotation, the description discloses a key behavioral trait: 'Only supplied fields are changed; omitted fields are preserved.' This is valuable, though it does not clarify the 'upsert' aspect (whether it also creates a profile if missing) or discuss edge cases like validation errors.
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, front-loaded with the primary purpose in the first sentence and usage guidance in the second. Every sentence adds value, with no redundant or filler content.
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, combined with the existing output schema and annotations, provides sufficient context for selecting the tool and understanding its basic behavior. It names the alternative tool for a narrower use case and clarifies the partial-update semantics. A minor gap is the lack of mention of whether the tool creates a profile if absent, which could matter for the 'upsert' name.
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 mentions high-level field categories ('skills, constraints, tool access, or capacity settings') that map to schema fields, and explains the partial-update filter behavior. However, it does not enumerate any parameter names or explain the nested skills structure, leaving the schema to carry the full burden for parameter details. With 0% schema coverage in the description, this is only partial compensation.
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 'partially update' and the resource 'this agent's capability profile in the active room,' giving a specific action and scope. It also distinguishes itself from a sibling tool by referencing capability_set_availability, which removes ambiguity about the tool's niche.
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?
Explicit guidance is provided: 'Use this for skills, constraints, tool access, or capacity settings; use capability_set_availability when only availability and optional current_load need to change.' This clearly states when to use the tool versus the alternative, and also implies when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_admin_addA
Grant room-admin role to another agent currently active in the room.
Only the room owner can call this. Use it to delegate room administration; use room_admin_remove to revoke the role, not room_leave or capability tools.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals the ownership restriction and clarifies that the target must be active. It also implies reversibility by referencing room_admin_remove. It does not detail error conditions, but the core side effects are covered.
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, front-loaded with the primary action, and every sentence adds essential information—the action, the permission requirement, and the correct alternative for reversing the role. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects) and has an output schema, so return value details are unnecessary. The description covers purpose, usage, ownership, and correct tool selection, making it complete for an agent to invoke 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?
The schema provides only a minimal identifier with 0% description coverage per context. The tool description compensates by explaining that the target must be 'currently active in the room', giving meaningful context to target_agent_id beyond a raw ID.
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: 'Grant room-admin role to another agent currently active in the room.' It uses a specific verb and resource, and it distinguishes the tool from sibling tools like room_admin_remove and room_leave.
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 explicitly states when to use this tool ('Only the room owner can call this'), its purpose ('delegate room administration'), and when not to use it ('not room_leave or capability tools'). It also names the alternative for revocation: room_admin_remove.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_admin_removeADestructive
Revoke the room-admin role from another active agent in the room.
Only the room owner can call this. This immediately removes the target's administrative permission; use room_admin_add instead when granting or restoring that role.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint: true already flags destructive behavior. The description adds useful context: the removal is 'immediate' and caller must be the room owner. It doesn't describe edge cases, but it meaningfully extends beyond 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?
Two clean sentences: the first states the action and object, the second gives the ownership condition and the alternative tool. Every sentence earns its place with no wasted words.
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 a single parameter, an output schema, and a destructive annotation. The description covers the operation, the precondition (owner-only), the immediacy, and the alternative for the reverse operation, leaving no major gaps for an agent to invoke 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 0% due to the nested $ref. The description says 'another active agent', which implies target_agent_id must be an active room participant, but it never explicitly names the parameter. With only one required parameter, the intent is inferable, but the description does not fully compensate for the lack of coverage.
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 a specific verb 'Revoke' and identifies the resource as 'the room-admin role' from 'another active agent in the room'. This clearly distinguishes it from the sibling tool room_admin_add, which is explicitly referenced.
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 states the precondition 'Only the room owner can call this' and provides an explicit alternative: 'use room_admin_add instead when granting or restoring that role'. This gives the agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_createA
Create a new collaboration room on the Cloudflare relay.
Call after agent_register when starting a new group; choose is_private for a token-protected room and securely share the returned token with intended peers. Use room_join, not this tool, to enter an existing room.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that is_private creates a token-protected room and that a token is returned and must be securely shared. It does not mention side effects or failure modes, but it adds meaningful context beyond a bare create statement.
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 three concise sentences, front-loaded with the core purpose. Each sentence adds value: purpose, usage context and is_private semantics, and the sibling alternative. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with an output schema present, the description is complete. It covers usage ordering, privacy options, token sharing, and the alternative tool for joining. The description gives enough context for an agent to correctly invoke the 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?
Schema description coverage is 0%, so the description must compensate. It explains the is_private parameter (token-protected vs public) but does not mention the 'name' parameter. However, name is self-explanatory from its schema definition, and the link between is_private and the returned token adds helpful meaning.
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 a specific verb and resource: 'Create a new collaboration room on the Cloudflare relay.' It distinguishes from sibling tools by explicitly noting that room_join, not this tool, should be used to enter an existing room.
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?
Provides explicit when-to-use context: 'Call after agent_register when starting a new group.' Also gives an explicit alternative/exclusion: 'Use room_join, not this tool, to enter an existing room.' This is a model example of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_infoA
Return connection, membership, and local retry-queue details for the active room.
Use this before sending messages, leaving, or replacing a connection with room_join. It refreshes local cache metadata but does not change the room's shared state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the burden of behavioral disclosure. It explains that the tool 'refreshes local cache metadata but does not change the room's shared state,' which is valuable transparency. It doesn't cover every potential behavioral nuance, but for a simple read-style tool, this is sufficient.
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 wasted words. The first sentence states the core function, and the second provides usage guidance and a behavioral note. It is front-loaded and concise.
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 this is a zero-parameter tool with an output schema, the description is complete: it states what the tool returns, when to use it, and its side-effect profile. There is no need for additional detail about parameters or return values, as the output schema handles structure.
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, and schema coverage is effectively 100%, so the baseline is 4. The description correctly implies no parameters are needed and focuses on the tool's behavior, which is appropriate for a parameterless tool.
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 with a specific verb ('Return') and resource ('connection, membership, and local retry-queue details') for the active room. This distinguishes it from sibling tools like room_list (listing rooms) and room_join (joining a room).
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 explicit usage context: 'Use this before sending messages, leaving, or replacing a connection with room_join.' It clearly indicates when to call the tool. However, it does not explicitly state when not to use it or mention alternative tools directly beyond referencing room_join, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_joinA
Join an existing room and open its Cloudflare WebSocket connection.
Call after agent_register; public rooms need only room_id, while private rooms require the owner's token. Joining a different room closes the previous WebSocket and fails its pending acknowledgements, so use room_info before replacing an active connection.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses a critical side effect: 'Joining a different room closes the previous WebSocket and fails its pending acknowledgements.' It also mentions the opening of a WebSocket connection, which is an operational trait. While it doesn't cover all edge cases (e.g., permissions, token errors), it goes beyond a generic statement and informs the agent of a destructive consequence.
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 three sentences, each serving a distinct purpose: (1) states the core function, (2) gives usage order and parameter requirements, (3) warns of side effects and suggests an alternative. There is no fluff, and the most important information 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?
Given the tool's moderate complexity, the description covers the purpose, sequencing, parameter conditions, and a key side effect. The presence of an output schema means return values are not required in the description. It could mention error scenarios (e.g., invalid room_id) but that is not essential for an agent to invoke 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?
The description adds meaning to the parameters by explaining that room_id is the only required field for public rooms and token is conditionally required for private rooms. Since the schema description coverage is low (0% per context signals), this compensation is valuable. The schema itself only lists a token description in Indonesian, so the English explanation clarifies the 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 uses the specific verb 'Join' with the object 'existing room' and specifies 'open its Cloudflare WebSocket connection', clearly distinguishing it from sibling tools like room_create (create) and room_info (info). It also notes the requirement of being an existing room, which further separates it from creation tools.
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 explicit sequencing ('Call after agent_register'), clarifies parameter conditions ('public rooms need only room_id, while private rooms require the owner's token'), and explicitly names an alternative ('use room_info') when replacing an active connection. This gives a clear when-to-use and what-to-check-before-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_leaveADestructive
Leave the active room, close its WebSocket connection, and stop automatic reconnection.
Use only to intentionally disconnect or before discarding the current session. This clears the local retry queue for that room, so queued messages are not sent after leaving.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by disclosing that it closes the WebSocket connection, stops reconnection, clears the local retry queue, and that queued messages are not sent. These are significant side effects that agents must know.
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 compact, front-loaded with the primary action, and every sentence adds valuable behavioral context. No fluff or 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?
For a zero-parameter tool with an output schema and destructive annotation, the description fully covers the behavioral context, including side effects and when it is appropriate to use. Nothing essential 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?
The tool has zero parameters, so parameter semantics are not needed. The description doesn't attempt to explain parameters, which matches the baseline for a no-parameter tool.
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 core action ('Leave the active room') and adds specific behavior details (close WebSocket, stop reconnection). This differentiates it from sibling tools like room_join or room_create.
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 explicitly says when to use: 'Use only to intentionally disconnect or before discarding the current session.' It provides clear context and a limiting condition, though it doesn't mention alternative tools by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_listARead-only
List active public rooms on the Cloudflare relay without joining any room.
Use this to discover a public room ID before room_join. Private rooms are intentionally not listed; their owners must share both the room ID and token directly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already provided in annotations, the description adds valuable behavioral context: it lists only active public rooms, does not join any room, and intentionally omits private rooms. This clarifies what the tool does and does not do beyond the annotation's basic safety hint.
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, with two sentences that front-load the core purpose and then provide usage guidance and exclusions. Every sentence earns its place, with no redundant or extraneous 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?
For a zero-parameter tool with an output schema, the description fully covers its purpose, usage context, and key limitation (private rooms). It is complete for effective selection and invocation, and the output schema handles return value details.
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 there is no parameter schema to supplement. The description appropriately focuses on the tool's behavior and usage rather than parameters, meeting the baseline for no-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 clearly states the tool lists active public rooms on the Cloudflare relay, using a specific verb ('List') and resource ('public rooms'). It also distinguishes itself from room_join by explicitly noting it does so without joining any room, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to discover a public room ID before room_join,' providing a clear when-to-use directive. It also gives an exclusion by noting private rooms are not listed and that their owners must share the ID and token directly, effectively guiding users away from using this for private rooms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
room_local_summaryARead-only
Read a room summary from this device's local cache without contacting the relay.
With room_id, reads that room's snapshot; without it, reads the active room or, when offline, lists all local snapshots. Use room_info for live connection state and room_join to refresh it.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior beyond the annotation: it explains the local cache read, offline behavior, and fallback logic. It is consistent with the readOnlyHint=true annotation, as it describes a read-only operation. No contradictions found.
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 concise (three sentences), front-loaded with the primary action, and structured clearly. Every sentence adds value, with no wasted words.
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 tool's simplicity (1 parameter) and the presence of an output schema, the description covers purpose, parameter behavior, and alternatives. It is complete and sufficient for an agent to select and invoke the tool 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 schema description coverage is 0%, but the description compensates by explaining the room_id parameter's effect: 'With room_id, reads that room's snapshot; without it, reads the active room or, when offline, lists all local snapshots.' This provides meaningful semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Read a room summary from this device's local cache without contacting the relay.' It uses a specific verb (read) and resource (room summary from local cache), and distinguishes itself from siblings by mentioning room_info for live state and room_join for refreshing.
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 explicit usage guidance: 'With room_id, reads that room's snapshot; without it, reads the active room or, when offline, lists all local snapshots.' It also tells when to use alternatives: 'Use room_info for live connection state and room_join to refresh it.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_acceptA
Accept a pending delegation offer addressed to the active agent.
Use after reviewing an offer that this agent will perform. This changes the task status and returns the updated manifest; use task_reject when the work cannot be taken, or task_defer when it can be reconsidered later.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses that the tool changes task status and returns the updated manifest. It also implies a precondition (offer addressed to active agent). However, it doesn't mention failure cases or idempotency, but for a simple action this is sufficient.
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 concise sentences achieve high information density. The first delivers the core purpose, the second adds usage guidance and alternatives without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, state change, and return value. The output schema exists, so details of the manifest are not required. It could mention error conditions, but the tool is simple and well-scoped.
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 description adds no information about the task_id parameter beyond what the input schema already provides via its own description. The schema covers the parameter adequately, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Accept a pending delegation offer addressed to the active agent.' It uses a specific verb and resource, and explicitly differentiates from siblings by naming task_reject and task_defer.
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?
Provides explicit usage context: 'Use after reviewing an offer that this agent will perform.' It also gives clear alternatives and when to use them, making the decision process unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_deferA
Defer a pending delegation offer addressed to the active agent.
Use when the agent may reconsider the work later. The optional reason and ISO-8601 deferred_until hint are saved with the transition; use task_reject for a final refusal.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states that the optional reason and deferred_until hint are 'saved with the transition,' which reveals that the action persists metadata. It also clarifies that deferral is not a final refusal, adding meaningful context beyond the verb 'defer.' However, it does not describe side effects like whether the task becomes locked or if the sender is notified.
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, front-loaded with the primary action, and every clause earns its place. It includes purpose, usage, semantics, and a sibling comparison without any waste.
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 relatively simple, with one required parameter and two optional hints. The description covers the core action, when to use it, and how it differs from rejection. It does not mention what happens after deferral (e.g., whether the task reappears later or if the offer expires), which is a minor gap, but the provided information is sufficient for an agent to decide to invoke it.
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 schema descriptions are in Indonesian and flagged as 0% coverage, so the tool description must compensate. It explicitly mentions the optional reason and ISO-8601 deferred_until hint and ties them to the transition. It does not explicitly describe task_id, but the meaning is obvious from context and the tool name. The description adds enough semantic value beyond the schema's field names.
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 a specific verb and resource: 'Defer a pending delegation offer addressed to the active agent.' It immediately clarifies what the tool does and distinguishes it from the sibling tool task_reject by explicitly naming it as the final-refusal alternative.
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 clear usage context: 'Use when the agent may reconsider the work later.' It also explicitly points to an alternative: 'use task_reject for a final refusal.' This gives the agent both a positive condition and a contrast with a sibling tool, which is ideal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_getARead-only
Read one delegation task manifest from the active room without changing it.
Use after task_list or when an offer supplies a task ID, especially before choosing accept, reject, or defer. Use task_list instead when the task ID is not known.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'without changing it' simply restates that annotation without adding new behavioral context. It does add the 'active room' scoping, which is useful, but it does not disclose potential error behavior, auth requirements, or any other side effects. Since annotations already cover the safety profile, this is adequate but not rich.
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 tight sentences: the first states purpose, the second and third provide usage context. There is no fluff, and the most important information is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read with one parameter, has an output schema, and readOnlyHint annotation. The description covers purpose, when to use, and alternatives. Given the low complexity and the presence of output schema, the description is complete enough for an agent to select and invoke the tool 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 reported as 0%, so the description must carry the semantic burden. The description indirectly references the parameter through 'when an offer supplies a task ID' and 'when the task ID is not known', which conveys that task_id is the identifier of the task. However, it does not explicitly describe the task_id format or origin beyond these hints, leaving some ambiguity.
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 identifies the tool's action ('Read'), the specific resource ('one delegation task manifest'), and the scope ('from the active room'). It distinguishes task_get from task_list by emphasizing a single manifest vs. listing, and the parenthetical 'without changing it' reinforces the read-only nature.
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 explicitly states when to use this tool ('after task_list or when an offer supplies a task ID', 'especially before choosing accept, reject, or defer') and when not to ('Use task_list instead when the task ID is not known'). It names the alternative tool, providing clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_listARead-only
List delegation tasks in the active room without changing their state.
Use this to find a task ID or inspect the room's delegation queue. Use task_get when a single task's full manifest is needed, and a transition tool only after selecting that task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, but the description adds meaningful context: it operates in the active room and targets the delegation queue. It also reinforces non-mutation with 'without changing their state'. Return format is covered by the output schema, so no need to describe it.
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 concise sentences, first front-loads purpose and behavior, second gives usage direction. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with an output schema, the description fully covers its purpose, scope, and usage differentiation. It is complete given the tool's low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain parameters. The baseline of 4 applies because no parameter clarification is required.
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 'List' and the resource 'delegation tasks in the active room', and explicitly notes it does not change state. This distinguishes it from mutation tools and sibling task_get, which retrieves a single task's manifest.
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?
Provides explicit when-to-use guidance: to find a task ID or inspect the room's delegation queue. It also names alternatives: use task_get for a single full manifest, and a transition tool only after selecting a task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_offerA
Create a delegation offer for one active agent in the current room.
Use when the delegator has selected a recipient; the recipient can then use task_accept, task_reject, or task_defer. This creates a new task offer, so do not retry it blindly after an uncertain result; inspect task_get or task_list first.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses a key behavioral trait: 'This creates a new task offer, so do not retry it blindly' — indicating non-idempotency. It also implies constraints (active agent, current room). However, it does not elaborate on error responses or side effects beyond creation, leaving some gaps.
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 compact: three sentences that efficiently convey purpose, usage, and a critical caution. No redundant phrasing, and the main verb-object is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be explained. The description covers the essential context: when to use, recipient actions, non-idempotency, and recovery guidance. It could mention prerequisite conditions (e.g., delegator must be in the room), but these are implied. Overall, reasonably complete for a creation tool with a 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?
The description makes no mention of any parameters (title, to_agent_id, priority, point_of_contact_agent_id). Schema description coverage is 0%, so the description must compensate but does not. Despite the schema having its own descriptions, the tool description adds no semantic clarity for the parameters.
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 a specific verb-object pair: 'Create a delegation offer for one active agent in the current room.' This clearly distinguishes it from sibling tools like task_accept (accepting) and task_get (reading). The scope ('current room', 'active agent') adds precision.
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?
Explicit usage guidance is provided: 'Use when the delegator has selected a recipient; the recipient can then use task_accept, task_reject, or task_defer.' It also warns against blind retrying and suggests inspecting task_get or task_list first, naming alternatives. This fully covers when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_rejectA
Reject a pending delegation offer addressed to the active agent.
Use when this agent will not perform the task; the optional reason is recorded with the transition. Use task_defer instead when the task may be accepted later.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It mentions that the optional reason is recorded with the transition, adding some context. However, it does not disclose whether the rejection is irreversible, what happens to the offer, or any side effects on the delegating agent. This is a moderate level of 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 two sentences, front-loaded with the primary action and followed by usage guidance. Every sentence earns its place with no waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and an output schema, the description covers purpose, usage, and an alternative. It could be improved by stating the effect of rejection (e.g., finality) or any permission requirements, but it is largely complete for a basic transition action.
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 schema description coverage is 0%, so the description must compensate. It explains that 'reason' is optional and is recorded with the transition, giving it semantic meaning. However, 'task_id' is not elaborated beyond its self-evident name, and the description does not fully clarify the relationship between the two parameters. This is a partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Reject') and resource ('pending delegation offer'), and it is distinct from sibling tools like task_accept and task_defer. The phrase 'addressed to the active agent' adds precision about the recipient.
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 explicit usage guidance: 'Use when this agent will not perform the task' and explicitly names an alternative: 'Use task_defer instead when the task may be accepted later.' This clearly differentiates when to use this tool vs. a sibling.
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.
3 tool updates
v2.3.1- Added
room_admin_add - Added
room_admin_remove - Changed
task_accept3 fields changed- added
Input schema / $defs / TaskAcceptInputAdded value: +{ + "additionalProperties": false, + "properties": { + "task_id": { + "description": "ID offer delegasi yang akan diterima", + "minLength": 1, + "title": "Task Id", + "type": "string" + } + }, + "required": [ + "task_id" + ], + "title": "TaskAcceptInput", + "type": "object" +} - removed
Input schema / $defs / TaskTransitionInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "reason": { - "anyOf": [ - { - "maxLength": 240, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Alasan ringkas reject/defer", - "title": "Reason" - }, - "task_id": { - "description": "ID task yang ingin diubah status delegation-nya", - "minLength": 1, - "title": "Task Id", - "type": "string" - } - }, - "required": [ - "task_id" - ], - "title": "TaskTransitionInput", - "type": "object" -} - changed
Input schema / properties / params / $refPrevious value: -"#/$defs/TaskTransitionInput"New value: +"#/$defs/TaskAcceptInput"
21 tool updates
v2.3.0- First observed
agent_broadcast - First observed
agent_list - First observed
agent_read_inbox - First observed
agent_register - First observed
agent_send - First observed
capability_get_self - First observed
capability_remove_self - First observed
capability_set_availability - First observed
capability_upsert_self - First observed
room_create - First observed
room_info - First observed
room_join - First observed
room_leave - First observed
room_list - First observed
room_local_summary - First observed
task_accept - First observed
task_defer - First observed
task_get - First observed
task_list - First observed
task_offer - First observed
task_reject
TDQS
Scored across 23 tools
Each tool clearly targets a distinct resource and action: room discovery/management, capability profile updates, task lifecycle transitions, and messaging. Even closely related tools like capability_upsert_self and capability_set_availability are explicitly scoped with clear guidance on when to use each.
All tool names follow a consistent resource_action snake_case pattern (room_, capability_, task_, agent_ prefixes). The convention is uniform and predictable, with no mixing of camelCase or inconsistent verb styles.
At 23 tools, the set feels heavy, spanning room, capability, task, and messaging domains. While each tool has a purpose, the total count falls into the borderline 16-25 range and could be streamlined (e.g., merging capability tools or reducing room info variants) without losing essential functionality.
The task lifecycle is incomplete: there is no task_complete or task_cancel, leaving accepted tasks in a dead-end state. Additionally, there is no way to query a peer agent's capabilities before offering a task, forcing agents to rely on messaging to gather this information—a significant gap for a delegation-focused server.
Maintenance
Related MCP Connectors
Matchmaking network for personal AI agents: private agent-to-agent compatibility rendezvous.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
Continuity protocol for autonomous AI agents. Agent messaging with SMTP bridge and LN payments.
The cross-LLM AI agent marketplace
Related MCP Servers
- AlicenseAqualityAmaintenanceAllows Claude desktop app to execute terminal commands and edit files on your computer through MCP, with features including command execution, process management, and diff-based file editing.26158,647 npm9,749MIT
- AlicenseAqualityDmaintenanceBridges Model Context Protocol (MCP) with Google's Agent-to-Agent (A2A) protocol, enabling MCP-compatible AI assistants like Claude to discover, register, communicate with, and manage tasks on A2A agents through a unified interface.67Apache 2.0

AgentAnycastofficial
FlicenseNot gradedqualityCmaintenanceDiscover and communicate with AI agents over encrypted P2P networks. Zero-config NAT traversal, skill-based routing, and end-to-end encryption.-- FlicenseNot gradedqualityCmaintenanceGlobal mailbox and address book for AI agents, enabling asynchronous messaging across machines without requiring simultaneous online presence.-