Hyperagent exposes a hosted Model Context Protocol (MCP) server that enables any MCP-compatible client — including other Hyperagent agents — to programmatically control your workspace: enumerate agents, start threads, send messages into live sessions, and retrieve results. This report documents what was built, tested, and learned in a live two-agent session, and what it means for autonomous agent-to-agent coordination.
Hyperagent's MCP server runs at https://hyperagent.com/api/mcp and exposes six tools to any authenticated client:
| Tool | What It Does |
|---|---|
list_agents | Returns every agent in the workspace: id, name, description |
list_threads | Returns threads newest-first, paginated (up to 100 per page) |
get_thread | Reads a thread's messages and live running status; supports polling |
create_thread | Starts a new background thread on any agent; returns immediately |
send_message | Injects a user-turn message into any existing thread |
create_attachment_upload | Uploads a file without passing bytes through context |
Within a single Hyperagent workspace, any agent holding the workspace token can do all of the following:
list_agents returns every agent in the workspace. In testing: 23 agents. By contrast, Hyperagent's native delegation tools (ListSpawnableAgents, ListInvocableAgents) returned zero because no allowlists were configured. The MCP endpoint provides unfiltered workspace visibility that native tools do not.
list_threads + get_thread give complete read access to all threads — 1,281 threads in the test workspace, browsable by newest-first with cursor pagination. Any thread's full message history is readable.
create_thread fired against any agent ID starts a new background thread, returns a threadId immediately. Caller polls get_thread until isRunning: false, then reads final messages. Proven async task-dispatch pattern — no live-mode required.
send_message delivered a user-turn message into a currently active session, confirmed with {"queued":true}. The message arrived as a genuine user turn — indistinguishable from human input. An agent can send to its own session, another agent's session, or any thread in the workspace.
Two agents in separate Hyperagent workspaces communicated bidirectionally using the MCP API.
get_thread using Workspace B's token| Component | Measured | Notes |
|---|---|---|
send_message call | ~108ms | HTTP round-trip; returns queued:true |
| Queue → recipient processes | Indeterminate | Depends on recipient's active state |
| Once active → response | 5–15s | Agent inference time |
send_message queues a user turn in the recipient's thread. It does not auto-trigger the recipient agent unless live-mode or an external poller is configured. Without waking, a message can sit in the queue indefinitely.
Live-mode runs a scheduled heartbeat (minimum observed 30 min) using a lightweight model. It does appear to trigger on incoming message arrival — in testing, an agent began processing within 66 seconds of an MCP message being queued. However:
No push/webhook/SSE mechanism exists. The sender must poll get_thread to detect responses.
messageLimit=N always returns N messages regardless of whether new messages were added — the count comparison will never change.
A single workspace token grants complete read/write access to all agents, threads, and data in that workspace. There is no secondary authentication mechanism (such as a one-time code or session validator). Once a token is generated, it provides unrestricted access until revoked.
Once a workspace token is shared — whether accidentally, through a compromised system, or intentionally — any holder can re-share it with others without the original issuer knowing or consenting. This creates a cascade risk: the token can propagate through multiple parties, each able to pass it on independently. Revocation is possible at hyperagent.com/settings/mcp-access, but re-sharing is not trackable.
The MCP access model is broader and less granular than Hyperagent's native delegation tools:
ListSpawnableAgents respects allowlists; ListInvocableAgents respects approval gateslist_agents returns all agents; no allowlists, no approval gatesIf you use MCP, you are opting into unfiltered workspace visibility.
hyperagent.com/settings/mcp-access when no longer neededZero cost. At the beginning of every work turn, each agent checks the other's thread for new messages before doing its primary work. Overhead: one get_thread call per turn. Effective for coordination where minute-level lag is acceptable.
Low cost. A cheap-model scheduled invocation (every 5–15 min) checks for new messages, processes if found, replies if needed. Uses Hyperagent's native scheduler or an external cron. Cost: a few cents/day. Maximum lag = polling interval.
Proven, no polling infrastructure. Agent A uses create_thread to start a background task on Agent B, polls get_thread until isRunning: false, reads result. Confirmed working in production — agent started a task on another's session, executed immediately without human intervention, reported completion. Recommended for discrete inter-agent work.
Agent A: create_thread(agentId: "B", prompt: "do X") → threadId
[poll get_thread(threadId) until isRunning == false]
read final messages → result
Useful when agents are already conversing and one needs to inject context or direction. Requires the target thread to be actively running or in live-mode.
Agent A: send_message(threadId: "active-thread", text: "context for agent")
Agent in "active-thread": receives message as user turn, processes, responds
Most durable. Both agents read/write to a shared external resource (e.g., an R2 bucket with known key structure). Agent checks mailbox at turn start or on schedule. Fully platform-agnostic, crash-recoverable, auditable. Best for high-reliability workflows.
For discrete inter-agent work (Bob-initiated):
Bob directs Agent A to delegate a task to Agent B. Agent A uses create_thread on Agent B, passes a self-contained task description, polls get_thread for completion, reports back. No continuous polling infrastructure — works within a single Bob-triggered turn.
For continuous background coordination:
A lightweight scheduled polling script (Pattern 2) checks both agents' threads at regular intervals. State (last-seen message ID) persisted in shared external storage. Cost-effective and controllable.
For Bob-triggered coordination sessions:
Bob opens a session with Agent A and instructs it to coordinate with Agent B on a specific task. Agent A handles the MCP communication (create_thread or send_message), does the polling loop within the session, and presents Agent B's results to Bob when complete.
Token management:
list_agents call) that alerts on 401 is recommendedThe MCP API enables a multi-agent network to: