Skip to content
OpenAppPhysical access, simplified
Login

MCP server setup

The OpenApp MCP server lets coding and operator agents discover organizations and entities, resolve doors by name, inspect audit and policies, and — with explicit opt-in — run controlled writes (propose_action / confirm_action, invites). Hosted MCP never exposes scripting_execute.

Source: packages/openapp-mcp (@openapp/mcp-server on npm) and the hosted JSON-RPC endpoint POST /api/v1/mcp.

Production agents should use the remote server:

  • URL: https://mcp.openapp.house (proxied as POST /api/v1/mcp on the API host)
  • Auth: OAuth client openapp-mcp (Hydra). Use client credentials for a named Agent principal, or an authorization-code user consent flow.
  • Org: send X-Org with every call.
  • Protected-resource metadata: /.well-known/oauth-protected-resource

Trimmed OpenAPI for Custom GPTs: openapp-openapi-agent.json (resolve, preview/execute, invites, audit — not the full spec).

Environment variables (local stdio / HTTP)

Section titled “Environment variables (local stdio / HTTP)”
VariableRequiredDescription
OPENAPP_API_KEYYesAPI key (Authorization: Bearer), preferably an Agent credential
OPENAPP_API_BASENoDefault https://api.openapp.house/api/v1
OPENAPP_ORG_IDFor device/entity/audit lists and all writesOrganization ULID (X-Org)
OPENAPP_MCP_ALLOW_WRITESFor write toolsSet to 1 only after org policy review
OPENAPP_MCP_ALLOW_SCRIPTINGLocal stdio onlySet to 1 and writes enabled to expose openapp_scripting_execute. Ignored on hosted MCP and openapp-mcp-http.

Never commit keys to mcp.json — use env vars or your client’s secret store.

ToolMaps to
openapp_list_orgsGET /orgs
openapp_list_devicesGET /devices
openapp_list_entitiesGET /entities
openapp_get_entityGET /entities/{id}
openapp_resolvePOST /orgs/{id}/resolve
openapp_list_audit_eventsGET /orgs/{id}/audit/events (30-day hot window; requires OPENAPP_ORG_ID)
openapp_list_policiesGET /orgs/{id}/policies
openapp_list_webhooksGET /orgs/{id}/webhooks
openapp_list_invitesGET /integrations/{id}/access-invites
openapp_describe_actionStatic catalog + OpenAPI pointer
openapp_propose_actionPOST /entities/{id}/actions/{action_id}/preview

Disabled unless OPENAPP_MCP_ALLOW_WRITES=1 (hosted MCP still enforces Cedar, confirmation mode, and agent tool allow-lists).

ToolMaps toGuardrails
openapp_confirm_actionPOST /entities/{id}/actions/{action_id} + X-OpenApp-ConfirmTwo-phase physical write
openapp_execute_entity_actionSame action surface; optional Idempotency-KeyPrefer propose then confirm
openapp_create_invitationPOST /integrations/{id}/access-invitesvalid_from / valid_to required
openapp_revoke_invitePOST /integrations/{id}/access-invites/{id}/revokeOperator job
openapp_audit_exportPOST /orgs/{id}/audit/exportsKickoff only
openapp_scripting_executePOST /scripting/executeLocal stdio only with OPENAPP_MCP_ALLOW_SCRIPTING=1

See Agent-relevant API and Query access and audit activity.

Terminal window
npx -y @openapp/mcp-server

From the repository:

Terminal window
cd packages/openapp-mcp
npm install
npm run build
OPENAPP_API_KEY='v1_openapp_…' OPENAPP_ORG_ID='01H…' npm start

Local streamable HTTP (no scripting):

Terminal window
OPENAPP_API_KEY='' OPENAPP_ORG_ID='' npm run start:http
{
"mcpServers": {
"openapp": {
"command": "npx",
"args": ["-y", "@openapp/mcp-server"],
"env": {
"OPENAPP_API_BASE": "https://api.openapp.house/api/v1",
"OPENAPP_API_KEY": "<agent credential from dashboard>",
"OPENAPP_ORG_ID": "<ulid>"
}
}
}
}

Add "OPENAPP_MCP_ALLOW_WRITES": "1" only when operators approve physical actions from agents.

Installable job skills (STR checkout, guest invite, audit investigation) live in packages/openapp-skills/ and .cursor/skills/.

  • Read-only tools still reveal org structure and recent audit events — scope API keys minimally.
  • Write tools unlock doors, create guest links, or run scripts — keep human in the loop in agent UIs.
  • Physical unlocks: Build an access-control agent.

← go2rtc live view · Agents overview