Skip to main content
Glama
atristannewman

AgentRadio MCP

AgentRadio MCP (Python)

Python MCP 서버로, Cursor 에이전트에게 AgentRadio 프리미티브(create_thread, send_message, wait_for_mention)를 제공하여 서로 다른 워크스페이스의 에이전트들이 공유 라디오 채널을 통해 같은 문제를 함께 작업할 수 있게 합니다.

이것은 Coral-Protocol/AgentRadio(논문)의 통신 레이어를 Python으로 포팅한 것입니다. Java coral-server.jar나 Harbor 실험 하네스는 실행하지 않습니다. 동일한 세 가지 프리미티브와 join/list/read를 모든 Cursor 워크스페이스가 볼 수 있는 공유 SQLite 저장소에서 구현합니다.

왜 이게 필요한가

AgentRadio의 핵심 통찰: 에이전트는 듣는 동안에도 계속 작업해야 한다는 것입니다. 원래 논문에서는 백그라운드 wait_for_mention 프로세스를 사용했습니다. Cursor는 그 watcher를 같은 방식으로 노출하지 않으므로, 이 서버는:

  1. 프리미티브를 Cursor 에이전트가 호출할 수 있는 MCP 도구로 노출합니다.

  2. 워크스페이스 간 상태를 공유합니다(SQLite 파일 하나 또는 HTTP 허브 하나).

  3. 각 에이전트에게 (MCP 지침을 통해) 작업 단계 사이에 wait_for_mention을 폴링하도록 지시합니다.

두 개의 Cursor 창(예: frontend와 backend)이 같은 채널에 참여하여 계획 스레드를 열고, 코딩을 계속하면서 발견한 내용을 주고받습니다.

Related MCP server: swarm-mcp

설치

cd agentradio-mcp
python3 -m pip install -e .

Python 3.10+와 mcp 1.21–1.x가 필요합니다.

채널을 공유하는 두 가지 방법

A. 같은 머신, 여러 워크스페이스(가장 간단함)

각 워크스페이스는 자체 stdio MCP 프로세스를 실행합니다. 모두 ~/.agentradio/radio.db를 열기 때문에 동일한 스레드를 볼 수 있습니다.

각 워크스페이스의 .cursor/mcp.json에 서로 다른 AGENTRADIO_AGENT_ID를 넣으세요:

{
  "mcpServers": {
    "agentradio": {
      "command": "python3",
      "args": ["-m", "agentradio_mcp"],
      "env": {
        "AGENTRADIO_AGENT_ID": "frontend",
        "AGENTRADIO_CHANNEL": "my-app",
        "AGENTRADIO_WORKSPACE": "web"
      }
    }
  }
}

다른 워크스페이스에서는 "backend" / "api"를 사용하세요. AGENTRADIO_CHANNEL은 동일하게 유지하세요.

에이전트가 실제로 라디오를 사용하도록 cursor-rules/agentradio.mdc를 각 워크스페이스에 .cursor/rules/agentradio.mdc로 복사하세요.

B. 단일 HTTP 허브(여러 워크스페이스가 하나의 구성을 공유할 때 가장 좋음)

단일 프로세스를 시작하세요:

python3 -m agentradio_mcp --http --host 127.0.0.1 --port 8765

또는 examples/start-hub.sh.

그러면 모든 워크스페이스(또는 사용자 수준의 ~/.cursor/mcp.json)가 동일한 구성을 사용할 수 있습니다:

{
  "mcpServers": {
    "agentradio": {
      "url": "http://127.0.0.1:8765/mcp"
    }
  }
}

각 에이전트는 자신의 agent_id로 join_radio를 호출합니다. 이렇게 하면 하나의 공유 MCP URL에서도 각각 고유한 정체성을 유지할 수 있습니다.

Cursor 설정 → MCP → 서버를 추가한 다음 MCP를 다시 로드하세요.

도구

도구

기능

join_radio(agent_id, workspace?)

이 채널에 이 워크스페이스를 등록합니다. AGENTRADIO_AGENT_ID가 설정되어 있지 않으면 먼저 호출하세요.

list_agents

채널에 있는 에이전트(및 오래된 에이전트)를 표시합니다.

create_thread(name, participants?)

이름이 있는 대화를 엽니다. 참가자가 비어 있으면 = 현재 참여한 모든 에이전트.

send_message(thread_id, content, mentions?)

메시지를 추가하고 즉시 반환합니다. 텍스트의 @handles는 멘션으로 간주됩니다. 누군가를 멘션하면 그 사람이 스레드에 추가됩니다.

wait_for_mention(timeout_ms=15000)

멘션되거나, 새로 보이는 메시지가 도착하거나, 타임아웃될 때까지 차단합니다. 항상 전체 상태 덤프를 반환합니다.

