# IDX Broker MCP by usefulapi (remote · idx-broker.usefulapi.io)

Read IDX Broker leads, agents, listings and MLS data; create and update leads and notes.

- Trust score: 63/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `idx-broker.usefulapi.io`: 63/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker.md), [page](https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker)

## Channel facts

- Endpoint: `https://idx-broker.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.4.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4212 tokens (~156/item across 27 items; 27 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 27 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the IDX Broker MCP by usefulapi server?

IDX Broker MCP by usefulapi is a hosted endpoint at https://idx-broker.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-idx-broker 'https://idx-broker.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-idx-broker": {
      "url": "https://idx-broker.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-idx-broker": {
      "type": "http",
      "url": "https://idx-broker.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-idx-broker]
url = "https://idx-broker.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-idx-broker": {
      "type": "remote",
      "url": "https://idx-broker.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-idx-broker --url 'https://idx-broker.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-idx-broker:
    url: "https://idx-broker.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-idx-broker": {
      "Transport": "http",
      "Url": "https://idx-broker.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-idx-broker -t streamable-http -u 'https://idx-broker.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-idx-broker": {
      "type": "http",
      "url": "https://idx-broker.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 63, +1)

- [functional] Server version: 1.4.0 → 1.4.3

### 2026-10-24 (score 62, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.3.0 → 1.4.0
- [functional] Server version: 1.2.0 → 1.3.0
- [functional] Server version: 1.0.0 → 1.2.0

### 2026-10-23 (score 62)

First indexed and scored.

## MCP tools (27)

### `idx_get_account_info` (~59 tokens)

Get account info

The IDX Broker client account this access key belongs to: company and contact details and account settings (access keys and passwords are never returned). The reply also shows how many of the key's hourly API accesses are used. GET /clients/accountinfo.

### `idx_get_account_type` (~48 tokens)

Get account type

The IDX Broker plan of the account (Lite or Platinum). It sets the hourly API limit: 300 accesses per key on Lite, 500 on Platinum. GET /clients/accounttype.

### `idx_list_agents` (~196 tokens)

List agents

Agents on a multi-user IDX Broker account (id, name, office, contact details, category, language, login dates). Filter by one field or by a time window. GET /clients/agents.

Input parameters:

- `date_type` (string): Which date the time window applies to.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `filter_field` (string): Field to filter on; needs filter_value.
- `filter_value` (string): Value to match in filter_field.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_offices` (~181 tokens)

List offices

Offices on a multi-user IDX Broker account. Filter by one field or by a time window. GET /clients/offices.

Input parameters:

- `date_type` (string): Which date the time window applies to.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `filter_field` (string): Field to filter on; needs filter_value.
- `filter_value` (string): Value to match in filter_field.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_leads` (~261 tokens)

List leads

List the account's leads (website registrants) with contact details, status, agent owner, and last viewed listings and searches. A reply holds up to 500 leads; pass offset to page on and look for pagination information in the reply. Filter by a time window on signup, edit, login or activity date. Uses one of the key's hourly API accesses. GET /leads/lead.

Input parameters:

- `date_type` (string): Which date the time window applies to (default subscribeDate).
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 168; decimals allowed. IDX default when omitted: 1 hour; pass up to 168 for one week.
- `offset` (integer): Items to skip from the beginning (default 0).
- `sort_by` (string): Sort by creation order, asc or desc.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_get_lead` (~92 tokens)

Get lead

