# Mashvisor MCP tools

> Every Mashvisor MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/mashvisor

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

14 tools for Mashvisor on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Mashvisor investor account
- Integration page: https://cotlet.dev/integrations/mashvisor-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `mashvisor_find_properties` | read | Property Finder: for-sale properties ranked by cash on cash return for your budget. |
| `mashvisor_list_filter_presets` | read | Your saved Map Property Finder filter presets, with name and filters. |
| `mashvisor_run_filter_preset` | read | Apply a saved preset to a city or neighborhood and return the matching listings with their metrics. |
| `mashvisor_get_property_analysis` | read | Property Analytics page: price, rental income, cash flow, cap rate and cash on cash return per strategy, Mashmeter and expenses. |
| `mashvisor_get_property_comps` | read | Comparable listings near a property, with occupancy, nightly rate, rent or sale price. |
| `mashvisor_search_markets` | read | Market Finder: neighborhoods and cities ranked by rental performance, with your filters. |
| `mashvisor_list_saved_homes` | read | Properties in your Saved Homes, with type, sale price and your rating. |
| `mashvisor_list_property_alerts` | read | Your Property Alerts with location, filters and email frequency. |
| `mashvisor_export_neighborhood_data` | read | Excel export of a neighborhood from Map Property Finder. Uses one of your plan's monthly exports. |
| `mashvisor_download_property_report` | read | PDF analytics report of a property, optionally with your company name and logo. Uses one download. |
| `mashvisor_analyze_unlisted_property` | write | Look up an off-market address, add it to Saved Homes and return its rental analysis. |
| `mashvisor_save_home` | write | Add a property to your Saved Homes. |
| `mashvisor_remove_saved_home` | write | Remove a property from your Saved Homes. |
| `mashvisor_create_property_alert` | write | New Property Alert: Mashvisor emails you new listings that match, only when there are any. |

## Find properties

MCP tool: `mashvisor_find_properties`

Access: read.

Searches for-sale properties in one or more cities, as in Property Finder, ranked by cash on cash return for the rental strategy you pick. Radius works only with one city. Each item has the property_id that the analysis, comps and Saved Homes tools take.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `cities` | string[] | yes | One or more cities, e.g. "Tampa, FL". |
| `miles` | integer | no | Radius around the city. Only with one city. |
| `budget_min` | integer | no | Minimum listing price in USD. |
| `budget_max` | integer | no | Maximum listing price in USD. |
| `rental_strategy` | enum | no | airbnb or traditional. |
| `bedrooms` | integer | no | Minimum bedrooms, 1 to 5. |
| `bathrooms` | integer | no | Minimum bathrooms, 1 to 5. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_find_properties",
    "arguments": {
      "cities": [
        "Tampa, FL"
      ]
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "properties": [
      {
        "property_id": "p_88120",
        "address": "1823 Schyler Ln, Tampa, FL",
        "price": 365000,
        "bedrooms": 3,
        "bathrooms": 2,
        "cash_on_cash": 13.1,
        "cap_rate": 9.4
      },
      {
        "property_id": "p_88144",
        "address": "57 Palm Ct, Tampa, FL",
        "price": 342000,
        "bedrooms": 3,
        "bathrooms": 2,
        "cash_on_cash": 11.7,
        "cap_rate": 8.5
      }
    ]
  },
  "isError": false
}
```

## List filter presets

MCP tool: `mashvisor_list_filter_presets`

Access: read.

Returns the filter presets you saved with Save Filters in Map Property Finder, each with its name and filters. Pass preset_id to run_filter_preset or export_neighborhood_data. Presets are created, renamed and deleted in Mashvisor, not through Cotlet.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_list_filter_presets",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presets": [
      {
        "preset_id": "fp_2041",
        "name": "Tampa STR under 400k",
        "filters": {
          "price_max": 400000,
          "bedrooms_min": 3,
          "property_type": "single_family"
        }
      },
      {
        "preset_id": "fp_2057",
        "name": "Cleveland cash flow",
        "filters": {
          "price_max": 200000,
          "bedrooms_min": 2
        }
      }
    ]
  },
  "isError": false
}
```

