Kisi MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.7.3 · published by io.usefulapi
Read Kisi places, doors, users, groups, access rights and access logs (no unlocking).
20 tools: 2 change things and 18 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads18Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http kisi https://kisi.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "kisi_list_group_locks" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "kisi_list_group_locks" says "list": a word for reading.
The server marks "kisi_search_events" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "kisi_search_events" says "search": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
20 tools
Changes things 2Claude Code: ask
kisi_list_group_locksThe locks/doors an access group opens.1 finding
Why it is in this group
- The name "kisi_list_group_locks" says "list": a word for reading.
- The description's first verb is "lock": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "kisi_list_group_locks" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "kisi_list_group_locks" says "list": a word for reading.
Description, as the server wrote it The locks/doors an access group opens. GET /group_locks?group_id=.
Annotations the server declares
- title: List a group's locks
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_search_eventsSearch the access log (unlocks, denied attempts, lockdowns, admin changes) and return the first page.1 finding
Why it is in this group
- The name "kisi_search_events" says "search": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "kisi_search_events" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "kisi_search_events" says "search": a word for reading.
Description, as the server wrote it Search the access log (unlocks, denied attempts, lockdowns, admin changes) and return the first page. This CREATES a temporary saved search in Kisi (an event set, cursor-paginated, kept ~24 h); it changes no door, user or access right. Defaults to the past 90 days, the maximum width. If status is still in_progress or cursor is set, call kisi_get_event_set with the returned id. POST /event_sets.
Annotations the server declares
- title: Search access events
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 18Claude Code: allow
kisi_get_current_userThe Kisi user the API key belongs to (id, name, email, organization).No findings
Why it is in this group
- The name "kisi_get_current_user" says "get": a word for reading.
Description, as the server wrote it The Kisi user the API key belongs to (id, name, email, organization). Good first call. GET /user.
Annotations the server declares
- title: Get the current user
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_event_setRead an event set from kisi_search_events: its status and events.No findings
Why it is in this group
- The name "kisi_get_event_set" says "get": a word for reading.
Description, as the server wrote it Read an event set from kisi_search_events: its status and events. Pass the previous page's cursor for the next page. GET /event_sets/{id}.
Annotations the server declares
- title: Get an event set page
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_groupOne access group by id (name, description, place, member/lock counts, restrictions).No findings
Why it is in this group
- The name "kisi_get_group" says "get": a word for reading.
Description, as the server wrote it One access group by id (name, description, place, member/lock counts, restrictions). GET /groups/{id}.
Annotations the server declares
- title: Get an access group
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_lockOne lock/door by id: online/unlocked/locked-down state, place, floor, settings.No findings
Why it is in this group
- The name "kisi_get_lock" says "get": a word for reading.
Description, as the server wrote it One lock/door by id: online/unlocked/locked-down state, place, floor, settings. GET /locks/{id}.
Annotations the server declares
- title: Get a lock (door)
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_organizationThe current Kisi organization (name, domain, settings summary).No findings
Why it is in this group
- The name "kisi_get_organization" says "get": a word for reading.
Description, as the server wrote it The current Kisi organization (name, domain, settings summary). GET /organization.
Annotations the server declares
- title: Get the organization
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_placeOne place by id, including lockdown state.No findings
Why it is in this group
- The name "kisi_get_place" says "get": a word for reading.
Description, as the server wrote it One place by id, including lockdown state. GET /places/{id}.
Annotations the server declares
- title: Get a place
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_get_userOne user by id.No findings
Why it is in this group
- The name "kisi_get_user" says "get": a word for reading.
Description, as the server wrote it One user by id. GET /users/{id}.
Annotations the server declares
- title: Get a user
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_cardsList access cards with status (activated/deactivated/unassigned), assignee and last use.No findings
Why it is in this group
- The name "kisi_list_cards" says "list": a word for reading.
Description, as the server wrote it List access cards with status (activated/deactivated/unassigned), assignee and last use. GET /cards.
Annotations the server declares
- title: List access cards
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_controllersKisi controllers (door hardware hubs) with online/offline status.No findings
Why it is in this group
- The name "kisi_list_controllers" says "list": a word for reading.
Description, as the server wrote it Kisi controllers (door hardware hubs) with online/offline status. Filter by place, lock or status. GET /controllers.
Annotations the server declares
- title: List controllers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_event_typesAll event type names usable as the type filter of kisi_search_events (e.g.No findings
Why it is in this group
- The name "kisi_list_event_types" says "list": a word for reading.
Description, as the server wrote it All event type names usable as the type filter of kisi_search_events (e.g. lock.unlock). GET /events/types.
Annotations the server declares
- title: List event types
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_groupsList access groups (who-can-open-what bundles of doors).No findings
Why it is in this group
- The name "kisi_list_groups" says "list": a word for reading.
Description, as the server wrote it List access groups (who-can-open-what bundles of doors). Filter by place or by a lock to see which groups open that door. GET /groups.
Annotations the server declares
- title: List access groups
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_locksList locks/doors with their state: online, unlocked, locked_down, configured, place and floor.No findings
Why it is in this group
- The name "kisi_list_locks" says "list": a word for reading.
Description, as the server wrote it List locks/doors with their state: online, unlocked, locked_down, configured, place and floor. Filter to find offline or locked-down doors. GET /locks.
Annotations the server declares
- title: List locks (doors)
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_placesList places (sites/buildings) in the organization with address, time zone and lock/member counts.No findings
Why it is in this group
- The name "kisi_list_places" says "list": a word for reading.
Description, as the server wrote it List places (sites/buildings) in the organization with address, time zone and lock/member counts. GET /places.
Annotations the server declares
- title: List places
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_presencesWho was present at a place on a given day (derived from unlocks): actor, first/last unlock, last door.No findings
Why it is in this group
- The name "kisi_list_presences" says "list": a word for reading.
Description, as the server wrote it Who was present at a place on a given day (derived from unlocks): actor, first/last unlock, last door. GET /presences.
Annotations the server declares
- title: List presences at a place
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_readersKisi readers (card/phone readers at doors) with model and online/offline status.No findings
Why it is in this group
- The name "kisi_list_readers" says "list": a word for reading.
Description, as the server wrote it Kisi readers (card/phone readers at doors) with model and online/offline status. GET /readers.
Annotations the server declares
- title: List readers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_role_assignmentsWho holds which role where: a user/team/guest's role on the organization, a place or a group (group members = door access).No findings
Why it is in this group
- The name "kisi_list_role_assignments" says "list": a word for reading.
Description, as the server wrote it Who holds which role where: a user/team/guest's role on the organization, a place or a group (group members = door access). Filter by user, group, place or role. GET /role_assignments.
Annotations the server declares
- title: List role assignments (access rights)
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_schedulesTime rules: when a group's access is allowed, when doors auto-unlock (unlock timer), first-to-arrive, elevator permit timers.No findings
Why it is in this group
- The name "kisi_list_schedules" says "list": a word for reading.
Description, as the server wrote it Time rules: when a group's access is allowed, when doors auto-unlock (unlock timer), first-to-arrive, elevator permit timers. Filter by consequence or by the group/lock it applies to. GET /schedules.
Annotations the server declares
- title: List schedules
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
kisi_list_usersList users (members) of the organization.No findings
Why it is in this group
- The name "kisi_list_users" says "list": a word for reading.
Description, as the server wrote it List users (members) of the organization. Filter by group or place (users with access there), email, or free text over name/email/notes. Sort by last unlock. GET /users.
Annotations the server declares
- title: List users
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.7.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http kisi https://kisi.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__kisi__kisi_get_current_user",
"mcp__kisi__kisi_get_organization",
"mcp__kisi__kisi_list_places",
"mcp__kisi__kisi_get_place",
"mcp__kisi__kisi_list_locks",
"mcp__kisi__kisi_get_lock",
"mcp__kisi__kisi_list_groups",
"mcp__kisi__kisi_get_group",
"mcp__kisi__kisi_list_users",
"mcp__kisi__kisi_get_user",
"mcp__kisi__kisi_list_role_assignments",
"mcp__kisi__kisi_list_cards",
"mcp__kisi__kisi_list_presences",
"mcp__kisi__kisi_list_schedules",
"mcp__kisi__kisi_list_controllers",
"mcp__kisi__kisi_list_readers",
"mcp__kisi__kisi_get_event_set",
"mcp__kisi__kisi_list_event_types"
],
"ask": [
"mcp__kisi__kisi_list_group_locks",
"mcp__kisi__kisi_search_events"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as kisi. Review it before you use it.