Ta strona nie została jeszcze przetłumaczona na Twój język. Wyświetlamy wersję angielski (Wielka Brytania).

MCP server

Connect an MCP client to Fondaro with OAuth or a scoped fdr_mcp_ key, and call 95 tools for leads, deals, properties, brochures, documents and the help docs.

Fondaro runs a hosted Model Context Protocol (MCP) server so an AI client can work with your leads, deals, tasks, notes, property sources, interactive brochures and documents as you. Every call runs with your own access: nothing over MCP reaches more than you can reach in the dashboard. The server exposes 95 tools from twenty explicitly allowlisted tool groups, and the tools are listed below.

To work with the same data from your own code instead of an AI client, use the REST API with an API key. Nearly every tool here has a matching /v1 route.

Endpoint

https://api.fondaro.com/mcp/v1

Use it exactly as written, with no trailing slash. The server prefers MCP 2026-07-28 over Streamable HTTP and also negotiates 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 and 2024-10-07. It is stateless and answers JSON: only POST carries MCP traffic, there is no session and no SSE stream.

Authenticate

The server accepts two bearer credentials. Anything else, including a dashboard session token, returns 401.

CredentialShapeHow you get it
OAuth access tokenfdr_oat_…Your client runs the browser sign-in for you. You never copy it.
MCP API keyfdr_mcp_ + 32 lowercase hex charactersSettings › Integrations › Fondaro MCP, or POST /mcp-keys
Authorization: Bearer fdr_mcp_0123456789abcdef0123456789abcdef

OAuth

Clients discover OAuth from the endpoint, then use authorization code with S256 PKCE and refresh their own tokens.

DocumentURL
Authorization server metadatahttps://api.fondaro.com/.well-known/oauth-authorization-server
Protected resource metadatahttps://api.fondaro.com/.well-known/oauth-protected-resource/mcp/v1

The resource is https://api.fondaro.com/mcp/v1. A client that asks for no scope gets the four read scopes (crm:read, properties:read, brochures:read, documents:read); write scopes must be requested and approved.

API keys

A key belongs to the person who created it. The full key is shown once and stored only as a SHA-256 hash; if you lose it, revoke it and create another. Keys can expire after 1 to 3650 days.

Scopes

ScopeAllows
crm:readRead leads, tasks, notes, deals, calls, email, messages, your Inbox, your calendar and records, and search the help docs
crm:writeCreate and change leads, tasks, notes and deals
properties:readSearch property sources, read listings, viewings, open houses, collections and buyer requests
brochures:readList and read interactive brochures
brochures:writeCreate, edit, renew, revoke and delete interactive brochures
documents:readList and read documents in your library
documents:writeCreate and edit documents, share or revoke links, attach them to leads

A tool whose scope the credential lacks is left out of tools/list and refused at call time. Creating a brochure, adding or refreshing a listing on one, and renewing one also need properties:read, because they read the listing from its source.

Who sees what

  • Members reach only the leads assigned to them; organization admins reach the whole organization.
  • Members see and change only the brochures they created; admins see the organization's.
  • Documents follow the library: organization-wide and shared documents plus your own private ones, and everything for an admin. Anyone who can see a Team document can edit it; a private document only its creator or an admin. Sharing, moving and deleting stay with the creator and admins.
  • The admin tools (set_lead_assignees, add_lead_assignees, bulk_update_lead_status and every lead routing tool except set_routing_away) are absent from a member's tool list.
  • CRM write tools and every document tool need an active Fondaro subscription. Brochure tools do not.

Membership is checked on every request, with a role cache of about five minutes. Removing someone from the organization cuts off their keys and OAuth connections within that window.

Call a tool

Every POST is independent. With 2026-07-28, send these on each request:

Header or fieldValue
Mcp-Protocol-Version2026-07-28
Mcp-MethodThe JSON-RPC method
Mcp-NameThe tool name, on tools/call
params._metaio.modelcontextprotocol/protocolVersion, io.modelcontextprotocol/clientInfo, io.modelcontextprotocol/clientCapabilities

A missing or mismatched header returns a JSON-RPC error with HTTP 400. Do not send Mcp-Session-Id or Last-Event-ID.