## Run filter preset

MCP tool: `mashvisor_run_filter_preset`

Access: read.

Applies one saved preset to a city or neighborhood and returns the matching listings with their metrics, like selecting the preset in Map Property Finder. The tab picks the same three views as the app: investment, airbnb_comps or rental_comps. Results come back in the order the app shows them.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `preset_id` | string | yes | Preset ID from list_filter_presets. |
| `location` | string | yes | City or neighborhood, e.g. "Ybor City, Tampa, FL". |
| `tab` | enum | no | investment, airbnb_comps or rental_comps. Default: investment. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_run_filter_preset",
    "arguments": {
      "preset_id": "fp_2041",
      "location": "Ybor City, Tampa, FL",
      "tab": "investment",
      "limit": 25
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "preset": "Tampa STR under 400k",
    "location": "Ybor City, Tampa, FL",
    "tab": "investment",
    "listings": [
      {
        "property_id": "p_88120",
        "address": "1823 Schyler Ln, Tampa, FL",
        "price": 365000,
        "cash_on_cash": 13.1,
        "cap_rate": 9.4
      },
      {
        "property_id": "p_88151",
        "address": "910 E 8th Ave, Tampa, FL",
        "price": 389000,
        "cash_on_cash": 10.8,
        "cap_rate": 8.1
      },
      {
        "property_id": "p_88163",
        "address": "2204 N 15th St, Tampa, FL",
        "price": 329000,
        "cash_on_cash": 10.2,
        "cap_rate": 7.9
      }
    ]
  },
  "isError": false
}
```

## Get property analysis

MCP tool: `mashvisor_get_property_analysis`

Access: read.

Returns the numbers of the Property Analytics page for one property: price, rental income, expenses, cash flow, cap rate and cash on cash return, for the Airbnb and the traditional rental strategy. Set strategy to get one of them. Figures are estimates from Mashvisor, as in the app.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `strategy` | enum | no | airbnb, traditional or both. Default: both. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_get_property_analysis",
    "arguments": {
      "property_id": "p_88120",
      "strategy": "both"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_88120",
    "address": "1823 Schyler Ln, Tampa, FL",
    "price": 365000,
    "cash_invested": 91250,
    "airbnb": {
      "monthly_revenue": 4000,
      "monthly_operating_expenses": 1150,
      "monthly_mortgage": 1850,
      "monthly_cash_flow": 1000,
      "cap_rate": 9.4,
      "cash_on_cash": 13.1
    },
    "traditional": {
      "monthly_revenue": 2600,
      "monthly_operating_expenses": 650,
      "monthly_mortgage": 1850,
      "monthly_cash_flow": 100,
      "cap_rate": 6.4,
      "cash_on_cash": 1.3
    }
  },
  "isError": false
}
```

## Get property comps

MCP tool: `mashvisor_get_property_comps`

Access: read.

