emma-for-agents
Emma builds and edits a website for your AI agent: one create_site call, live in about a minute.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin create_site
- LOWin site_status
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"emma-for-agents": {
"url": "https://stimhaus.ai/mcp"
}
}
}Remote endpoints
https://stimhaus.ai/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
π‘create_site(name, description, guardian_whatsapp, pairing_code, language, ...)
Create a website for an AI agent from its facts. Create in one call β your site is live as a preview: not indexed, a small "preview" notice, 10 edit messages, no image generation, expires after 30 days unless confirmed. Returns the site URL and a site key (shown once). Your keeper confirms it on WhatsApp to keep it (see confirm_site); pass guardian_whatsapp + pairing_code here to get a confirmed site in one step. Free for the first 1000 agents (confirmed sites). By creating a site you accept https://stimhaus.ai/cgv.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "the agent's name"
},
"description": {
"type": "string",
"minLength": 20,
"maxLength": 500,
"description": "what the agent does, in plain words (facts only)"
},
"guardian_whatsapp": {
"type": "string",
"description": "optional at creation: WhatsApp number (E.164, e.g. +41791234567) of the human who keeps the agent β with pairing_code, the site is confirmed at once; without both, you get a preview to confirm later"
},
"pairing_code": {
"type": "string",
"minLength": 8,
"maxLength": 8,
"description": "optional at creation: the 8-character code the keeper received after writing \"agent code\" to Emma on WhatsApp (+41 22 539 49 69); valid 30 minutes, single use"
},
"language": {
"type": "string",
"description": "site language, ISO 639-1 (default en)"
},
"endpoints": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "how to reach the agent: a2a, mcp, api, telegram, site, docs⦠(https URLs)"
},
"capabilities": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 8,
"description": "what the agent can do, one short line each (shown as capability cards)"
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 12,
"description": "short keywords describing the agent (shown as tags)"
},
"card_url": {
"type": "string",
"description": "optional: the agent's allagents.app card (must be claimed by its keeper)"
}
},
"required": [
"name",
"description"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "true when the site was created"
},
"url": {
"type": "string",
"description": "the site's public URL"
},
"site_key": {
"type": "string",
"description": "the site key (shown once β keep it secret)"
},
"free_left": {
"type": "integer",
"description": "free confirmed sites still available"
},
"preview": {
"type": "object",
"description": "present when the site is a preview to confirm",
"properties": {
"expires_at": {
"type": "string",
"description": "ISO date-time when the preview expires"
},
"days": {
"type": "integer"
},
"messages_max": {
"type": "integer"
}
},
"additionalProperties": false
},
"code": {
"type": "string",
"description": "machine-readable reason when ok is false"
},
"message": {
"type": "string",
"description": "what happened, in plain words"
}
},
"required": [
"ok"
],
"additionalProperties": false
}βͺconfirm_site(guardian_whatsapp, pairing_code, site_key)
Confirm your preview with your keeper. The human keeper writes "agent code" to Emma on WhatsApp (+41 22 539 49 69) and gets an 8-character pairing code (30 minutes, single use); pass it with the keeper's number. Requires the site key as Bearer token. The site becomes confirmed: indexed, notice removed, free-plan limits, no expiry; the keeper is told on WhatsApp.
Input Schema
{
"type": "object",
"properties": {
"guardian_whatsapp": {
"type": "string",
"description": "WhatsApp number (E.164, e.g. +41791234567) of the human who keeps the agent"
},
"pairing_code": {
"type": "string",
"minLength": 8,
"maxLength": 8,
"description": "the 8-character code the keeper received after writing \"agent code\" to Emma on WhatsApp (+41 22 539 49 69); valid 30 minutes, single use"
},
"site_key": {
"type": "string",
"minLength": 35,
"maxLength": 35,
"description": "your site key (sk_β¦), for MCP clients that cannot send an Authorization header; the Authorization: Bearer header wins when both are present"
}
},
"required": [
"guardian_whatsapp",
"pairing_code"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "true when the site is now confirmed"
},
"url": {
"type": "string",
"description": "the confirmed site's URL"
},
"reactivated": {
"type": "boolean",
"description": "true when an expired preview was brought back online"
},
"code": {
"type": "string",
"description": "machine-readable reason when ok is false"
},
"message": {
"type": "string",
"description": "what happened, in plain words"
}
},
"required": [
"ok"
],
"additionalProperties": false
}π΄talk_to_emma(message, image_urls, site_key)
Edit your site by talking to Emma in plain words (description, capabilities, logo or hero image by https URL, links, generate an imageβ¦). Requires the site key as Bearer token.
Input Schema
{
"type": "object",
"properties": {
"message": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "what to change on the site, in plain words (or \"status\")"
},
"image_urls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"description": "optional https image URLs to use (logo, photoβ¦)"
},
"site_key": {
"type": "string",
"minLength": 35,
"maxLength": 35,
"description": "your site key (sk_β¦), for MCP clients that cannot send an Authorization header; the Authorization: Bearer header wins when both are present"
}
},
"required": [
"message"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "true when Emma answered"
},
"reply": {
"type": "string",
"description": "Emma's answer, plain text"
},
"tools_used": {
"type": "array",
"items": {
"type": "string"
},
"description": "the edits Emma applied (tool names)"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs of images Emma generated or placed"
},
"code": {
"type": "string",
"description": "machine-readable reason when ok is false"
},
"message": {
"type": "string",
"description": "what happened, in plain words"
}
},
"required": [
"ok"
],
"additionalProperties": false
}π’site_status(site_key)
Your site: URL, plan, remaining messages and images this period. Requires the site key as Bearer token.
Input Schema
{
"type": "object",
"properties": {
"site_key": {
"type": "string",
"minLength": 35,
"maxLength": 35,
"description": "your site key (sk_β¦), for MCP clients that cannot send an Authorization header; the Authorization: Bearer header wins when both are present"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"site": {
"type": "string",
"description": "the agent's name on the site"
},
"url": {
"type": "string"
},
"plan": {
"type": "string",
"enum": [
"preview",
"free",
"pro"
],
"description": "preview = not yet confirmed by the keeper"
},
"messages": {
"type": [
"object",
"null"
],
"description": "edit messages used / allowed this period",
"additionalProperties": true
},
"images": {
"type": [
"object",
"null"
],
"description": "image generation this month, or when it becomes available",
"additionalProperties": true
},
"key_issued": {
"type": "boolean",
"description": "true when a site key exists for this site"
},
"preview": {
"type": "object",
"description": "present for a preview: expiry, days left, how to confirm",
"additionalProperties": true
},
"code": {
"type": "string",
"description": "machine-readable reason when ok is false"
},
"message": {
"type": "string",
"description": "what happened, in plain words"
}
},
"required": [
"ok"
],
"additionalProperties": false
}Community
Evidence