# Groundbreak MCP server
Groundbreak's development database and CRM, for any AI client that speaks MCP. Search permits, deeds, loans and liens in 8 markets, read a project or a company, look up who owns a property and who is behind the LLC, and work your deals.
- Server: `https://mcp.groundbreak.city/mcp` (Streamable HTTP)
- Auth: sign in with OAuth (the Claude app, ChatGPT and most clients do it for you), or send `Authorization: Bearer <your key>`, or put the key as the last part of the URL
- Make a key: https://pro.groundbreak.city/connect
- These docs: https://docs.groundbreak.city/mcp (this file: https://docs.groundbreak.city/mcp.md)

## Connect

### Claude Code
Run this in a terminal. Every Claude Code session gets Groundbreak. Or leave out the header and run /mcp in Claude Code to sign in instead.
```
claude mcp add --transport http groundbreak https://mcp.groundbreak.city/mcp \
  --header "Authorization: Bearer <your key>"
```

### Claude app
In Claude on the web or desktop, open Settings, then Connectors, then Add custom connector. Name it Groundbreak and paste this URL.
Claude sends you to Groundbreak to sign in and pick what it can do. Phone and tablet pick it up from your account.
```
https://mcp.groundbreak.city/mcp
```

### ChatGPT
In ChatGPT, turn on developer mode in Settings, then add a connector with this URL and OAuth. Which plans have developer mode is up to OpenAI.
ChatGPT sends you to Groundbreak to sign in and pick what it can do.
```
https://mcp.groundbreak.city/mcp
```

### Cursor
Add this to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json for every project.
```
{
  "mcpServers": {
    "groundbreak": {
      "url": "https://mcp.groundbreak.city/mcp",
      "headers": {
        "Authorization": "Bearer <your key>"
      }
    }
  }
}
```

### VS Code
Add this to .vscode/mcp.json, or run MCP: Open User Configuration to use it in every project. VS Code asks for the key once and keeps it out of the file.
```
{
  "inputs": [
    {
      "type": "promptString",
      "id": "groundbreak-key",
      "description": "Groundbreak key",
      "password": true
    }
  ],
  "servers": {
    "groundbreak": {
      "type": "http",
      "url": "https://mcp.groundbreak.city/mcp",
      "headers": {
        "Authorization": "Bearer ${input:groundbreak-key}"
      }
    }
  }
}
```

### Codex
Put the key in your shell profile, then add the server to ~/.codex/config.toml.
```
# ~/.zshrc or ~/.bashrc
export GROUNDBREAK_KEY="<your key>"

# ~/.codex/config.toml
[mcp_servers.groundbreak]
url = "https://mcp.groundbreak.city/mcp"
bearer_token_env_var = "GROUNDBREAK_KEY"
```

### Other
Streamable HTTP at this address. A client that signs in with OAuth needs only the URL. Otherwise send the key as a Bearer token, or, for a client that takes only a URL and cannot sign in, put the key at the end of it.
```
URL     https://mcp.groundbreak.city/mcp
Header  Authorization: Bearer <your key>
Or      https://mcp.groundbreak.city/mcp/<your key>
```

A key in a URL lives in that client's settings. Treat the URL like a password.

## Requests and responses
Every request is an HTTP POST of one JSON-RPC 2.0 message (or a batch) to https://mcp.groundbreak.city/mcp, with the key as a Bearer token. Real responses from the public record, captured 2026-10-28, with lists cut to two items. The tools that change a workspace or spend credits show the shape they return, with a made-up person.

### initialize
The first call a client makes. The answer names the server, the protocol version and, in instructions, the workspace, the plan, the limits and the credits left.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {
        "listChanged": false
      }
    },
    "serverInfo": {
      "name": "groundbreak-crm",
      "title": "Groundbreak",
      "version": "1.1.0"
    },
    "instructions": "Groundbreak: the development database and CRM for commercial real estate. The database (search_records, search_projects, get_project, search_companies) holds permits, deeds, loans, starts, zoning cases and liens in Austin, Atlanta, Miami, Nashville, Tampa Bay, Charlotte, Dallas-Fort Worth, Toronto, the projects they belong to and the companies on them; anything filed in the last 90 days names its parties only on Pro, older records come back whole. The CRM: any Florida property, and outside Florida the counties Groundbreak reads (Travis, Dallas, Tarrant, Fulton, DeKalb, Davidson, Mecklenburg). Start from a property: lookup_property (address with city, folio or owner name), then add_property to save it; for a Florida property the owner's Sunbiz filing is read and the people behind an LLC become contacts (Sunbiz is Florida only). find_phones skip traces them and spends credits; ask the user before calling it. get_property and groundbreak_records return the public record: appraiser sales, clerk deeds, mortgages, liens, lis pendens and permits. Deals: list_deals, get_deal, create_deal, move_deal, add_note, create_task. Every result carries app URLs; link them. Never invent a phone or an owner. Numbers marked DNC must not be cold called. A result too long to send comes back with its longest lists cut and a trimmed note: narrow the ask for the rest. Full docs: https://docs.groundbreak.city/mcp.md. Workspace: Jordan's team. Plan: Pro. Limits: 60 API calls a minute and 2,000 API calls a day. Skip-trace credits left: 100."
  }
}
```

### tools/list
Every tool with its JSON Schema. A read key lists only the tools that read. Here the first of 22.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "lookup_property",
        "title": "Lookup property",
        "description": "Look up a property by street address, parcel id or folio, or every parcel an owner name holds: any Florida property on the statewide tax roll, and outside Florida any parcel in Travis, Dallas, Tarrant, Fulton, DeKalb, Davidson and Mecklenburg counties on the county rolls Groundbreak reads. Returns the owner, mailing address, use, size, value and last sale. Writes nothing; add_property saves one to the workspace.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "q": {
              "description": "A street address with city (and state outside Florida), a parcel id or Miami-Dade folio, or an owner name such as an LLC",
              "type": "string",
              "minLength": 4
            }
          },
          "required": [
            "q"
          ],
          "additionalProperties": false
        },
        "annotations": {
          "readOnlyHint": true,
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": true
        }
      }
    ]
  }
}
```