One lead by id with its details, last 5 viewed listings and searches, and the total number of listings viewed. GET /leads/lead/{leadID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `lead_id` (integer, required): IDX lead id (from idx_list_leads).

### `idx_list_lead_notes` (~203 tokens)

List lead notes

Notes on a lead, or one note when note_id is given. GET /leads/note/{leadID}[/{noteID}].

Input parameters:

- `date_type` (string): Which date the time window applies to.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 168; decimals allowed. IDX default when omitted: 1 hour; pass up to 168 for one week.
- `lead_id` (integer, required): IDX lead id.
- `note_id` (integer): One note id; omit for all notes of the lead.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_lead_searches` (~213 tokens)

List lead saved searches

Saved property searches of a lead (or one search when search_id is given), with the results URL of each. GET /leads/search/{leadID}[/{searchID}].

Input parameters:

- `date_type` (string): Which date the time window applies to.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 168; decimals allowed. IDX default when omitted: 1 hour; pass up to 168 for one week.
- `lead_id` (integer, required): IDX lead id.
- `search_id` (integer): One saved search id; omit for all searches of the lead.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_lead_saved_properties` (~204 tokens)

List lead saved properties

Properties a lead saved (or one when property_id is given). GET /leads/property/{leadID}[/{propertyID}].

Input parameters:

- `date_type` (string): Which date the time window applies to.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 168; decimals allowed. IDX default when omitted: 1 hour; pass up to 168 for one week.
- `lead_id` (integer, required): IDX lead id.
- `property_id` (integer): One saved property id; omit for all saved properties of the lead.
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_get_lead_traffic` (~224 tokens)

Get lead traffic

Website traffic history of one lead: date, page, referrer and IP of each visit (at most 5,000 rows per request; use interval/offset/limit to narrow it). GET /leads/leadtraffic/{leadID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 168; decimals allowed. IDX default when omitted: 1 hour; pass up to 168 for one week.
- `lead_id` (integer, required): IDX lead id.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_featured_listings` (~222 tokens)

List featured listings

The account's featured (active) listings with address, price, status, photos and agent. Only the account's own listings are returned, never general MLS data. GET /clients/featured.

Input parameters:

- `date_type` (string): Which date the time window applies to (default dateAdded).
- `disclaimers` (boolean): Include the MLS disclaimer and courtesy text in the reply.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_sold_pending_listings` (~208 tokens)

List sold and pending listings

The account's sold and pending listings, that is those removed from the MLS feed. GET /clients/soldpending.

Input parameters:

- `date_type` (string): Which date the time window applies to (default dateAdded).
- `disclaimers` (boolean): Include the MLS disclaimer and courtesy text in the reply.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_off_market_listings` (~196 tokens)

List off-market listings

The account's off-market listings. GET /clients/offmarket.

Input parameters:

- `date_type` (string): Which date the time window applies to (default dateAdded).
- `disclaimers` (boolean): Include the MLS disclaimer and courtesy text in the reply.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_supplemental_listings` (~210 tokens)

List supplemental listings

The account's supplemental (non-MLS) listings with a basic set of fields. GET /clients/supplemental.

Input parameters:

- `date_type` (string): Which date the time window applies to (default dateAdded).
- `disclaimers` (boolean): Include the MLS disclaimer and courtesy text in the reply.
- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_list_saved_links` (~170 tokens)

List saved links

Saved links (pre-built property search pages) of the account with id, name and URL. GET /clients/savedlinks.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `interval` (number): Hours of data to return, counted back from start_datetime (default: now). 0.0166 (one minute) to 8765; decimals allowed.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).
- `start_datetime` (string): Where the interval starts counting back (the newest moment wanted). Default: now. ISO 8601 with a timezone.

### `idx_get_saved_link_count` (~53 tokens)

Count properties of a saved link

The total number of properties a saved link currently matches. GET /clients/savedlinks/{savedLinkID}/count.

Input parameters:

- `saved_link_id` (integer, required): Saved link id (from idx_list_saved_links).

### `idx_list_widgets` (~94 tokens)

List widgets

The JavaScript widgets on the account with id, name, URL and options. GET /clients/widgets.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `limit` (integer): Number of items to return (use with offset).
- `offset` (integer): Items to skip from the beginning (default 0).

### `idx_get_widget` (~70 tokens)

Get widget

One JavaScript widget with its settings. GET /clients/widgets/{id}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `widget_id` (integer, required): Widget id (from idx_list_widgets).

### `idx_list_system_links` (~76 tokens)

List system links

The system pages of the account's site (search, featured, contact...) with name, id and URL, which can be linked to directly. GET /clients/systemlinks.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.

### `idx_list_approved_mls` (~84 tokens)

List approved MLSs

The MLSs approved for display on the account, with their IDX ids (such as a001) and names. Use the id in the other MLS tools. GET /mls/approvedmls.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.

### `idx_get_mls_age` (~94 tokens)

Get MLS data age