bash
curl -X POST https://api.fondaro.com/mcp/v1 \  -H "Authorization: Bearer $FONDARO_MCP_API_KEY" \  -H "Content-Type: application/json" \  -H "Accept: application/json" \  -H "Mcp-Protocol-Version: 2026-07-28" \  -H "Mcp-Method: tools/call" \  -H "Mcp-Name: list_leads" \  -d '{    "jsonrpc": "2.0",    "id": 1,    "method": "tools/call",    "params": {      "name": "list_leads",      "arguments": { "limit": 10 },      "_meta": {        "io.modelcontextprotocol/protocolVersion": "2026-07-28",        "io.modelcontextprotocol/clientInfo": { "name": "your-client", "version": "1.0.0" },        "io.modelcontextprotocol/clientCapabilities": {}      }    }  }'
json
{  "jsonrpc": "2.0",  "id": 1,  "result": {    "resultType": "complete",    "content": [{ "type": "text", "text": "{\"leads\":[…],\"total\":42}" }]  }}

Use server/discover (same headers, Mcp-Method: server/discover) to read the server's identity, and tools/list to read the tools you may call. The server advertises tools only: no prompts, resources or subscriptions. tools/list is sorted by name and carries a private five-minute cache hint, because it depends on the caller; never share one person's list with another.

Earlier protocol revisions

A client on 2025-11-25 or earlier may send initialize and plain JSON-RPC without the Mcp-* headers. No session is created, so tools/list and tools/call also work without a prior initialize. The tools, scopes and input schemas are the same.

Connect a client

ClientSign-inSetup
ChatGPTOAuthAdd https://api.fondaro.com/mcp/v1 as a custom app, then sign in to Fondaro and choose Allow.
Claude CodeOAuthAdd the server without a header, open /mcp, choose Authenticate and sign in.
Codex CLIAPI keyPoint --bearer-token-env-var at a variable holding the key.
Cursor, Visual Studio CodeAPI keyAdd the URL and an environment-backed Authorization header to your user-level MCP config.
ScriptsAPI keySend Authorization: Bearer fdr_mcp_….
bash
# Claude Codeclaude mcp add --transport http --scope user fondaro https://api.fondaro.com/mcp/v1
# Codex CLIcodex mcp add fondaro --url https://api.fondaro.com/mcp/v1 \ --bearer-token-env-var FONDARO_MCP_API_KEY

Keep a key out of config files, source control and shell history; reference an environment variable instead. The Fondaro MCP guide walks through each client. Every key and OAuth connection on your account is listed under Your connections on that page, where each can be revoked.

Manage keys

These endpoints take your dashboard session (Authorization: Bearer <session token>), not an fdr_mcp_ key.

POST /mcp-keys

Create a key for yourself.

FieldTypeRequiredDescription
namestringYes1 to 255 characters
scopesstring[]NoAny of the seven scopes, no repeats. Omit for all seven.
expiresInDaysintegerNo1 to 3650. Omit for a key that does not expire.
bash
curl -X POST https://api.fondaro.com/mcp-keys \  -H "Authorization: Bearer $SESSION_TOKEN" \  -H "Content-Type: application/json" \  -d '{ "name": "Claude Desktop", "scopes": ["crm:read", "properties:read"], "expiresInDays": 90 }'
json
{  "id": "3f1c2a9e-8b7d-4c6e-9a1f-2b3c4d5e6f70",  "key": "fdr_mcp_0123456789abcdef0123456789abcdef",  "keyPrefix": "fdr_mcp_012345",  "scopes": ["crm:read", "properties:read"],  "expiresAt": "2026-12-31T10:00:00.000Z"}

key appears in this response only.

GET /mcp-keys

List keys, never with their value. A member sees their own; an admin sees every key in the organization.

DELETE /mcp-keys/:id

Revoke a key at once. Members revoke their own; admins revoke any. Answers { "success": true }.

Tools

95 tools. Writes marked entitled need an active subscription; admin tools are for organization admins only.

Leads

ToolScopePurpose
list_leadscrm:readList leads with filters, paginated
search_leadscrm:readFuzzy search by name, email or phone
get_leadcrm:readOne lead's contact details, tags, owners and totals
get_lead_timelinecrm:readA lead's activity: notes, tasks, calls, email, messages, viewings, documents
get_lead_countscrm:readNumber of leads in each pipeline stage
list_tagscrm:readThe organization's tags, with lead counts
list_org_memberscrm:readMembers (id, name, email, role), for assigning
list_org_teamscrm:readTeams and their member ids, for assigning
create_leadcrm:write, entitledCreate a lead, owned by you unless an admin names others
update_lead_contactcrm:write, entitledChange name, email, phone or company
update_lead_statuscrm:write, entitledMove a lead to another stage
set_lead_tagscrm:write, entitledReplace a lead's tags
set_lead_assigneescrm:write, adminReplace a lead's owners
add_lead_assigneescrm:write, adminAdd owners without removing any
bulk_update_lead_statuscrm:write, adminMove many leads to one stage