### tools/call
Runs one tool. The result comes twice: as an object in structuredContent, and as the same JSON in content[0].text for clients that read only text. Each tool below shows its own.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_companies","arguments":{"market":"miami","q":"Coastal Construction"}}}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"market\":\"Miami\",\"total\":3,\"companies\":[{\"name\":\"Coastal Construction Of Miami Dade Inc Dba Coastal Condominiums Ii\",\"roles\":[\"gc\",\"trade\"],\"live_projects\":13,\"filings_90d\":6,\"filings_12m\":38,\"permit_value_12m\":\"$457M\",\"last_filed\":\"2026-10-19\",\"deeds_bought\":0,\"loans_lent\":0,\"url\":\"https://pro.groundbreak.city/miami/companies/2aa3affa-f4aa-47a3-a292-536b9d1d02d4\"},{\"name\":\"Coastal Construction Of Miami Dade Cou\",\"roles\":[\"gc\",\"trade\"],\"live_projects\":5,\"filings_90d\":4,\"filings_12m\":15,\"permit_value_12m\":\"$560M\",\"last_filed\":\"2026-10-22\",\"deeds_bought\":0,\"loans_lent\":0,\"url\":\"https://pro.groundbreak.city/miami/companies/0600a17b-d9bb-477c-aecd-b61a57d63eb1\"}]}"
      }
    ],
    "structuredContent": {
      "market": "Miami",
      "total": 3,
      "companies": [
        {
          "name": "Coastal Construction Of Miami Dade Inc Dba Coastal Condominiums Ii",
          "roles": [
            "gc",
            "trade"
          ],
          "live_projects": 13,
          "filings_90d": 6,
          "filings_12m": 38,
          "permit_value_12m": "$457M",
          "last_filed": "2026-10-19",
          "deeds_bought": 0,
          "loans_lent": 0,
          "url": "https://pro.groundbreak.city/miami/companies/2aa3affa-f4aa-47a3-a292-536b9d1d02d4"
        },
        {
          "name": "Coastal Construction Of Miami Dade Cou",
          "roles": [
            "gc",
            "trade"
          ],
          "live_projects": 5,
          "filings_90d": 4,
          "filings_12m": 15,
          "permit_value_12m": "$560M",
          "last_filed": "2026-10-22",
          "deeds_bought": 0,
          "loans_lent": 0,
          "url": "https://pro.groundbreak.city/miami/companies/0600a17b-d9bb-477c-aecd-b61a57d63eb1"
        }
      ]
    },
    "isError": false
  }
}
```

### ping
Checks the key and the connection. Costs nothing.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":4,"method":"ping"}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {}
}
```

### No key, or a wrong one
HTTP 401. The WWW-Authenticate header points a client that signs in at the OAuth metadata.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_wrong" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":5,"method":"tools/list"}'
```
Response (HTTP 401, header WWW-Authenticate: Bearer realm="groundbreak", resource_metadata="https://mcp.groundbreak.city/.well-known/oauth-protected-resource/mcp", error="invalid_token"):
```json
{
  "jsonrpc": "2.0",
  "id": 5,
  "error": {
    "code": -32001,
    "message": "Sign in, or send a Groundbreak key. Make one at https://pro.groundbreak.city/connect. Docs: https://docs.groundbreak.city/mcp.md"
  }
}
```

### Past the daily limit
A tool result with isError true, so the agent can read it to the person. The minute limit answers the same way, with "Try again in a minute."
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"search_companies","arguments":{"market":"miami","q":"Coastal Construction"}}}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 6,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "That is past your limit of 2,000 API calls a day. It resets at midnight UTC. For a higher daily limit, ask at https://pro.groundbreak.city/connect or email max@groundbreak.city."
      }
    ],
    "isError": true
  }
}
```

### Arguments the tool does not take
A tool result with isError true that names the field.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"search_records","arguments":{"market":"miami","sort":"biggest"}}}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 7,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Invalid arguments: sort Invalid option: expected one of \"date\"|\"value\""
      }
    ],
    "isError": true
  }
}
```

### A tool that does not exist
A JSON-RPC error, code -32602. A body that is not JSON gets -32700 and HTTP 400.
Request:
```bash
curl -s https://mcp.groundbreak.city/mcp \
  -H "Authorization: Bearer gbcrm_your_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":8,"method":"tools/call","params":{"name":"search_everything","arguments":{}}}'
```
Response (HTTP 200):
```json
{
  "jsonrpc": "2.0",
  "id": 8,
  "error": {
    "code": -32602,
    "message": "Unknown tool: search_everything"
  }
}
```

## Tools
Each tool takes JSON arguments as listed. Every result carries app links: show them to the person. Each one shows an example request body and the object that comes back in result.structuredContent.

### The database
Permits, deeds, loans, notices of commencement, zoning cases and liens in every market, the projects they belong to and the companies on them. Parties on anything filed in the last 90 days come back with Pro; older records come back whole on any account.

#### `search_records` (Reads)
Search Groundbreak's public-record filings in one market: building permits, deeds, loans, notices of commencement (starts), zoning and site plan cases, liens. Returns up to 25 rows, newest or biggest first, with the true count, the source record and an app link. Parties and phones on filings from the last 90 days come back on Pro; older filings come back whole for everyone.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `market` | austin \| atlanta \| miami \| nashville \| tampa \| charlotte \| dfw \| toronto | yes | Market: austin (Austin), atlanta (Atlanta), miami (Miami), nashville (Nashville), tampa (Tampa Bay), charlotte (Charlotte), dfw (Dallas-Fort Worth), toronto (Toronto) |
| `q` | string | no | Address, project or scope text |
| `kind` | all \| permits \| instruments \| deeds \| loans \| starts \| cases \| distress | no | instruments is deeds and loans; distress is liens and lis pendens |
| `days` | integer, 1 to 365 | no | Window back from today, default 30; ignored when from is set |
| `from` | date (YYYY-MM-DD) | no | Start date YYYY-MM-DD |
| `to` | date (YYYY-MM-DD) | no | End date YYYY-MM-DD, inclusive |
| `min` | number, 0 or more | no | Minimum dollar value |
| `sort` | date \| value | no | date (default) for the newest, value for the biggest |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_records",
    "arguments": {
      "market": "miami",
      "kind": "permits",
      "days": 30,
      "min": 5000000,
      "sort": "value"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "market": "Miami",
  "count": 36,
  "more": true,
  "window": "last 30 days",
  "rows": [
    {
      "kind": "permit",
      "filed": "2026-10-01",
      "value": "$252M",
      "address": "8234 NW 56 ST Doral FL 33166-0000",
      "description": "BD Building New Construction (Comm) (Primary): New 2-Story Commercial Building with Cafe, Covered Patio, Storage, Restrooms, Gym/Rehabilitation Training Space, Two Soccer Fields, and 16 Ground-Level P",
      "parties": {
        "to": null,
        "from": null,
        "applicant": null
      },
      "contacts": [],
      "project": {
        "name": "8234 Nw 56 St Doral Fl 33166-0000",
        "url": "https://pro.groundbreak.city/miami/projects/c08992ea-70a4-42e5-a0ca-dac2a41d9eb9"
      },
      "source": "City of Doral, building permits",
      "record": "BDCC-2610-5142"
    },
    {
      "kind": "permit",
      "filed": "2026-10-22",
      "value": "$175M",
      "address": "721 NW 1 AV, Miami, FL",
      "description": "New: 5 Units Or More  - Residential · NEW CONSTRUCTION",
      "parties": {
        "to": null,
        "from": null,
        "applicant": "Coastal Construction Of Miami Dade Cou"
      },
      "contacts": [
        {
          "name": null,
          "org": "Coastal Construction Of Miami Dade Cou",
          "role": "contractor",
          "phone": "(305) 796-3907",
          "email": null
        }
      ],
      "project": {
        "name": "700 North Miami Avenue",
        "url": "https://pro.groundbreak.city/miami/projects/ac4e215b-50b9-45e1-8e6b-91043917952a"
      },
      "source": "Miami-Dade RER / City of Miami Building Dept.",
      "record": "https://www.miamidade.gov/Apps/PA/propertysearch/#/?folio=0131370250011"
    }
  ]
}
```