When an MLS feed was last downloaded and processed and when its images were last gathered (UTC). GET /mls/age/{idxID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `idx_id` (string, required): IDX MLS id such as a001 (see idx_list_approved_mls).

### `idx_list_mls_property_types` (~128 tokens)

List MLS property types

Property types of an MLS with the IDX type id, the MLS name, the parent type and subtypes. GET /mls/propertytypes/{idxID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `filter_field` (string): Field to filter on; needs filter_value.
- `filter_value` (string): Value to match in filter_field.
- `idx_id` (string, required): IDX MLS id such as a001 (see idx_list_approved_mls).

### `idx_list_mls_search_fields` (~132 tokens)

List MLS search fields

The fields of an MLS that can be searched under MLS rules: field name, display name and the property types they belong to. GET /mls/searchfields/{idxID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `filter_field` (string): Field to filter on; needs filter_value.
- `filter_value` (string): Value to match in filter_field.
- `idx_id` (string, required): IDX MLS id such as a001 (see idx_list_approved_mls).

### `idx_list_mls_locations` (~198 tokens)

List MLS cities, counties or postal codes

Cities, counties or postal codes present in an MLS's data, with ids and a count of occurrences. Filter fields: cities = cityID, cityName, stateAbrv, mlsPtID; counties = countyID, countyName, stateAbrv, mlsPtID; postalcodes = id, stateAbrv, mlsPtID. GET /mls/{cities|counties|postalcodes}/{idxID}.

Input parameters:

- `fields` (array): Only return these fields (IDX `rf`); ["*"] returns every available field. Narrow it to save API size.
- `filter_field` (string): Field to filter on (must fit kind); needs filter_value.
- `filter_value` (string): Value to match in filter_field.
- `idx_id` (string, required): IDX MLS id such as a001 (see idx_list_approved_mls).
- `kind` (string, required): Which list.

### `idx_create_lead` (~161 tokens)

Create lead

WRITE: creates a new lead in the IDX Broker account (and may trigger the account's own lead notifications). Needs a correctly formatted email with a valid MX record; IDX rejects bad addresses with a server error. Extra fields go in `fields` by their IDX name, as seen on a lead returned by idx_get_lead. Returns the new lead id. PUT /leads/lead.

Input parameters:

- `email` (string, required): Lead email address.
- `fields` (object): Other updatable lead fields by IDX name, e.g. {"phone": "555-0100"}. firstName, lastName and email cannot be repeated here.
- `first_name` (string, required): Lead first name.
- `last_name` (string, required): Lead last name.

### `idx_add_lead_note` (~63 tokens)

Add lead note

WRITE: adds a note to a lead (visible to the account's agents). Returns the new note id. PUT /leads/note/{leadID}.

Input parameters:

- `lead_id` (integer, required): IDX lead id.
- `note` (string, required): Note text.

### `idx_update_lead` (~115 tokens)

Update lead

WRITE: changes fields of an existing lead; the given values replace the stored ones. Only pass what must change. Field names are the IDX lead field names as seen on a lead returned by idx_get_lead (for example firstName, lastName, email, phone, status). POST /leads/lead/{leadID}.

Input parameters:

- `fields` (object, required): Fields to set, by IDX name, e.g. {"phone": "555-0100"}.
- `lead_id` (integer, required): IDX lead id.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker#diagnostics

## Score history

- 2026-10-25: 63
- 2026-10-24: 62
- 2026-10-23: 62

## Common questions

### What is the IDX Broker MCP by usefulapi server?

IDX Broker MCP by usefulapi is listed in the public MCP registry as io.usefulapi/idx-broker. Read IDX Broker leads, agents, listings and MLS data; create and update leads and notes. This page covers its hosted endpoint (https://idx-broker.usefulapi.io/mcp).

### Is the IDX Broker MCP by usefulapi server safe to use?

IDX Broker MCP by usefulapi scores 63 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the IDX Broker MCP by usefulapi server expose?

IDX Broker MCP by usefulapi exposes 27 tools: idx_get_account_info, idx_get_account_type, idx_list_agents, idx_list_offices, idx_list_leads, and 22 more. Their descriptions and schemas cost roughly 3,955 tokens of context every time the server is loaded.

### Does the IDX Broker MCP by usefulapi server require authentication?

Yes. IDX Broker MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the IDX Broker MCP by usefulapi server still maintained?

IDX Broker MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://idx-broker.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/idx-broker/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-idx-broker/idx-broker
