DoorLoop MCP by usefulapi
Read DoorLoop properties, units, leases, tenants and payments; create tasks and task updates.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"doorloop": {
"url": "https://doorloop.usefulapi.io/mcp"
}
}
}远程端点
https://doorloop.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(21)
🟢doorloop_get_current_user
Get the DoorLoop user that created this API key. Good first call to confirm the connection. DoorLoop API: GET /users/me.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_properties(text, group, class, owner, page_number, ...)
List properties (buildings) with address, class and portfolio. DoorLoop API: GET /properties.
输入模式
{
"type": "object",
"properties": {
"text": {
"description": "Filter by property name.",
"type": "string"
},
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"class": {
"description": "Filter by property class.",
"type": "string",
"enum": [
"RESIDENTIAL",
"COMMERCIAL"
]
},
"owner": {
"description": "Filter by owner id.",
"type": "string"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_get_property(property_id)
Get one property by id. DoorLoop API: GET /properties/{propertyId}.
输入模式
{
"type": "object",
"properties": {
"property_id": {
"type": "string",
"minLength": 1,
"description": "The property_id (from the matching list tool)."
}
},
"required": [
"property_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_units(group, property, owner, text, active, ...)
List rental units with rent, bedrooms and status. Without filter_active the API returns active units only. DoorLoop API: GET /units.
输入模式
{
"type": "object",
"properties": {
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"owner": {
"description": "Filter by owner id.",
"type": "string"
},
"text": {
"description": "Filter by unit name.",
"type": "string"
},
"active": {
"description": "Which units to return by status.",
"type": "string",
"enum": [
"true",
"false",
"all"
]
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_get_unit(unit_id)
Get one unit by id. DoorLoop API: GET /units/{unitId}.
输入模式
{
"type": "object",
"properties": {
"unit_id": {
"type": "string",
"minLength": 1,
"description": "The unit_id (from the matching list tool)."
}
},
"required": [
"unit_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_leases(group, property, owner, unit, tenant, ...)
List leases with dates, rent, status and outstanding balance. Use calculatedStatus or situation to find at-risk or late leases. DoorLoop API: GET /leases.
输入模式
{
"type": "object",
"properties": {
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"owner": {
"description": "Filter by owner id.",
"type": "string"
},
"unit": {
"description": "Filter by unit id.",
"type": "string"
},
"tenant": {
"description": "Filter by tenant id.",
"type": "string"
},
"text": {
"description": "Filter by lease name.",
"type": "string"
},
"start_date_from": {
"description": "Lease start date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"start_date_to": {
"description": "Lease start date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"end_date_from": {
"description": "Lease end date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"end_date_to": {
"description": "Lease end date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"propertyClass": {
"description": "Filter by property class.",
"type": "string",
"enum": [
"RESIDENTIAL",
"COMMERCIAL"
]
},
"outstandingBalanceGreaterThan": {
"description": "Only leases with an outstanding balance above this amount.",
"type": "number"
},
"status": {
"description": "Filter by lease status.",
"type": "string",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"term": {
"description": "Filter by lease term.",
"type": "string",
"enum": [
"Rollover",
"AtWill"
]
},
"calculatedStatus": {
"description": "Collections stage.",
"type": "string",
"enum": [
"IN_EVICTION",
"PAY_OR_QUIT_EXPIRED",
"PAY_OR_QUIT_SENT",
"EXPIRED",
"AT_RISK",
"ACTIVE"
]
},
"situation": {
"description": "Lease situation from balance and lifecycle.",
"type": "string",
"enum": [
"BALANCE_DUE",
"CREDIT_AVAILABLE",
"ZERO_BALANCE",
"EXPIRED",
"EVICTION"
]
},
"evictionPending": {
"description": "Only leases with a pending eviction.",
"type": "boolean"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_get_lease(lease_id)
Get one lease by id. DoorLoop API: GET /leases/{leaseId}.
输入模式
{
"type": "object",
"properties": {
"lease_id": {
"type": "string",
"minLength": 1,
"description": "The lease_id (from the matching list tool)."
}
},
"required": [
"lease_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_lease_tenants(group, property, lease, status, text, ...)
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.
输入模式
{
"type": "object",
"properties": {
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"lease": {
"description": "Filter by lease id.",
"type": "string"
},
"status": {
"description": "Occupancy status.",
"type": "string",
"enum": [
"PAST",
"CURRENT",
"FUTURE"
]
},
"text": {
"description": "Filter by tenant name or email.",
"type": "string"
},
"movedInAt_from": {
"description": "Move-in date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"movedInAt_to": {
"description": "Move-in date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_tenants(group, property, lease, unit, text, ...)
List tenants and prospects with contact details. DoorLoop API: GET /tenants.
输入模式
{
"type": "object",
"properties": {
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"lease": {
"description": "Filter by lease id.",
"type": "string"
},
"unit": {
"description": "Filter by unit id.",
"type": "string"
},
"text": {
"description": "Filter by tenant name or email.",
"type": "string"
},
"type": {
"description": "Filter by tenant type.",
"type": "string",
"enum": [
"LEASE_TENANT",
"PROSPECT_TENANT"
]
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_get_tenant(tenant_id)
Get one tenant by id. DoorLoop API: GET /tenants/{tenantId}.
输入模式
{
"type": "object",
"properties": {
"tenant_id": {
"type": "string",
"minLength": 1,
"description": "The tenant_id (from the matching list tool)."
}
},
"required": [
"tenant_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_lease_payments(lease, property, owner, date_from, date_to, ...)
List rent payments received on leases. DoorLoop API: GET /lease-payments.
输入模式
{
"type": "object",
"properties": {
"lease": {
"description": "Filter by lease id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"owner": {
"description": "Filter by owner id.",
"type": "string"
},
"date_from": {
"description": "Payment date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"date_to": {
"description": "Payment date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_lease_charges(lease, property, owner, unit, date_from, ...)
List charges (rent, fees, late fees) billed on leases. Use totalBalanceGreaterThan to find unpaid charges. DoorLoop API: GET /lease-charges.
输入模式
{
"type": "object",
"properties": {
"lease": {
"description": "Filter by lease id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"owner": {
"description": "Filter by owner id.",
"type": "string"
},
"unit": {
"description": "Filter by unit id.",
"type": "string"
},
"date_from": {
"description": "Charge date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"date_to": {
"description": "Charge date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"totalBalanceGreaterThan": {
"description": "Only charges with a remaining balance above this amount.",
"type": "number"
},
"lateFeeCharges": {
"description": "Only late-fee charges.",
"type": "boolean"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_tasks(propertyGroup, property, unit, type, status, ...)
List tasks, work orders, tenant requests and owner requests. DoorLoop API: GET /tasks.
输入模式
{
"type": "object",
"properties": {
"propertyGroup": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"unit": {
"description": "Filter by unit id.",
"type": "string"
},
"type": {
"description": "Filter by task type.",
"type": "string",
"enum": [
"INTERNAL_TASK",
"WORK_ORDER",
"TENANT_REQUEST",
"OWNER_REQUEST"
]
},
"status": {
"description": "Filter by task status.",
"type": "string",
"enum": [
"NOT_STARTED",
"IN_PROGRESS",
"COMPLETED",
"NOT_COMPLETED",
"RECEIVED",
"ARCHIVED"
]
},
"createdAt_from": {
"description": "Created from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"createdAt_to": {
"description": "Created to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"dueDate_from": {
"description": "Due date from (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"dueDate_to": {
"description": "Due date to (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"assignedToUser": {
"description": "Filter by user id or \"unassigned\".",
"type": "string"
},
"text": {
"description": "Filter by subject, description or reference.",
"type": "string"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_get_task(task_id)
Get one task by id. DoorLoop API: GET /tasks/{taskId}.
输入模式
{
"type": "object",
"properties": {
"task_id": {
"type": "string",
"minLength": 1,
"description": "The task_id (from the matching list tool)."
}
},
"required": [
"task_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_owners(group, property, active, text, page_number, ...)
List property owners. DoorLoop API: GET /owners.
输入模式
{
"type": "object",
"properties": {
"group": {
"description": "Filter by portfolio id.",
"type": "string"
},
"property": {
"description": "Filter by property id.",
"type": "string"
},
"active": {
"description": "Filter by active or inactive.",
"type": "boolean"
},
"text": {
"description": "Filter by owner name or email.",
"type": "string"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_vendors(property, active, insurance_expires_before, openBalance, page_number, ...)
List maintenance vendors. DoorLoop API: GET /vendors.
输入模式
{
"type": "object",
"properties": {
"property": {
"description": "Filter by property id.",
"type": "string"
},
"active": {
"description": "Filter by active or inactive.",
"type": "boolean"
},
"insurance_expires_before": {
"description": "Insurance expires before (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"openBalance": {
"description": "Only vendors with an open balance.",
"type": "boolean"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_portfolios(page_number, page_size, sort_by, sort_descending)
List portfolios (property groups). DoorLoop API: GET /property-groups.
输入模式
{
"type": "object",
"properties": {
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_users(page_number, page_size, sort_by, sort_descending)
List DoorLoop users of the company. DoorLoop API: GET /users.
输入模式
{
"type": "object",
"properties": {
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢doorloop_list_accounts(type, leaseChargeItem, page_number, page_size, sort_by, ...)
List chart-of-accounts entries. DoorLoop API: GET /accounts.
输入模式
{
"type": "object",
"properties": {
"type": {
"description": "Account type, for example REVENUE_INCOME or EXPENSE_EXPENSE.",
"type": "string"
},
"leaseChargeItem": {
"description": "Only lease charge items.",
"type": "boolean"
},
"page_number": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (default 50, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"sort_by": {
"description": "Field name of the resource to sort by, for example createdAt.",
"type": "string"
},
"sort_descending": {
"description": "Sort in descending order (default false).",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴doorloop_create_task(type, subject, status, description, due_date, ...)
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.
输入模式
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"INTERNAL_TASK",
"TENANT_REQUEST",
"OWNER_REQUEST",
"WORK_ORDER"
]
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Task subject."
},
"status": {
"type": "string",
"enum": [
"NOT_STARTED",
"RECEIVED",
"IN_PROGRESS",
"COMPLETED",
"ARCHIVED"
],
"description": "Initial status."
},
"description": {
"type": "string",
"maxLength": 10000
},
"due_date": {
"description": "Due date (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"priority": {
"type": "string",
"enum": [
"LOW",
"MEDIUM",
"HIGH"
]
},
"property": {
"description": "Property id.",
"type": "string"
},
"unit": {
"description": "Unit id.",
"type": "string"
},
"requested_by_user": {
"description": "User id. Required for INTERNAL_TASK.",
"type": "string"
},
"requested_by_tenant": {
"description": "Tenant id. Required for TENANT_REQUEST.",
"type": "string"
},
"requested_by_owner": {
"description": "Owner id. Required for OWNER_REQUEST.",
"type": "string"
},
"assigned_to_users": {
"description": "User ids to assign.",
"type": "array",
"items": {
"type": "string"
}
},
"assigned_to_vendor": {
"description": "Vendor id. Required for WORK_ORDER.",
"type": "string"
},
"instructions_to_vendor": {
"type": "string",
"maxLength": 10000
},
"notify_tenant": {
"description": "Notify the tenant (TENANT_REQUEST only). Default: no.",
"type": "boolean"
},
"notify_assignees": {
"description": "Notify the assigned users. Default: no.",
"type": "boolean"
}
},
"required": [
"type",
"subject",
"status"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴doorloop_post_task_update(task_id, message, status, priority, due_date, ...)
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.
输入模式
{
"type": "object",
"properties": {
"task_id": {
"type": "string",
"minLength": 1,
"description": "Task id (from doorloop_list_tasks)."
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 10000,
"description": "Update message."
},
"status": {
"type": "string",
"enum": [
"NOT_STARTED",
"RECEIVED",
"IN_PROGRESS",
"COMPLETED",
"ARCHIVED"
]
},
"priority": {
"type": "string",
"enum": [
"LOW",
"MEDIUM",
"HIGH"
]
},
"due_date": {
"description": "New due date (yyyy-mm-dd).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"assigned_to_users": {
"description": "User ids to assign.",
"type": "array",
"items": {
"type": "string"
}
},
"notify_tenant": {
"description": "Notify the tenant. Default: no.",
"type": "boolean"
},
"notify_assignees": {
"description": "Notify the assigned users. Default: no.",
"type": "boolean"
}
},
"required": [
"task_id",
"message"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据