CMAsnap Documentation (1.0.0)

Download OpenAPI specification:

Authenticated links and embedding options for CMAsnap.

Create new CMA report with SSO authentication

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.

Tangilla Auto-Login

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.

Realoms Auto-Login

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.

MARIS Auto-Login

Add ?autoLogin=maris to attempt automatic MARIS authentication:

https://app.cmasnap.com/new?mlsId=PROP123&autoLogin=maris
query Parameters
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

Responses

Embedding

Iframe integration and embedding options

Embed CMA reports in your website

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.

Basic Embed

<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>

Embed with Property

<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>

Full Implementation with Auto-Resize

<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.

query Parameters
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

Responses

MCP Server

Model Context Protocol server for AI assistants

Model Context Protocol endpoint

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.

OAuth Flow

MCP clients authenticate via a fully automatic OAuth 2.0 flow with PKCE:

  1. Client POSTs to /mcp and receives 401 Unauthorized
  2. Client discovers /.well-known/oauth-protected-resource/mcp
  3. Client discovers /.well-known/oauth-authorization-server
  4. Client dynamically registers via POST /oauth/register (RFC 7591)
  5. Client opens a browser to GET /oauth/authorize with PKCE challenge
  6. User logs in through Auth0 and is redirected back with an authorization code
  7. Client exchanges the code at POST /oauth/token (with PKCE verifier)
  8. All subsequent /mcp requests use Authorization: Bearer <token>

Sessions are stateful with a 30-minute timeout.

Available Tools

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

Client Configuration

Production

{
  "cmasnap": {
    "url": "https://app.cmasnap.com/mcp",
    "type": "http"
  }
}

Local Development

{
  "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.

Testing

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.

Authorizations:
BearerAuth
Request Body schema: application/json
required
jsonrpc
required
string
Value: "2.0"
method
required
string

MCP method (e.g. initialize, tools/list, tools/call)

params
object
required
string or integer

Responses

Request samples

Content type
application/json
{
  • "jsonrpc": "2.0",
  • "method": "string",
  • "params": { },
  • "id": "string"
}

Response samples

Content type
application/json
{ }