# Calm MCP

Calm lets you connect your AI assistant and ask questions about your site. In Calm Settings → Agent MCP → Setup, choose Gemini, Claude, ChatGPT, Grokbot (xAI), or Cursor for connection steps and account requirements. Sign in as yourself and Allow the sites it may read.

MCP URL: https://app.calmcompliance.com/mcp

1. Add that URL as a remote MCP server in your client.
2. Sign in to Calm as yourself.
3. Allow organisation, sites, and read. Write is optional.

This page as markdown: https://app.calmcompliance.com/mcp.md

## What to expect

### Document Details and Links

Your assistant can find documents and show their title, description, version, review date and link when available. It does not receive full document text or uploaded files through MCP. Open the link in Calm to read the document; a document listing is not a review of its contents.

### Setup and Imports

Your assistant can inspect existing records and help you plan setup. Customer MCP cannot create organisations, sites, locations or assets, invite people, import spreadsheets, upload documents or configure maintenance schedules. Make those changes in Calm or ask Calm support for help.

### Optional Changes

With Write access, your assistant can update existing issues and requests, start work orders, and complete, skip or cancel work orders within your permissions. Calm applies an accepted tool call immediately, without a second approval screen in Calm. Your AI client may ask for confirmation. Leave Write unticked if you only want answers; successful changes are audited as you and marked as agent-made.

### Closure Reporting

Your assistant can calculate average time to close issues, requests and work orders across all matching records you can view. It uses actual creation and closure timestamps, reports missing dates, and separates closure outcomes. Ask for completed records to measure completion performance. Reopened records are excluded until they close again; the elapsed time includes time since their original creation. Recorded status transitions are available for individual records, including reopenings and elapsed hours between recorded events. Tickets also expose their stored category; category totals use all matching visible tickets. Other searches and briefing packs remain capped.

### Results Have Limits

Answers use the sites, modules and records you can access. Searches and combined reports can be capped or incomplete. Inspection and meeting packs help you prepare; they do not certify compliance or prove that nothing is missing. Follow the returned links to review the underlying records.

## What you can ask

- **See What You Are Connected To:** What am I connected to?
  Ask which organisation and sites this connection may use before looking anything up.
- **See What's Outstanding:** Show me open inbox items on this site.
  Ask your assistant what is open on the site, instead of opening Inbox yourself.
- **Check Your Own List:** What in the inbox is assigned to me?
  See the open issues and requests assigned to you.
- **Find Something by Name:** Search the inbox for "heating".
  Search open tickets when you remember a word from the title.
- **Open a Specific Ticket:** Get the details for this issue and include the in-app URL.
  Pull the compact record and a link back into Calm.
- **See What's On a Floor:** What is on floor one?
  Ask which assets sit on a location and the spaces beneath it.
- **See Inbox Items On a Floor:** What’s broken on floor one?
  Restrict open tickets to a named location and the spaces beneath it.
- **See Inbox Items On an Asset:** What’s open on boiler 3?
  Restrict open tickets to a named linked asset.
- **Find Kit by Name:** What MacBooks have we got?
  Search assets by name, asset model, or manufacturer.
- **Find a Vehicle:** I’m looking for a blue car
  Search UK vehicles by colour or MOT window.
- **Check an MOT:** When does my MOT run out?
  Get a compact asset including MOT expiry when vehicle details exist.
- **See Overdue Work:** What is overdue?
  Ask which work orders are overdue on the site.
- **Measure Ticket KPIs:** How many issues were raised last month, what is open now, and what is the average open age? Break them down by severity and raised by.
  Get complete ticket counts and average open age, with recorded severity, priority or raised-by breakdowns.
- **Separate Teams and Individuals:** Show work-order counts by team and individual assignee, keeping unassigned work separate.
  Count work orders by their active team or individual assignment, including unassigned work.
- **Measure Time to Close:** What is the average time to close completed issues and work orders on this site? Show the record counts and any missing closure dates.
  Calculate average elapsed time from creation to closure over all visible matching records, with outcomes and missing dates counted.
- **See Legally Due Work:** What is legally due this week?
  Ask which work is due this week on schedules that already show a statutory driver or classification.
- **Find a Policy:** What is our fire policy?
  Search the document library by title or identifier.
- **Find a Risk Assessment:** What RA covers the plant room?
  Search published assessments by title, category, or tags.
- **Find Hazardous Materials:** Where is the asbestos?
  Search the hazardous materials register by name.
- **Check PPE:** What PPE does this job need?
  Get a compact assessment or equipment profile that already shows PPE.
- **See Adopted Standards:** Which standards are we on?
  List the standards this site has adopted.
- **Find a Role Holder:** Who is the Fire Warden?
  Ask who currently holds a named site role.
- **See Training That Lapses:** Whose training lapses this month?
  Ask whose training certificates lapse in a named window.
- **Check Contractor Cover:** Is this contractor’s insurance in date?
  Ask whether a contractor’s insurance is in date.
- **Assigned Vehicles and Certificates:** Has anyone with an assigned vehicle got a lapsed certificate?
  Ask whether anyone with an assigned vehicle has a lapsed certificate.
- **See What Dies This Month:** What dies this month?
  Ask what expires or falls due this month across modules you can already see.