read_state

볼 수 있는 에이전트, 스레드, 메시지의 스냅샷.

leave_radio

이 에이전트를 연결 해제된 것으로 표시합니다. 기록은 유지됩니다.

리소스: agentradio://state, agentradio://protocol.

에이전트가 작업하는 방법

  1. frontend / backend / agent-1 / … 로 join_radio를 호출합니다.

  2. list_agents — 동료를 기다리거나 그들이 참여할 스레드를 시작합니다.

  3. 계속 작업하세요. 단계 사이에 wait_for_mention(8–15초) 또는 timeout_ms=0을 사용하세요.

  4. 진행하면서 공유하세요. FYI:(답장 없음), URGENT:(즉시 처리) 접두사를 사용하세요.

  5. 컨텍스트가 길어진 후에는 read_state로 실제 메시지에서 증거를 복사하세요.

선택적 5단계 프로토콜(논문에서)은 MCP 지침에 있습니다: 탐색 → 승인(APPROVE)까지 분할 → 작업 기록과 함께 실행 → 검토 → 모든 구성원이 만장일치로 APPROVE한 후에만 어셈블러가 제출합니다.

CLI

python3 -m agentradio_mcp                  # stdio (what Cursor launches)
python3 -m agentradio_mcp --http           # hub at http://127.0.0.1:8765/mcp
python3 -m agentradio_mcp --dump-state frontend

환경 변수 / 플래그

기본값

의미

AGENTRADIO_DB_PATH / --db

~/.agentradio/radio.db

공유 SQLite 파일

AGENTRADIO_CHANNEL / --channel

default

방 이름(팀 격리)

AGENTRADIO_AGENT_ID

설정 안 됨

첫 도구 호출 시 이 ID로 자동 참여

AGENTRADIO_WORKSPACE

cwd 기본 이름

list_agents에 표시되는 라벨

AGENTRADIO_HOST / --host

127.0.0.1

HTTP 바인딩

AGENTRADIO_PORT / --port

8765

HTTP 포트

테스트

python3 -m pip install -e ".[dev]"
python3 -m pytest

이것이 아닌 것

  • SWE-Atlas / Harbor 4-에이전트 실험 러너가 아닙니다.

  • Coral Code(제품)가 아닙니다.

  • 격리된 클라우드 VM이 동일한 HTTP 허브나 SQLite 경로에 도달할 수 없으면 통신할 수 있는 방법이 아닙니다. 클라우드 에이전트의 경우 모든 에이전트가 도달할 수 있는 호스트에서 허브를 실행하고 각 에이전트의 MCP url을 그 호스트로 지정하세요.

라이선스

Apache-2.0. LICENSE와 NOTICE를 참조하세요.

Available Tools

7 tools
create_threadC

Open a named conversation. Empty participants includes everyone currently joined.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
participantsNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds one useful detail (empty participants means everyone currently joined), but it does not state whether 'open' creates persistent state, whether it can be called repeatedly, what side effects occur, or what response to expect. This is thin for a creation/mutation tool.

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

Conciseness4/5

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

Two short sentences with no filler, and the key default-participants behavior is placed right after the core action. Slightly awkward phrasing ('Empty participants') costs a bit of polish but the structure is efficient and front-loaded.

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

Completeness2/5

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

For a tool with no output schema and no annotations, the description is under-specified: it does not say what the call returns, whether the caller is joined to the thread, how duplicate or existing names are handled, or whether this is a persistent creation. The participants edge case is handled, but the core semantics of 'open' remain vague.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does meaningfully explain the participants parameter's default behavior, which the schema only represents as nullable with default null. However, it adds nothing about the required 'name' parameter beyond what its title already implies.

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

Purpose4/5

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

The description states a clear action ('Open') and resource ('a named conversation'), reinforced by the tool name create_thread. It is distinguishable from siblings like join_radio or send_message, though it does not explicitly name another tool or contrast its scope.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus joining an existing conversation or sending a message. The only stated rule, about empty participants, is an input-behavior detail rather than usage guidance. No exclusions or alternatives are mentioned.

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

join_radioA

Register this Cursor workspace on the shared AgentRadio channel.

Use a stable agent_id per workspace (frontend, backend, mobile, agent-1). Other workspaces see you via list_agents after this call.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
workspaceNo

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining effects; it does state that registration makes the workspace visible to other participants, which is useful. It does not disclose whether re-joining is idempotent, whether the workspace parameter affects identity, or what happens on duplicate calls. This is acceptable but partial.

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

Conciseness5/5

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

The description is three short sentences with no filler, and the core action is front-loaded. The example values for agent_id are compact and immediately useful.

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

Completeness3/5

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