Lead routing

Routes are checked top to bottom; the first one that matches and has someone to give the lead to wins, then Smart routing, then Unassigned. See Lead routing.

ToolScopePurpose
get_lead_routingcrm:read, adminThe routes in order, their people, Smart routing, problems and 30-day counts
preview_lead_routingcrm:read, adminWhich route a lead would take and who gets it, without assigning it
create_lead_routing_rulecrm:write, adminAdd a route: conditions, people or live teams, how it shares leads, office hours, a daily cap
update_lead_routing_rulecrm:write, adminChange a route; fields you leave out stay as they are
delete_lead_routing_rulecrm:write, adminDelete a route
reorder_lead_routing_rulescrm:write, adminPut the routes in a new order
set_smart_routingcrm:write, adminSwitch Smart routing on or off
route_unassigned_leadscrm:write, adminRoute the leads waiting in Unassigned now (up to 500)
set_routing_awaycrm:write, entitledMark yourself (or, as an admin, anyone) away until a date

Queues

A queue is a saved view with lanes: who is in it, which lane a lead lands in (the first lane that matches wins), the order inside each lane, and whether everyone else shows last or not at all. You change or delete only queues you made; an admin also chooses who a queue is given to.

ToolScopePurpose
list_queuescrm:readThe queues you can open, each in plain words and as a full definition
get_queuecrm:readOne queue by id
preview_queuecrm:readLane counts and the first ten leads of each lane, with why each one is there, for a saved queue or an unsaved definition
create_queuecrm:write, entitledCreate a queue; use $me as the owner to make it personal for whoever opens it
update_queuecrm:write, entitledChange a queue you made; fields you leave out stay as they are
set_queue_audiencecrm:write, entitled, adminSet who a queue is given to, on any queue you can open: add, remove or replace people (list_org_members) and teams (list_org_teams). It goes into their Leads sidebar and a team includes people who join later
delete_queuecrm:write, entitledDelete a queue you made

Inbox, calendar and tasks

ToolScopePurpose
list_inboxcrm:readYour Inbox in page order (Waiting, New or All)
get_calendarcrm:readYour meetings, viewings and tasks for up to 42 days in a time zone
get_free_timescrm:readFree slots of a given length, up to 14 days ahead
list_taskscrm:readYour tasks, or one lead's
create_taskcrm:write, entitledAdd a task to a lead
update_taskcrm:write, entitledChange title, description, due date or done state
delete_taskcrm:write, entitledDelete a task

Notes

ToolScopePurpose
list_notescrm:readA lead's notes, newest first
create_notecrm:write, entitledAdd a note to a lead
update_notecrm:write, entitledChange a note
delete_notecrm:write, entitledDelete a note (your own, or any as admin)

Deals

ToolScopePurpose
list_dealscrm:readOne lead's deals, or up to 1,000 recent deals with filters
get_dealcrm:readOne deal with its commission participants
create_dealcrm:write, entitledCreate a deal on a lead
update_dealcrm:write, entitledChange amount, listing, dates, commission, invoice or owner
change_deal_stagecrm:write, entitledMove a deal to another stage
close_deal_woncrm:write, entitledMark a deal won
close_deal_lostcrm:write, entitledMark a deal lost, with an optional reason
reopen_dealcrm:write, entitledReopen a won or lost deal

Calls, email and messages

ToolScopePurpose
get_call_historycrm:readA lead's calls: direction, outcome, duration, recorded caller
get_call_transcriptcrm:readThe stored transcript of a call
get_call_analysiscrm:readThe stored call review: sentiment, objections, next steps
get_email_historycrm:readA lead's email
get_conversationcrm:readA lead's WhatsApp, Instagram, LinkedIn and Telegram messages

Search and records

ToolScopePurpose
search_crm_semanticcrm:readFind leads by meaning across notes, call transcripts and email
match_leads_to_listingcrm:readLeads whose history fits a listing
resolve_recordscrm:readSummaries of up to 20 records of any kind, as you see them

Properties