Returns comparable listings near one property. short_term gives Airbnb comps with occupancy and nightly rate, long_term gives rentals with monthly rent, and sales gives sold or listed prices. Nearest comps come first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `type` | enum | yes | short_term, long_term or sales. |
| `limit` | integer | no | 1 to 50. Default: 20. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_get_property_comps",
    "arguments": {
      "property_id": "property_8c41d2",
      "type": "short_term"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_90417",
    "type": "short_term",
    "comps": [
      {
        "address": "420 Oak Street, Austin, TX",
        "bedrooms": 3,
        "nightly_rate": 245,
        "occupancy": 68,
        "distance_miles": 0.2
      },
      {
        "address": "17 Elm Ave, Austin, TX",
        "bedrooms": 3,
        "nightly_rate": 229,
        "occupancy": 63,
        "distance_miles": 0.4
      }
    ]
  },
  "isError": false
}
```

## Search markets

MCP tool: `mashvisor_search_markets`

Access: read.

Returns neighborhoods and cities from Market Finder, ranked by rental performance, with your filters applied. Filter by state, Mashmeter grade, minimum monthly revenue, minimum occupancy and property types. Without a state it searches nationwide.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `state` | string | no | Two-letter state code. Default: nationwide. |
| `mashmeter` | string[] | no | Grades to include: A, B, C, D. |
| `min_monthly_revenue` | integer | no | Minimum monthly rental revenue in USD. |
| `min_occupancy` | integer | no | Minimum occupancy rate in percent. |
| `property_types` | string[] | no | Property types to include. |
| `limit` | integer | no | 1 to 50. Default: 20. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_search_markets",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "markets": [
      {
        "market": "Gatlinburg, TN",
        "mashmeter": "A",
        "occupancy": 72,
        "monthly_revenue": 5400
      },
      {
        "market": "Destin, FL",
        "mashmeter": "A",
        "occupancy": 69,
        "monthly_revenue": 5100
      },
      {
        "market": "Pigeon Forge, TN",
        "mashmeter": "A",
        "occupancy": 67,
        "monthly_revenue": 4700
      }
    ]
  },
  "isError": false
}
```

## List Saved Homes

MCP tool: `mashvisor_list_saved_homes`

Access: read.

Returns the properties in your Saved Homes with type, sale price and your rating. Properties added by analyze_unlisted_property or save_home are included. Use property_id with get_property_analysis, get_property_comps or remove_saved_home.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `limit` | integer | no | 1 to 100. Default: 50. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_list_saved_homes",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "homes": [
      {
        "property_id": "p_88120",
        "address": "1823 Schyler Ln, Tampa, FL",
        "type": "single_family",
        "sale_price": 365000,
        "rating": 4
      },
      {
        "property_id": "p_90417",
        "address": "412 Oak Street, Austin, TX",
        "type": "single_family",
        "sale_price": 385000,
        "rating": null
      }
    ]
  },
  "isError": false
}
```

## List Property Alerts

MCP tool: `mashvisor_list_property_alerts`

Access: read.

Returns your Property Alerts with their location, filters and email frequency. Use it before create_property_alert so your agent does not add a duplicate.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_list_property_alerts",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "alerts": [
      {
        "alert_id": "pa_58102",
        "name": "Tampa condos",
        "location": "Tampa, FL",
        "property_type": "condo",
        "price_max": 300000,
        "frequency": "weekly"
      }
    ]
  },
  "isError": false
}
```

## Export neighborhood data

MCP tool: `mashvisor_export_neighborhood_data`

Access: read.

Creates the Excel export that the Export button gives in Map Property Finder, for one neighborhood and one tab. Without preset_id it exports all data; with a preset it exports only the matching listings. City-level export is not supported. Each call uses one of your plan's monthly exports, so it reads from Mashvisor but is not free of limits.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `neighborhood` | string | yes | Neighborhood name with city. City-level export is not supported. |
| `tab` | enum | yes | investment, airbnb_comps or rental_comps. |
| `preset_id` | string | no | Export only listings matching this preset. Default: all data. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_export_neighborhood_data",
    "arguments": {
      "neighborhood": "neighborhood",
      "tab": "investment"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "neighborhood": "Ybor City, Tampa, FL",
    "tab": "airbnb_comps",
    "scope": "filtered",
    "file_name": "ybor-city-airbnb-comps.xlsx",
    "download_url": "https://files.cotlet.example/exports/ybor-city-airbnb-comps.xlsx",
    "rows": 38
  },
  "isError": false
}
```

## Download property report

MCP tool: `mashvisor_download_property_report`

Access: read.

Creates the PDF analytics report from the download icon on a property page. With branded set to true it adds the company name and logo saved in your account. Mashvisor limits downloads by plan, and each call uses one.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |
| `branded` | boolean | no | Add the company branding saved in your account. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_download_property_report",
    "arguments": {
      "property_id": "property_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_88120",
    "branded": false,
    "file_name": "schyler-ln-tampa-report.pdf",
    "download_url": "https://files.cotlet.example/reports/schyler-ln-tampa-report.pdf"
  },
  "isError": false
}
```