#### `search_projects` (Reads)
Find development projects in one market by name or address. Returns status and an id for get_project.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `market` | austin \| atlanta \| miami \| nashville \| tampa \| charlotte \| dfw \| toronto | yes | Market: austin (Austin), atlanta (Atlanta), miami (Miami), nashville (Nashville), tampa (Tampa Bay), charlotte (Charlotte), dfw (Dallas-Fort Worth), toronto (Toronto) |
| `q` | string | yes | Project name or street address |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_projects",
    "arguments": {
      "market": "miami",
      "q": "Brickell"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "market": "Miami",
  "projects": [
    {
      "id": "ac61aeff-77bd-4f56-8496-d4d89633e3ed",
      "name": "Calle 8",
      "address": "190 Southwest 8th Street, Brickell, Miami",
      "status": "approved",
      "url": "https://pro.groundbreak.city/miami/projects/ac61aeff-77bd-4f56-8496-d4d89633e3ed"
    },
    {
      "id": "d485f143-7d65-4c28-a151-bdfb27b035da",
      "name": "1425 Brickell Av 54E",
      "address": "1425 BRICKELL AV 54E, Miami, FL",
      "status": "approved",
      "url": "https://pro.groundbreak.city/miami/projects/d485f143-7d65-4c28-a151-bdfb27b035da"
    }
  ]
}
```

#### `get_project` (Reads)
One project's file: status, specs, the team (developer, architect, GC), its filings with values, the owner of record and what changed. Parties and the owner are Pro unless nothing has filed on the project in 90 days, when the file is open to any account.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `market` | austin \| atlanta \| miami \| nashville \| tampa \| charlotte \| dfw \| toronto | yes | Market: austin (Austin), atlanta (Atlanta), miami (Miami), nashville (Nashville), tampa (Tampa Bay), charlotte (Charlotte), dfw (Dallas-Fort Worth), toronto (Toronto) |
| `id` | id | yes | Project id from search_projects or search_records |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_project",
    "arguments": {
      "market": "miami",
      "id": "ddc84265-6038-44fe-895c-b2f16b5039e1"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "project": {
    "name": "Namdar Towers Phase II (222)",
    "status": "under_construction",
    "address": "50 NE 3rd Street, Miami, FL 33132",
    "use": "mixed_use",
    "units": 714,
    "floors": 43,
    "height_ft": 450,
    "sqft": 395000,
    "cost": "·",
    "expected_completion": "2028-12-31",
    "url": "https://pro.groundbreak.city/miami/projects/ddc84265-6038-44fe-895c-b2f16b5039e1"
  },
  "team": [
    {
      "role": "developer",
      "company": "Namdar Group",
      "url": "https://pro.groundbreak.city/miami/companies/57d7ca44-cafd-4b12-b73e-6f320102bbaf"
    },
    {
      "role": "architect",
      "company": "Behar Font & Partners",
      "url": "https://pro.groundbreak.city/miami/companies/da31ae0e-73d8-448f-8dca-cdcd60fae62b"
    }
  ],
  "filings": [
    {
      "kind": "permit",
      "filed": "2026-09-28",
      "value": "$129M",
      "source": "Miami-Dade RER / City of Miami Building Dept.",
      "record": "MIA-BD23028187001B001",
      "parties": {
        "to": null,
        "from": null,
        "applicant": "John Moriarty And Associates Of Florida Inc"
      }
    },
    {
      "kind": "permit",
      "filed": "2026-08-19",
      "value": "$100",
      "source": "Miami-Dade RER / City of Miami Building Dept.",
      "record": "MIA-BD25010338001B001",
      "parties": {
        "to": null,
        "from": null,
        "applicant": "Sprinklermatic Fire Protection System Inc"
      }
    }
  ],
  "owner_of_record": "222 NORTH MIAMI LLC",
  "changes": [
    {
      "at": "2026-09-28T12:00:00+00:00",
      "headline": "Building permit issued · $128,663,319"
    },
    {
      "at": "2026-09-07T21:48:44.621379+00:00",
      "headline": "Amenities reported: fitness center, golf simulator, co-working space, movie theater room, outdoor terrace, party room, resident lounge, basketball court, bowling alley, dog washing station"
    }
  ],
  "open_to_everyone": false
}
```

