# DoorLoop MCP by usefulapi (remote · doorloop.usefulapi.io)

Read DoorLoop properties, units, leases, tenants and payments; create tasks and task updates.

- Trust score: 18/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

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

## Channel facts

- Endpoint: `https://doorloop.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.5.4`

## 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-11-06.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - 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.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the DoorLoop MCP by usefulapi server?

DoorLoop MCP by usefulapi is a hosted endpoint at https://doorloop.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-doorloop 'https://doorloop.usefulapi.io/mcp'
```

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-doorloop": {
      "type": "http",
      "url": "https://doorloop.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-11-06 (score 18, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-11-02 (score 18, −47)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.03 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-11-01 (score 65, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-31 (score 64)

First indexed and scored.

## MCP tools (21)

### `doorloop_get_current_user` (~39 tokens)

Get current user

Get the DoorLoop user that created this API key. Good first call to confirm the connection. DoorLoop API: GET /users/me.

### `doorloop_list_properties` (~146 tokens)

List properties

List properties (buildings) with address, class and portfolio. DoorLoop API: GET /properties.

Input parameters:

- `class` (string): Filter by property class.
- `group` (string): Filter by portfolio id.
- `owner` (string): Filter by owner id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `text` (string): Filter by property name.

### `doorloop_get_property` (~44 tokens)

Get a property

Get one property by id. DoorLoop API: GET /properties/{propertyId}.

Input parameters:

- `property_id` (string, required): The property_id (from the matching list tool).

### `doorloop_list_units` (~166 tokens)

List units

List rental units with rent, bedrooms and status. Without filter_active the API returns active units only. DoorLoop API: GET /units.

Input parameters:

- `active` (string): Which units to return by status.
- `group` (string): Filter by portfolio id.
- `owner` (string): Filter by owner id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `text` (string): Filter by unit name.

### `doorloop_get_unit` (~44 tokens)

Get a unit

Get one unit by id. DoorLoop API: GET /units/{unitId}.

Input parameters:

- `unit_id` (string, required): The unit_id (from the matching list tool).

### `doorloop_list_leases` (~339 tokens)

List leases

List leases with dates, rent, status and outstanding balance. Use calculatedStatus or situation to find at-risk or late leases. DoorLoop API: GET /leases.

Input parameters:

- `calculatedStatus` (string): Collections stage.
- `end_date_from` (string): Lease end date from (yyyy-mm-dd).
- `end_date_to` (string): Lease end date to (yyyy-mm-dd).
- `evictionPending` (boolean): Only leases with a pending eviction.
- `group` (string): Filter by portfolio id.
- `outstandingBalanceGreaterThan` (number): Only leases with an outstanding balance above this amount.
- `owner` (string): Filter by owner id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `propertyClass` (string): Filter by property class.
- `situation` (string): Lease situation from balance and lifecycle.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `start_date_from` (string): Lease start date from (yyyy-mm-dd).
- `start_date_to` (string): Lease start date to (yyyy-mm-dd).
- `status` (string): Filter by lease status.
- `tenant` (string): Filter by tenant id.
- `term` (string): Filter by lease term.
- `text` (string): Filter by lease name.
- `unit` (string): Filter by unit id.

### `doorloop_get_lease` (~45 tokens)

Get a lease

Get one lease by id. DoorLoop API: GET /leases/{leaseId}.

Input parameters:

- `lease_id` (string, required): The lease_id (from the matching list tool).

### `doorloop_list_lease_tenants` (~210 tokens)

List lease tenants

List tenants joined to their leases, with move-in and move-out dates. Best way to map tenants to leases. DoorLoop API: GET /leases/tenants.

Input parameters:

- `group` (string): Filter by portfolio id.
- `lease` (string): Filter by lease id.
- `movedInAt_from` (string): Move-in date from (yyyy-mm-dd).
- `movedInAt_to` (string): Move-in date to (yyyy-mm-dd).
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `status` (string): Occupancy status.
- `text` (string): Filter by tenant name or email.

### `doorloop_list_tenants` (~167 tokens)

List tenants

List tenants and prospects with contact details. DoorLoop API: GET /tenants.

Input parameters:

- `group` (string): Filter by portfolio id.
- `lease` (string): Filter by lease id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `text` (string): Filter by tenant name or email.
- `type` (string): Filter by tenant type.
- `unit` (string): Filter by unit id.

### `doorloop_get_tenant` (~46 tokens)

Get a tenant

Get one tenant by id. DoorLoop API: GET /tenants/{tenantId}.

Input parameters:

- `tenant_id` (string, required): The tenant_id (from the matching list tool).

### `doorloop_list_lease_payments` (~164 tokens)

List lease payments

List rent payments received on leases. DoorLoop API: GET /lease-payments.

Input parameters:

- `date_from` (string): Payment date from (yyyy-mm-dd).
- `date_to` (string): Payment date to (yyyy-mm-dd).
- `lease` (string): Filter by lease id.
- `owner` (string): Filter by owner id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).

### `doorloop_list_lease_charges` (~225 tokens)

List lease charges

List charges (rent, fees, late fees) billed on leases. Use totalBalanceGreaterThan to find unpaid charges. DoorLoop API: GET /lease-charges.

Input parameters:

- `date_from` (string): Charge date from (yyyy-mm-dd).
- `date_to` (string): Charge date to (yyyy-mm-dd).
- `lateFeeCharges` (boolean): Only late-fee charges.
- `lease` (string): Filter by lease id.
- `owner` (string): Filter by owner id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `totalBalanceGreaterThan` (number): Only charges with a remaining balance above this amount.
- `unit` (string): Filter by unit id.

### `doorloop_list_tasks` (~250 tokens)

List tasks

List tasks, work orders, tenant requests and owner requests. DoorLoop API: GET /tasks.

Input parameters:

- `assignedToUser` (string): Filter by user id or "unassigned".
- `createdAt_from` (string): Created from (yyyy-mm-dd).
- `createdAt_to` (string): Created to (yyyy-mm-dd).
- `dueDate_from` (string): Due date from (yyyy-mm-dd).
- `dueDate_to` (string): Due date to (yyyy-mm-dd).
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `propertyGroup` (string): Filter by portfolio id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `status` (string): Filter by task status.
- `text` (string): Filter by subject, description or reference.
- `type` (string): Filter by task type.
- `unit` (string): Filter by unit id.

### `doorloop_get_task` (~44 tokens)

Get a task

Get one task by id. DoorLoop API: GET /tasks/{taskId}.

Input parameters:

- `task_id` (string, required): The task_id (from the matching list tool).

### `doorloop_list_owners` (~141 tokens)

List owners

List property owners. DoorLoop API: GET /owners.

Input parameters:

- `active` (boolean): Filter by active or inactive.
- `group` (string): Filter by portfolio id.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `text` (string): Filter by owner name or email.

### `doorloop_list_vendors` (~148 tokens)

List vendors

List maintenance vendors. DoorLoop API: GET /vendors.

Input parameters:

- `active` (boolean): Filter by active or inactive.
- `insurance_expires_before` (string): Insurance expires before (yyyy-mm-dd).
- `openBalance` (boolean): Only vendors with an open balance.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `property` (string): Filter by property id.
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).

### `doorloop_list_portfolios` (~98 tokens)

List portfolios

List portfolios (property groups). DoorLoop API: GET /property-groups.

Input parameters:

- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).

### `doorloop_list_users` (~97 tokens)

List users

List DoorLoop users of the company. DoorLoop API: GET /users.

Input parameters:

- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).

### `doorloop_list_accounts` (~131 tokens)

List accounts

List chart-of-accounts entries. DoorLoop API: GET /accounts.

Input parameters:

- `leaseChargeItem` (boolean): Only lease charge items.
- `page_number` (integer): Page number (default 1).
- `page_size` (integer): Results per page (default 50, max 1000).
- `sort_by` (string): Field name of the resource to sort by, for example createdAt.
- `sort_descending` (boolean): Sort in descending order (default false).
- `type` (string): Account type, for example REVENUE_INCOME or EXPENSE_EXPENSE.

### `doorloop_create_task` (~270 tokens)

Create a task

WRITE: create a task in DoorLoop. INTERNAL_TASK needs requested_by_user, TENANT_REQUEST needs requested_by_tenant, OWNER_REQUEST needs requested_by_owner, WORK_ORDER needs assigned_to_vendor. Notifications are off unless you set them. Each call creates a new task. DoorLoop API: POST /tasks.

Input parameters:

- `assigned_to_users` (array): User ids to assign.
- `assigned_to_vendor` (string): Vendor id. Required for WORK_ORDER.
- `description` (string)
- `due_date` (string): Due date (yyyy-mm-dd).
- `instructions_to_vendor` (string)
- `notify_assignees` (boolean): Notify the assigned users. Default: no.
- `notify_tenant` (boolean): Notify the tenant (TENANT_REQUEST only). Default: no.
- `priority` (string)
- `property` (string): Property id.
- `requested_by_owner` (string): Owner id. Required for OWNER_REQUEST.
- `requested_by_tenant` (string): Tenant id. Required for TENANT_REQUEST.
- `requested_by_user` (string): User id. Required for INTERNAL_TASK.
- `status` (string, required): Initial status.
- `subject` (string, required): Task subject.
- `type` (string, required)
- `unit` (string): Unit id.

### `doorloop_post_task_update` (~160 tokens)

Post an update on a task

WRITE: post a message on an existing task and optionally change its status, priority, due date or assignees. Each call adds a new update. Notifications are off unless you set them. DoorLoop API: POST /tasks/update.

Input parameters:

- `assigned_to_users` (array): User ids to assign.
- `due_date` (string): New due date (yyyy-mm-dd).
- `message` (string, required): Update message.
- `notify_assignees` (boolean): Notify the assigned users. Default: no.
- `notify_tenant` (boolean): Notify the tenant. Default: no.
- `priority` (string)
- `status` (string)
- `task_id` (string, required): Task id (from doorloop_list_tasks).

## Diagnostics

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

## Score history

- 2026-11-06: 18
- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 65
- 2026-10-31: 64

## Common questions

### What is the DoorLoop MCP by usefulapi server?

DoorLoop MCP by usefulapi is listed in the public MCP registry as io.usefulapi/doorloop. Read DoorLoop properties, units, leases, tenants and payments; create tasks and task updates. This page covers its hosted endpoint (https://doorloop.usefulapi.io/mcp).

### Is the DoorLoop MCP by usefulapi server safe to use?

DoorLoop MCP by usefulapi scores 18 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 DoorLoop MCP by usefulapi server expose?

DoorLoop MCP by usefulapi exposes 21 tools: doorloop_get_current_user, doorloop_list_properties, doorloop_get_property, doorloop_list_units, doorloop_get_unit, and 16 more. Their descriptions and schemas cost roughly 2,974 tokens of context every time the server is loaded.

### Does the DoorLoop MCP by usefulapi server require authentication?

Its publisher declares no required credentials for DoorLoop MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the DoorLoop MCP by usefulapi server still maintained?

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

### What did VerifyMCP test on the DoorLoop MCP by usefulapi server?

VerifyMCP ran 4 checks on DoorLoop MCP by usefulapi, covering TLS certificate, HSTS header, DNSSEC and Transport. 7 items could not be completed, a gap on our side rather than a finding about DoorLoop MCP by usefulapi: Authorization, HTTPS, Schema quality, Stability and 3 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://doorloop.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/doorloop/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-doorloop/doorloop.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-doorloop/doorloop/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/io-usefulapi-doorloop/doorloop.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-doorloop/doorloop
