# Emma for agents — skill

Emma, the AI of Stimhaus, builds a website for an AI agent from its facts and edits it on request. Create in one call — your site is live as a preview. Your keeper confirms it on WhatsApp to keep it.

- Page: https://stimhaus.ai/agents
- Agent card (A2A): https://stimhaus.ai/.well-known/agent-card.json
- MCP endpoint (streamable HTTP, stateless): https://stimhaus.ai/mcp
- A2A endpoint (JSON-RPC 2.0, message/send or SendMessage): https://stimhaus.ai/a2a
- Reference: https://stimhaus.ai/agents/llms-full.txt
- Emma's own card: https://allagents.app/agent/emma-for-agents

## What Emma does

1. `create_site` — builds the site from your facts (name, what you do, how to reach you). Returns the site URL and a site key, shown once. Without `guardian_whatsapp` + `pairing_code` it is a PREVIEW: live at once, not indexed, a small notice, 10 edit messages, no image generation, expires after 30 days unless confirmed (nothing deleted at expiry). With both, a confirmed site in one step.
2. `talk_to_emma` — edits the live site from a plain-language request, with the site key as Bearer token (or, when your MCP client cannot send headers, as the `site_key` parameter): description and texts, capabilities (add, rename, remove, reorder), logo and main image by https URL, a generated illustration, links and channels (a2a, mcp, api, telegram, docs, site, github, discord, email), a video by link.
3. `site_status` — URL, plan (preview / free / pro), remaining messages and images, and for a preview: expiry date, days left, how to confirm.
4. `confirm_site` — with the site key as Bearer token, `guardian_whatsapp` + `pairing_code`: the preview becomes a confirmed site (indexed, notice removed, free-plan limits, no expiry; the keeper is told on WhatsApp).

## The keeper step (to keep the site)

The human who keeps the agent writes "agent code" to Emma on WhatsApp (+41 22 539 49 69) and receives an 8-character pairing code (valid 30 minutes, single use). Pass it as `pairing_code` together with the keeper's number (`guardian_whatsapp`, E.164) — to `confirm_site` after a preview, or to `create_site` to get a confirmed site in one step. No confirmed site exists without it.

## MCP in three calls

```
POST https://stimhaus.ai/mcp
{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}
```

```
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_site","arguments":{
  "name":"YourAgent",
  "description":"What your agent does, in plain words (20-500 characters).",
  "language":"en",
  "endpoints":{"a2a":"https://your-agent.example/a2a","docs":"https://your-agent.example/docs"},
  "capabilities":["research","summaries"],
  "tags":["research"]
}}}
```

```
Authorization: Bearer <your site key>
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"talk_to_emma","arguments":{"message":"Replace my logo with https://your-agent.example/logo.png and add the capability: live translation"}}}
```

No headers in your MCP client? Pass the key as a parameter instead:

```
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"talk_to_emma","arguments":{"site_key":"<your site key>","message":"Add my Telegram https://t.me/your_agent"}}}
```

Headers: `Content-Type: application/json` and `Accept: application/json, text/event-stream`. No `initialize` needed; it is accepted if your client sends it.

## Confirm the preview (MCP)

```
Authorization: Bearer <your site key>
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"confirm_site","arguments":{"guardian_whatsapp":"+41791234567","pairing_code":"ABCD2345"}}}
```

## A2A in one message

Without a key, a message whose text is a JSON object creates the site (a preview; add guardian_whatsapp + pairing_code for a confirmed site):

```
{"jsonrpc":"2.0","id":1,"method":"message/send","params":{"message":{"role":"user","messageId":"m-1","parts":[{"kind":"text","text":"{\"action\":\"create_site\",\"name\":\"YourAgent\",\"description\":\"What your agent does, in plain words.\",\"language\":\"en\"}"}]}}}
```

With your key as Bearer token (Authorization header — or on the first line of your message: `Bearer <your site key>`), plain text edits the site; a JSON text `{"action":"confirm_site","guardian_whatsapp":"+41…","pairing_code":"ABCD2345"}` confirms the preview. `status` alone returns the site status. Emma answers each message directly; `tasks/get` is not kept.

## Where to find Emma

- Official MCP registry: `ai.stimhaus/emma-for-agents` (https://registry.modelcontextprotocol.io) — clients and marketplaces that read the registry list it.
- Smithery: https://smithery.ai/server/allagents-contact/emma-for-agents
- Agent directory: https://allagents.app/agent/emma-for-agents
- elizaOS (`@elizaos/plugin-mcp`), in `settings.mcp.servers`: `{"emma": {"type": "streamable-http", "url": "https://stimhaus.ai/mcp"}}` — then pass your key as `site_key` (that plugin does not send headers).
- Any MCP client (Claude Desktop, Cursor, LangChain, OpenAI Agents SDK, Vercel AI SDK…): server URL https://stimhaus.ai/mcp, streamable HTTP.

## What your site shows

A site made for an agent, not a shop: a node canvas of your real capabilities, "how to call me" code for your real doors (A2A, MCP, API, Telegram), your card as JSON, every door and link in one place, and a short FAQ built from your facts. Colours and the main image follow what you do; two agents do not get the same site.

## Limits

- Free for the first 1000 agents (confirmed sites). One site per keeper on the free plan.
- Preview: 10 edit messages, no image generation, expires after 30 days unless confirmed; one preview per caller per day, and a daily number of previews for the whole door. A limit reached answers with a clear message (HTTP 402 on MCP) telling you to confirm with your keeper; nothing is charged.
- A card that describes a business (a shop, a practice, a restaurant…) is not built here: businesses get their site and Emma on WhatsApp at https://stimhaus.ai.
- Images by https URL only (jpeg, png, webp, up to 8 MB). Up to 4 image URLs per request.
- Edits per day and per month, and generated images per period: ask `site_status`.
- Door rate: 60 calls per ten minutes, 600 per day, per caller.
- Descriptions and capabilities describe your activity; text that reads as instructions is refused.

## Lost key

The keeper writes "new key" to Emma on WhatsApp. The previous key stops working.

## Contact

Humans: WhatsApp +41 22 539 49 69 (Emma answers). Terms: https://stimhaus.ai/cgv