#### `search_companies` (Reads)
Find companies in one market by name: developers, GCs, trade subs, architects and engineers, lenders, owners. Returns their roles, live projects, filings in the last 90 days and 12 months, permit value, deeds and loans, and an app link.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `market` | austin \| atlanta \| miami \| nashville \| tampa \| charlotte \| dfw \| toronto | yes | Market: austin (Austin), atlanta (Atlanta), miami (Miami), nashville (Nashville), tampa (Tampa Bay), charlotte (Charlotte), dfw (Dallas-Fort Worth), toronto (Toronto) |
| `q` | string | yes | Company name, or part of it |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_companies",
    "arguments": {
      "market": "miami",
      "q": "Coastal Construction"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "market": "Miami",
  "total": 3,
  "companies": [
    {
      "name": "Coastal Construction Of Miami Dade Inc Dba Coastal Condominiums Ii",
      "roles": [
        "gc",
        "trade"
      ],
      "live_projects": 13,
      "filings_90d": 6,
      "filings_12m": 38,
      "permit_value_12m": "$457M",
      "last_filed": "2026-10-19",
      "deeds_bought": 0,
      "loans_lent": 0,
      "url": "https://pro.groundbreak.city/miami/companies/2aa3affa-f4aa-47a3-a292-536b9d1d02d4"
    },
    {
      "name": "Coastal Construction Of Miami Dade Cou",
      "roles": [
        "gc",
        "trade"
      ],
      "live_projects": 5,
      "filings_90d": 4,
      "filings_12m": 15,
      "permit_value_12m": "$560M",
      "last_filed": "2026-10-22",
      "deeds_bought": 0,
      "loans_lent": 0,
      "url": "https://pro.groundbreak.city/miami/companies/0600a17b-d9bb-477c-aecd-b61a57d63eb1"
    }
  ]
}
```

### Properties and owners
Any Florida property, and the county rolls Groundbreak reads outside Florida. Find the owner, the people behind an LLC (Florida, from Sunbiz), their phones, and the public record on the parcel.

#### `lookup_property` (Reads)
Look up a property by street address, parcel id or folio, or every parcel an owner name holds: any Florida property on the statewide tax roll, and outside Florida any parcel in Travis, Dallas, Tarrant, Fulton, DeKalb, Davidson and Mecklenburg counties on the county rolls Groundbreak reads. Returns the owner, mailing address, use, size, value and last sale. Writes nothing; add_property saves one to the workspace.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `q` | string | yes | A street address with city (and state outside Florida), a parcel id or Miami-Dade folio, or an owner name such as an LLC |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "lookup_property",
    "arguments": {
      "q": "1450 Brickell Ave, Miami"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "searched_as": "address",
  "match": {
    "county": "Miami-Dade",
    "state": "FL",
    "parcel_id": "0141391170010",
    "address": "1450 BRICKELL AVE, Miami, 33131",
    "owner": "1450 BRICKELL LLC",
    "owner_mailing": "1450 BRICKELL AVE STE #1450, MIAMI FL 33131",
    "use": "Office, multi-story",
    "year_built": 2010,
    "building_sqft": 1152000,
    "lot_acres": 1.92,
    "units": null,
    "just_value": "$241M",
    "last_sale": null,
    "in_workspace": {
      "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
      "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
    }
  },
  "others": [
    {
      "county": "Miami-Dade",
      "state": "FL",
      "parcel_id": "0141390010270",
      "address": "1500 BRICKELL AVE, Miami, 33129",
      "owner": "CHATEAU PETIT DOUY LLC",
      "owner_mailing": "1428 BRICKELL AVE STE 400, MIAMI FL",
      "use": "Restaurant",
      "year_built": 1928,
      "building_sqft": 6297,
      "lot_acres": 0.35,
      "units": null,
      "just_value": "$4M",
      "last_sale": null
    },
    {
      "county": "Miami-Dade",
      "state": "FL",
      "parcel_id": "0141390640010",
      "address": "1435 BRICKELL AVE, Miami, 33131",
      "owner": "FSM HOTEL OWNER LLC",
      "owner_mailing": "206 TETUAN ST 403, SAN JUAN PR",
      "use": "Hotel or motel",
      "year_built": 2003,
      "building_sqft": 326460,
      "lot_acres": 3.74,
      "units": 221,
      "just_value": "$56.6M",
      "last_sale": null
    }
  ],
  "note": "To save it, call add_property with county and parcel_id. The roll only carries recent sales; groundbreak_records has the sale history and the clerk filings Groundbreak reads.",
  "source": "Florida DOR tax roll via the Florida GIS office statewide parcels"
}
```

#### `groundbreak_records` (Reads)
The public record for an address or parcel without adding it: appraiser sales, plus what Groundbreak reads in its markets (Miami: permits, trade subs, deeds, construction loans, notices of commencement and FAA height filings; Atlanta: permits, planning cases, DeKalb deeds & loans and FAA height filings; Nashville: permits, Planning Commission cases, sales and FAA height filings; Austin: permits, site plan and zoning cases, TDLR registrations, JETI plant applications and FAA height filings; Tampa Bay: permits, deeds, mortgages, notices of commencement and FAA height filings; Charlotte: permits, rezoning petitions, owners of record and FAA height filings; Dallas-Fort Worth: permits, TDLR registrations, JETI plant applications, deeds of trust, deeds, zoning cases and FAA height filings; Toronto: permits, rezonings and site plans and school and hospital projects); City of Orlando permits in Orlando. Elsewhere only the appraiser roll.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `q` | string | yes | Street address with city (and state outside Florida), or a parcel id or folio |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "groundbreak_records",
    "arguments": {
      "q": "1450 Brickell Ave, Miami"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "parcel": {
    "county": "Miami-Dade",
    "state": "FL",
    "parcel_id": "0141391170010",
    "address": "1450 BRICKELL AVE, Miami, 33131",
    "owner": "1450 BRICKELL LLC",
    "owner_mailing": "1450 BRICKELL AVE STE #1450, MIAMI FL 33131",
    "use": "Office, multi-story",
    "year_built": 2010,
    "building_sqft": 1152000,
    "lot_acres": 1.92,
    "units": null,
    "just_value": "$241M",
    "last_sale": null
  },
  "title_flags": [],
  "record": {
    "sales": [],
    "records": [],
    "permits": [
      {
        "id": "MIA-BD26002707001P001",
        "filed": "2026-10-27",
        "work": "Permit",
        "description": "Roughing Fixture: Miscellaneous Sink, Setting Fixture: Miscellaneous Sink, Roughing Fixture: Ice Maker",
        "value": "$3K",
        "contractor": "The Severn Group INC",
        "contractor_phone": null,
        "source": "Miami-Dade County and City of Miami (trade permit)"
      },
      {
        "id": "MIA-BD26002707001MA001",
        "filed": "2026-10-27",
        "work": "Permit",
        "description": "Fiberglass Ductwork",
        "value": "$8K",
        "contractor": "The Severn Group INC",
        "contractor_phone": null,
        "source": "Miami-Dade County and City of Miami (trade permit)"
      }
    ],
    "contacts_on_filings": [
      {
        "name": null,
        "org": "Origin Construction LLC",
        "role": "contractor",
        "phone": "(305) 573-8030",
        "email": null,
        "filed": "2026-09-23"
      },
      {
        "name": null,
        "org": "Hitt Contracting\\,inc",
        "role": "contractor",
        "phone": "(786) 368-4028",
        "email": null,
        "filed": "2026-08-11"
      }
    ],
    "sources": [
      "Florida DOR tax roll (statewide parcels): 1 found",
      "Miami-Dade Property Appraiser: 0 found"
    ],
    "as_of": "2026-10-28T20:26:05.262Z"
  }
}
```

#### `add_property` (Changes your CRM)
Add a parcel to the workspace. Pulls the county record and makes the owner an owner record; for a Florida property it reads the owner's Sunbiz filing for the people behind it (free). Returns the property with links. Use the county and parcel_id from lookup_property.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `county` | string | yes | County name as lookup_property returned it, e.g. Miami-Dade, Orange, Travis, Dallas, Fulton |
| `parcel_id` | string | yes | Parcel id exactly as lookup_property returned it |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "add_property",
    "arguments": {
      "county": "Miami-Dade",
      "parcel_id": "0141391170010"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "created": true,
  "property": {
    "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
    "address": "1450 Brickell Ave, Miami, 33131",
    "county": "Miami-Dade",
    "owner": "1450 BRICKELL LLC",
    "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
    "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
  },
  "owner": {
    "id": "a27ee843-bbb5-42dc-8211-6141b7856e97",
    "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
    "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
  },
  "people_behind_owner": [
    {
      "id": "5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "name": "Jordan Lee",
      "title": "Manager",
      "phones": [],
      "emails": [],
      "mailing": "100 Example St, Miami FL 33131",
      "flags": [],
      "path": "/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "url": "https://crm.groundbreak.city/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34"
    }
  ],
  "next": "find_phones with owner_id spends a credit per person found."
}
```

