- Brand
- Coram AI
- Category
- Security
- Primary Subcategory
- Smart Home & Home Automation
Integration details
Description
Coram helps authorized users search recorded CCTV footage, inspect camera and access-control status, review security alerts and detections, and audit physical-security activity through ChatGPT.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Smart Home & Home Automation
- Secondary Subcategories
- None listed
- Brand
- Coram AI
- Access
- Account required
- First tracked
- 2026-10-03
- Tool count
- 63
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Get alerts for Coram
Get updates when Coram’s Discoverability Score or category rank changes.
Competing in ChatGPT Smart Home & Home Automation
View Category63 tools agents can invoke
Get triggered access-control ALERT instances. Covers tailgating, access denied, door held open, door forced open, tampering, and controller status. Use for "show me tailgating alerts", "door held open alerts at the warehouse". This is the ONLY source of tailgating alerts — they never appear in `get_recent_access_events` (no device event exists for tailgating). For hardware-health questions, prefer `query_controller_system_health`. `alert_categories` values: tailgating, access_denied, door_held_open, door_forced_open, tampering, controller_status. NOTE: setting `door_ids` or `location_ids` restricts results to door-type alerts — controller_status alerts only appear when both filters are omitted. Omitting BOTH `start_time` and `end_time` queries the last 24 hours only — pass an explicit window for anything longer (ISO-8601; naïve timestamps are interpreted as UTC). `search_query` filters by the user-given alert name. `limit` defaults to 25, max 100. Returns `alerts`, `returned_alerts`, and `has_more`. Each item has `door_id` (door-type alerts only — for controller_status the raw `device_id` is the controller id; use `controller_id` / `controller_name` there), `alert_category`, `alert_name`, and `status`.
get_access_control_alerts
Get temporary access exceptions (overrides on normal schedules). Pass no arguments to get all. `active` filters to currently active exceptions; `expired` filters to expired ones. Use `door_ids` (from `list_doors`) or `user_ids` to narrow.
get_access_exceptions
Get full details for one alert. All three arguments come from a `get_recent_alerts` entry and are required — the backend keys the lookup on the alert's timestamp: `alert_type` is the entry's `alert_feed_type` (one of `User Alert`, `Person of Interest Alert`, `License Plate of Interest Alert`, `Halo Sensor Alert` — NOT the `alert_type`/category field), `alert_id` is its numeric `id`, and `timestamp` is its `trigger_time` (ISO-8601). Returns the camera, location, time, and any alert-type-specific payload (matched face, plate, track, etc.).
get_alert
Get all alert settings (standard, premium, POI, plate, sensor). Paginated. Each entry's enabled/paused state is determined by `paused_at` (absent/null = enabled). For premium-only alerts, prefer `get_premium_alert_settings`.
get_alert_settings
List all available KB articles (id, title, URL, description). Use to understand what topics exist or to pick article IDs for `get_articles_by_ids`. Returns a `count` and an `articles` list.
get_all_articles_summary
Query ALL person detections across cameras in a time window. Use for generic person-detection queries: "all person detections", "how many people today?", "how many people were on camera?". Captures everyone on camera regardless of whether their face was recognized. NOTE: the same person appearing multiple times = multiple entries (no re-identification). For specific named people, use `query_face_detections`; for enrolled profile activity (POIs), use `query_face_detections_by_category`. `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. One journey-API call is made per camera, so prefer `camera_ids` / `location_ids` filters on large fleets. Returns a `summary` (total_tracks, cameras_queried, cameras_with_detections, locations_with_detections, and top-25 `tracks_per_camera` / `tracks_per_location` counts — cite the un-capped `*_with_detections` fields for "how many cameras saw activity?") plus up to the 100 most recent `detections`, each with a short-lived signed thumbnail URL.
get_all_people_detections
Get full content of specific KB articles by ID (max 25 per call). Use after `search_knowledge_base` or `get_all_articles_summary` to fetch detailed markdown content.
get_articles_by_ids
Discover what configuration changes can be audited. Returns all available categories (e.g. cameras, access_control, alerts) and their specific actions. Call this first to understand what `query_audit_logs` filters are possible. No API call — the catalogue is static.
get_audit_capabilities
Get audit log entries for a time range (max 90 days per request). `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. Each entry carries action type, timestamp, user_email, ip_address, and detail. Use for "who deleted door X?", "show admin changes last week", etc. For longer ranges or category / action / user filtering, prefer `query_audit_logs`.
get_audit_logs
Get full detail for one camera by its integer ID. The ID is the numeric `id` field returned by `list_cameras` — not the MAC / serial / name. Returns the camera's location, stream state, last heartbeat, resolution, and more.
get_camera
Get recent pipeline errors and warnings for one camera. `mac_address` comes from `list_cameras` items[]. Returns recent pipeline alerts with type, timestamp, and error detail — useful for "why is camera X offline?" or "any pipeline errors in the last hour?".
get_camera_pipeline_alerts
Fetch each camera's stored snapshot — latest by default, or nearest a timestamp. Use this for "what does camera X see right now?" or "grab a frame from camera X at 2pm". Cameras store periodic low-res full-field-of-view snapshots; this returns the most recent one per camera (or, when `timestamp` is set, the one closest to it within `tolerance_s` seconds). It is NOT a live frame grab — the snapshot can lag real time by the storage interval. `camera_ids` are the numeric `id` values from `list_cameras` (max 10 per call). `timestamp` is ISO-8601, UTC assumed if no offset. Returns, per camera, in `structured_content.results`: - `signed_image_url` — a short-lived, self-authenticating URL for the snapshot JPEG. Share it when the user wants to download or embed the image; it needs no extra auth but expires (typically within 24h). It is also accepted by `get_video_frame` for later re-inspection. - `frame_timestamp` — when the returned snapshot was actually captured (tell the user if it's older than they'd expect). - `app_url` — deep link into the Coram web app timeline at that moment, for watching the surrounding footage. The snapshot JPEGs are ALSO returned as inline image content blocks (in `results` order), so you can describe what's in frame without a follow-up call. Cameras with no stored snapshot in range appear in `results` with a null `signed_image_url` — widen `tolerance_s` or pick another time. Don't paste raw signed URLs into prose replies — they are very long; render them as markdown links instead.
get_camera_snapshot
Get uptime intervals for one camera over a time range. `camera_id` is the numeric ID from `list_cameras`. `start_time` and `end_time` are ISO-8601 (e.g. `2026-04-01T00:00:00Z`); naïve timestamps are interpreted as UTC. For a fleet-wide health check, prefer the `query_camera_uptime` composite.
get_camera_uptime
Return the full Coram MCP usage guide. Call this once per session. The MCP handshake `instructions` field is truncated by some clients, so this tool serves the canonical, full-length guide: identity & tenants, entity hierarchy, time formats, smart defaults, per-domain patterns (devices, alerts, people, access control, video, audit, KB), and error / formatting conventions. Call this BEFORE the first user-facing answer or other tool call. The contents are session-static — do not call it again in the same conversation.
get_coram_guide
Get events for user-configured custom alerts (by name). `alert_names` is a list of names from `list_available_alert_names`. Filters the alerts feed via `search_query` per-name and merges results. `reduce` works the same as `get_security_alerts`.
get_custom_alert_events
Get full detail for one door. `door_id` comes from `list_doors` items[]. Returns status, schedule, access level, and connected devices.
get_door
Get individual detection events for one exact license plate number. Each occurrence carries the camera MAC, timestamp, signed image URL, and detection attributes (bbox, score, vehicle type/color/make when known), newest first. Use for per-event timelines or detection times for one plate; pass the `s3_signed_url` values to `get_video_frame` to visually inspect detections. For distinct plate listings, exact detection checks, and per-plate counts, `query_license_plates` returns summary rows. The response carries `count`, `match_mode`, and `truncated`, and — whenever camera scope was resolved automatically or the result is empty — `eligible_camera_count`: the number of in-scope cameras with license plate detection enabled. Empty results additionally carry `empty_reason`: "no_lpr_cameras_in_scope" when `eligible_camera_count` is 0 (LPR is not recording in that scope), else "plate_not_found". `plate_number` is case-insensitive; spaces, dashes, and dots are ignored. `start_time` / `end_time` are ISO-8601 (naïve = UTC). `camera_macs` / `location_ids`: omit for all accessible cameras/locations. `limit`: max occurrences (newest first), 1 to 499; omit for all occurrences in range.
get_license_plate_occurrences
List enrolled license-plate-of-interest alert profiles and latest occurrences. Returns one summary per enrolled profile, including membership and alert configuration plus its most recent detection timestamp and camera when available. Profiles without a recorded latest occurrence remain in the roster. Use for roster, membership / configuration, and current-period questions answerable from each profile's latest occurrence. This tool does not return a historical occurrence timeline. For detections of arbitrary (non-enrolled) plates use `query_license_plates` / `get_license_plate_occurrences`; for individual License Plate of Interest alert instances, use `get_security_alerts` with `alert_categories=["License Plate of Interest"]` and `reduce="raw"`.
get_license_plates_of_interest
Get detail for one NVR by UUID. UUID comes from `list_nvrs` items[]. Returns online status, camera slots, retention, and disk health.
get_nvr
Return license counts (total / used) for one organization. `tenant_id` identifies which org to query — must be one of the UUIDs in `list_tenants`. Useful for "how many camera licenses do we have left?". Numbers are per license type (camera, premium-alert, access-control, etc.).
get_organization_licenses
Get premium alert settings (Firearm, Slip & Fall, PPE detection). Premium alerts are AI-powered detections that require a premium license. Each entry includes the enabled state (`paused_at` absent/null = enabled, set = paused), schedule (days/times), sensitivity, monitored cameras / speakers, notification recipients, and trigger rules. For ALL alert settings (standard + premium + POI + sensor), use `get_alert_settings` instead.
get_premium_alert_settings
Get recent access-control events (badges, door opens, forced entries). Pass no arguments to get the most recent events across all controllers. `device_ids` are controller IDs from `list_controllers`; `door_ids` from `list_doors`. `event_types` is a free list of strings — invalid values are silently dropped. `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. Returns a wrapper with `events`, `total_matching_events`, and `returned_events`.
get_recent_access_events
Get recent alerts in a time range. `start_time` / `end_time` are ISO-8601 (e.g. `2026-04-24T00:00:00Z`); naïve timestamps are interpreted as UTC. `alert_types` filters by category — use values seen in prior alert tool output, or call `list_available_alert_names` first. `search_query` further restricts to alerts whose name matches. For alerts with thumbnails / media, use the `get_security_alerts` composite instead.
get_recent_alerts
Get face-detection events for one person in a time range. `org_unique_face_id` comes from `search_detection_profiles` or `list_face_alert_profiles`. `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. Optionally narrow by `mac_addresses` (from `list_cameras` items[]) or `location_ids` (from `list_locations`). For UI-friendly output with thumbnails, use the `query_face_detections` composite instead.
get_recent_face_detections
Get alerts filtered by standard category (Firearm, POI, etc.). Provide BOTH `start_time` and `end_time`, or omit both — naïve timestamps are interpreted as UTC. `reduce` controls output detail: - `summary` (default): counts only — by category / camera / location. Cheap; right for "how many?" / "compare days". - `raw`: full alert records with timestamps and metadata. Use when the user wants to see individual events. `alert_categories` accepts `AlertCategory` values plus aliases like `firearm`, `trespassing`, `poi`, `lpr`, `loitering`.
get_security_alerts
Return door IDs the current user can unlock right now. Use for "which doors can I unlock?" or to check the user's per-door permissions before suggesting a remote unlock.
get_unlockable_doors
Fetch video-search thumbnail JPEGs as inline image content. Use this when the model needs to *visually* inspect frames returned by `show_video_search_results` — e.g. "what colour is the truck in result 1?", "is the person wearing a hard hat?", "is the door open?". Each URL is downloaded and returned as an MCP `image` content block (base64-encoded), in the same order as `urls`, so the multimodal model can see the pixels. Pass URLs verbatim from prior `show_video_search_results` output's `signed_image_url` field. They are short-lived (typically 24h) and self-authenticating — no `tenant_id` argument is needed. Constraints: - Maximum 10 URLs per call. Bigger batches blow out the multimodal context. For more frames, call again. - Failed fetches (expired signature, host unreachable) are silently dropped from the result; the leading text block reports the success / failure count. - This tool deliberately does NOT bind to the search widget. Calling it does not refresh the search gallery; it's an independent "look at these pixels" capability.
get_video_frame
List CONFIGURED access-control alerts. Returns tailgating / door held open / door forced open / access denied / tampering / controller_status alert configurations with their categories, target doors, schedules, and active state. Use for "is tailgating set up on the front door?", "what access control alerts exist?". For triggered instances, use `get_access_control_alerts`. `alert_categories` values: tailgating, access_denied, door_held_open, door_forced_open, tampering, controller_status. `search_query` filters by alert name or description. `limit` defaults to 50, max 100. Returns `alert_settings` (each has id, name, is_active, alert_category, a `devices` list of target doors with id/type/name, schedules, recipients), `returned_count`, and `has_more`.
list_access_control_alert_settings
List access levels (groups of door permissions). Each level includes a `user_count`. Useful for "what access levels exist?", "how many users have X permissions?", or to get `access_level_ids` for filtering doors.
list_access_levels
List standard alert categories and configured custom alert names. Combines `get_premium_alert_settings` and the user-alert portion of `get_alert_settings`. Returns: - `categories`: every standard `AlertCategory` value - `custom_alert_names`: unique names of user-defined alerts - `details`: per-name metadata (category, enabled, setting_id)
list_available_alert_names
List camera groups defined in `tenant_id`. Groups are a logical bucket of cameras independent of physical location — useful for "all entrance cameras" or "all parking-lot cameras". Use `list_camera_groups_with_locations` if you need the per-location membership.
list_camera_groups
List camera groups with their per-location memberships. Heavier than `list_camera_groups` — returns each group's location list. Use when the user wants to know which sites a group covers.
list_camera_groups_with_locations
List supported camera models in `tenant_id`. Returns manufacturer, model name, and fisheye flag for each model the org has deployed. No need to cross-reference with `list_cameras` — this is the canonical list.
list_camera_models
List cameras accessible in `tenant_id`. `nvr_uuid` and `location_id` optionally narrow the result. Prefer reusing values you've already seen in prior-turn `list_nvrs` / `list_devices` output before re-calling those. `exclude_disabled` hides administratively-disabled cameras.
list_cameras
List access-control controllers (door-management hardware). `location_id` filters client-side. Returns each controller's connection state and configuration. Useful for "list controllers" / "which controllers are offline?".
list_controllers
List devices (cameras and speakers, not NVRs or controllers). Use `list_nvrs` for NVRs and `list_controllers` for access control hardware. `location_id` filters client-side; pass it to narrow the result.
list_devices
List doors, optionally filtered by site / building / etc. Pass no arguments to get all doors. Filters compose; use `acb_ids` to narrow by controller (from `list_controllers`).
list_doors
List enrolled face profiles (people). `category` filters: `pois` (persons of interest only), `non_pois`, or `all` (default). `profile_ids` further restricts to specific `org_unique_face_id` values from a prior `search_detection_profiles` call. Returns raw profile records. For thumbnails-friendly results with display control, use the `query_face_profiles` composite instead.
list_face_alert_profiles
List locations (physical sites) in `tenant_id`. Each location carries an `id` usable as the `location_id` filter on `list_cameras`, `list_nvrs`, `list_doors`, and many others. Prefer reusing IDs you've seen in prior tool output before re-listing.
list_locations
List lockdown settings (emergency configs that restrict door access). Pass `active=True` to see only currently-engaged lockdowns. `door_ids` and `user_ids` further narrow.
list_lockdown_settings
List organization members (admins and users). `tenant_id` identifies which org. Returns each member's id, name, email, role, and last_login. Use for "who are the admins?", "list all members", or to look up a user's email before querying audit logs by user.
list_members
List NVR (Network Video Recorder) devices. `location_id` optionally filters to one site. Returns each NVR's UUID, online status, camera-slot count, retention days, and basic disk info.
list_nvrs
List organizations the authenticated user can access. Returns every org's id, name, and settings. Distinct from `list_tenants` (which returns the bare UUIDs with no metadata) — use this when the user asks about org metadata.
list_organizations
List access-control schedules (when doors auto-lock/unlock). Returns time slots and door assignments. Useful for "what schedules exist?" or "when do doors lock?".
list_schedules
List speaker devices in `tenant_id`. `location_id` filters client-side.
list_speakers
List tenant UUIDs the authenticated user can access. Fetched from the backend's `GET /organizations` endpoint. Call this first to discover the tenants you can pass to other tools' `tenant_id` argument; pick the one that matches the user's question (ask them if it's ambiguous), then use it on every subsequent call.
list_tenants
Query the audit trail of configuration changes, with filtering. Filtering (use `get_audit_capabilities` to see valid values): - `category`: filter by domain (cameras, access_control, alerts, …) - `actions`: list of specific action names for exact matching (takes precedence over `category`) - `user_email_filter`: substring match on user email Long ranges are fetched in parallel 10-day chunks; operational actions (searches, views, downloads) are filtered out. Results are sorted newest-first, so for "last time X happened" start with a 30-day window and read the first result — expand the range if empty. `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. Returns logs grouped by category plus summary statistics. If `partial` is true, some time windows failed to fetch (listed in `failed_windows`) — present the results as incomplete for those windows, not exhaustive.
query_audit_logs
Summarise camera health (online / offline / disabled). Pass no filters to summarise the entire fleet. Filters are applied client-side after a single `list_cameras` call.
query_camera_health
Get uptime intervals for cameras over a time range. `start_time` / `end_time` are ISO-8601; naïve timestamps are interpreted as UTC. `detail_level`: - `summary` (default): per-camera total uptime + percent. - `detailed`: include each individual uptime interval. Pass no filters to query every camera in the fleet (slower — one API call per camera). Prefer `camera_ids` from prior `list_cameras` output.
query_camera_uptime
Check controller health (battery, lid tampering, fire alarms). Aggregates battery / lid / fire-alarm events from `search_access_control_device_events` over the time window. `device_ids` come from `list_controllers`. `reduce`: `summary` (counts by event type per controller — default) or `raw`.
query_controller_system_health
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Coram alternatives on ChatGPT?
As of 2026-10-03, Coram competes with Apilio, Bright Home Lights, Domus - Homeowners Ai, Home Connect, Homey, LG ThinQ, mytesla.io, Sonos in ChatGPT Smart Home & Home Automation, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.