Skip to main content

AI / MCP

The AI / MCP tab under Account Settings → System is where workspace administrators configure Landlord MCP access: connection URL, API keys for external AI clients, account-wide tool permissions, per-user overrides, and audit trails. It governs both the operator AI Assistant (/ai-chat) and third-party MCP clients — distinct from tenant-facing ChatBot settings.

First-time workspace setup

Optional after core Getting Started — Recommended Setup Sequence steps 1–15. Pair API keys and domain policies with Landlord MCP client setup and poll AI usage API during month-end review. Hub tab map: Recommended setup order.

Finding your way in this guide
Direct access
Pair with other Account Settings tabs

Connection and API keys pair with Landlord MCP HTTP setup; Tool permissions mirror what the in-app AI Assistant can call. Tenant-facing automation stays on ChatBot and Emails. Internal LLM spend: AI usage API (landlord_chat). Hub tab matrix: Account Settings — Tab cross-reference.

Who can open this tab

AudienceWhat they see
Vivin internal (@vivin.app email)AI / MCP tab is enabled in the Account Settings sidebar (same rollout allowlist as Tools → AI Assistant).
Other management usersTab appears in the sidebar but is disabled (greyed out) — /settings/mcp does not open the configuration surface until Vivin widens rollout.
Users with account_settings.mcpFull manager view: Connection, API keys, account tool permissions, per-user overrides, audit trail, and assistant activity (see Users and roles — Role permissions).
Signed-in users without account_settings.mcpRead-only My permissions card listing effective per-domain access for the signed-in user.

The tab has no separate tab-level permission gate — any user who can open Account Settings may land on AI / MCP when the rollout allowlist permits. Editing account-wide policy still requires account_settings.mcp.

Layout

The manager view stacks these cards top to bottom:

SectionPurpose
ConnectionMCP server URL, setup instructions, and copyable client config snippet.
API keysGenerate, list, and revoke keys external clients use as Bearer tokens.
Tool permissionsAccount-wide Off / Read-only / Edit mode per domain (area).
Per-user permissionsPick a teammate — master AI access switch, per-domain overrides, and optional history window.
Permission audit trailPaginated log of permission changes (lazy-loaded).
Assistant activityPaginated log of AI Assistant tool calls and held write confirmations (lazy-loaded).

Unsaved changes

When you change Tool permissions or Per-user permissions without saving, a floating bar appears at the bottom of the viewport with Save changes and Cancel. Switching to another Account Settings tab, navigating away from /settings, or closing the shell while the form is dirty opens Unsaved changes — choose Leave to discard or Stay to keep editing. API keys (generate/revoke) and read-only cards (Connection, audit trail, assistant activity) do not participate in this guard.

Connection

The Connection card shows how an external MCP client reaches your workspace:

  • MCP connection URL — copyable HTTPS endpoint for streamable MCP traffic (same host the Landlord MCP server exposes at /mcp).
  • How to connect — operator-facing instructions from the server (when configured).
  • Example MCP client config — JSON snippet with Authorization: Bearer <your key> for paste into Claude Desktop, Cursor, or similar clients.

When the URL is not provisioned for the account, the card shows Connection not available yet with guidance to contact Vivin support.

Account Settings — AI / MCP Connection card with MCP URL, how-to copy, and example client JSON snippet

Connection card capture re-verified 2026-07-27 10:06 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL npx tsx tools/capture-settings-ai-mcp-screenshots.ts).

Connector OAuth (Claude, ChatGPT)

Hosted MCP connectors (Claude.ai, ChatGPT) can authorize through Vivin's OAuth 2.1 flow on the Core API host instead of pasting an API key. The consent page lists the tool domains the connector will receive — derived from this tab's Tool permissions and the signing-in user's role. Authorization is blocked until at least one domain is enabled for the account.

OAuth consent — signed-in landlord with allowed MCP tool list (Authorize / Cancel)

Operators connecting a connector do not use the API keys card — they complete OAuth in the connector UI. Revoke access by disabling AI access on Per-user permissions or turning domains Off; the next token refresh fails and the connector prompts for sign-in again.

Full protocol details: Landlord MCP — Connector OAuth. HTTP endpoint reference: MCP OAuth.

API keys

API keys authenticate external AI clients (IDE assistants, custom scripts) before they exchange for a management JWT on the MCP server. Use keys when the client config expects a pasted Bearer token — not for Claude.ai / ChatGPT connector OAuth.

  1. Click Generate key.
  2. Enter a name (for example Claude Desktop) and choose expiration30, 90, 180 days, or Never expires.
  3. After creation, copy the full key from the amber Key created banner — Vivin shows the secret once; later visits list only the key prefix.
  4. Use Revoke (trash icon) on active keys to invalidate them immediately.
