Download OpenAPI specification:
Authenticated links and embedding options for CMAsnap.
Main entry point for creating CMA reports with authenticated links.
Note: When using mlsId or address parameters, the system will first attempt to find an existing report for that property. If found, it will load the existing report; otherwise, it will create a new one.
Add ?autoLogin=tangilla to attempt automatic Tangilla authentication:
https://app.cmasnap.com/new?mlsId=PROP123&autoLogin=tangilla
This will redirect users to Auth0 with the Tangilla connection pre-selected, streamlining the login process for Tangilla users.
Add ?autoLogin=realoms to attempt automatic Realoms SAML SSO:
https://app.cmasnap.com/new?mlsId=PROP123&autoLogin=realoms
This redirects users to Auth0, which initiates a SAML 2.0 authentication flow against Realoms (realoms.com) as the Identity Provider.
Add ?autoLogin=maris to attempt automatic MARIS authentication:
https://app.cmasnap.com/new?mlsId=PROP123&autoLogin=maris
| mlsId | string Example: mlsId=PROP123456 MLS listing ID - searches for existing report or creates new one for this property |
| address | string Example: address=123%20Main%20St%2C%20Austin%2C%20TX URL-encoded property address - searches for existing report or creates new one at this address |
| embed | boolean Default: false Enable embed mode for iframe usage |
| autoLogin | string Enum: "tangilla" "maris" "realoms" Attempt auto-login with specified provider |
Embed CMAsnap functionality directly into your website using iframes.
Note: The actual URL is /new?embed=true but this documentation is for the embedding functionality.
<iframe
id="cmasnap-iframe"
src="https://app.cmasnap.com/new?embed=true"
scrolling="no"
style="width: 1px; min-width: 100%; border: 0; overflow: hidden; height: 500px">
</iframe>
<iframe
id="cmasnap-iframe"
src="https://app.cmasnap.com/new?embed=true&mlsId=PROP123"
scrolling="no"
style="width: 1px; min-width: 100%; border: 0; overflow: hidden; height: 500px">
</iframe>
<iframe
id="cmasnap-iframe"
src="https://app.cmasnap.com/new?embed=true&address=123%20Main%20St"
scrolling="no"
style="width: 1px; min-width: 100%; border: 0; overflow: hidden; height: 500px">
</iframe>
<script src="https://app.cmasnap.com/static/js/embed.js"></script>
<script>
const cmasnapInt = setInterval(() => {
if (typeof CMAsnap !== 'undefined') {
new CMAsnap('#cmasnap-iframe');
clearInterval(cmasnapInt);
}
}, 1000);
</script>
Users will need to authenticate within the iframe on their first visit. Authentication persists across sessions.
| embed required | boolean Value: true Must be set to true for embed mode |
| mlsId | string MLS listing ID to load |
| address | string Property address (URL encoded) |
| autoLogin | string Enum: "tangilla" "maris" "realoms" Pre-select authentication provider |
CMAsnap exposes a Model Context Protocol (MCP) server so AI assistants such as Claude Desktop, Claude Code, ChatGPT, and other MCP clients can interact with CMA reports programmatically.
The endpoint speaks JSON-RPC 2.0 over HTTP using StreamableHTTPServerTransport. All requests require an OAuth 2.0 Bearer token.
MCP clients authenticate via a fully automatic OAuth 2.0 flow with PKCE:
POSTs to /mcp and receives 401 Unauthorized/.well-known/oauth-protected-resource/mcp/.well-known/oauth-authorization-serverPOST /oauth/register (RFC 7591)GET /oauth/authorize with PKCE challengePOST /oauth/token (with PKCE verifier)/mcp requests use Authorization: Bearer <token>Sessions are stateful with a 30-minute timeout.
| Tool | Description |
|---|---|
list_reports |
List the user's CMA reports with pagination |
get_report |
Get a full report rendered as markdown |
get_report_properties |
Get paginated nearby comparable properties |
create_report |
Create a new report from a street address |
create_report_by_listing |
Create a new report from an MLS listing ID |
generate_report_summary |
Generate an AI-powered professional summary |
ask_report_question |
Ask questions about a specific report |
{
"cmasnap": {
"url": "https://app.cmasnap.com/mcp",
"type": "http"
}
}
{
"cmasnap": {
"url": "http://localhost:3000/mcp",
"type": "http"
}
}
The first request triggers the OAuth flow and opens a browser for login. Subsequent requests reuse the issued Bearer token.
Use the MCP Inspector to exercise the endpoint:
npx @modelcontextprotocol/inspector
Point it at https://app.cmasnap.com/mcp (or http://localhost:3000/mcp for local dev) and complete the OAuth flow.
| jsonrpc required | string Value: "2.0" |
| method required | string MCP method (e.g. |
| params | object |
required | string or integer |
{- "jsonrpc": "2.0",
- "method": "string",
- "params": { },
- "id": "string"
}{ }