#### `get_property` (Reads)
A property in the workspace: facts, owner, the people behind the owner, deals, and the public record (sales, deeds, mortgages, liens, lis pendens, permits) with title flags.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `id` | id | yes | Property id |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_property",
    "arguments": {
      "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
  "address": "1450 Brickell Ave, Miami, 33131",
  "county": "Miami-Dade",
  "parcel_id": "0141391170010",
  "use": "Office, multi-story",
  "year_built": 2010,
  "building_sqft": 1152000,
  "lot_acres": 1.92,
  "units": null,
  "just_value": "$241M",
  "last_sale": "· ·",
  "owner": {
    "id": "a27ee843-bbb5-42dc-8211-6141b7856e97",
    "name": "1450 Brickell LLC",
    "kind": "llc",
    "sunbiz": null,
    "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
    "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
  },
  "owner_mailing": "1450 BRICKELL AVE STE #1450, MIAMI FL 33131",
  "people_behind_owner": [],
  "deals": [
    {
      "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "name": "1450 Brickell Ave",
      "stage": "Prospect",
      "value": "·",
      "path": "/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "url": "https://crm.groundbreak.city/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015"
    }
  ],
  "title_flags": [],
  "record": {
    "sales": [],
    "records": [],
    "permits": [
      {
        "id": "MIA-BD26002707001E001",
        "filed": "2026-10-06",
        "work": "Permit",
        "description": "Light Socket, Rough Wiring Outlets, Refrigerators Domestic",
        "value": "$89K",
        "contractor": "Fisk Electric Company",
        "contractor_phone": null,
        "source": "miami trades"
      },
      {
        "id": "MIA-BD24015076012E001",
        "filed": "2026-10-05",
        "work": "Permit",
        "description": "Low Voltage Energy Management System",
        "value": "$100",
        "contractor": "Fisk Electric Company",
        "contractor_phone": null,
        "source": "miami trades"
      }
    ],
    "contacts_on_filings": [
      {
        "org": "Origin Construction LLC",
        "name": null,
        "role": "contractor",
        "email": null,
        "filed": "2026-09-23",
        "phone": "(305) 573-8030"
      },
      {
        "org": "Hitt Contracting\\,inc",
        "name": null,
        "role": "contractor",
        "email": null,
        "filed": "2026-08-11",
        "phone": "(786) 368-4028"
      }
    ],
    "sources": [
      "Florida DOR tax roll (statewide parcels): 1 found",
      "Miami-Dade Property Appraiser: 0 found"
    ],
    "as_of": "2026-10-14T20:30:35.073Z"
  },
  "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
  "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
}
```

#### `refresh_property_research` (Changes your CRM)
Re-read the public record for a property in the workspace (appraiser sales, clerk filings, permits). Free.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `id` | id | yes | Property id |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "refresh_property_research",
    "arguments": {
      "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "refreshed": true,
  "record": {
    "sales": [],
    "records": [],
    "permits": [
      {
        "id": "MIA-BD26002707001E001",
        "filed": "2026-10-06",
        "work": "Permit",
        "description": "Light Socket, Rough Wiring Outlets, Refrigerators Domestic",
        "value": "$89K",
        "contractor": "Fisk Electric Company",
        "contractor_phone": null,
        "source": "miami trades"
      },
      {
        "id": "MIA-BD24015076012E001",
        "filed": "2026-10-05",
        "work": "Permit",
        "description": "Low Voltage Energy Management System",
        "value": "$100",
        "contractor": "Fisk Electric Company",
        "contractor_phone": null,
        "source": "miami trades"
      }
    ],
    "contacts_on_filings": [
      {
        "org": "Origin Construction LLC",
        "name": null,
        "role": "contractor",
        "email": null,
        "filed": "2026-09-23",
        "phone": "(305) 573-8030"
      },
      {
        "org": "Hitt Contracting\\,inc",
        "name": null,
        "role": "contractor",
        "email": null,
        "filed": "2026-08-11",
        "phone": "(786) 368-4028"
      }
    ],
    "sources": [
      "Florida DOR tax roll (statewide parcels): 1 found",
      "Miami-Dade Property Appraiser: 0 found"
    ],
    "as_of": "2026-10-14T20:30:35.073Z"
  },
  "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
  "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
}
```