ColumnMeaning
NameOperator label for the integration.
KeyMasked prefix after the reveal step.
Created / Last used / ExpiresLifecycle timestamps.
StatusActive, Revoked, or Expired.

Rotate keys after teammate offboarding or client compromise. Refresh Landlord MCP client sessions after revocation.

Tool permissions

Tool permissions set the account default for each domain. The same policy applies to the in-app AI Assistant and external MCP clients.

ModeBehaviour
OffNo tools in this domain — assistants cannot read or write.
Read-onlyRead tools only (listings, bookings, summaries, and similar).
EditRead and write tools — selectable in the UI only when the domain already stores Edit; new selections are capped at Read-only while write access rolls out (the segmented control shows a disabled Edit option with helper copy when the account has not been granted write for that domain yet). Existing Edit rows can stay at Edit until you change them.

Expand a domain row to see the read and write tool names. The UI lists snake_case identifiers (same shape Claude uses in-app); Landlord MCP wire names are the kebab-case equivalents (for example get_finance_overviewget-finance-overview).

Domains

DomainTypical tools (examples)
BookingsSummaries, calendar overlap checks, create/update when permitted.
ListingsListing search, pricing tables, availability.
PropertiesProperty portfolio reads and edits.
TenantsTenant directory and profile reads.
MaintenanceTicket lists and create when Operations allows.
PaymentsPayment lists, manual payment-in when Finance allows.
BillsUtility bill reads and extraction helpers.
OwnersOwner registry for payout context.
AnalyticsPortfolio metrics for AI/MCP: get_finance_overview / get-finance-overview, get_revenue_summary / get-revenue-summary (Finance-page income expected + cash collected — not Analytics ADR/RevPAR), plus debt/cost/maintenance closure reads (#3183). Expand the row to see the snake_case chips.

Account Settings — AI / MCP Tool permissions with Analytics expanded showing get_finance_overview and get_revenue_summary read tools

Analytics domain expand capture 2026-07-27 18:06 UTC (VIVIN_DOCS_BASE_URL=http://localhost:5173 VIVIN_DOCS_RECORD_API=$VITE_API_BASE_URL). Staging /mcp/config Analytics Read-only lists get_revenue_summary, get_finance_overview, get_debt_summary, get_maintenance_closure_rate, get_cost_summary.

Walkthrough: Account Settings → AI / MCP → Tool permissions — expand the Analytics domain to reveal Finance-sourced read tools (get_finance_overview, get_revenue_summary, and related).

Effective access is still capped by each user's role permissions in Users and roles — a domain set to Read-only cannot bypass missing Finance or Bookings module rights on the Core API.

Per-user permissions

Managers pick a team member to layer user overrides on top of account policy:

  • AI access — master toggle. When Off, domain rows are disabled and the backend blocks AI tools for that user regardless of account defaults.
  • Per-domain segmented controlOff, Read-only, or Edit (subject to the same write cap as account policy). Each row shows the Account policy badge, optional Capped by role hint, and an Effective permission pill.
  • History window (days) — optional limit on how far back the AI may read that user's data. Leave empty for unlimited.

Click Save changes on the floating bar to persist overrides. Clearing the history field sends null (unlimited).

Permission audit trail

Collapsible Permission audit trail loads on first expand — 10 entries per page with Refresh and pagination. Columns: Date, Changed by, Action (human-readable log line).

Assistant activity

Collapsible Assistant activity lists recent AI Assistant tool executions for the account — Time, Action (executed tools plus items held for confirmation on destructive writes), and Status (ok, failed, or pending states). Lazy-loaded like the audit trail; use Refresh after triaging a support ticket about unexpected assistant behaviour.

Pair with AI Chat and poll landlord_chat on AI usage API for token spend.

Load failures

When the initial MCP settings fetch fails, the tab shows Failed to load AI / MCP settings with Retry. Per-user config, audit trail, and assistant activity cards use the same pattern on their own Retry links. This is distinct from empty API-key or audit states.

See Glossary — Settings and profile load failures.

AI / MCP section cross-reference

SectionPair with
ConnectionLandlord MCP — How it connects, Management session authentication
Connector OAuthLandlord MCP — Connector OAuth (Claude.ai, ChatGPT PKCE flow), MCP OAuth (HTTP endpoints)
API keysLandlord MCP, Resetting a Management User Password — Troubleshooting (JWT refresh)
Tool permissionsAI Chat — How answers are produced, Landlord MCP — Finance-sourced portfolio metrics, Automation & AI — WhatsApp Genius
Per-user permissionsUsers and roles (account_settings.mcp)
Unsaved changesOther Account Settings tabs with dirty-form guards (Emails, ChatBot)
Assistant activityAI usage API, Using in-app support (AI defects)