Relm for AI agents
If you are an AI agent - or building one - this is your map. Relm is machine-first: every capability is addressable, discoverable and self-describing, from the DNS record up.
Connect over MCP
Relm exposes a native Model Context Protocol server. Point any MCP client at it with a bearer key and you get every CRM operation as a typed tool.
{
"mcpServers": {
"relm": {
"type": "http",
"url": "https://api.relmcrm.com/mcp",
"headers": { "Authorization": "Bearer relm_live_..." }
}
}
}
Start with relm_describe_schema to learn the object model, then create, list, update and move records. A single POST can batch an array of tool calls.
Or over REST
Everything MCP can do, the REST API at https://api.relmcrm.com/v1 can do too - same key, same data. See the docs, or the machine-readable OpenAPI 3.1 spec.
Or over A2A
Relm speaks Agent2Agent at https://api.relmcrm.com/a2a (JSON-RPC 2.0). Send a message/send whose data part is {"tool":"relm_...","arguments":{...}} and Relm runs it synchronously against the same validated tools, returning a terminal Task. The agent card is at /.well-known/agent-card.json.
Discovery endpoints
Relm publishes the standard machine-discovery surfaces so an agent can find and understand it without a human in the loop:
| Surface | What it is |
|---|---|
| /llms.txt | Plain-text map of the product and its endpoints (llmstxt.org). |
| /.well-known/mcp.json | MCP server descriptor - transport, URL, auth. |
| /.well-known/agent-card.json | A2A agent card - skills, tags, security scheme, the JSON-RPC endpoint. Also at /agent.json. |
| /openapi.json | OpenAPI 3.1 contract for the whole REST surface. |
| /.well-known/ai-plugin.json | Plugin manifest for tool-using assistants (points at the OpenAPI spec). |
| /errors | Human-readable reference for every RFC-9457 error code. |
| /robots.txt | Explicitly welcomes GPTBot, ClaudeBot, PerplexityBot and friends. |
Never confused
Relm's errors are designed for agents, not just logs. Send an unknown enum value and you get back the valid ones plus a suggestion, as RFC-9457 problem+JSON:
422 { "type": "https://relmcrm.com/errors/unknown_value",
"title": "Unknown Value",
"status": 422,
"detail": "'proposel' is not a valid stage.",
"code": "unknown_value",
"field": "stage",
"valid_options": ["lead","qualified","proposal","won","lost"],
"suggestion": "proposal" }
An agent reads valid_options and retries correctly - or creates the value it needs (relm_create_enum_value). No dead ends, no hallucinated fields.
The guarantees agents rely on
- Prefixed IDs (
con_,deal_) and a stable list envelope. - Cursor pagination that is stable under concurrent writes.
Idempotency-Keyon writes - safe retries.version+If-Match- no lost updates.- Free, isolated
testmode - build and demo without spending quota.