## Analyze unlisted property

MCP tool: `mashvisor_analyze_unlisted_property`

Access: write.

Runs the "look up not listed property" flow for an address and returns the rental analysis. It adds the property to your Saved Homes. This reaches no one and is undone with remove_saved_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `address` | string | yes | Full US street address. |
| `price` | integer | yes | Price in USD. |
| `property_type` | enum | yes | single_family, condo, townhouse, apartment or multi_family. |
| `bedrooms` | integer | yes | Number of bedrooms. |
| `bathrooms` | integer | yes | Number of bathrooms. |
| `sqft` | integer | yes | Square footage. |
| `unit` | string | no | Unit number for apartments, condos and townhomes. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_analyze_unlisted_property",
    "arguments": {
      "address": "412 Oak Street, Austin, TX",
      "price": 385000,
      "property_type": "single_family",
      "bedrooms": 3,
      "bathrooms": 2,
      "sqft": 1650
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_90417",
    "address": "412 Oak Street, Austin, TX",
    "saved_to_saved_homes": true,
    "price": 385000,
    "cash_invested": 96250,
    "airbnb": {
      "monthly_revenue": 4200,
      "monthly_operating_expenses": 1200,
      "monthly_mortgage": 1950,
      "monthly_cash_flow": 1050,
      "cap_rate": 9.4,
      "cash_on_cash": 13.1
    },
    "traditional": {
      "monthly_revenue": 2700,
      "monthly_operating_expenses": 650,
      "monthly_mortgage": 1950,
      "monthly_cash_flow": 100,
      "cap_rate": 6.4,
      "cash_on_cash": 1.2
    }
  },
  "isError": false
}
```

## Save home

MCP tool: `mashvisor_save_home`

Access: write.

Adds one property to your Saved Homes. This reaches no one and is undone with remove_saved_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_save_home",
    "arguments": {
      "property_id": "property_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_88144",
    "saved": true
  },
  "isError": false
}
```

## Remove saved home

MCP tool: `mashvisor_remove_saved_home`

Access: write.

Removes one property from your Saved Homes. This reaches no one and the property can be added again with save_home, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from find_properties, run_filter_preset or list_saved_homes. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_remove_saved_home",
    "arguments": {
      "property_id": "property_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "property_id": "p_88144",
    "saved": false
  },
  "isError": false
}
```

## Create Property Alert

MCP tool: `mashvisor_create_property_alert`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a Property Alert in your account. Mashvisor then emails you new matching listings at the frequency you set, and only when there are any. Price runs from 5,000 to 5,000,000 USD. There is no tool to delete an alert, so you remove one in Mashvisor. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Alert name. |
| `location` | string | yes | Address, neighborhood, city or zip code. |
| `property_type` | enum | no | all, single_family, condo, townhouse or multi_family. Default: all. |
| `price_min` | integer | no | Minimum price in USD, from 5,000. |
| `price_max` | integer | no | Maximum price in USD, up to 5,000,000. |
| `bedrooms` | integer | no | Minimum bedrooms, 1 to 5. |
| `financing` | enum | no | cash or mortgage. Default: cash. |
| `min_cap_rate` | integer | no | Minimum cap rate in percent. |
| `min_cash_on_cash` | integer | no | Minimum cash on cash return in percent. |
| `frequency` | enum | no | daily, weekly or monthly. Default: weekly. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "mashvisor_create_property_alert",
    "arguments": {
      "name": "Cleveland SFH under 200k",
      "location": "Cleveland, OH",
      "property_type": "single_family",
      "price_max": 200000,
      "financing": "cash",
      "min_cap_rate": 8,
      "frequency": "weekly"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "alert_id": "pa_58213",
    "name": "Cleveland SFH under 200k",
    "location": "Cleveland, OH",
    "frequency": "weekly",
    "email_to": "yourname@example.com",
    "status": "active"
  },
  "isError": false
}
```