#### `get_owner` (Reads)
An owner (LLC, corporation, trust or person) in the workspace by id or name: its Sunbiz filing, the people behind it with phones and emails, its properties and deals.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `id` | id | no | Owner id |
| `name` | string | no | Owner name, when there is no id |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_owner",
    "arguments": {
      "id": "a27ee843-bbb5-42dc-8211-6141b7856e97"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "a27ee843-bbb5-42dc-8211-6141b7856e97",
  "name": "1450 Brickell LLC",
  "kind": "llc",
  "sunbiz": null,
  "people": [
    {
      "id": "5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "name": "Jordan Lee",
      "title": "Manager",
      "phones": [
        "(305) 555-0142 mobile",
        "(305) 555-0187 landline DNC"
      ],
      "emails": [
        "jordan.lee@example.com"
      ],
      "mailing": "100 Example St, Miami FL 33131",
      "flags": [],
      "path": "/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "url": "https://crm.groundbreak.city/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34"
    }
  ],
  "properties": [
    {
      "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
      "address": "1450 Brickell Ave",
      "city": "Miami",
      "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
      "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
    }
  ],
  "deals": [
    {
      "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "name": "1450 Brickell Ave",
      "stage": "Prospect",
      "path": "/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "url": "https://crm.groundbreak.city/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015"
    }
  ],
  "notes": null,
  "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
  "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
}
```

#### `trace_owner_people` (Changes your CRM)
Read the owner's Sunbiz filing and add the managers, members and officers as contacts, following a managing LLC up to two levels. Free. Run before find_phones when an owner has no people yet.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `owner_id` | id | yes | Owner id |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "trace_owner_people",
    "arguments": {
      "owner_id": "a27ee843-bbb5-42dc-8211-6141b7856e97"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "status": "found",
  "note": "Read the Sunbiz filing.",
  "entity": {
    "doc_number": "L05000113449",
    "type": "Florida LLC",
    "status": "Active",
    "filed": "2005-11-23"
  },
  "managed_by": [
    {
      "id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
      "name": "PARK PLACE HOLDINGS AT BRICKELL LLC",
      "path": "/owners/c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
      "url": "https://crm.groundbreak.city/owners/c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f"
    }
  ],
  "people": [
    {
      "id": "5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "name": "Jordan Lee",
      "title": "Manager",
      "phones": [],
      "emails": [],
      "mailing": "100 Example St, Miami FL 33131",
      "flags": [],
      "path": "/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "url": "https://crm.groundbreak.city/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34"
    }
  ],
  "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
  "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
}
```

#### `find_phones` (Spends credits)
Skip trace people for phones and emails, with DNC and TCPA litigator flags. Spends one workspace credit per person found; misses are free; anyone traced in the last 30 days is not charged again. Pass owner_id to trace everyone behind an owner, or contact_ids.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `owner_id` | id | no | · |
| `contact_ids` | list of id | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_phones",
    "arguments": {
      "owner_id": "a27ee843-bbb5-42dc-8211-6141b7856e97"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "status": "done",
  "note": "Done.",
  "credits_left": 99,
  "traced": [
    {
      "outcome": "hit",
      "id": "5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "name": "Jordan Lee",
      "title": "Manager",
      "phones": [
        "(305) 555-0142 mobile",
        "(305) 555-0187 landline DNC"
      ],
      "emails": [
        "jordan.lee@example.com"
      ],
      "mailing": "100 Example St, Miami FL 33131",
      "flags": [],
      "path": "/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34",
      "url": "https://crm.groundbreak.city/contacts/5e0c3a8e-4b1f-4c2a-9d7e-2f6b8a1c0d34"
    }
  ],
  "compliance": "Numbers marked DNC are on a do-not-call list or flagged for TCPA risk. Do not cold call them."
}
```

#### `sunbiz_lookup` (Reads)
The Florida Division of Corporations filing for an entity by exact name or document number: status, type, filing date, addresses, registered agent and officers. Or, with partial=true, entity names that start with the text.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `name` | string | no | · |
| `doc_number` | string | no | · |
| `partial` | boolean | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "sunbiz_lookup",
    "arguments": {
      "name": "1450 Brickell LLC"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "name": "1450 BRICKELL, LLC",
  "doc_number": "L05000113449",
  "type": "Florida LLC",
  "status": "Active",
  "filed": "2005-11-23",
  "fein": "204832729",
  "last_report": "Annual report 2026",
  "principal": "1450 BRICKELL AVE., MIAMI FL 33131",
  "mailing": "1450 BRICKELL AVE., MIAMI FL 33131",
  "registered_agent": {
    "name": "Interamerican Corporate Services LLC",
    "address": "2525 Ponce de Leon Blvd, Coral Gables FL 33134",
    "agent_service": true
  },
  "officers": [
    {
      "title": "Authorized member",
      "name": "PARK PLACE HOLDINGS AT BRICKELL LLC",
      "address": "1450 BRICKELL AVE., MIAMI FL 33131",
      "kind": "entity"
    }
  ],
  "sunbiz_search": "https://search.sunbiz.org/Inquiry/CorporationSearch/SearchResults?inquiryType=EntityName&searchTerm=1450%20BRICKELL%2C%20LLC&searchNameOrder=1450BRICKELLLLC",
  "source": "Florida Division of Corporations bulk data"
}
```

#### `entities_managed_by` (Reads)
Every Florida entity a person or company is listed on as a manager, member or officer: the portfolio behind a name. Names as Sunbiz writes them, e.g. "PINTO, MIGUEL A" or "PINTO MIGUEL A".

| Argument | Type | Required | What it is |
|---|---|---|---|
| `name` | string | yes | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "entities_managed_by",
    "arguments": {
      "name": "PARK PLACE HOLDINGS AT BRICKELL LLC"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "name": "PARK PLACE HOLDINGS AT BRICKELL LLC",
  "count": 2,
  "entities": [
    {
      "docNumber": "L05000113449",
      "name": "1450 BRICKELL, LLC",
      "title": "Authorized member",
      "status": "Active",
      "filedOn": "2005-11-23"
    },
    {
      "docNumber": "L00000012857",
      "name": "PARK PLACE AT BRICKELL LLC",
      "title": "Authorized member",
      "status": "Active",
      "filedOn": "2000-10-20"
    }
  ],
  "tip": "lookup_property with an entity name lists its parcels."
}
```

### Your CRM
The deals, people, notes and tasks in your workspace. Writes land on the timeline marked as made over MCP.

#### `search_crm` (Reads)
Search this workspace: deals, owners, properties and people by name or address.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `q` | string | yes | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_crm",
    "arguments": {
      "q": "Brickell"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "hits": [
    {
      "kind": "deal",
      "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "title": "1450 Brickell Ave",
      "sub": "Prospect",
      "path": "/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "url": "https://crm.groundbreak.city/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015"
    },
    {
      "kind": "owner",
      "id": "a27ee843-bbb5-42dc-8211-6141b7856e97",
      "title": "1450 Brickell LLC",
      "sub": "LLC",
      "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
      "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
    }
  ]
}
```