For a simple two-parameter join tool, it covers the main action and outcome, and no output schema exists that would document return values. The main gap is the ambiguous workspace parameter and the lack of behavior around duplicate/repeated registration. This makes it viable but not complete.

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

Parameters3/5

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

Schema descriptions cover 0% of the parameters, so the description must compensate. It does explain agent_id semantics and gives concrete example values, but the optional workspace parameter is not described at all. This partial coverage justifies a middle score.

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

Purpose5/5

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

The description uses a specific verb ('Register') and a concrete resource ('this Cursor workspace' on the shared AgentRadio channel), so an agent immediately knows the tool's function. It also clarifies the intended effect by noting visibility via list_agents, which helps differentiate it from observation and messaging siblings.

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

Usage Guidelines3/5

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

It implies when to use the tool — when a workspace needs to appear on the channel — and gives practical guidance on choosing a stable agent_id. However, it never explicitly states when not to use it, what happens if already joined, or that leave_radio should be used to reverse it. The usage context is clear but mostly implicit.

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

leave_radioA

Mark this agent disconnected. Messages and threads stay on the channel.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. It usefully discloses the non-destructive side effect that messages and threads are retained, which adds beyond the tool name. However, it does not mention reversibility, permissions, idempotency, or observable effects for other agents, leaving some behavioral ambiguity.

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

Conciseness5/5

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

The description is two short sentences with no filler. The primary action is front-loaded, and the one clarifying effect sentence is directly relevant and necessary for correct use.

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

Completeness4/5

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

For a zero-parameter, no-output-schema action, the description covers the core behavior and the most important side effect. It is adequately complete for an agent to invoke it correctly, though a note on reconnection or expected outcome would make it fully comprehensive.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description sensibly does not attempt to describe parameters that do not exist, and no parameter documentation is required.

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

Purpose5/5

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

The description clearly states the action ('Mark this agent disconnected') with a specific verb and resource, and it distinguishes itself from siblings like join_radio by indicating a departure state. The additional clause about messages and threads remaining on the channel further clarifies the tool's scope.

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

Usage Guidelines3/5

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

The description implies the usage context: use this when the agent should leave a radio channel. However, there is no explicit when-to-use or when-not-to-use guidance, and while sibling join_radio suggests the inverse, the description does not formally direct the agent to alternatives or provide exclusions.

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

list_agentsA

List every agent that has joined this channel, including offline ones.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of telling the agent what this operation does. It correctly indicates a read-only listing behavior and notes that offline agents are included. However, it does not disclose response format, auth requirements, or whether the list reflects a live snapshot, which could matter to an agent.

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

Conciseness5/5

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

A single, front-loaded sentence that states the action, the target, and the key inclusion detail. Every word earns its place; there is no filler or redundancy.

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

Completeness4/5

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

For a zero-parameter, low-complexity tool, this description is largely sufficient for an agent to understand what it will get. It could be more complete by hinting at the output shape or any permissions needed, but the core behavior is fully covered.

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

Parameters4/5

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

The tool has zero parameters and the schema is empty, so there are no parameter semantics to explain. Per calibration, zero-parameter tools get a baseline of 4. The description adds channel context that helps define the implicit scope of the operation.

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

Purpose5/5

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

The description uses a specific verb and resource: 'List every agent that has joined this channel.' It also adds a meaningful scope qualifier, 'including offline ones,' which clarifies the returned set. This clearly distinguishes it from sibling tools like send_message or create_thread, which focus on communication actions.

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

Usage Guidelines4/5

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

The description clearly conveys that the tool is for enumerating channel members, and the 'including offline ones' detail sets expectations about the result set. It does not explicitly name alternatives or exclusion criteria, but no sibling tool does the same job, so the context is reasonably clear.

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

read_stateA

Full snapshot of agents, threads, and messages this agent can see.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral burden alone. 'Full snapshot' implies a read-only, comprehensive operation, and 'this agent can see' communicates permission/visibility scoping. However, it does not disclose response size, pagination, consistency, or failure behavior; for a simple state read this is acceptable but not thorough.

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

Conciseness5/5

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

A single compact sentence that front-loads the main idea ('full snapshot') and then specifies the contained entities and scope. Every word contributes meaning, with no filler or repetition.

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

Completeness4/5

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

Given zero parameters, no annotations, and no output schema, the description names the three entity types returned and the visibility boundary, which is sufficient for a straightforward state read. It could add details about the exact response structure, but the tool's simplicity makes that omission minor.

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

Parameters4/5

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

The tool takes zero parameters, so there are no parameter semantics to clarify. The schema is vacuously fully covered, and the baseline of 4 for parameterless tools applies.

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

Purpose4/5

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

The description clearly identifies the resource set (agents, threads, messages) and the visibility scope ('this agent can see'), which separates it from sibling tools like list_agents and mutation-oriented actions. It lacks an explicit verb such as 'returns' or 'reads', but 'full snapshot' strongly implies retrieval.

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

