RemoteLock MCP by usefulapi
Read RemoteLock devices and guests; manage door access and physically lock or unlock doors.
Should I use this
Quality & Safety
Findings (3)
- LOWin remotelock_deactivate_access_person
- LOWin remotelock_list_person_accesses
- LOWin remotelock_list_device_accesses
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"remotelock": {
"url": "https://remotelock.usefulapi.io/mcp"
}
}
}Remote endpoints
https://remotelock.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢remotelock_get_account
The RemoteLock account these credentials belong to: name, plan limits and settings. Use it to confirm which account is connected. GET /account.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_locations(sort, page, per_page)
List the account's locations (properties/sites) with address and time zone. Use the ids to filter devices. GET /locations.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort order (default name ascending); a leading - is descending.",
"type": "string",
"enum": [
"name",
"-name",
"created_at",
"-created_at"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_get_location(location_id)
One location by id. GET /locations/{id}.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock location id (UUID)."
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_devices(type, location_id, ids, sort, page, ...)
List devices: locks, access-control doors, thermostats, etc., with name, model, battery/connectivity state, lock state and location. Filter by type (e.g. lock) or location. GET /devices.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Only these device types, e.g. [\"lock\"].",
"maxItems": 13,
"type": "array",
"items": {
"type": "string",
"enum": [
"lock",
"zwave_lock",
"connector_lock",
"schlage_home_lock",
"igloo_lock",
"acs_door",
"acs_elevator",
"acs_elevator_floor",
"resort_lock",
"thermostat",
"connector_thermostat",
"connector_sensor",
"power_plug"
]
}
},
"location_id": {
"description": "Only devices of this location id.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"ids": {
"description": "Only these device ids.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"sort": {
"description": "Sort order (default created_at ascending); a leading - is descending.",
"type": "string",
"enum": [
"created_at",
"-created_at",
"name",
"-name"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_get_device(device_id)
One device (lock) by id with its full state: connectivity, battery/power, lock state, auto-lock settings, model and location. GET /devices/{id}.
Input Schema
{
"type": "object",
"properties": {
"device_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock device id (UUID)."
}
},
"required": [
"device_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴remotelock_lock_device(device_id)
WRITE: sends the lock command to a lock (it locks the door). Locking an already locked door changes nothing. PUT /devices/{id}/lock.
Input Schema
{
"type": "object",
"properties": {
"device_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock device id (UUID) of the lock."
}
},
"required": [
"device_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴remotelock_unlock_device(device_id, confirm)
WRITE, SECURITY-SENSITIVE: sends the unlock command to a lock, which physically unlocks the door. Only call it when the user explicitly asked to unlock this specific door, and set confirm to true. PUT /devices/{id}/unlock.
Input Schema
{
"type": "object",
"properties": {
"device_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock device id (UUID) of the lock."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: the user explicitly asked to unlock this door."
}
},
"required": [
"device_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_access_persons(type, status, sort, page, per_page)
List the people who can open doors: access users (permanent) and access guests (time-limited), with name, email, status, validity window and their PIN / card number. By default only current and upcoming people; pass status to include expired or deactivated. GET /access_persons.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Only permanent users or only guests.",
"type": "string",
"enum": [
"access_user",
"access_guest"
]
},
"status": {
"description": "Statuses to include (default current and upcoming).",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"current",
"upcoming",
"expired",
"deactivated"
]
}
},
"sort": {
"description": "Sort order (default created_at ascending); a leading - is descending.",
"type": "string",
"enum": [
"created_at",
"-created_at",
"updated_at",
"-updated_at",
"name",
"-name",
"department",
"-department",
"starts_at",
"-starts_at",
"ends_at",
"-ends_at"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_get_access_person(access_person_id)
One access user or guest by id, with status, validity window and PIN / card number. GET /access_persons/{id}.
Input Schema
{
"type": "object",
"properties": {
"access_person_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock access person id (UUID)."
}
},
"required": [
"access_person_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡remotelock_create_access_user(name, email, phone, pin, generate_pin, ...)
WRITE: creates a permanent access user (an employee, resident or owner) with a PIN and/or card. It creates the person only; use remotelock_grant_access to give them doors. The reply includes the PIN. Check remotelock_list_access_persons first to avoid duplicates. POST /access_persons.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Full name."
},
"email": {
"description": "Email address (RemoteLock can email the access instructions).",
"type": "string",
"maxLength": 320,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"description": "Phone in E.164 format, e.g. +14155551234.",
"type": "string",
"pattern": "^\\+[1-9]\\d{6,14}$"
},
"pin": {
"description": "A PIN of 4-10 digits. Omit and set generate_pin to let RemoteLock pick one.",
"type": "string",
"pattern": "^\\d{4,10}$"
},
"generate_pin": {
"description": "true: RemoteLock generates a random PIN (returned in the reply).",
"type": "boolean"
},
"card_number": {
"description": "Prox card number, if the person uses a card.",
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[0-9A-Za-z]+$"
},
"department": {
"description": "Department or group label.",
"type": "string",
"maxLength": 200
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡remotelock_create_access_guest(name, email, phone, pin, generate_pin, ...)
WRITE: creates an access guest whose PIN/card only works between starts_at and ends_at (local time of the lock). It creates the person only; use remotelock_grant_access to give them doors. The reply includes the PIN. POST /access_persons.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Full name."
},
"email": {
"description": "Email address (RemoteLock can email the access instructions).",
"type": "string",
"maxLength": 320,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"description": "Phone in E.164 format, e.g. +14155551234.",
"type": "string",
"pattern": "^\\+[1-9]\\d{6,14}$"
},
"pin": {
"description": "A PIN of 4-10 digits. Omit and set generate_pin to let RemoteLock pick one.",
"type": "string",
"pattern": "^\\d{4,10}$"
},
"generate_pin": {
"description": "true: RemoteLock generates a random PIN (returned in the reply).",
"type": "boolean"
},
"card_number": {
"description": "Prox card number, if the person uses a card.",
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[0-9A-Za-z]+$"
},
"starts_at": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Local date-time without a timezone, e.g. 2026-12-24T16:00 (read in the lock's time zone)."
},
"ends_at": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$",
"description": "Local date-time without a timezone, e.g. 2026-12-24T16:00 (read in the lock's time zone)."
}
},
"required": [
"name",
"starts_at",
"ends_at"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴remotelock_deactivate_access_person(access_person_id)
WRITE: deactivates an access user or guest, so their PIN/card stops working on every door. The person stays in the account (status deactivated) and is not deleted. Only do it when the user asked. PUT /access_persons/{id}/deactivate.
Input Schema
{
"type": "object",
"properties": {
"access_person_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock access person id (UUID)."
}
},
"required": [
"access_person_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_person_accesses(access_person_id, page, per_page)
List the doors, door groups and locations one access user or guest can open, with sync state per device. GET /access_persons/{id}/accesses.
Input Schema
{
"type": "object",
"properties": {
"access_person_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock access person id (UUID)."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"required": [
"access_person_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_device_accesses(device_id, person_type, page, per_page)
List the access users and guests who have access to one lock (and whether the PIN is synced to it). GET /devices/{id}/access_person_accesses.
Input Schema
{
"type": "object",
"properties": {
"device_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock device id (UUID) of the lock."
},
"person_type": {
"description": "Only permanent users or only guests.",
"type": "string",
"enum": [
"access_user",
"access_guest"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"required": [
"device_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡remotelock_grant_access(access_person_id, accessible_id, accessible_type, access_schedule_id, guest_start_time, ...)
WRITE: gives an access user or guest access to a lock, a door group or a location, so their PIN/card opens it. RemoteLock then syncs the code to the lock(s). Optionally limit the hours with an access schedule (access_schedule_id, for recurring daily hours) or override a guest's start/end time of day on this door. POST /access_persons/{id}/accesses.
Input Schema
{
"type": "object",
"properties": {
"access_person_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock access person id (UUID)."
},
"accessible_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Id (UUID) of the lock, door group or location to grant."
},
"accessible_type": {
"type": "string",
"enum": [
"lock",
"door_group",
"location",
"acs_door",
"acs_elevator_floor",
"connector_lock",
"zwave_lock",
"schlage_home_lock",
"igloo_lock"
],
"description": "What accessible_id is: lock, door_group, location, ..."
},
"access_schedule_id": {
"description": "Access schedule id, to limit the hours of a permanent user.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"guest_start_time": {
"description": "Guests only: overrides the time of day the guest's access starts on this door, hh:mm. It is not a daily window: use access_schedule_id for recurring hours.",
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"guest_end_time": {
"description": "Guests only: overrides the time of day the guest's access ends on this door, hh:mm. It is not a daily window: use access_schedule_id for recurring hours.",
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
}
},
"required": [
"access_person_id",
"accessible_id",
"accessible_type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴remotelock_revoke_access(access_person_id, access_id)
WRITE: removes one access grant (an id from remotelock_list_person_accesses), so the person's PIN/card no longer opens that door, door group or location. The person itself stays. Only do it when the user asked. DELETE /access_persons/{id}/accesses/{access_id}.
Input Schema
{
"type": "object",
"properties": {
"access_person_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock access person id (UUID)."
},
"access_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "The grant id (the id of an item from remotelock_list_person_accesses)."
}
},
"required": [
"access_person_id",
"access_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_door_groups(sort, page, per_page)
List door groups (named sets of locks you can grant access to in one step). GET /groups.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort order (default created_at ascending).",
"type": "string",
"enum": [
"name",
"-name",
"created_at",
"-created_at"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_group_items(group_id, page, per_page)
List the items (locks) that belong to one door group. GET /groups/{id}/items.
Input Schema
{
"type": "object",
"properties": {
"group_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock door group id (UUID)."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"required": [
"group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_list_notifications(page, per_page)
List notifications sent by notification subscriptions: each names the lock (publisher), the event type (unlocked, access_denied, jammed, power_level_low, ...) and an event_id. Only events that match a subscription appear. Get details with remotelock_get_event. GET /notifications.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
},
"per_page": {
"description": "Results per page, 1-50 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢remotelock_get_event(event_id)
One event by id (for example from a notification): type, time, source, status, the lock and the person involved, and the method used. The PIN or card used is not returned. GET /events/{id}.
Input Schema
{
"type": "object",
"properties": {
"event_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "RemoteLock event id (UUID)."
}
},
"required": [
"event_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence