Skip to main content
Glama
LCM2M

lcm2m-caddis-mcp

by LCM2M

List alarms

caddis_list_alarms
Read-onlyIdempotent

List enabled alarms with type definitions, latest history entry, and subscribers. Filter by equipment IDs or preventative maintenance status.

Instructions

List enabled alarms for the company along with their type definitions, latest history entry, and subscribers (users and rosters). Optionally filter by equipment IDs or by whether the alarm type is preventative maintenance (pm). The body is a TOON document with five named tabular sections — alarms[...]{...}:, alarm_types[...]{...}:, alarm_history[...]{...}:, user_alarms[...]{...}:, and roster_alarms[...]{...}: — each followed by its indented rows. Join keys: each alarms row carries alarm_type_id ↔ alarm_types.id; alarm_history, user_alarms, and roster_alarms rows each carry alarm_id back to alarms.id. alarm_history is capped at the single most recent entry per alarm. Several columns are JSON-stringified blobs — args, args_latest, device_output_config, and config on alarms; args_template on alarm_types; and args + device_output_config on alarm_history — JSON.parse() them to recover their structured values.

Responses are TOON-encoded (toonformat.dev) — a token-efficient JSON dialect mixing YAML-style indentation with CSV-style tables. Example:

name: Caddis Co timezone: America/Denver equipment[3]{id,name,tags,current_status.status,current_status.reason_id}: 1,Mill A,"["cnc","critical"]",running,null 2,"Press, Big",null,down,3 3,Lathe C,null,null,null

  • Object fields: key: value; nested objects indent their children.

  • Uniform arrays of objects: field[N]{cols}: followed by N indented comma-separated rows in column order.

  • Nested objects inside table rows are recursively flattened to dotted columns (e.g. current_status.status, input_setup.cycle.logic); a null parent yields null across all its dotted columns (see row 3 above).

  • Primitive arrays at object level: field[N]: a,b,c inline.

  • Arrays inside table cells are JSON-stringified into a single cell value (JSON.parse() to recover); empty arrays render as null (see rows 1–3 tags column).

  • Strings with commas/colons/quotes/leading whitespace are double-quoted (escapes: \\, \"); other strings, numbers, booleans, and null are bare.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pmNoIf true, only return preventative-maintenance alarms; if false, only non-PM
equipIdsNoFilter to alarms for the given equipment IDs
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations (readOnly, openWorld, idempotent) by detailing the TOON response format, the five tabular sections, join keys, JSON-stringified columns, history cap, and parsing instructions. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but front-loaded with the core purpose and filters, followed by necessary explanation of the non-standard TOON format. Every sentence adds value, though a briefer summary of the format might suffice. Still, it earns a 4 for being well-structured despite length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully compensates by explaining the TOON response structure, example, join keys, special column handling, and parsing. For a complex tool, this is complete and leaves no ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description restates the optional filters but adds no new meaning or syntax details beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists enabled alarms with type definitions, latest history, and subscribers, and offers optional filters by equipment or PM type. This verb+resource statement distinguishes it from sibling list tools like caddis_list_devices or caddis_list_equipment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does and the optional filters, but does not explicitly state when to use it versus alternatives or when not to use it. Since there is no other alarm-specific list tool, the context is clear enough without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LCM2M/lcm2m-caddis-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server