The MCP server
Formule exposes a Model Context Protocol server, so an AI assistant can work with your agency’s data directly — finding leads, reading a lead’s history, updating a status, scheduling a follow-up.
https://mcp.formule.ioThe one thing to understand
Section titled “The one thing to understand”Every tool call runs as you.
The server does not hold a privileged key that reads whatever it likes. It resolves who you are, then queries the database as that person, under the same row-level security the app uses. A real estate agent’s assistant sees that agent’s leads. A manager’s sees the agency’s. There is no configuration that widens this, and no service-role fallback for a user-shaped request: no user, no call.
Who can connect
Section titled “Who can connect”| Client | Status |
|---|---|
| Claude.ai | Supported, via OAuth. |
| Claude Desktop | Supported, via OAuth. |
| MCP Inspector | Supported, for development. |
| ChatGPT | Supported, via OAuth, as a developer-mode app at https://mcp.formule.io/mcp. What each ChatGPT plan allows is on Connecting ChatGPT. |
| Claude Code | Not yet. It redirects to a loopback address on a changing port, and the authorization server matches redirect URIs exactly. |
Connecting Claude and Connecting ChatGPT walk through the setup.
How identity works
Section titled “How identity works”There are two ways in, and both end in the same place: a database query made as a real Formule user. Really in the app needs neither: it runs the same tools inside Formule with the signed-in person’s own session, under the same rules.
OAuth, for interactive clients
Section titled “OAuth, for interactive clients”Standard OAuth 2.1 with PKCE. Your client discovers the authorization server from the protected-resource metadata, sends you to Formule to approve the connection, and receives a token.
- Discovery —
GET https://mcp.formule.io/.well-known/oauth-protected-resourcereturns RFC 9728 metadata naming the authorization server. - Consent — you approve the connection on
app.formule.io, signed in as yourself. - Scope —
email. Read versus write is decided by your role and by tool annotations, not by scopes. There is no “read-only token”; there is a read-only you. - Unauthenticated requests get a
401carrying aWWW-Authenticateheader pointing at the metadata, so a well-behaved client can start the flow on its own.
Platform key plus signed chat identity
Section titled “Platform key plus signed chat identity”Really on WhatsApp is a trusted server. It holds a platform key and, with each call, a signed identity for the chat it is serving. The server verifies the signature, resolves it to the linked Formule user, and proceeds as that user.
This is how Really on WhatsApp answers about your leads without you ever handing it a password.
What the tools do
Section titled “What the tools do”The catalogue covers finding and reading leads, listings, matches and real estate agents; reporting your pipeline; and writing notes, statuses, follow-ups and nudges.
Tools are annotated read-only where they are, so a client can tell which calls are safe to make without asking you first.
search and fetch are there for ChatGPT: its company knowledge only includes
apps with tools of exactly those names. search finds leads and catalogue
listings, and fetch returns one whole record. Claude does not need them, and
they see nothing the other tools do not.
The full list, generated from the server source, is in Tools reference.
Where it runs
Section titled “Where it runs”mcp.formule.io is a Cloudflare worker in front of the server. It is the
connector’s public identity and the address you should configure. The underlying
function also answers on its own platform URL, but that address is not the
contract.
Limits worth knowing
Section titled “Limits worth knowing”- Scopes are not permissions. Do not design around them. Design around roles.
- Claude Code is not supported yet — see the table above.
- List results are capped per call. Ask a narrower question rather than paging for everything.

