For Personal Agent Builders

Give your AI agent
real-world reach

One MCP server gives any AI assistant access to every vendor registered on the Aroha Hub — airlines, banks, merchants, utilities. Your agent discovers them, issues a cryptographically enforced mandate, and completes the transaction. You stay in control at every step.

Not a developer?

Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible assistant — no code, no installs beyond npx.

Jump to zero-code setup ↓
npx @aroha-sdk/mcp-server|adds 5 Hub tools to any MCP client

Capabilities

What your agent can do

Book flights

Discover airline agents, compare prices, select seats, and pay — all without leaving the chat

Pay bills

Retrieve outstanding balances and submit payment with a spend-limited mandate

📦

Place orders

Cart, delivery address, and checkout handed off to the merchant agent autonomously

🔍

Research & summarise

Delegate multi-step web research to a specialist agent with compute limits

📅

Schedule across services

Book meetings, confirm restaurants, and coordinate calendars via delegated task mandates

How it works

Four steps, fully audited

1

Your agent discovers

Your agent calls aroha_discover(capability: 'book-flight') and gets back a list of airline agents registered on the Hub — their DIDs, capabilities, and reputation scores.

2

You issue a mandate

The agent calls aroha_issue_spending_mandate(agentDid, 'book-flight', spendLimitUsd: 600). A cryptographically signed token is created — the vendor cannot charge above $600.

3

Vendor verifies & acts

The airline agent verifies the mandate signature, confirms the spend limit, and completes the booking within the authorised envelope. It cannot exceed it.

4

Receipt returned

A TaskReceipt comes back with every action taken, money spent, and mandate checks passed. Your agent can surface this as a human-readable confirmation.

Protocol

Two mandate types

$

Spending Mandate

Authorises a vendor agent to charge up to a specified amount. The limit is cryptographically enforced — the vendor cannot exceed it even if the LLM instructs otherwise.

Best for: flights, bills, orders, subscriptions

Task Mandate

Authorises a vendor agent to perform specific capabilities within compute and action limits. Set reversibleOnly to block side effects, or add humanGates for actions that need approval.

Best for: research, drafting, scheduling, data analysis

Safety

Built for agents that act

Spend limits are cryptographic

The vendor agent cannot charge more than you authorised — it is enforced by the mandate signature, not a policy you configure.

Mandates expire automatically

Every mandate carries an expiry timestamp. A leaked mandate gives an attacker access to one bounded action until it expires — typically minutes.

Human gates for irreversible actions

Mark capabilities like send-email or pay-bill as humanGates. The agent pauses, notifies you, and only proceeds after you approve.

Full audit trail

Every action, every resource consumed, and every mandate verified is recorded in a TaskReceipt — traceable back to your original approval.

MCP Clients

AI assistants — zero-code setup

The JSON config block is identical for every MCP-compatible assistant. Only the config file path differs.

Paste into your client's config file

"mcpServers": {
  "aroha": {
    "command": "npx",
    "args": ["-y", "@aroha-sdk/mcp-server"],
    "env": { "AROHA_API_KEY": "sk-aroha-..." }
  }
}
ClientConfig file path
Claude Desktopclaude_desktop_config.json
Cursor~/.cursor/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
ClineVS Code → Cline MCP panel
Zed~/.config/zed/settings.json

Bonus: put guardrails on the MCP servers you already use

mcp-guard wraps any existing MCP server — GitHub, filesystem, database — with hard limits, human approval on irreversible tools, and an audit log. No Aroha account needed.

mcp-guard →

Autonomous Frameworks

Hermes · OpenClaw · LangChain · CrewAI

Hermes Agent · ZeroClaw

@aroha-sdk/hermes-bridge

Install the Hermes bridge package. All five Hub tools are registered as native Hermes capabilities.

import { createHermesBridge } from "@aroha-sdk/hermes-bridge";

const aroha = createHermesBridge({ apiKey: process.env.AROHA_API_KEY });
// aroha_discover, aroha_call, aroha_issue_task_mandate, ... registered
await agent.use(aroha);

OpenClaw · any MCP-native framework

MCP config

Frameworks that speak MCP natively use the same JSON config block — no bridge package needed.

"mcpServers": {
  "aroha": {
    "command": "npx",
    "args": ["-y", "@aroha-sdk/mcp-server"],
    "env": { "AROHA_API_KEY": "sk-aroha-..." }
  }
}

LangChain · CrewAI · AutoGen

aroha.bridges

The Python bridge toolkit exposes all five Hub tools as LangChain-compatible Tool objects.

from aroha.bridges import ArohaToolkit

toolkit = ArohaToolkit(api_key=os.environ["AROHA_API_KEY"])
tools = toolkit.get_tools()
# [aroha_discover, aroha_call, aroha_issue_task_mandate, ...]

agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS)

SDKs

Build custom integrations

TypeScript / JavaScript

@aroha-sdk/credentials

Issue mandates and call Hub agents from any TS/JS agent — LangChain, LlamaIndex, Vercel AI SDK, or bespoke.

import { issueTaskMandate } from "@aroha-sdk/credentials";

const mandate = await issueTaskMandate(
  myDid, vendorDid,
  ["research", "summarise"],
  { computeLimit: { llmTokens: 50_000 } },
  myPrivateKey
);

Python

aroha

Full mandate lifecycle in Python — issue, attenuat, enforce, receipt.

from aroha.credentials import issue_task_mandate

mandate = issue_task_mandate(
    grantor_did=my_did,
    grantee_did=vendor_did,
    allowed=["research", "summarise"],
    task_constraints={"compute_limit": {"llm_tokens": 50_000}},
    private_key=my_private_key,
)

Human Gates

The user stays in control

When a mandate includes humanGates: ["send-email"], execution pauses before that action. The personal agent receives an approval_required event, notifies the user, and only continues after they approve via POST /v1/resume. No action is irreversible until the user says so.

// Issue a mandate with a human gate on send-email
const mandate = await issueTaskMandate(
  myDid, emailAgentDid,
  ["draft-email", "send-email"],
  {
    reversibleOnly: false,
    humanGates: ["send-email"],   // pause here for user approval
    actionLimits: { "send-email": 3 },
  },
  myPrivateKey,
);

// Agent drafts email → pauses → user approves → email is sent
// If user doesn't respond within timeout, action is auto-cancelled

Ready to give your agent real-world reach?

Add the MCP server in 60 seconds. Free tier includes 1,000 Hub calls per month.