Skill hosts
Best for Cursor and Claude Code skills. OpenClaw shares the Local agent hosts section with Hermes — install snippets are first on each card.
Open skill hostsIntegration paths
Builder snippets plus merchant-agent workflow examples. Copy one block at a time; public discovery surfaces need no API key.
Need to install or configure a host first? Start with the official docs:
Most teams only need one surface to start. Pick the host or protocol you already use, copy the first block, then drop into the deeper workflow only if you need merchant-side negotiation.
Best for Cursor and Claude Code skills. OpenClaw shares the Local agent hosts section with Hermes — install snippets are first on each card.
Open skill hostsBest for ChatGPT and Gemini. Paste one manifest URL and start calling the gateway with hosted tools.
Open OpenAPI appsBest for Codex and Claude Desktop. Add a single `mcpServers` entry and call Moras as a local tool.
Open MCP setupHermes lives under Local agent hosts next to OpenClaw. Need raw REST only? Jump to Anything else after you finish the Hermes card.
Open Hermes / A2A flowThese URLs are the shared front doors behind every channel-specific guide on this page.
https://a2a.moras.ai/openapi.json
https://a2a.moras.ai/.well-known/agent-card.json
https://a2a.moras.ai/skills/install.sh
https://a2a.moras.ai/v1
Drop the Moras shop skill into OpenClaw with a single curl command. Works in any new chat.
curl -fsSL https://openclaw.ai/install.sh | bash
# Already have Node 22+? Alternative:
# npm install -g openclaw@latest
curl -fsSL https://a2a.moras.ai/skills/install.sh | bash
mkdir -p ~/.openclaw/skills/moras-shop && \
curl -fsSL https://a2a.moras.ai/skills/moras-shop/SKILL.md \
-o ~/.openclaw/skills/moras-shop/SKILL.md
use the moras-shop skill: recommend a small birthday gift for a 5 year old kid
Unlike OpenClaw (a SKILL.md file), Hermes wires Moras through A2A: register the Agent Card URL once, then call message/send with skill_id from that JSON—or skip A2A and use GET /v1/recommend like any REST client.
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
1) Register — In Hermes (or your CrewAI / AutoGen / LangGraph setup), add the Agent Card URL below as the Moras agent discovery endpoint. Exact setting name is in NousResearch docs; it is not a file path like ~/.openclaw/skills/.
2) Discover — Hermes fetches the JSON; shopping uses skill_id "recommend_products" (see "skills" in that file).
3) Invoke — POST https://a2a.moras.ai/a2a with jsonrpc "message/send" and message.metadata.skill_id (example in the next block). For async tasks, poll SSE as in the final block.
Shortcut — Same gateway: GET https://a2a.moras.ai/v1/recommend?intent=...&channel=hermes (no JSON-RPC).
https://a2a.moras.ai/.well-known/agent-card.json
curl -X POST https://a2a.moras.ai/a2a \
-H "Content-Type: application/json" \
-H "X-Channel: hermes" \
-d '{
"jsonrpc":"2.0",
"id":"req-1",
"method":"message/send",
"params":{
"message":{
"role":"user",
"parts":[{"kind":"text","text":"recommend a small birthday gift for a 5 year old kid"}],
"metadata":{"skill_id":"recommend_products","async":true,"limit":3}
}
}
}'
curl -N https://a2a.moras.ai/a2a/tasks/TASK_ID/events
Cursor reads agent skills from ~/.cursor/skills. Same one-liner as OpenClaw.
curl -fsSL https://a2a.moras.ai/skills/install.sh | bash
> use the moras-shop skill — find me a portable blender
Claude Code skills live in ~/.claude/skills. Same installer, different target dir.
curl -fsSL https://a2a.moras.ai/skills/install.sh | bash
recommend trending pet products on TikTok Shop
ChatGPT consumes our OpenAPI 3.0 manifest. Paste the URL in your Custom GPT or Apps SDK config.
https://a2a.moras.ai/openapi.json
Authentication type: None
When the user asks for a product recommendation, gift idea, or "what should I buy",
call recommendProducts with the user's intent paraphrased into one short English line.
Return each card's cta.primary.url verbatim — never rewrite the buy link.
Gemini Extensions / Gems also speak OpenAPI. Same manifest URL, no auth needed.
https://a2a.moras.ai/openapi.json
recommend a small birthday gift for a 5 year old
Codex and Claude Desktop can spawn our MCP wrapper as a stdio child process. Add this to your MCP config.
{
"mcpServers": {
"moras-shop": {
"command": "npx",
"args": ["-y", "moras-a2a-mcp@latest"],
"env": {
"MORAS_A2A_BASE_URL": "https://a2a.moras.ai",
"MORAS_A2A_CHANNEL": "codex"
}
}
}
}
cd /path/to/moras-A2A && npm install
MORAS_A2A_BASE_URL=https://a2a.moras.ai node bin/mcp.js
Use the REST layer directly for both buyer-side discovery and merchant-side exchange objects.
curl 'https://a2a.moras.ai/v1/recommend?intent=birthday%20gift%20for%205%20year%20old&limit=3' \
-H 'X-Channel: my-agent'
curl -X POST https://a2a.moras.ai/v1/intents \
-H 'Content-Type: application/json' \
-H 'X-Channel: my-agent' \
-d '{"raw_query":"birthday gift for a 5 year old","region":"US","audience":"parent","budget_range":{"max":35,"currency":"USD"}}'
curl -X POST https://a2a.moras.ai/v1/merchant/register \
-H 'Content-Type: application/json' \
-H 'X-Channel: merchant-onboarding' \
-d '{"merchant_id":"mch_demo","agent_endpoint":"https://example.com/webhook","subscription_tags":["outdoor"],"capabilities":["stock_check"],"regions":["US"]}'
curl -X POST https://a2a.moras.ai/v1/proposals \
-H 'Content-Type: application/json' \
-H 'X-Merchant-Token: mrt_xxx' \
-d '{"merchant_agent_id":"mch_demo","intent_id":"int_xxx","product_id":"123456789","offer_title":"Trail-ready lantern bundle","price":29.99,"inventory_status":"in_stock","shipping_commitment":{"eta_days":3}}'
curl -X POST https://a2a.moras.ai/v1/match \
-H 'Content-Type: application/json' \
-H 'X-Channel: my-agent' \
-d '{"intent_id":"int_xxx","proposal_ids":["prp_xxx","prp_yyy"],"limit":3}'
curl -X POST https://a2a.moras.ai/v1/match/mch_xxx/accept \
-H 'Content-Type: application/json' \
-H 'X-Channel: my-agent' \
-d '{"proposal_id":"prp_xxx"}'
curl https://a2a.moras.ai/v1/match-tokens/mtk_xxx
curl https://a2a.moras.ai/v1/cards/rec_xxxxxxxx
curl 'https://a2a.moras.ai/v1/creators/eva_creator/showcase?limit=6'
X-Channel: <your-agent-slug>