- **Tell Me About an Asset:** Tell me about boiler 3
  Get a compact dossier: Premises details, open tickets, due work, and linked documents.
- **Walk a Floor:** I’m standing on floor one — what should I look at?
  Ask what to look at on a named location and the spaces beneath it.
- **Prepare for an Inspection:** Are we ready for the fire inspection on Friday?
  Assemble compact slices for a named inspection topic such as fire.
- **Brief a Contractor:** I’m sending a spark to the plant room tomorrow
  Ask what a visiting contractor needs for a named place or asset.
- **Meeting Pack:** Meeting pack for Thursday
  Get capped risks, overdue reviews, inbox load, and overdue work.

## Tools

Use `get_ticket_metrics` for complete issue/request counts and average open age. Severity applies to issues; priority applies to requests. Raised-by uses member ids and display names, with anonymous identity masked. Creation windows select a cohort; open/closed counts and age describe that cohort's current state at evaluatedAt, not a historical backlog snapshot. Use `get_work_order_metrics` for complete counts by status, priority or active assignment. Individual members, teams and unassigned work are separate. Group pages never reduce the headline total. Stored projected work is counted separately from open work.

For tickets-by-category questions, use `get_ticket_category_metrics`. It counts stored categories across all matching visible issues or requests, using triaged, then suggested, then reported category. An uncategorised bucket has a null categoryId. A recorded id with an unavailable definition has a null category name. Categories are never inferred from titles. Creation windows and open/closed filters are available.

Use `get_status_history` for recorded changes between statuses on an individual issue, request or work order. Follow nextOffset to read the rest. Events preserve their source, including backfill; missing historical events remain gaps. Calm does not currently define SLA targets or attainment. Consumers can apply their own rules to recorded timestamps and transitions; elapsed hours are calendar time. Work-order reads expose scheduledAt and dueAt with full timestamp precision alongside creation, start and closure.

For average time-to-close questions, use `get_closure_metrics` rather than averaging a capped search. It returns elapsed hours from creation to the current closure, counts, and outcomes. Optional closure-window bounds require timestamps with UTC or explicit offsets; the start is inclusive and the end exclusive. Missing closure timestamps are reported across visible closed records matching the outcome filter because they cannot be assigned to a window. No measurable records yields a null average, not zero.

Read tools are always offered after Allow. Write tools (`update_issue`, `update_request`, `start_work_order`, `resolve_work_order`) are listed only when the person granted Write. A paused or volume-restricted connection cannot write.

- `get_connection_context` — who you act as, the organisation, usable sites, and modules
- `search_inbox` — open issues and requests on an allowed site
- `get_issue` — compact issue plus in-app URL
- `get_request` — compact request plus in-app URL
- `search_locations` — locations on an allowed site by name and kind
- `get_location` — compact location plus in-app URL
- `search_assets` — assets by name, model, manufacturer, class, location, status, colour, MOT, and dates
- `get_asset` — compact asset plus in-app URL
- `get_ticket_metrics` — complete ticket counts, current open age and status/severity/priority/raised-by/assignee breakdowns
- `get_work_order_metrics` — complete work-order counts and status/priority/active individual-or-team assignment breakdowns
- `get_ticket_category_metrics` — complete visible ticket counts by stored category, with creation windows and open/closed filters
- `get_status_history` — paged recorded transitions and elapsed hours for an issue, request or work order
- `get_closure_metrics` — complete permission-scoped time-to-close aggregates for issues, requests and work orders, with closure windows, outcomes and missing-date counts
- `search_work_orders` — open, overdue, or closed work orders, including location, asset coverage, and statutory filters
- `get_work_order` — compact work order plus in-app URL
- `start_work_order` — start planned work the person may start (Write only)
- `resolve_work_order` — complete, skip, or cancel work the person may resolve (Write only)
- `search_documents` — published documents by title, identifier, category, and tags
- `get_document` — compact document plus in-app URL
- `search_risk_assessments` — published assessments by title, category, and tags
- `get_risk_assessment` — compact assessment plus in-app URL
- `search_hazardous_materials` — hazardous materials by name, classification, and tags
- `get_hazardous_material` — compact material plus in-app URL
- `search_equipment_risk_profiles` — equipment risk profiles, including those linked to an asset
- `get_equipment_risk_profile` — compact equipment profile plus in-app URL
- `search_standards` — adopted standards on an allowed site
- `get_standard_gaps` — requirement gaps for a named adoption
- `search_site_roles` — named role holders such as Fire Warden
- `search_personnel_expiries` — training, accreditation, and company cover rows in a named window
- `get_person` — compact person plus in-app URL (no DBS, email, or files)
- `get_company` — compact company plus in-app URL (cover stays on the company)
- `list_attention` — mixed expiries and due dates in a named window
- `get_asset_dossier` — compact asset plus tickets, work, and linked documents
- `get_location_walk` — what to look at on a location and beneath it
- `get_inspector_prep` — inspection topic pack, or candidates when the topic is ambiguous
- `get_contractor_briefing` — dossier or walk plus assessments and roles
- `get_meeting_pack` — top risks, overdue reviews, inbox load, overdue work
- `compare_sites` — attention counts and samples across connected sites

## Auth

OAuth 2.1. Calm does not issue API keys for MCP. Impersonation and view-as cannot complete a connection. Your organisation must allow MCP connections.
