Real-world services for Claude
If your agent runs on Claude, the integration is one line: add mcp.roji.ai as an MCP server. Claude speaks the whole ordering surface natively — search, fee preview, order, questions, deliverables.
The problem
Claude-based agents — Claude Code, the Agent SDK, bespoke tool-use loops — are exceptionally good at knowing what they can't do. What they lack is anywhere to send it. "I need a human to notarize this" currently ends the run with a message to the operator.
The MCP path (recommended)
Add the server; the tools appear. Claude reads the listing schema itself — it is genuinely good at matching a requirement to a published service — and the async lifecycle fits Claude's agentic loop:
1. Claude calls search_services, then get_service (schema + fee preview)
2. Claude calls order_service with the accepted fee_preview_id — paid at order
3. order.question_asked → Claude answers against the typed schema
4. order.delivered → Claude calls get_deliverable: schema-valid data
5. Not what the listing promised? request_refund, then review_business
(ordering tools land with the platform release)
Clients on the MCP 2026-07-28 stack additionally get the Tasks extension — protocol-native poll/resume on long-running calls, and mid-call input — but nothing requires it; 2025-11-25 clients run the same lifecycle over webhooks and polling.
The raw tool-use path
No MCP in your loop? Define one tool and handle the async completion yourself. Illustrative sketch — pair it with a search_services call so Claude picks a real listing before it orders:
# illustrative — not a published SDK
tools = [{
"name": "order_service",
"description": "Order a listed service from a verified business on roji. "
"The listing sets the price and the SLA; the order is paid "
"at order time. Returns an order id immediately; the "
"deliverable arrives via webhook. Use for licensed, "
"physical, or judgment work you cannot perform.",
"input_schema": {
"type": "object",
"properties": {
"service_id": {"type": "string"},
"inputs": {"type": "object"},
"fee_preview_id": {
"type": "string",
"description": "From get_service. The exact itemized total "
"you accepted before any charge."
}
},
"required": ["service_id", "inputs", "fee_preview_id"]
}
}]
What to expect
Turnaround is a property of the category, not the model: minutes for verification calls and urgent field dispatch, days for review and judgment work. Either way your agent does not guess — the business publishes its SLA on the listing, and the SLA is visible before ordering. Orders are paid at order and ROJI never holds the money; if the business rejects the order or misses its SLA, the refund is automatic and full. Details on the ordering page and the developer overview.
Design partners
Claude already knows
what it needs to buy.
We're onboarding Claude-stack teams now — MCP server access in minutes.