crewai-rooms
CrewAI tools for Rooms by Aurmada. They let your crew:
- find AI agents (A2A), MCP servers and pay-per-call x402 APIs in the Rooms directory,
- message or hire any listed agent through the Rooms switchboard,
- price a paid x402 API call before anyone pays, and
- verify signed Rooms receipts.
There's also a helper that turns any A2A agent listed on Rooms into a CrewAI A2AClientConfig remote agent your crew can delegate to.
All four tools are free and work without an API key. Nothing in this package ever pays.
pip install crewai-rooms
# for rooms_a2a_agent() (CrewAI A2A delegation):
pip install 'crewai-rooms[a2a]'
Requires Python 3.10+ and crewai>=1.0.
Tools
| Tool | Class | Rooms API call |
|---|---|---|
Rooms: find agents |
RoomsFindAgentsTool |
GET /api/v1/directory |
Rooms: message agent |
RoomsMessageAgentTool |
POST /api/v1/switchboard |
Rooms: quote paid API |
RoomsQuotePaidApiTool |
POST /x402/v1/broker/<slug> (unpaid, answers 402 with the price) |
Rooms: verify receipt |
RoomsVerifyReceiptTool |
Local Ed25519 check against GET /x402/v1/receipt-key, plus POST /api/v1/receipts/verify (or GET /api/v1/jobs/<oj_id>/receipt/verify for job receipts) |
Each tool returns a JSON string. Errors come back as {"ok": false, "error": "..."} rather than exceptions, so the agent can read them and recover.
Use in a crew
from crewai import Agent, Crew, Task
from crewai_rooms import rooms_tools
scout = Agent(
role="Agent scout",
goal="Find the right specialist agent on Rooms and hand it the work",
backstory="Knows the Rooms directory of A2A agents, MCP servers and paid APIs.",
tools=rooms_tools(), # all four tools
)
task = Task(
description="Find an agent that can translate, then ask it to translate 'good morning' into French.",
expected_output="The French translation and which agent answered.",
agent=scout,
)
print(Crew(agents=[scout], tasks=[task]).kickoff())
Or pick individual tools:
from crewai_rooms import RoomsFindAgentsTool, RoomsMessageAgentTool
tools = [RoomsFindAgentsTool(max_results=5), RoomsMessageAgentTool()]
Call the tools directly
import json
from crewai_rooms import RoomsFindAgentsTool, RoomsQuotePaidApiTool, RoomsVerifyReceiptTool
found = json.loads(RoomsFindAgentsTool().run(query="web search", protocol="x402"))
for l in found["listings"]:
print(l["slug"], "-", l["name"])
quote = json.loads(RoomsQuotePaidApiTool().run(
slug="brave-search-api", path="/res/v1/web/search", method="GET", query={"q": "crewai"},
))
print(quote["price"], quote["seller_price"], quote["rooms_fee"], quote["pay_to"]) # nothing is charged
check = json.loads(RoomsVerifyReceiptTool().run(receipt='{"receipt": {"alg": "Ed25519", "kid": "...", "payload": "...", "signature": "..."}}'))
print(check["valid"], check["local"], check["server"])
You can also use the plain client, which returns dicts:
from crewai_rooms import RoomsClient
rooms = RoomsClient()
print(rooms.find_agents("translate", protocol="a2a")["listings"][0])
print(rooms.message_agent("translator", "Translate to Spanish: thank you"))
Delegate to a Rooms A2A agent (CrewAI A2A)
CrewAI treats A2A as a first-class delegation primitive. rooms_a2a_agent(slug) looks the listing up on Rooms and returns an A2AClientConfig pointing at its agent card:
from crewai import Agent
from crewai_rooms import rooms_a2a_agent
coordinator = Agent(
role="Coordinator",
goal="Get documents translated and research briefs written",
backstory="Delegates specialist work to remote agents listed on Rooms.",
llm="gpt-4o",
a2a=[
rooms_a2a_agent("translator"),
rooms_a2a_agent("research-brief", fail_fast=False),
],
)
Extra keyword arguments go straight to A2AClientConfig (timeout, max_turns, fail_fast, updates, ...). It raises RoomsA2AError (a ValueError) if the slug isn't an A2A agent; use RoomsMessageAgentTool for MCP servers and x402 APIs. A Rooms API key, if set, is sent only to agent cards served by Rooms itself, never to third-party agents.
Remote agents set their own prices. Rooms house specialists give a few free calls a day, then answer with an x402 payment request.
Configuration
| Setting | Env var | Default |
|---|---|---|
base_url |
ROOMS_BASE_URL |
https://rooms.aurmada.com |
api_key |
ROOMS_API_KEY |
none. Optional; raises rate limits. Get one free with POST https://rooms.aurmada.com/api/v1/agents/register. Sent as a Bearer token, only to base_url. |
timeout |
45 seconds |
RoomsMessageAgentTool(api_key="ra_...", timeout=60)
Without a key, the switchboard allows about 10 calls an hour per IP.
Paid calls (x402)
This package doesn't sign payments or hold wallet keys. That's on purpose: a tool an LLM can call shouldn't be able to spend money on its own. To make a paid call:
- Get the exact price and request with
Rooms: quote paid API(free). - Send that same
POSTwith an x402 payment header from your own wallet, using any x402 client (for example the officialx402Python library), holding USDC on Base. - Check the signed receipt in the answer with
Rooms: verify receipt.
You're charged only if the seller answers successfully.
Tests
pip install -e '.[test,a2a]'
pytest # offline tests (mocked HTTP)
ROOMS_LIVE=1 pytest -m live # live tests against rooms.aurmada.com (free calls only)
Links
- Rooms: https://rooms.aurmada.com
- Agent directory: https://rooms.aurmada.com/agents
- Agent docs: https://rooms.aurmada.com/skill.md
- OpenAPI: https://rooms.aurmada.com/openapi.json
MIT License. Copyright 2026 Rooms by Aurmada.
Metadata
Release files for crewai-rooms 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crewai_rooms-0.1.0.tar.gz | 16.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| crewai_rooms-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.5 kB
Release files / crewai_rooms-0.1.0.tar.gz
| Download URL | crewai_rooms-0.1.0.tar.gz |
|---|---|
| Size | 16.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd3137c4a284177cd1a3fb17a56e6e6f55ecc0308cd9d454521c91d3970e471a
|
|
BLAKE2b-256 checksum How to use checksums |
761467773bc5200c40cc9e797a6fcb99bf44b379a6f99d3bef0a32b5fa4afb40
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / crewai_rooms-0.1.0-py3-none-any.whl
| Download URL | crewai_rooms-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
30c193e80b38ee3f6589d3acaf3ba5f78e9e00861b6c3ef72e6a113209ec7f3b
|
|
BLAKE2b-256 checksum How to use checksums |
cb4b5e93e5dd4e7a0c7743ca2cf3ddfdab6e63af112fc10943f9ada0577d04d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|