#### `list_deals` (Reads)
Deals in the pipeline, optionally one stage or a name search. Stages: prospect, contacted, meeting, proposal, signed, contract, closed, lost (or the workspace's own).

| Argument | Type | Required | What it is |
|---|---|---|---|
| `stage` | string | no | · |
| `q` | string | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_deals",
    "arguments": {}
  }
}
```
Response (result.structuredContent):
```json
{
  "stages": [
    {
      "key": "prospect",
      "label": "Prospect",
      "deals": 6
    },
    {
      "key": "contacted",
      "label": "Contacted",
      "deals": 0
    }
  ],
  "open_value": "·",
  "deals": [
    {
      "id": "6b8c240a-a523-436a-bed5-2fa2503d1c31",
      "name": "2201 NW 79 Ave listing",
      "stage": "Proposal",
      "value": "·",
      "side": "listing",
      "property": "2201 NW 79 Ave",
      "owner": null,
      "people": [],
      "updated": "Oct 18",
      "path": "/deals/6b8c240a-a523-436a-bed5-2fa2503d1c31",
      "url": "https://crm.groundbreak.city/deals/6b8c240a-a523-436a-bed5-2fa2503d1c31"
    },
    {
      "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "name": "1450 Brickell Ave",
      "stage": "Prospect",
      "value": "·",
      "side": "listing",
      "property": "1450 Brickell Ave",
      "owner": "1450 Brickell LLC",
      "people": [],
      "updated": "Oct 14",
      "path": "/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015",
      "url": "https://crm.groundbreak.city/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015"
    }
  ]
}
```

#### `get_deal` (Reads)
One deal: stage, value, property, owner, the people on it with phones, the last 20 timeline entries, open tasks and the title snapshot.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `id` | id | yes | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_deal",
    "arguments": {
      "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "b2fe5d77-9618-47f3-b090-f29a5b0fe015",
  "name": "1450 Brickell Ave",
  "stage": "Prospect",
  "side": "listing",
  "value": "·",
  "fee_pct": null,
  "close_date": null,
  "in_stage_since": "Oct 14",
  "property": {
    "id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
    "address": "1450 Brickell Ave",
    "path": "/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a",
    "url": "https://crm.groundbreak.city/properties/9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
  },
  "owner": {
    "id": "a27ee843-bbb5-42dc-8211-6141b7856e97",
    "name": "1450 Brickell LLC",
    "path": "/owners/a27ee843-bbb5-42dc-8211-6141b7856e97",
    "url": "https://crm.groundbreak.city/owners/a27ee843-bbb5-42dc-8211-6141b7856e97"
  },
  "people": [],
  "timeline": [
    {
      "at": "2026-10-19T20:52:48.196568+00:00",
      "kind": "pitch",
      "by": "Jordan Lee",
      "via": "app",
      "text": "Built a pitch for 1450 Brickell Ave"
    },
    {
      "at": "2026-10-14T20:30:39.329009+00:00",
      "kind": "created",
      "by": "Jordan Lee",
      "via": "app",
      "text": "Created the deal in Prospect"
    }
  ],
  "open_tasks": [],
  "title_snapshot": null,
  "path": "/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015",
  "url": "https://crm.groundbreak.city/deals/b2fe5d77-9618-47f3-b090-f29a5b0fe015"
}
```

#### `create_deal` (Changes your CRM)
Create a deal in the pipeline, optionally tied to a property, owner and contacts. Stage defaults to the first stage.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `name` | string | yes | · |
| `stage` | string | no | · |
| `side` | listing \| acquisition \| lease \| financing \| other | no | · |
| `value` | number, 0 or more | no | Expected price or deal size in dollars |
| `property_id` | id | no | · |
| `owner_id` | id | no | · |
| `contact_ids` | list of id | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_deal",
    "arguments": {
      "name": "1450 Brickell Ave sale",
      "side": "listing",
      "value": 240000000,
      "property_id": "9f9d54f9-cfc3-4c62-96f8-03ce2f6fd03a"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c",
  "name": "1450 Brickell Ave sale",
  "stage": "Prospect",
  "path": "/deals/3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c",
  "url": "https://crm.groundbreak.city/deals/3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c"
}
```

#### `move_deal` (Changes your CRM)
Move a deal to another stage. Entering Signed or Under contract takes a title snapshot from the county record.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `id` | id | yes | · |
| `stage` | string | yes | Stage key or label |
| `lost_reason` | string | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "move_deal",
    "arguments": {
      "id": "3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c",
      "stage": "contacted"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c",
  "stage": "Contacted",
  "title_snapshot_taken": false,
  "path": "/deals/3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c",
  "url": "https://crm.groundbreak.city/deals/3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c"
}
```

#### `add_note` (Changes your CRM)
Log a note, call, email or meeting on a deal, contact, owner or property timeline. Calls, emails and meetings update the contact's last touch.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `body` | string | yes | · |
| `kind` | note \| call \| email \| meeting | no | · |
| `deal_id` | id | no | · |
| `contact_id` | id | no | · |
| `owner_id` | id | no | · |
| `property_id` | id | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "add_note",
    "arguments": {
      "body": "Called the owner. Open to an offer after the first quarter.",
      "kind": "call",
      "deal_id": "3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "logged": true,
  "id": "8a7b6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d"
}
```

#### `create_task` (Changes your CRM)
Create a task (a call back, a follow-up), optionally due on a date and tied to a deal or contact. Assigned to the caller unless assignee_email names a teammate.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `title` | string | yes | · |
| `due` | string | no | YYYY-MM-DD or an ISO time |
| `deal_id` | id | no | · |
| `contact_id` | id | no | · |
| `assignee_email` | string | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_task",
    "arguments": {
      "title": "Send the owner the comps",
      "due": "2026-11-06",
      "deal_id": "3f2a9c1e-7b4d-4e8a-b6c5-9d0e1f2a3b4c"
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "title": "Send the owner the comps",
  "due": "Nov 6",
  "path": "/today",
  "url": "https://crm.groundbreak.city/today"
}
```

#### `list_tasks` (Reads)
Tasks in the workspace: open ones by default, the caller's own when mine=true.

| Argument | Type | Required | What it is |
|---|---|---|---|
| `open` | boolean | no | · |
| `mine` | boolean | no | · |