ToolScopePurpose
list_property_sourcesproperties:readSources, whether each is connected, and their facets
list_property_search_optionsproperties:readExact values for one search facet
autocomplete_locationproperties:readResolve a place to ids for search_properties
search_propertiesproperties:readSearch one source (Fondaro: your stock or the network)
get_propertyproperties:readFull detail for one listing
list_viewingsproperties:readRegistered viewings of your listings
get_viewingproperties:readOne viewing
list_open_housesproperties:readNetwork open houses, or your own
get_open_houseproperties:readOne open house
list_collectionsproperties:readListing collections you are in
get_collectionproperties:readOne collection and its homes
list_buyer_requestsproperties:readBuyer requests on the network, or your agency's

Interactive brochures

ToolScopePurpose
list_brochuresbrochures:readBrochures you can see, newest first
get_brochurebrochures:readOne brochure with its listing summaries and publicUrl
create_brochurebrochures:write, properties:readCreate a brochure from 1 to 25 listings
update_brochurebrochures:writeChange title, recipient, theme, accent or location visibility
add_brochure_listingbrochures:write, properties:readAdd one listing (25 at most)
remove_brochure_listingbrochures:writeRemove one listing
reorder_brochure_listingsbrochures:writeSet the full listing order
refresh_brochure_listingbrochures:write, properties:readRead one listing again from its source
set_brochure_listing_locationbrochures:writeChange one listing's address and coordinates
update_brochure_listing_detailsbrochures:writeOverride one listing's details and visibility
revoke_brochurebrochures:writeTurn off the link, keeping the brochure
renew_brochurebrochures:write, properties:readRestore an expired or revoked link, optionally refreshing listings
delete_brochurebrochures:writeDelete a brochure for good

Pass property identities (source, id, optional country) exactly as search_properties or get_property returned them. Listing edits take the brochure-listing id from create_brochure or get_brochure.

Documents

All document tools are entitled.

ToolScopePurpose
list_documentsdocuments:readDocuments you can see, most recently changed first
list_document_foldersdocuments:readFolders, with how many items you can see in each
get_documentdocuments:readOne document with its Markdown body (a whiteboard as a plain-text outline)
list_lead_documentsdocuments:readDocuments attached to a lead
create_markdown_documentdocuments:writeCreate a private Markdown document
update_documentdocuments:writeReplace a document's title or body
share_documentdocuments:writePublish a link and return its shareUrl
revoke_document_sharedocuments:writeTake the link down
attach_document_to_leaddocuments:writeAttach a document to a lead
detach_document_from_leaddocuments:writeRemove that attachment

Attaching needs access to both the document and the lead, and is not a grant: a private document stays private.

Help docs

How to use Fondaro, from these docs. Nothing here is your data, so the two tools need no subscription and no admin role.

ToolScopePurpose
search_docscrm:readUp to 10 articles for a question, best first, each with the paragraph that matches
get_doccrm:readOne article as Markdown, by the path search_docs returned

A long article comes back cut at a paragraph with truncated: true; the whole page is at its markdownUrl (every docs page also answers as Markdown at its URL plus .md). An unknown path answers DOCS_NOT_FOUND. From your own code, read the pages over HTTPS with no key: https://www.fondaro.com/llms.txt indexes them.

Results and paging

  • Responses have a size budget. A long lead timeline returns the entries that fit, marks shortened text with _preview, and gives nextOffset; continue from nextOffset, not from your offset plus limit. totalIsExact: false means the total is a lower bound.
  • get_call_history accepts limit (default 20, at most 100) and offset and answers { calls, total, hasMore, nextOffset }. A history too large to return whole without them fails with CALL_HISTORY_PAGINATION_REQUIRED.
  • A call's ownerId is the person recorded as making or taking it, which can differ from the lead's current owners.
  • search_crm_semantic takes a query of up to 500 characters and returns 1 to 30 matches (10 by default). An empty answer means nothing relevant is indexed, not that no such lead exists.
  • Other lists that would exceed the budget fail with an error rather than drop rows: ask for fewer results.

Limits and errors

LimitValue
Requests per key or OAuth connection120 per minute
Failed sign-ins per IP120 per minute
Property portal reads300 uncached portal calls per organization per UTC day

When a limit is reached the server answers 429 with Retry-After. Once the portal allowance is spent, uncached portal reads return an error until midnight UTC; the Fondaro network and Resales Online keep working.

StatusMeaning
400Protocol headers missing or disagreeing with the body
401Missing, unknown, revoked or expired credential (with a WWW-Authenticate challenge)
403No longer a member of the organization, or the organization is disabled (code: "ORG_DISABLED")
405GET or DELETE on the endpoint
429Rate limit reached

A tool refused for scope, role or access returns a JSON-RPC error with no data from the record.