orkasa

The connector

The MCP connector

An agent's assistant, talking to their own CRM.

A broker pastes one URL into their Claude (or their ChatGPT), signs in to Orkasa, approves a few permissions — and from then on asks about their files and acts on them, in their own words.

https://orkasa.app/api/mcp

It is not a second API. It goes through the same authentication as /api/v1, the same permissions, the same rate limit, and — for the four tools that write — the same cores the REST routes call.

What changes is the shape of the answer: files and day-plans already composed, instead of table rows. The caller is a language model, and every join you make it do by hand is a join it can get wrong.

The nine tools

ToolPermissionWhat it answers
buscarleads:read"Do you have Mrs Herrera's number?" — clients and properties by name, phone, email, address.
ver_expedienteleads:read"How is the Felipe deal going?" — the whole file: operations, stage, property, viewings, offers, documents, latest messages, and the Copilot's next move.
mi_jornadaoperations:read"What do I have today?" — the next moves, own turn first, most overdue in front.
buscar_propiedadesproperties:read"What do I have in Chapinero under 600 million?"
agendaviewings:read"What viewings do I have this week?"
crear_leadleads:writeA dictated contact, with its buy or rent operation opened.
agendar_visitaviewings:writeA viewing, confirmed in the brokerage's time zone.
avanzar_etapaoperations:writeOne pipeline step, gates included.
registrar_ofertaoffers:writeAn offer received, without accepting it or moving the stage.

Details for each are in Tools.

Tool names are in Spanish: that is what the model matches against the broker's intent. Field names stay the ones from /api/v1. A lead_id that meant one thing here and another in REST is the kind of drift nobody notices until an integration breaks.

The protocol

Streamable HTTP, stateless. Five methods: initialize, notifications/initialized, ping, tools/list, tools/call. No session, no SSE stream, nothing to resume: each POST carries its own token and answers on its own, so two consecutive calls can land on two different instances without anyone noticing. The GET a stateful server would open answers 405.

initialize answers before the token: a client that has no credential yet must be able to learn which protocol version we speak, and answering it 401 sends some clients into a retry loop instead of into the OAuth flow.

Check it by hand

curl -s https://orkasa.app/.well-known/oauth-protected-resource | jq

curl -s -i -X POST https://orkasa.app/api/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -12

The second returns 401 with the challenge that starts discovery — see Connect an assistant.