Request:
```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_tasks",
    "arguments": {
      "open": true
    }
  }
}
```
Response (result.structuredContent):
```json
{
  "tasks": [
    {
      "id": "af48b62a-d28f-4fa4-868e-f85887d3a851",
      "title": "Call the owner back about the listing",
      "due": "Oct 18",
      "done": false,
      "deal": {
        "id": "6b8c240a-a523-436a-bed5-2fa2503d1c31",
        "name": "2201 NW 79 Ave listing",
        "path": "/deals/6b8c240a-a523-436a-bed5-2fa2503d1c31",
        "url": "https://crm.groundbreak.city/deals/6b8c240a-a523-436a-bed5-2fa2503d1c31"
      }
    }
  ]
}
```

## Markets
| Market | Records | Not in the record | Properties |
|---|---|---|---|
| Austin, TX (`austin`) | permits, site plan and zoning cases, TDLR registrations, JETI plant applications and FAA height filings | sales name buyer and seller with no price; no loans; no notices of commencement; no liens or lis pendens | Properties in Travis County, TX. Naming the people behind an LLC is Florida only. |
| Atlanta, GA (`atlanta`) | permits, planning cases, DeKalb deeds & loans and FAA height filings | sales name buyer and seller with no price; no notices of commencement | Properties in Fulton and DeKalb counties, GA. Naming the people behind an LLC is Florida only. |
| Miami, FL (`miami`) | permits, trade subs, deeds, construction loans, notices of commencement and FAA height filings | · | Any Florida property, from the statewide roll. The people behind an LLC come from Sunbiz. |
| Nashville, TN (`nashville`) | permits, Planning Commission cases, sales and FAA height filings | no loans; no notices of commencement; no liens or lis pendens; no phones on permits | Properties in Davidson County, TN. Naming the people behind an LLC is Florida only. |
| Tampa Bay, FL (`tampa`) | permits, deeds, mortgages, notices of commencement and FAA height filings | · | Any Florida property, from the statewide roll. The people behind an LLC come from Sunbiz. |
| Charlotte, NC (`charlotte`) | permits, rezoning petitions, owners of record and FAA height filings | no sales; no loans; no notices of commencement; no liens or lis pendens | Properties in Mecklenburg County, NC. Naming the people behind an LLC is Florida only. |
| Dallas-Fort Worth, TX (`dfw`) | permits, TDLR registrations, JETI plant applications, deeds of trust, deeds, zoning cases and FAA height filings | sales name buyer and seller with no price; no notices of commencement | Properties in Dallas and Tarrant counties, TX. Naming the people behind an LLC is Florida only. |
| Toronto, ON (`toronto`) | permits, rezonings and site plans and school and hospital projects | no sales; no loans; no notices of commencement; no liens or lis pendens; no phones on permits | Properties: not yet. |

## Plans, limits and credits
Pro returns the parties on filings from the last 90 days. Without Pro those come back withheld, and older filings come back whole.
| Plan | Tool calls a minute | Tool calls a day |
|---|---|---|
| Pro | 60 | 2,000 |
| Without Pro | 20 | 100 |

Limits count tool calls, per person, across all of that person's keys. Connecting and listing tools are free. Daily limits reset at midnight UTC. For a higher daily limit, ask at https://pro.groundbreak.city/connect or email max@groundbreak.city.
- find_phones spends 1 credit for each person it finds a phone or email for. Misses are free, and anyone traced in the last 30 days is free again.
- Pro ($27 a month) adds 50 credits to your workspace each month. A pack adds 200 for $27 and they keep.
- Every other tool is free. Sunbiz people, phones on permits and owners of record never cost a credit.

## Errors
| What | What it looks like | What to do |
|---|---|---|
| Not signed in, or a wrong, revoked or expired key | HTTP 401 with JSON-RPC error -32001 and a WWW-Authenticate header | A client that signs in starts the sign-in from that header; an expired sign-in refreshes on its own. Otherwise make a key at https://pro.groundbreak.city/connect and check the client sends it. |
| Past the limit | A tool result with isError and "past your limit of ..." | Wait for the window to reset: a minute, or midnight UTC. For a higher daily limit, ask at https://pro.groundbreak.city/connect or email max@groundbreak.city. |
| A read key asked to write | A tool result with isError and "This key reads only" | Use a key with full access for that client. |
| Arguments the tool does not take | A tool result with isError and "Invalid arguments: ..." | The message names the field. The tool list carries each input schema. |
| A refusal meant for you | A result with an error field: an id from another workspace, no credits left | Read it to the person: it says what to do. |
| A failure on our side | A tool result with isError and "That tool failed on our side" | We are told when this happens. Try again in a moment. |

## Keys and safety
- A key, or an app you signed in to, acts as you in the workspace you picked. It reads everything you can.
- With full access it also logs notes, makes and moves deals and spends credits in your name. Read only sees only the tools that read.
- Make one key per client, so you can revoke one without the others. Revoking a key or disconnecting an app stops it at once.
- Your keys, your connected apps and your calls, by day and by tool, are at https://pro.groundbreak.city/connect.

## Protocol
- JSON-RPC 2.0 over HTTP POST. Methods: initialize, ping, tools/list, tools/call. Batches work.
- Answers are plain JSON, never an event stream. No sessions: every request stands alone. GET answers 405.
- Protocol versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Server version 1.1.0.
- A result longer than 60,000 characters comes back with its longest lists cut and a `trimmed` note.
- Tools carry readOnlyHint. Tools that change the CRM or spend credits say so in their description: confirm with the person first.
- OAuth 2.1: an unauthenticated request gets a 401 whose WWW-Authenticate names the protected resource metadata (https://mcp.groundbreak.city/.well-known/oauth-protected-resource/mcp). Authorization server metadata: https://mcp.groundbreak.city/.well-known/oauth-authorization-server. Dynamic client registration, the authorization code flow with PKCE (S256 only), scopes mcp:full and mcp:read. Access tokens last 60 minutes; refresh tokens 90 days, replaced on every use.

## Try asking
- The 10 biggest permits filed in Miami in the last 30 days, with the contractor on each
- Mortgages recorded in Tampa in the last 60 days: lender, borrower and amount
- Find the project at an address I give you and list its developer, architect and GC
- What has a company I name filed in Atlanta in the last year?
- Look up an address I give you: who owns it, and who is behind the LLC?
- Which deals in my pipeline have no phone for the owner yet?
- Log a call with the owner on my newest deal and set a follow-up for Friday