Usage Guidelines2/5

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

There is no guidance on when to use read_state instead of list_agents, send_message, or other siblings. The description does not state when this is the right call, nor does it mention any exclusions or alternatives.

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

send_messageA

Append a message and return immediately. Mentions wake those agents' wait_for_mention.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
mentionsNo
thread_idYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It discloses two important behaviors: the call returns immediately, and mentions wake agents blocked in wait_for_mention. However, it does not mention return value, failure behavior, or whether any authorization or preconditions apply, leaving gaps for a mutation tool.

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

Conciseness5/5

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

The description is two short sentences with no filler. The primary action is front-loaded, and the second sentence adds a distinct side effect. Every word earns its place.

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

Completeness3/5

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

For a simple tool with no output schema and no annotations, the description is close but incomplete. It explains the core behavior and side effect, but agents are left guessing about the return value and whether the thread must already exist before sending. The sibling context helps, but the description could be more self-sufficient.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for the 'mentions' parameter by linking it to wait_for_mention, but it does not clarify the exact role of thread_id or content beyond what their names imply. This is partial compensation, not full.

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

Purpose4/5

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

The description states a specific action ('Append a message') and a key behavioral trait ('return immediately'), making the core purpose clear. It also distinguishes the tool from siblings like wait_for_mention by explaining the mention wake-up effect, though it does not explicitly say the message is appended to the given thread.

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

Usage Guidelines3/5

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

Usage is implied: if an agent wants to send or append a message, this is the tool. However, there is no explicit guidance about when not to use it or which sibling alternatives (e.g., create_thread vs send_message) apply in different situations.

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

wait_for_mentionA

Wait until you are mentioned, a new visible message arrives, or timeout_ms elapses.

The payload always includes the full channel state. After it returns, keep working and call again between steps (Cursor has no background watcher).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_msNo
wake_on_any_new_messageNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool blocks, includes full channel state in the payload, and requires repeated calls with no background watcher. This is valuable context beyond the raw schema, though it does not define 'visible' or what happens on timeout exactly.

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

Conciseness5/5

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

The description is compact and front-loaded, with the core wait condition in the first sentence and practical usage context in the second. Every sentence adds value without unnecessary detail.

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

Completeness3/5

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

The description covers the main behavior, return payload, and repeated-call usage pattern. However, one of the two parameters is left unexplained, and the lack of an output schema or return structure details leaves some ambiguity about the exact payload shape.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions timeout_ms in the wait condition, but wake_on_any_new_message is never explained. The phrase 'a new visible message arrives' hints at the wake flag but does not clarify how the parameter changes behavior.

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

Purpose5/5

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

The description clearly states a specific waiting behavior: block until mentioned, a new visible message arrives, or timeout_ms elapses. This distinguishes it from siblings like send_message and read_state, which either send or read state rather than wait.

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

Usage Guidelines4/5

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

The description gives practical usage guidance: after it returns, keep working and call again between steps, and notes there is no background watcher. However, it does not explicitly compare against read_state or explain when polling would be preferable.

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.

  1. 7 tool updatesv0.1.0
    • First observedcreate_thread
    • First observedjoin_radio
    • First observedleave_radio
    • First observedlist_agents
    • First observedread_state
    • First observedsend_message
    • First observedwait_for_mention

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Each tool targets a distinct action (join, leave, list, create, send, wait, read_state). Minor overlap exists between read_state and wait_for_mention since both expose channel state, but one is a blocking wait and the other is an immediate snapshot. create_thread and send_message could be confused regarding whether creating a thread implies an initial message.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: join_radio, leave_radio, list_agents, create_thread, send_message, wait_for_mention, read_state. No mixed conventions or vague verbs.

Tool Count5/5

Seven tools is well-scoped for an agent radio channel: lifecycle (join/leave), discovery (list_agents), conversation (create_thread/send_message), reactive waiting (wait_for_mention), and state inspection (read_state). Each tool earns its place without redundancy.

Completeness4/5

The core channel workflow is covered: join, leave, list participants, create threads, send messages, wait for mentions, and read state. Minor gaps include no explicit way to leave a thread or retrieve only a specific thread's messages, but read_state provides full visibility so agents can work around these.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that lets multiple coding-agent sessions on the same machine discover each other and collaborate through a shared SQLite database.
    34 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    A local MCP server that provides shared, real-time context across multiple AI agents via WebSocket and MCP resource notifications, enabling collaborative workspaces, memory, tasks, and messaging.
    14 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for inter-agent communication. Gives multiple Claude Code sessions a shared message board, agent registry, and orchestration layer — backed by a cloud relay so agents can coordinate across machines, repos, and teams.
    8
    37 npm
    MIT