Skip to main content
Glama
RhombusSystems

Rhombus MCP Server

Official

🚀 Rhombus MCP-Server – Verleihen Sie Ihren KI-Tools Superkräfte!

Entfesseln Sie die Leistungsfähigkeit der Rhombus-API mit dieser hochmodernen MCP-Server-Implementierung! Transformieren Sie Ihr Chatbot-Erlebnis mit fortschrittlichen Sicherheits- und Überwachungsfunktionen, die Ihnen direkt zur Verfügung stehen.

🔍 Über Rhombus

Rhombus ist das am besten bewertete kommerzielle Sicherheitssystem, das für Schutz entwickelt wurde und sich anpassen lässt! Wir bieten physische Sicherheit auf Unternehmensebene mit Fokus auf Cybersicherheit und kombinieren:

  • 💡 Intelligente Kameras – Innovative Dome-, Fisheye-, Bullet- und Multisensor-Überwachungskameras

  • 🚪 Zugangskontrolle – Sichere Türsteuerungen, Lesegeräte und Gegensprechanlagen mit mobilem Zugriff sowie Karten- und Transponder-Zugang

  • 📡 IoT-Sensoren – Fortschrittliche Audio-, Umgebungs-, Bewegungs-, Eingangs- und Mehrzweck-Paniksensoren

  • 🔒 Alarmüberwachung – TMA 5-Diamond-zertifizierte Live-Agenten-Verifizierung und Einsatzleitung

Unsere Plattform basiert auf umsetzbaren KI-Erkenntnissen, die Ihnen helfen, mit Echtzeit-Erkennungen schneller zu reagieren, und das alles auf der Grundlage starker Cybersicherheitsprinzipien.

Related MCP server: MCP Camera Tool

🧪 Nehmen Sie an unserem Betatest teil!

Wir freuen uns, Teil der KI-Generation zu sein! Helfen Sie uns, die Zukunft der KI-gestützten Sicherheit zu gestalten, indem Sie unsere MCP-Server-Implementierung testen und wertvolles Feedback geben.

👉 Füllen Sie hier unser Betatest-Formular aus 👈

Ihre Erkenntnisse werden unsere Entwicklungs-Roadmap direkt beeinflussen und uns helfen, die leistungsstärksten KI-Sicherheitstools auf dem Markt zu entwickeln!

🔧 Schnelleinrichtung

Installation über Smithery

So installieren Sie den Rhombus MCP-Server automatisch für Claude Desktop über Smithery:

npx -y @smithery/cli install @RhombusSystems/rhombus-node-mcp --client claude

Schritt 1: Verleihen Sie Ihrer Rhombus-Konsole Superkräfte

  1. Melden Sie sich bei Ihrer Rhombus-Konsole an – Hier anmelden! 🔐

  2. Generieren Sie Ihren magischen Schlüssel unter API-Schlüssel-Einstellungen

  3. Aktivieren Sie Ihre Kräfte, indem Sie RHOMBUS_API_KEY in Ihrer Umgebung festlegen 💪

Schritt 2: Superkräfte für Claude Desktop

  1. Holen Sie sich den unglaublichen Claude Desktop direkt hier! 📥

  2. Entfesseln Sie die Magie, indem Sie dies zu Ihrer claude_desktop_config.json hinzufügen:

DOCKER

{
  "mcpServers": {
    "rhombus": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RHOMBUS_API_KEY=YOUR_API_KEY_HERE",
        "rhombussystems/mcp-server-rhombus"
      ],
      "env": {
        "RHOMBUS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

NPX

{
  "mcpServers": {
    "rhombus": {
      "command": "npx",
      "args": ["--yes", "--package", "rhombus-node-mcp", "mcp-server-rhombus"],
      "env": {
        "RHOMBUS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Sie können auf die Datei zugreifen über:

vim ~/Library/Application\ Support/Claude/claude_desktop_config.json

Schritt 3: Probieren Sie es aus! 🎡

Zeit, die Magie in Aktion zu sehen! Lassen Sie uns überprüfen, ob Claude für Desktop unsere fantastischen rhombus-Server-Tools erkennt:

  1. Suchen Sie nach dem Hammer-Symbol in der Benutzeroberfläche von Claude ⚒️

  2. Klicken Sie darauf, um Ihr neues Arsenal an Tools zu enthüllen

  3. Suchen Sie die Filesystem MCP Server-Tools in der Liste

Wenn sie sichtbar sind, HABEN SIE ES GESCHAFFT! 🎉 Ihre Integration ist live und einsatzbereit! Claude kann nun direkt mit Rhombus-Systemen kommunizieren und bietet Ihnen dieselben unglaublichen Funktionen wie die Rhombus-Web-App, jedoch mit der zusätzlichen Kraft von Claudes Intelligenz!

🚀 Lokal ausführen: Entfesseln Sie Ihren inneren Entwickler!

Sie möchten praktisch arbeiten und den Rhombus MCP-Server direkt auf Ihrem Rechner testen? Befolgen Sie diese Schritte, um ein lokales Docker-Image zu erstellen und es dann mit dem MCP-Client Ihrer Wahl zu verbinden!

1. Erstellen Sie Ihr lokales Docker-Image 🛠️

Zuerst erstellen wir das Docker-Image. Dies ermöglicht es Ihnen, den MCP-Server in einer lokalen Umgebung auszuführen.

npm install
docker build -t mcp-server-rhombus .

2. Aktualisieren Sie Ihre Claude-Konfiguration für die lokale Nutzung ⚡

Jetzt müssen Sie Ihre claude_desktop_config.json anpassen, um auf Ihr neu erstelltes lokales Docker-Image zu verweisen.

Hinweis: Bei der lokalen Ausführung ändert sich der Name des Docker-Images von rhombussystems/mcp-server-rhombus zu mcp-server-rhombus. Stellen Sie sicher, dass Sie dies in Ihrer Konfiguration aktualisieren!

{
  "mcpServers": {
    "rhombus": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "RHOMBUS_API_KEY=YOUR_API_KEY_HERE",
        "mcp-server-rhombus"
      ],
      "env": {
        "RHOMBUS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Erstellen eines neuen Tools

Wir haben ein Skript geschrieben, das Sie ausführen können, um mit der Entwicklung eines neuen Tools zusätzlich zu unserem bestehenden Tool-Set zu beginnen. Sie können einfach aufrufen:

npm run create:tool

🧪 Tests ausführen

Tests werden mit Vitest geschrieben und befinden sich neben den Quelldateien als *.test.ts.

1. Richten Sie Ihre Testumgebung ein

Kopieren Sie die Vorlage und füllen Sie Ihre Werte aus:

cp .env.test.template .env.test

Bearbeiten Sie dann .env.test:

Variable

Beschreibung

RHOMBUS_API_KEY

Ihr Rhombus-API-Schlüssel – generieren Sie einen unter API-Management

API_HOSTNAME

API-Basis-URL – Standard ist https://api.rhombus.com (für Staging/Dev überschreiben)

CAMERA_UUID

UUID einer Kamera in Ihrer Organisation für Integrationstests

.env.test wird von git ignoriert – committen Sie niemals echte Anmeldedaten.

2. Führen Sie die Tests aus

# Run all tests once
npm test

# Watch mode — re-runs on file changes
npm run test:watch

Probleme? Wir sind für Sie da! 🛟

Schauen Sie sich Claudes fantastischen Leitfaden zur Fehlerbehebung für schnelle Lösungen an! Immer noch nicht weitergekommen? Unser Expertenteam ist bereit zu helfen!

Wir setzen uns dafür ein, Ihre Erfahrung absolut nahtlos zu gestalten, und sind SUPER gespannt darauf, welche erstaunlichen Anwendungen Sie mit unseren Tools entwickeln!

🤝 Wir möchten Ihr Feedback!

Als Pioniere der KI-Generation setzen wir uns leidenschaftlich dafür ein, die Grenzen dessen zu erweitern, was möglich ist, wenn man fortschrittliche physische Sicherheit mit modernsten KI-Tools kombiniert. Ihr Feedback ist von unschätzbarem Wert, während wir weiter innovieren und uns verbessern.

  • Welche Funktionen würden Ihren Arbeitsablauf noch weiter verbessern?

  • Wie nutzen Sie unseren MCP-Server in Ihren Projekten?

  • Welche Integrationen würden Sie als Nächstes gerne sehen?

Teilen Sie uns Ihre Gedanken, Ideen und Erfolgsgeschichten mit! Gemeinsam gestalten wir die Zukunft intelligenter Sicherheit.

📜 Lizenz

Dieser fantastische MCP-Server wird mit der Freiheit der MIT-Lizenz geliefert! ✅ Nutzen Sie ihn, ✅ modifizieren Sie ihn, ✅ teilen Sie ihn – die Möglichkeiten sind endlos! Denken Sie nur daran, die Bedingungen der MIT-Lizenz zu befolgen. Weitere Details finden Sie in der LICENSE-Datei in unserem Repository.

Available Tools

31 tools
access-control-toolA

This tool manages Rhombus access control operations including door unlocking, access groups, credentials, lockdown plans, door schedules, and access grants.

It has the following modes of operation, determined by the "requestType" parameter:

  • unlock-door: Remotely unlock an access controlled door. Requires doorUuid.

  • get-groups: List all access control groups in the organization.

  • get-credentials-by-user: List all access control credentials for a specific user. Requires userUuid.

  • get-lockdown-plans: List all lockdown plans in the organization.

  • activate-lockdown: Activate a lockdown plan at a location. Requires locationUuid and lockdownPlanUuid.

  • deactivate-lockdown: Deactivate a lockdown plan at a location. Requires locationUuid and lockdownPlanUuid.

  • get-door-schedules: Get door schedule exceptions for a location. Requires locationUuid.

  • get-access-grants: List location access grants (physical badge/card access). Optionally accepts locationUuid to filter by location. Each grant includes userUuids (directly assigned users), groupUuids (assigned access control groups), and doorUuids (the doors this grant provides access to).

  • get-remote-unlock-users: Get all users who have permission to remotely unlock doors at a location. Requires locationUuid. Returns a list of doors with remote unlock enabled and the users who can unlock each door, based on their permission group roles. This is the correct tool for questions about remote unlock permissions.

Use the get-entity-tool with entityType ACCESS_CONTROL_DOOR to get door UUIDs. Use the user-tool to look up user UUIDs and resolve them to names/emails. Use the location-tool to get location UUIDs.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of access control request to make.
doorUuidYesThe UUID of the access controlled door. Required for 'unlock-door'.
userUuidYesThe UUID of the user. Required for 'get-credentials-by-user'.
locationUuidYesThe UUID of the location. Required for 'activate-lockdown', 'deactivate-lockdown', 'get-door-schedules', and 'get-remote-unlock-users'. Optional for 'get-access-grants' to filter by location.
lockdownPlanUuidYesThe UUID of the lockdown plan. Required for 'activate-lockdown' and 'deactivate-lockdown'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
unlockResultNoResult of unlocking a door
accessControlGroupsNoList of access control groups
credentialsNoList of access control credentials for a user
lockdownPlansNoList of lockdown plans
lockdownResultNoResult of activating or deactivating a lockdown
doorScheduleExceptionsNoDoor schedule exceptions
accessGrantsNoList of location access grants. Each grant contains userUuids and groupUuids that have access to the doorUuids in the grant.
remoteUnlockUsersNoUsers who can remotely unlock doors at a location, grouped by permission group. Always present the COMPLETE list of all users to the end user.
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the behavior of each mode (e.g., unlock-door is a write operation, get-groups is read-only) and warns about large responses. However, it lacks details on side effects, error handling, or permission requirements, which is a moderate gap.

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 well-structured with bullet points for modes, making it easy to scan. It front-loads the purpose. While it is lengthy due to the number of modes, every section serves a purpose; minor redundancy in parameter explanations could be tightened.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, 9 modes) and the existence of an output schema, the description covers modes, required parameters, output filtering, and related tools. It could be more complete by briefly noting what each mode returns, but the output schema reduces that need.

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

Parameters4/5

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

Although schema coverage is 100%, the description adds significant value by clarifying which parameters are required for each mode and providing examples for includeFields and filterBy. This goes beyond the schema's generic descriptions.

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 that the tool manages Rhombus access control operations and enumerates nine specific modes via requestType. It differentiates from sibling tools by explicitly directing users to get-entity-tool, user-tool, and location-tool for UUID lookups, and states that this is the correct tool for remote unlock permissions.

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 provides explicit guidance for each mode, including required parameters. It names alternative tools for prerequisite lookups and includes a warning about large responses. However, it does not explicitly state when not to use this tool versus a sibling beyond those mentions, leaving some implicit inference.

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

alarm-monitoring-toolA

This tool retrieves alarm monitoring status and threat case information across Rhombus locations.

It has the following modes of operation, determined by the "requestType" parameter:

  • org-status: Get the armed/disarmed alarm monitoring status for ALL locations in the organization in a single call.

  • get-threat-cases: Retrieve alarm monitoring threat cases (security incidents). Supports filtering by time range and max results.

  • location-status: Get detailed alarm monitoring status for a specific location. Requires locationUuid.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of alarm monitoring request to make.
locationUuidYesLocation UUID. Required for 'location-status'.
startTimeMsYesFilter threat cases after this timestamp (ms since epoch). Optional for 'get-threat-cases'.
endTimeMsYesFilter threat cases before this timestamp (ms since epoch). Optional for 'get-threat-cases'.
maxResultsYesMaximum number of threat cases to return. Optional for 'get-threat-cases'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
locationStatusesNoAlarm monitoring status for each location
threatCasesNoList of alarm monitoring threat cases
locationDetailNoDetailed alarm monitoring status for a single location
errorNoAn error message if the request failed.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It warns about large response sizes exceeding 400k characters and explains output filtering parameters to mitigate this. However, it does not explicitly state whether the tool is read-only or mention any other behavioral traits like authentication requirements or rate limits.

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

Conciseness5/5

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

The description is well-structured with clear sections for each mode and output filtering. It is concise, front-loading the core purpose and modes, and every sentence adds value (e.g., warnings about large responses). No unnecessary repetition or filler.

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

Completeness4/5

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

Given that the tool has an output schema, the description does not need to detail return values. It covers all parameters, modes, and provides important warnings about response size. It lacks information about error conditions or prerequisites (e.g., whether a location UUID is required for location-status), but overall it is sufficiently complete for a multi-mode retrieval tool.

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

Parameters5/5

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

The input schema has 100% description coverage for all 7 parameters, but the description adds significant value by explaining the modes of operation driven by requestType, detailing the output filtering parameters (includeFields and filterBy) with examples, and warning about large responses. This goes well beyond the schema descriptions.

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 retrieves alarm monitoring status and threat case information, with specific modes (org-status, get-threat-cases, location-status) that differentiate the tool's capabilities. It uses specific verbs ('retrieves') and resources ('alarm monitoring status and threat case information'), making its purpose unambiguous and distinct from siblings.

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 explicitly lists the three modes of operation and explains when each should be used based on the requestType parameter. It provides context for each mode but does not explicitly advise when not to use this tool or suggest alternatives among sibling tools.

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

analytics-toolA

This tool generates composite operational analytics reports by combining multiple data sources. Use it for high-level business questions about space utilization, traffic patterns, and real-time scene analysis.

It has the following modes of operation, determined by the "requestType" parameter:

  • space-utilization: Compare per-camera people counts against running averages at a location. Answers: "How busy is each area vs normal?"

  • traffic-flow: Compare ingress/egress across ALL line-crossing cameras at a location. Answers: "Which entrance gets the most traffic?"

  • peak-vs-average: Show hourly actual counts vs historical averages. Answers: "When is it busiest? Is today above or below normal?"

  • scene-intelligence: Ask a camera an arbitrary question using AI vision (e.g. "How many treadmills are in use?"). Works in real-time or at a historical timestamp.

  • location-summary: Generate a comprehensive multi-metric analytics summary for a location including people counts, traffic flow, and trend comparisons.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of analytics report to generate.
spaceUtilizationRequestYesRequest for space utilization report. Compares per-camera people counts against running averages. Required for 'space-utilization'.
trafficFlowRequestYesRequest for multi-camera traffic flow report. Compares ingress/egress across all line-crossing cameras at a location. Required for 'traffic-flow'.
peakVsAverageRequestYesRequest for peak-vs-average analysis. Shows hourly actual counts vs historical running averages. Required for 'peak-vs-average'.
sceneIntelligenceRequestYesRequest for real-time scene intelligence. Asks a camera an arbitrary question using AI. Required for 'scene-intelligence'.
locationSummaryRequestYesRequest for a comprehensive location analytics summary covering people counts, traffic flow, occupancy, and comparison to averages. Required for 'location-summary'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
spaceUtilizationNoSpace utilization report with per-camera counts vs running averages.
trafficFlowNoMulti-camera traffic flow comparison with ingress/egress ranking.
peakVsAverageNoHour-by-hour actual vs. average analysis with peak/quiet hour identification.
sceneIntelligenceNoReal-time AI answer from a camera about what it currently sees.
locationSummaryNoComprehensive multi-metric location analytics summary.
errorNoAn error message if the request failed.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It details the five modes, explains output filtering (includeFields, filterBy), and warns about large responses exceeding 400k characters. However, it does not explicitly state whether the tool is read-only or has side effects.

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 well-structured with bullet points for modes and a separate section for output filtering. It is front-loaded with the purpose. Every sentence serves a purpose, though it is slightly verbose.

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?

Given the tool's complexity (8 parameters, no annotations, output schema present), the description covers all necessary aspects: five modes, request objects, output filtering with examples, and a warning about large responses. It is comprehensive enough for an AI agent to understand how and when to invoke the tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining what each mode answers in plain language (e.g., 'How busy is each area vs normal?'), which goes beyond the schema's formal parameter descriptions.

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 explicitly states it generates composite operational analytics reports by combining multiple data sources, and lists five specific modes of operation with clear answers to business questions. This distinguishes it from simpler data retrieval tools like count-tool or events-tool.

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

Usage Guidelines3/5

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

The description recommends using the tool for high-level business questions, but does not explicitly state when not to use it or suggest alternative tools. It provides context for usage but lacks exclusion criteria.

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

automated-prompts-toolA

This tool manages Rhombus MIND automated prompts - scheduled chatbot jobs that run a prompt at a recurring interval and store each response. Use it to list, inspect, create, update, delete, page through past responses for, share, or re-verify the schedule of an automated prompt.

Modes (set "requestType"):

  • list: List all automated prompts in the org. Optional 'lastEvaluatedKey' / 'maxPageSize' for pagination.

  • get: Get a single automated prompt's settings. Requires 'promptUuid'.

  • create: Create a new automated prompt. Requires 'prompt', 'invokeAt' (ISO 8601 with offset, must be at least 15 minutes in the future), 'frequencyValue', 'frequencyUnit', and 'permissionGroupUuid'. Optional 'responseTemplate' and 'notifyUserUuids'.

  • update: Selectively update an automated prompt. Requires 'promptUuid'; only the fields you set will be changed. To change the role, the caller must have access to both the current and new role. Pass an empty 'notifyUserUuids' array to clear notifyees.

  • delete: Delete an automated prompt and all of its stored responses. Requires 'promptUuid'.

  • get-history: Page through responses generated by an automated prompt. Requires 'promptUuid'. Optional 'lastEvaluatedKey' / 'maxPageSize'.

  • share-response: Update the visibility of one stored response. Requires 'chatUuid' and 'visibility' (PUBLIC, ORG_WIDE, SELECT_USERS, PRIVATE).

  • verify-scheduled: Re-verify that the job is scheduled to trigger; the server reschedules it if missing. Requires 'promptUuid'.

Notes:

  • Use 'user-tool' to look up user UUIDs and resolve them to names/emails. 'notifyUserUuids' must be members of the chosen 'permissionGroupUuid'.

  • 'invokeAt' is an ISO 8601 timestamp; both 'Z' and '+/-HH:mm' offsets are accepted. The tool converts it to milliseconds for the API.

  • Timestamps in the output are ISO 8601 strings with timezone offset (defaults to America/Los_Angeles when no org timezone is available).

  • 'submitTestPrompt' is intentionally not exposed by this tool.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of automated prompt request to make.
promptUuidYesUUID of the automated prompt. Required for 'get', 'update', 'delete', 'get-history', and 'verify-scheduled'.
chatUuidYesUUID of a chat record (an individual response generated by an automated prompt). Required for 'share-response'.
visibilityYesVisibility for a shared chat response. Required for 'share-response'. One of PUBLIC, ORG_WIDE, SELECT_USERS, PRIVATE.
promptYesThe prompt MIND will execute every time the job runs. Required for 'create', recommended for 'update'.
responseTemplateYesOptional template that guides the shape of MIND's response. Used by 'create' and 'update'.
frequencyValueYesHow many time units between runs (e.g. 1 for 'every 1 day'). Required for 'create' alongside frequencyUnit.
frequencyUnitYesUnit for the recurrence (HOURS, DAYS, WEEKS, MONTHS). Required for 'create' alongside frequencyValue.
invokeAtYesWhen the automated prompt should first run. Required for 'create'. Must be at least 15 minutes in the future. Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
permissionGroupUuidYesUUID of the permission group/role that owns the job. Users in this role (or a higher role) can view and edit the job, and MIND uses this role's permissions when running the prompt. Required for 'create'.
notifyUserUuidsYesUser UUIDs to email-notify when MIND finishes a run. These users must be members of the permission group set above. Used by 'create' and 'update'. Pass an empty array to clear existing notifyees on 'update'.
lastEvaluatedKeyYesPagination cursor returned by a previous 'list' or 'get-history' call. Pass to fetch the next page.
maxPageSizeYesMaximum number of items per page for 'list' and 'get-history'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
settingsNoReturned by 'get', 'create', and 'update'.
settingsListNoReturned by 'list'.
lastEvaluatedKeyNoPagination cursor for the next page; absent when no more pages.
chatHistoryNoReturned by 'get-history'.
verifyResultNoReturned by 'verify-scheduled'. Schedule expression and timezone for the next trigger.
successNoReturned by 'delete' and 'share-response'.
errorNoAn error message if the request failed.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It discloses that deleting removes stored responses, timestamps are ISO 8601, and includes warnings about large responses with filtering options. It lacks details on rate limits or auth requirements, but overall is transparent.

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 well-structured with clear sections (overview, modes, notes, output filtering) and front-loaded with a summary. It is thorough but not overly verbose; every sentence adds value.

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?

Given the complexity (15 parameters, conditional requirements, multiple modes), the description is highly complete. It explains each mode's parameters, pagination, output filtering, and edge cases. Output schema exists, so return values need not be described.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant value beyond the schema: it explains conditional requirements (e.g., invokeAt must be 15+ minutes future), relationships between parameters (notifyUserUuids must be in permissionGroupUuid), and usage of pagination cursors.

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 manages automated prompts with explicit verbs like list, inspect, create, update, delete, page, share, verify. It distinguishes itself from sibling tools by focusing solely on automated prompts, with no overlap in purpose.

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 provides detailed usage guidance for each mode, including required and optional parameters, pagination, and a note to use 'user-tool' for UUID lookup. It does not explicitly state when not to use this tool, but the alternative is clear given its unique functionality.

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

camera-toolC

This tool can perform some action pertaining to the video stream of a camera. There are four types of requests that can be passed into "requestType":

  • image

  • get-settings

  • get-media-uris

  • get-ai-thresholds

What follows is a description of the behavior of this tool given the requestType "image"

This tool should be used any time someone wants to specify a subset of cameras to use for a task, based on some features that the camera sees. For example, interior cameras, cameras facing the street, cameras with a view of X, Y, Z, etc.

For instance if someone says "I want X using cameras with Y" then this tool should get a snapshot of the image to answer the question of if the camera satisfies the Y predicate.

This tool captures and returns a real-time snapshot from a designated security camera. The image reflects the current scene in the camera's field of view and serves as a contextual input source for downstream tasks such as object recognition, anomaly detection, incident investigation, or situational assessment. When invoked, the tool provides the following:

  • Visual Scene Capture: A high-resolution image of what the camera is actively observing, including people, vehicles, license plates, and any detectable objects.

  • The frameUri that was used to fetch the image. It may be useful to show the user this image as well through the frameUri.

What follows is a description of the behavior of this tool given the requestType "get-settings"

This tool retrieves the current configuration for a specified camera or associated device (e.g., sensor, access controller). The returned JSON object can include detailed camera settings (e.g., resolution, bitrate) and various device-specific configurations (e.g. storage settings).

NOTE: To update camera settings, use the update-tool instead.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraUuidYesthe camera uuid requested
timestampISOYes the timestamp for the image. This will default to 5 minutes before the current time. You can also call time-tool to parse the user's time description. Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
requestTypeYes
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

TDQS

C2.9/5.0
Behavior2/5

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

The description is inconsistent: it claims 'real-time snapshot' for 'image' but the timestampISO defaults to 5 minutes ago. There is no mention of destructive side effects, authentication needs, or rate limits. The behavior for two request types is completely omitted. Annotations are absent, so the description fails to provide sufficient transparency.

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

Conciseness3/5

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

The description is verbose, with redundant statements (e.g., multiple mentions of snapshot behavior). The structure is split by request type but includes a general 'Output filtering' section that could be better integrated. Some sentences are unnecessary, and the overall length could be reduced.

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

Completeness2/5

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

Given the absence of an output schema, the description should explain return values for all request types. It partially does for 'image' (image and frameUri) and 'get-settings' (JSON object), but ignores 'get-media-uris' and 'get-ai-thresholds'. The filtering parameters are described, but the data structure for settings is not detailed.

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

Parameters4/5

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

The description adds value to requestType (lists enum values), timestampISO (default and format), and the filtering parameters (includeFields, filterBy) with warnings about large responses. For cameraUuid, it relies on the schema's description. With 80% schema coverage, the description effectively supplements the remaining details.

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

Purpose3/5

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

The description lists four request types but only describes 'image' and 'get-settings' in detail. The general introduction ('perform some action pertaining to the video stream') is vague, and the usage example about selecting cameras based on features is mixed into the 'image' section, causing confusion. The other two request types remain undefined, reducing clarity.

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

Usage Guidelines3/5

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

For 'image', an example scenario is provided (selecting cameras based on features). For 'get-settings', a clear note directs to use update-tool for changes. However, no guidance is given for 'get-media-uris' and 'get-ai-thresholds', and the overall context of when to use each request type is missing.

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

camera-uptime-toolA

This tool analyzes camera uptime and reliability over a time period. It computes uptime percentages, outage counts, and longest outage durations.

It has the following modes of operation, determined by the "requestType" parameter:

  • get-camera-uptime: Get uptime statistics for a single camera. Requires cameraUuid, startTimeSec, and endTimeSec.

  • get-fleet-uptime: Get uptime statistics for ALL cameras in the organization, sorted by worst uptime first. Includes a fleet-wide summary with averages. Requires startTimeSec and endTimeSec.

startTimeSec and endTimeSec are UNIX timestamps in seconds.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of uptime request to make.
cameraUuidYesCamera UUID. Required for 'get-camera-uptime'.
startTimeSecYesStart time as UNIX timestamp in seconds. Required for all requests.
endTimeSecYesEnd time as UNIX timestamp in seconds. Required for all requests.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cameraUptimeNoUptime stats for a single camera
fleetUptimeNoUptime stats for all cameras in the fleet, sorted by worst uptime first
fleetSummaryNoFleet-wide uptime summary
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It thoroughly discloses the tool's behavior: computes statistics, requires timestamps, enumerates modes, and warns about large responses with advice on includeFields/filterBy. The only minor gap is not explicitly stating that it is a read-only operation.

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 well-structured into sections (summary, modes, timestamps, output filtering). It is slightly verbose due to repeated examples for filterBy/includeFields, but overall it is efficient and front-loaded with the core purpose.

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

Completeness4/5

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

Given the tool's complexity (6 params, enums, large responses) and the presence of an output schema (not shown but declared), the description is largely complete. It covers all modes, parameter requirements, and output filtering. It does not detail the exact return fields, but that is acceptable since an output schema exists.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining how parameters relate to modes (cameraUuid required only for get-camera-uptime), specifying that startTimeSec and endTimeSec are UNIX timestamps, and reiterating the filterBy/includeFields usage with detailed examples and warnings.

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 the tool analyzes camera uptime and reliability, computing uptime percentages, outage counts, and longest outage durations. It distinguishes two specific modes (single camera vs fleet), which helps the agent differentiate from sibling tools like 'camera-tool' or 'events-tool'.

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

Usage Guidelines3/5

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

The description explicitly defines when to use each mode (single camera vs fleet), but it lacks guidance on when to prefer this tool over similar tools (e.g., 'camera-tool' for broader camera data). No when-not-to-use or alternative recommendations are provided.

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

clips-toolA

Retrieves saved video clips from the Rhombus system. Saved clips can be viewed for up to 2 years and are typically found in the "Clips" tab of the "Saved Video" section of the Rhombus Console. Clips are either manually saved by the user, or automatically by some defined policy. Therefore, this tool is not for looking up the events that have occured.

This tool allows you to:

  • Get saved clips or clips expiring soon (filter by devices, locations, search string, time range).

  • Get all shared live video streams for the organization.

  • Get all timelapse clips for the organization.

Filter options (for saved and expiringSoon only):

  • Specific devices using their UUIDs (deviceUuidFilters).

  • Specific locations using their UUIDs (locationUuidFilters).

  • A simple string search on clip names (searchFilter).

  • A time range: start (timestampISOAfter) and/or end (timestampISOBefore) timestamp in ISO 8601 format.

The tool returns a JSON object with the following structure and important fields:

  • errorMsg (string | null): An error message if the request failed.

  • objecterror (boolean | null): Indicates if an object-level error occurred.

  • pageToken (string | null): A token to be supplied on the next search request to get the next page of results. If this token is null, there is no more data available.

  • savedClips (array of objects | null): An array where each object represents a saved video clip. Each clip object contains the following important fields:

    • uuid (string): The unique identifier for the video clip.

    • title (string): The name given to the video clip.

    • description (string | null): An optional description for the clip.

    • timestampMs (int64): The start time of the video clip in milliseconds since epoch.

    • createdAtMs (int64): The creation timestamp of the clip in milliseconds since epoch.

    • createdAtTimestamp (string): The creation timestamp of the clip in ISO 8601 format.

    • deviceUuid (string): The UUID of the primary device (e.g., camera) that recorded the clip.

    • deviceUuids (array of strings or null): A list of UUIDs for all devices associated with the clip.

    • durationSec (int32): The length of the video clip in seconds.

    • status (string): The current processing status of the clip, with possible values such as INITIATING, UPLOADING, RENDERING, FAILED, COMPLETE, OFFLINE, or UNKNOWN.

    • userUuid (string | null): The UUID of the user associated with the clip, if applicable.

    • sourceAlertUuid (string | null): The UUID of the alert that triggered the creation of this clip, if any.

  • sharedLiveVideoStreams (array): When requestType is sharedLiveStreams, list of shared live video stream objects.

  • timelapseClips (array): When requestType is timelapseClips, list of timelapse clip objects.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of data to retrieve. Use "saved" for regular saved clips, "expiringSoon" for clips nearing expiration, "sharedLiveStreams" for all shared live video streams, or "timelapseClips" for all timelapse clips.
deviceUuidFiltersYesA list of UUIDs representing specific devices to filter clips by. Only clips emitted by these devices will be returned. Please truncate any facets, such as .v0. It is always 22 characters long.
locationUuidFiltersYesA list of UUIDs representing specific locations to filter clips by. Only clips associated with these locations will be returned. Please truncate any facets, such as .v0. It is always 22 characters long.
searchFilterYesA simple string to search for within the names of the clips.
timestampISOAfterYesThe start of the time range for which to retrieve clips. Only clips that occurred AFTER this timestamp will be returned. Required when requestType is saved or expiringSoon.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
timestampISOBeforeYesThe end of the time range for which to retrieve clips. Only clips that occurred BEFORE this timestamp will be returned. Required when requestType is saved or expiringSoon.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
clipUuidYesUUID of a clip. Required for 'deleteClip'.
spliceRequestYesRequired for 'createClip'. Specifies the camera and time range for the new clip.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
savedClipsNo
expiringClipsNo
sharedLiveVideoStreamsNo
timelapseClipsNo
clipGroupsNoList of clip groups/folders
sharedClipGroupsNoList of shared clip groups
spliceResultNoResult of creating a new clip
deleteResultNoResult of deleting a clip

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. The description focuses on retrieving clips but the input schema includes createClip and deleteClip requestTypes, which are not mentioned in the description text. This creates a mismatch; the agent might not know the tool can also create or delete clips. The description does not disclose any destructive behavior or mutations.

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

Conciseness3/5

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

The description is detailed and structured with bullet points and sections, but it is quite lengthy. It front-loads the main purpose, but includes extensive output schema details that could be in the output schema itself. Some redundancy exists (e.g., warning about large responses appears in both description and parameter descriptions). Could be more concise.

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

Completeness3/5

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

Given the tool's complexity (10 parameters, output schema exists), the description is fairly complete regarding retrieval operations and output filtering. It mentions retention period and warns about large responses. However, it omits the create/delete capabilities, which are part of the tool's functionality, making it incomplete for a full understanding.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds significant meaning beyond the schema by explaining filter options, output structure, and output filtering (includeFields, filterBy). It provides context for requestType values and clarifies that timestamps are in ISO 8601 format with examples. This adds value beyond the schema definitions.

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 retrieves saved video clips from the Rhombus system, with specific verb and resource. It distinguishes itself from the events-tool by explicitly saying 'This tool is not for looking up the events that have occured.' It also lists multiple request types, making the purpose clear and differentiating from siblings.

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 provides explicit context for when to use the tool (retrieving clips) and when not (events). It explains filter options and output filtering. However, it does not mention alternatives among siblings beyond events-tool, and does not give guidance on when to use different requestTypes like createClip or deleteClip.

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

count-toolA

This tool counts the number of items by accepting an array of UUIDs. It can count anything that has UUIDs - users, devices, records, or any other entities. Simply provide an array of UUID strings and it will return the precise count.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidsYesAn array of UUID strings representing the items to count. Each string should be a valid UUID.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It states it returns a 'precise count' but does not specify whether duplicates are counted, how invalid UUIDs are handled, or if the operation has side effects. The description is basic and omits important details for full transparency.

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

Conciseness5/5

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

The description is two sentences long, front-loads the purpose, and contains no unnecessary wording. Every sentence adds value.

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

Completeness4/5

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

Given the tool's simplicity and lack of output schema, the description adequately explains the input and return value. It could mention edge cases (empty array, invalid UUIDs), but is sufficient for basic usage.

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 coverage is 100% with descriptions for both the array and its items. The description adds no significant meaning beyond what the schema already provides, meeting the baseline for a well-documented schema.

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 the tool counts items by accepting UUIDs. It specifies the verb 'count' and resource 'items by UUIDs', distinguishing it from siblings like search-tool which return data rather than counts.

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 tells the agent to use this tool when needing a count of UUID-identified items, but does not explicitly exclude alternatives or mention when not to use it. The context is clear but lacks explicit differentiation from siblings.

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

create-camera-policy-toolB

A tool for creating a camera policy that walks users through a multi-step process.

The step begins with the user providing a policy name, description, and organization UUID. Then, the user is presented with a form to configure the schedules for the policy. Finally, the user is presented with a form to assign the policy to cameras.

Uses elicitation forms for rich user interaction.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPolicy name (for creating policy)
descriptionYesPolicy description (for creating policy)
orgUuidYesOrganization UUID (for creating policy)
policyUuidYesPolicy UUID (for configuring schedules)
scheduleConfigsYesJSON string of schedule configurations
cameraUuidsYesComma-separated camera UUIDs to assign policy to
policyNameYesPolicy name (for reference)
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
needUserInputNo
messageNoThe message for this stage in the policy creation process. This message will be displayed to the user.
requestTypeNoThe type of form to display to the user as the next step in the policy creation process
submitActionNoThe action to take when the user completes the form, corresponds to the tool name to interact with next
policyUuidNoThe UUID of the policy that was created during this workflow
policyNameNoThe name of the policy that was created during this workflow
scheduleDataNoThe schedules that were created during this workflow, can be null or undefined if user has not created them yet with schedule-trigger-configuration

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It mentions the multi-step process and 'uses elicitation forms for rich user interaction,' hinting at interactive behavior. However, it does not disclose side effects (e.g., persistent resource creation), required permissions, or error states. The generic output filtering warnings are not behavioral.

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

Conciseness2/5

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

The description is verbose, with a large block of generic output filtering instructions that are not specific to this tool. The core purpose and steps are stated concisely, but the boilerplate text should be removed or placed elsewhere. This hurts readability and conciseness.

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

Completeness3/5

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

Given the complexity (9 required parameters, multi-step process, output schema exists), the description covers the workflow adequately but does not explain the return value, success indications, or error conditions. The output filtering section adds noise rather than completeness. The description is sufficient but not thorough.

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 coverage is 100%, so the input schema already describes all 9 parameters. The description adds some context by explaining the steps (e.g., first three parameters for creation, then scheduleConfigs, then cameraUuids). However, it does not add significant semantics beyond what the schema descriptions already provide.

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

Purpose4/5

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

The description clearly states the tool's purpose: creating a camera policy via a multi-step process. It distinguishes from siblings like policy-alerts-tool by focusing on policy creation. However, the generic output filtering section slightly clutters the purpose.

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

Usage Guidelines3/5

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

The description outlines the three steps (create, configure schedules, assign cameras), which helps the agent understand the workflow. However, it lacks explicit instructions on when to use this tool over alternatives or when not to use it. No sibling tool directly competes, so the guidance is adequate but not exemplary.

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

door-schedule-exception-toolA

This tool manages Rhombus door schedule exceptions. A door lock/unlock exception is a one-time rule used to change an access controlled door's locked/unlocked state. If a lock/unlock exception is enabled, it will overwrite the existing lock/unlock schedule. A schedule exception allows you to create a custom schedule that is only active for the specified dates/times. Once the date/time a schedule exception is set for passes, the original schedule will resume.

Door schedule exceptions can be either expired or not expired. If its scheduled date is in the past, then it is expired. Users through the web console can toggle whether to see expired door schedule exceptions or not. Please mirror this behavior when responding to the user.

It has the following modes of operation, determined by the "requestType" parameter:

  • create-exception: Create a door schedule exception. Requires exception (DoorScheduleExceptionType object). If locationUuid is missing but doorUuids are provided, the tool will resolve the location automatically.

  • delete-exception: Delete a door schedule exception. Requires exceptionUuid.

  • find-exceptions: Find door schedule exceptions across the organization, optionally filtered by date range.

  • find-exceptions-for-location: Find door schedule exceptions for a location. Requires locationUuid. Supports optional date range filters.

  • find-exceptions-for-door: Find door schedule exceptions for a door. Requires doorUuid. Supports optional date range filters.

  • get-exception: Get a single door schedule exception by UUID. Requires exceptionUuid.

  • update-exception: Update a door schedule exception. Requires exception (DoorScheduleExceptionType object). If intervals are omitted but defaultState and date range are provided, the tool will generate a full-day interval.

Use get-entity-tool to look up location and door UUIDs when needed.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of door schedule exception request to make.
exceptionUuidYesDoor schedule exception UUID. Required for 'get-exception' and 'delete-exception'.
locationUuidYesLocation UUID. Required for 'find-exceptions-for-location'.
doorUuidYesDoor UUID. Required for 'find-exceptions-for-door'.
exceptionYesDoorScheduleExceptionType object. Required for 'create-exception' and 'update-exception'.
localStartDateRangeStartNoOptional date range filter (inclusive) for local start date beginning (yyyy-MM-dd).
localStartDateRangeEndNoOptional date range filter (inclusive) for local start date end (yyyy-MM-dd).
localEndDateRangeStartNoOptional date range filter (inclusive) for local end date beginning (yyyy-MM-dd).
localEndDateRangeEndNoOptional date range filter (inclusive) for local end date end (yyyy-MM-dd).
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
exceptionNoSingle door schedule exception result.
exceptionsNoList of door schedule exceptions.
deletedNoDelete result.
expiredACDLicensesDoorUuidsNoDoor UUIDs with expired access control licenses.
unassignedACDLicensesDoorUuidsNoDoor UUIDs with unassigned access control licenses.
warningMsgNoWarning returned by backend, if any.
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior4/5

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

Discloses that exceptions overwrite existing schedules temporarily, that expired exceptions are in the past, and that omitting intervals can generate full-day intervals. Since no annotations exist, the description adequately covers behavior without contradictions.

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 well-structured with a general overview, mode list, and output filtering section. While thorough, some repetition (e.g., definition of expired) lengthens it slightly without significant loss.

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?

The description is highly complete given the tool's complexity. It explains the domain (schedule exceptions), all modes, parameter relationships, output filtering, and response size warnings. No gaps are apparent.

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

Parameters4/5

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

All input parameters have schema descriptions (100% coverage). The description adds valuable context beyond the schema, such as automatic location resolution when missing and default interval generation. This goes above the baseline of 3.

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

Purpose4/5

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

The description clearly states it manages door schedule exceptions and enumerates all modes of operation with specific actions. It differentiates from siblings by focusing on temporary schedule overrides, but does not explicitly contrast with other tools like door-tool or access-control-tool.

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?

Provides explicit when-to-use guidance for each requestType, explains automatic location resolution, references get-entity-tool for UUID lookups, and notes mirroring web console behavior for expired exceptions. Lacks explicit when-not-to-use instructions.

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

door-toolB

This tool manages Rhombus door controller rules and door policies.

It has the following modes of operation, determined by the "requestType" parameter:

  • get-door-controller-rules: Get all rules for a specific door controller. Requires doorControllerUuid.

  • create-door-controller-rule: Create a new rule for a door controller. Requires doorControllerUuid and ruleConfig (JSON string).

  • get-door-policies: Get all door alert policies in the organization.

  • create-door-policy: Create a new door policy. Requires policyName and policyConfig (JSON string).

Use the get-entity-tool to find door controller and access controlled door UUIDs.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of door operation to perform.
doorControllerUuidYesThe UUID of the door controller device. Required for 'get-door-controller-rules' and 'create-door-controller-rule'.
ruleConfigYesJSON string of the door controller rule configuration. Required for 'create-door-controller-rule'.
policyNameYesThe name for the new door policy. Required for 'create-door-policy'.
policyConfigYesJSON string of door policy configuration. Required for 'create-door-policy'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
doorControllerRulesNoList of door controller rules
createdRuleNoResult of creating a door controller rule
doorPoliciesNoList of door policies
createdPolicyNoResult of creating a door policy
errorNoAn error message if the request failed.

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the four modes and warns about large responses, but omits behavioral traits like error handling, idempotency of creation operations, required permissions, or side effects. This is a partial disclosure.

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 well-structured with clear sections for modes and output filtering. It is front-loaded with the core purpose. Minor redundancy (e.g., repeating 'Requires' in each bullet) could be trimmed, but overall efficient.

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

Completeness3/5

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

Given the multi-mode complexity and presence of an output schema, the description covers the basics: modes, required params for each, and filtering. Missing context includes error conditions, dependency availability, and what the response contains for creation operations.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by organizing parameters by requestType, explaining required dependencies, and providing examples for includeFields and filterBy. This goes beyond the schema's own descriptions.

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

Purpose4/5

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

The description clearly states it manages Rhombus door controller rules and door policies, and lists four specific operation modes with required parameters. However, it does not explicitly differentiate this tool from sibling tools like 'rules-tool' or 'access-control-tool', which could cause confusion.

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

Usage Guidelines2/5

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

The description mentions using get-entity-tool to find UUIDs, but provides no guidance on when to use this tool versus other sibling tools (e.g., rules-tool for non-door rules). There is no 'when not to use' or alternative tool suggestions.

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

entity-lookup-toolA

Retrieves specific entities (or devices) by their UUIDs. Takes a list of device UUIDs and returns the device information for those specific devices. Use this tool when the user asks for details on devices' states and details about their licenses and features. The return structure is a JSON object that contains the states of the requested entities. This data is exact. Only devices with matching UUIDs will be returned.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceUuidsYesThe UUIDs of the devices to look up.
timeZoneYesThe timezone for formatting timestamps. This is necessary for the tool to produce accurate formatted timestamps.
tempUnitYesThe unit of temperature to return, if applicable. Default is Celsius.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
camerasNoList of cameras matching the provided UUIDs
camerasCountNoNumber of cameras found
doorbellCamerasNoList of doorbell cameras matching the provided UUIDs
doorbellCamerasCountNoNumber of doorbell cameras found
badgeReadersNoList of badge readers matching the provided UUIDs
badgeReadersCountNoNumber of badge readers found
accessControlledDoorsNoList of access controlled doors matching the provided UUIDs
accessControlledDoorsCountNoNumber of access controlled doors found
audioGatewaysNoList of audio gateways matching the provided UUIDs
audioGatewaysCountNoNumber of audio gateways found
doorStatesNoList of door sensors matching the provided UUIDs
doorStatesCountNoNumber of door sensors found
climateStatesNoList of environmental sensors matching the provided UUIDs
climateStatesCountNoNumber of environmental sensors found
occupancySensorStatesNoList of motion sensors matching the provided UUIDs
occupancySensorStatesCountNoNumber of motion sensors found
buttonStatesNoList of buttons matching the provided UUIDs
buttonStatesCountNoNumber of buttons found
keypadStatesNoList of keypads matching the provided UUIDs
keypadStatesCountNoNumber of keypads found
minimalEnvironmentalGatewayStatesNoList of environmental gateways matching the provided UUIDs
minimalEnvironmentalGatewayStatesCountNoNumber of environmental gateways found
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses exactness ('Only devices with matching UUIDs will be returned') and large response warnings, but omits safety, idempotency, or permission details.

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?

Two concise paragraphs: first states purpose, second provides critical output filtering guidance. Front-loaded main purpose.

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

Completeness4/5

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

Explains return structure as JSON of device states. Output schema exists so full detail isn't needed. Covers essential usage aspects.

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

Parameters4/5

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

Schema description coverage is 100%, baseline 3. Description adds extra value beyond schema by warning about 400k character responses and advising use of includeFields/filterBy.

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 retrieves entities by UUIDs and returns device information including licenses and features, distinguishing it from sibling tools like search-tool which do free-text search.

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?

Provides explicit context: 'Use this tool when the user asks for details on devices' states and details about their licenses and features.' Lacks explicit when-not-to-use but the context is clear.

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

events-toolA

Scope: This tool returns raw, event-level data (individual events with timestamps). Use report-tool when you need aggregated counts, time-series summaries, or analytics over intervals.

Vehicles vs lpr-tool: eventType "camera" returns footage seekpoints from that camera's recording timeline—every activity type the API returns for the window (human motion, vehicle motion, and others depending on the camera and analytics). Some rows may include plate or vehicle metadata on the seekpoint. lpr-tool is still the right choice for org LPR workflows: saved vehicles, vehicle labels, fuzzy plate search, and vehicle event APIs—not a replacement for "everything this camera logged on its timeline."

This tool has multiple modes, set by "eventType": access-control, brivo-access-control, environmental-gateway, climate-sensor, component-events, camera. Use it when the user asks for specific events (unlocks, badge ins, credentials, arrivals, environmental readings, climate data, camera timeline activity, or other component events). It can return large result sets; keep time ranges narrow. For ranges spanning more than ~24 hours, prefer report-tool for aggregates. For maximum flexibility across event types at a location, use eventType "component-events".


When eventType is "brivo-access-control":

Retrieves badge/credential events from Brivo-integrated doors. Automatically fetches the Brivo integration configuration to determine which locations have Brivo doors mapped. No door UUIDs are required.

Use this when the user asks specifically about Brivo events, Brivo badge ins, Brivo access control, or events from Brivo doors.

Arguments:

  • startTime (string): Start of the time range (ISO 8601).

  • endTime (string): End of the time range (ISO 8601).

Returns:

  • integrationEnabled: Whether the Brivo integration is currently enabled.

  • brivoDoorsConfigured: Number of Brivo doors configured in the integration.

  • brivoDoors: List of Brivo doors with their IDs, names, and associated Rhombus location UUIDs.

  • events: Credential received events from all locations that have Brivo doors configured, sorted newest first.

Note: Events are fetched at the location level, so results may include events from all access-controlled doors at locations where Brivo is configured.


When eventType is "access-control":

Retrieves access control events (arrivals, badge ins, credentials, unlocks) for the given door(s). Can return a lot of data—use a narrow time range.

Arguments:

  • accessControlledDoorUuids (array of strings): UUIDs of the access-controlled doors.

  • startTime (string): Start of the time range (ISO 8601).

  • endTime (string): End of the time range (ISO 8601).

The credSource field indicates how the event was triggered:

  • REMOTE: Rhombus Key app remote unlock.

  • REMOTE (Admin): Unlock via Rhombus console or browser/mobile app.

  • BLE_WAVE: User waved hand over the reader.

  • NFC: User tapped badge or phone on the reader.


Retrieves environmental gateway events (sensor readings, derived values) for a device in a time range. Timestamps are in the device timezone, not necessarily UTC.

Arguments:

  • deviceUuid (string): UUID of the environmental gateway device.

  • startTime (string): Start of range (ISO 8601).

  • endTime (string): End of range (ISO 8601).


When eventType is "climate-sensor":

Retrieves climate sensor events (temperature, humidity, air quality, etc.) for a sensor in a time range. Timestamps are in the sensor timezone, not necessarily UTC.

Arguments:

  • sensorUuid (string): UUID of the climate sensor.

  • startTime (string): Start of range (ISO 8601).

  • endTime (string): End of range (ISO 8601).

  • limit (number, optional): Max events to return. Default 1000.


When eventType is "component-events":

Retrieves all component event types for a location in a time range. Most flexible option; filter by event type via componentEventTypes. Timestamps are in the location timezone, not necessarily UTC.

Arguments:

  • locationUuid (string): UUID of the location.

  • componentEventTypes (array, optional): Event types to include. If empty or omitted, returns all types.

  • startTime (string): Start of range (ISO 8601).

  • endTime (string): End of range (ISO 8601).

Valid event types include:

  • DoorbellEvent: Doorbell button press events

  • CredentialReceivedEvent: Badge/credential scans (NFC, BLE_WAVE, REMOTE unlocks)

  • DoorStateChangeEvent: Door state changes (locked/unlocked)

  • ButtonEvent: Generic button press events

  • PanicButtonEvent: Panic/emergency button activations

  • DoorReaderStateChangeEvent: Changes in door reader state

  • DoorRelayStateChangeEvent: Changes in door relay state

  • AccessControlUnitTamperEvent: Tamper detection events

  • AccessControlUnitBatteryStateChangeEvent: Battery state changes

  • WaveToUnlockIntentExpiredEvent: Wave-to-unlock timeout events

  • DoorAuthFirstInStateEvent: First-in authentication state events

  • DoorScheduleFirstInStateEvent: First-in schedule state events

  • And more (see input schema for full list).


When eventType is "camera":

Retrieves footage seekpoints for one camera: all activity types returned for the search window (not limited to human motion). Each item includes an activity string plus timestamp; plate/vehicle/face fields appear when the API provides them. Use lpr-tool for org LPR saved vehicles, labels, and dedicated plate search.

Arguments:

  • cameraUuid (string): UUID of the camera.

  • startTime (string): Start of range (ISO 8601).

  • duration (number): Search window in seconds. Default 3600 (1 hour).

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventTypeYesThe type of events to retrieve. access-control: Access control events like unlocks, badge ins, credentials, arrivals. brivo-access-control: Badge/credential events from Brivo-integrated doors. Does not require door UUIDs — automatically looks up which doors are configured via the Brivo integration. environmental-gateway: Environmental gateway events with sensor readings and derived values. climate-sensor: Climate sensor events with temperature, humidity, air quality readings. component-events: All types of component events for a location (most flexible option). camera: Footage seekpoints for one camera—all timeline activity types that camera recorded (human motion, vehicle motion, etc., depending on device/analytics). For org LPR saved vehicles, labels, and plate search APIs, use lpr-tool. button-press: Button press events from button sensors. occupancy: Occupancy sensor events with people count. proximity: Proximity tag events with RSSI readings. doorbell: Doorbell camera events.
startTimeYesA timestamp representing when to start the search for access control events.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
endTimeYesA timestamp representing when to end the search for access control events.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
accessControlledDoorUuidsYesThe UUIDs (array) of the access controlled doors. Required when eventType is 'access-control'.
deviceUuidYesThe UUID of the environmental gateway device. Required when eventType is 'environmental-gateway' Can be obtained from the get-entity-tool for ENVIRONMENTAL_GATEWAY.
sensorUuidYesThe UUID of the climate sensor. Required when eventType is 'climate-sensor'. Can be obtained from the get-entity-tool for SENSOR.
limitYesMaximum number of climate events to return. Only applicable when eventType is 'climate-sensor'. Default is 1000. Pass null for other event types.
locationUuidYesThe UUID of the location. Required when eventType is 'component-events'.
componentEventTypesYesArray of component event types to filter by. Only applicable when eventType is 'component-events'. If empty or null, returns all event types. Valid values: DoorbellEvent, DoorReaderStateChangeEvent, DoorRelayStateChangeEvent, DoorPositionIndicatorStateChangeEvent, RequestToExitStateChangeEvent, CredentialReceivedEvent, ButtonEvent, GenericInputStateChangeEvent, GenericRelayStateChangeEvent, AccessControlUnitTamperEvent, AccessControlUnitLocationLockdownStateEvent, DoorLocationLockdownStateEvent, PanicButtonEvent, AccessControlUnitBatteryStateChangeEvent, WaveToUnlockIntentExpiredEvent, DoorStateChangeEvent, DoorAuthFirstInStateEvent, DoorScheduleFirstInStateEvent, AccessControlUnitDoorFirstInStateEvent, AperioDoorExtensionStateEvent, AperioGatewayStateEvent, AperioGatewayConnectionStateChangeEvent, AperioDtcEvent, AperioTamperStateEvent.
timeZoneYesThe timezone of the requested locations or devices. This is necessary for the tool to produce accurate formatted timestamps.
cameraUuidYesThe unique identifier for the camera. Required when eventType is 'camera'. Can be obtained from the get-entity-tool for CAMERA.
durationYesDuration in seconds to search footage seekpoints. Required when eventType is 'camera'. Default is 3600 (1 hour).
buttonSensorUuidYesThe UUID of the button sensor. Required when eventType is 'button-press'.
occupancySensorUuidYesThe UUID of the occupancy sensor. Required when eventType is 'occupancy'.
proximityTagUuidsYesArray of proximity tag UUIDs. Required when eventType is 'proximity'.
doorbellCameraUuidYesThe UUID of the doorbell camera. Required when eventType is 'doorbell'.
tempUnitYesThe unit of temperature to return. Default is Celsius.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventTypeNo
brivoAccessControlEventsNoBrivo access control events. Fetches credential events from all locations that have Brivo doors configured in the integration.
accessControlEventsNoAccess control events data including badge ins, credentials, arrivals, etc., sorted by timestamp (newest first).
environmentalGatewayEventsNoEnvironmental gateway events data including sensor readings and derived values
climateSensorEventsNoClimate sensor events data including temperature, humidity, air quality, and other readings
componentEventsNoComponent events data for all types of access control events at a location, sorted by timestamp (newest first)
cameraEventsNoFootage timeline seekpoints for the camera (all activity types returned in the window). Use with eventType "camera".
buttonPressEventsNoButton press events
occupancyEventsNoOccupancy sensor events
proximityEventsNoProximity tag events
doorbellEventsNoDoorbell camera events
needUserInputNo
commandForUserNo

TDQS

A4.7/5.0
Behavior4/5

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

Discloses behavioral traits like timezone handling for different modes, that camera mode returns all activity types, and that brivo access-control automatically fetches configuration. Warns about response size. No annotations are provided, so the description carries the full burden. Minor omissions like pagination or rate limits prevent a 5.

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?

Well-structured with clear headers for each mode and a scope section. However, some repetition of start/end time descriptions across modes could be trimmed. Still efficient for a multi-mode tool.

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?

Covers all aspects: scope, mode selection, parameter requirements, output descriptions, filtering options, and sibling tool comparisons. Despite complexity, no obvious gaps. Output schema exists to supplement return value details.

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

Parameters5/5

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

Schema has 100% description coverage, but the description adds significant value: clarifies which parameters are required per mode, explains defaults (duration=3600, limit=1000), and describes output structure for brivo mode. This is above baseline 3.

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 the tool returns raw event-level data and distinguishes itself from siblings: report-tool for aggregates, lpr-tool for LPR workflows. Each eventType mode is explicitly described.

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use this tool vs alternatives (report-tool, lpr-tool) and within the tool, which eventType to choose. Includes warnings about large result sets and suggests narrow time ranges.

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

faces-toolA

This tool interacts with the Rhombus face recognition system to retrieve information about face sightings and registered faces.

If the user is asking about how many people were seen (head count / occupancy), use the report-tool with GET_OCCUPANCY_ENABLED_CAMERAS and GET_OCCUPANCY_COUNT_REPORT instead. This tool (faces-tool) is best for identifying who was seen (unique individuals by name), and its face count data is also automatically included in report-tool people-counting responses via the faceCountEnrichment field.

Important for person-presence questions: When asked whether specific people were seen or are present, you should ALSO call events-tool with eventType "access-control" to check badge-in records. Face recognition and access control are complementary — someone may badge in without face recognition triggering, or be seen by a camera without badging in.

If the requestType is "get-face-events":

  • Use this tool to answer questions about face sightings, including questions like "who was in the office" or "who was seen today". Can be used for reporting, to generate a report on who was seen by the camera system.

  • Automatic name resolution: You can pass partial or first-name-only names in faceNames (e.g., "Brandon", "Omar"). The tool automatically looks up the registered faces directory and resolves them to exact names and person UUIDs before searching. Check the "resolvedNames" field in the response to see what each queried name was matched to (null means no match found).

  • You can filter face events using parameters like 'faceNames', 'hasEmbedding', 'hasName', 'labels', 'locationUuids', 'personUuids', and a time range using 'rangeStart' and 'rangeEnd' (timestamps in milliseconds).

  • If you'd like to know about all face events at a location, pass in a location UUID and no device UUIDs. This will correctly return all face events at that location.

  • When the user asks about a specific person at a location (e.g. "Jane Doe at Main Office"), call get-registered-faces first to get the list of registered names, find the best match, then call get-face-events with that precise name. The tool expects precise names as stored in the system.

  • When querying faces at a location, pass only the location UUID in searchFilter; do not pass device UUIDs in searchFilter.deviceUuids, so the API returns all faces detected at that location.

If the requestType is "get-registered-faces":

  • This tool retrieves a list of all people (registered faces) currently known to the Rhombus system for your organization. This list includes information about each registered person, including their assigned labels.

  • This returns ALL people registered in the system, regardless of the provided timestampFilter.

  • Each person in the response includes a "labels" array showing which label groups they belong to (e.g., "Engineering", "Visitors"). Use these labels to answer questions about groups of people.

If the requestType is "get-person-labels":

  • This retrieves a mapping of all person UUIDs to their assigned labels across the organization.

  • Use this to discover what label groups exist and which registered faces belong to each group.

  • Useful when the user asks about a group (e.g., "was anyone from Engineering seen today?") — get the labels first, find the person UUIDs for that label, then query face events filtered by those personUuids or labels.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYes
faceEventFilterYes
timeZoneYesThe timezone for formatting timestamps which should come from the location of the camera for the face event. This is necessary for the tool to produce accurate formatted timestamps.
faceEventUuidYesUUID of a face event to search similar faces from. Required for 'search-similar-faces'.
personUuidYesUUID of a person to get face events for. Required for 'get-face-events-by-person'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
requestTypeYes
getFaceEventsResponseNoA list of all people seen over the given time period.
getSavedFacesResponseNoA list of all people (registered faces) currently known to the Rhombus system for your organization.
getPersonLabelsResponseNoA map of person UUIDs to their assigned label arrays. Use this to discover what label groups exist and which people belong to them.
resolvedNamesNoWhen faceNames are provided in a get-face-events request, this shows how each queried name was automatically resolved to a registered face. Key is the queried name (e.g., 'Brandon'), value is the matched registered name (e.g., 'Brandon Salzberg') or null if no match was found. Use these resolved names when reporting results to the user.
similarFaceEventsNoSimilar face event results
faceMatchmakersNoFace matchmaker records
personFaceEventsNoFace events for a specific person
lastEvaluatedKeyNoFor paginated requests, this is the returned last evaluated key that can be passed back in on the next request to get the next page of results
errorNo

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It explains automatic name resolution, filtering behavior, large response warnings, and the faceEventFilter scope. However, it does not explicitly state if the tool is read-only or mention any rate limits. Overall, it adds significant behavioral context beyond the schema.

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

Conciseness3/5

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

The description is well-structured with headings for each requestType and output filtering, but it is verbose and contains some repetition (e.g., location UUID advice appears twice). It could be more concise while retaining clarity.

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?

Given the tool's complexity (7 parameters, multiple requestTypes, nested objects, and an output schema), the description is comprehensive. It covers all requestType behaviors, sibling tool relationships, parameter usage, and response size warnings. The presence of an output schema does not detract from the description's completeness.

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

Parameters5/5

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

Schema coverage is 71%, but the description adds substantial value: it explains automatic name resolution for faceNames, precedence of faceNameContains, default time range of 7 days, and the use of includeFields/filterBy to manage large responses. It also clarifies that searchFilter only applies to get-face-events. This enhances understanding beyond the schema.

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 the tool's purpose: interacting with the Rhombus face recognition system to retrieve face sightings and registered faces. It distinguishes itself from sibling tools like report-tool (for head count) and events-tool (for access control), and provides specific usage for each requestType.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool vs alternatives, e.g., 'If the user is asking about how many people were seen, use the report-tool' and 'When asked whether specific people were seen... also call events-tool'. It provides clear context and exclusions.

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

get-entity-toolA

Retrieves entities (or devices) of certain types. Can request multiple entity types at once. The return structure is a JSON string that contains the states of the requested entities. This data is exact. Whatever entities exist will be returned here.

This is the primary tool for checking device health and connectivity status. Each device in the response includes a "connected" boolean field indicating whether it is currently online (true) or offline (false). When asked about device health, offline devices, or connectivity issues, use this tool to fetch all device types and check the "connected" field to identify which devices are offline or unreachable.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityTypesYesWhat type of entities to retrieve.
filterByNoAdditional filters that can be applied to the result. Omit or pass null for no filtering.
timeZoneYesThe timezone for formatting timestamps. This is necessary for the tool to produce accurate formatted timestamps.
tempUnitYesThe unit of temperature to return, if applicable. Default is Celsius.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses that data is exact and includes a 'connected' boolean field. However, it does not mention potential side effects, access restrictions, or response size limits. Adequate but minimal.

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?

Two paragraphs, front-loaded with the core action. The second paragraph elaborates on the primary use case. Concise overall; no unnecessary fluff.

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

Completeness4/5

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

Given no output schema and no annotations, the description covers the essential aspects: purpose, use case, return structure (JSON string with states), and key behavioral detail (connected field). Could clarify that all entity types are considered 'devices' for health checks.

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%, baseline is 3. The description adds minimal new meaning to parameters beyond the schema's own descriptions. It notes the tool can request multiple types at once, which is already implied by the array schema.

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

Purpose4/5

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

Description clearly states it retrieves entities/devices and specifies it is the primary tool for device health checks. It distinguishes from siblings by implication but does not explicitly differentiate from entity-lookup-tool.

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?

Provides explicit guidance: 'When asked about device health, offline devices, or connectivity issues, use this tool.' Does not mention when not to use or provide alternatives, but the context is clear.

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

get-org-informationB

Get general information about the organization including org name, camera configuration defaults, contact information, and org settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond the basic function. There are no annotations, so the description carries full burden but fails to mention if it is read-only, if authentication is needed, or any side effects.

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

Conciseness5/5

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

The description is a single sentence with no filler. It is concise and well-structured, though brief.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, no output schema), the description is mostly complete. It lists key outputs but could mention behavior like caching or error handling. Still, it is adequate for a basic info getter.

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

Parameters4/5

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

The tool takes no parameters, so the schema coverage is 100%. The description adds value by listing the types of information returned, which goes beyond the empty schema.

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

Purpose4/5

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

The description clearly states that the tool retrieves organization information and lists examples (org name, camera config defaults, etc.). It is specific and uses a verb-resource pair, but does not distinguish from sibling tools.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or when not to use it. Given many sibling tools, this is a gap.

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

guest-management-toolA

This tool manages Rhombus guest/visitor operations. It can list all guests, retrieve activity logs, and filter activities by location.

It has the following modes of operation, determined by the "requestType" parameter:

  • get-all-guests: List all guests across the organization with their check-in status, host, company, and contact info.

  • get-activity-logs: Get org-wide guest activity logs (sign-ins, sign-outs). Supports optional time range filtering via startTimeMs/endTimeMs.

  • get-activities-for-location: Get guest activity logs for a specific location. Requires locationUuid. Supports optional time range filtering.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of guest management request to make.
locationUuidYesLocation UUID. Required for 'get-activities-for-location'.
startTimeMsYesStart time filter in milliseconds since epoch. Optional for activity queries.
endTimeMsYesEnd time filter in milliseconds since epoch. Optional for activity queries.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
guestsNoList of guests in the organization
activitiesNoList of guest activity log entries
errorNoAn error message if the request failed.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that responses can exceed 400k characters and provides filtering mechanisms. It implies read-only operations (listing, retrieving logs) without stating destructive effects, which is appropriate.

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 well-organized with modes enumerated in bullet points, but it is somewhat lengthy. Every sentence adds value, including the warnings about large responses. Could be slightly more concise, but structure is good.

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?

Given the complexity (three modes, six parameters, output schema exists), the description covers all essential aspects: modes, required parameters, optional time filters, and output filtering. The warning about large responses is critical. Output schema existence reduces need to describe return values.

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

Parameters4/5

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

Schema description coverage is 100%, baseline 3. The description adds context about the three request types and explains the filterBy and includeFields parameters with examples and warnings, providing value beyond the schema.

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 manages Rhombus guest/visitor operations and lists three specific modes (get-all-guests, get-activity-logs, get-activities-for-location), each with a clear purpose. It distinguishes from sibling tools by the guest management focus.

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 when to use each mode based on the requestType parameter and provides filtering guidance (includeFields, filterBy) to handle large responses. It doesn't explicitly state when not to use this tool vs alternatives, but the context is sufficient.

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

location-toolB

This tool performs operations on locations.

  • 'get': Retrieves all locations. When generating reports with location details, use location names not uuids.

  • 'create': Creates a new location with a name and optional address.

  • 'update': Updates an existing location (requires locationUuid).

  • 'get-labels': Retrieves all location labels for the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
locationUpdateYes
locationNameYesName for the new location. Required for 'create'.
locationAddressYesAddress for the location. Optional for 'create' and 'update'.
locationUuidYesUUID of the location. Required for 'update'.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so the description must fully disclose behavior. It mentions actions but fails to explain side effects, error handling, authentication needs, or conditional parameter usage clearly. The required parameters in schema conflict with conditional actual use, creating potential confusion.

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 concise and structured by action with hyphens. The opening sentence is slightly redundant but overall it is well-organized and easy to parse.

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

Completeness2/5

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

For a multi-action tool with 5 conditional parameters and no output schema, the description lacks critical details—such as mapping parameters to actions explicitly. It omits information about the locationUpdate parameter and fails to clarify that most parameters are only required for specific actions, leaving the agent underinformed.

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 coverage is 60%, with three parameters having descriptions. The description adds marginal value by noting name vs UUID preference, but does not clarify the locationUpdate object or action enum beyond what schema provides. It does not significantly enhance schema meaning.

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

Purpose4/5

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

The description clearly states it performs operations on locations and lists four specific actions (get, create, update, get-labels). However, it lacks differentiation from sibling tools like camera-tool or door-tool, which might overlap conceptually.

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

Usage Guidelines3/5

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

The description provides some usage hints, such as using location names over UUIDs for reports, and notes requirements for update and create actions. However, it does not explicitly guide when to use this tool versus siblings, or when not to use it.

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

lpr-toolA

This tool interacts with the Rhombus LPR system to retrieve information about license plate recognition events and registered license plates.

Vs events-tool (camera): events-tool with eventType camera returns that camera’s VOD footage seekpoints (many activity types on the timeline, including vehicle-related activity when present). lpr-tool is for the LPR product surface: plate events, saved vehicles, labels, and plate search APIs across the org—use it when the user needs registry, labeling, or org-wide LPR queries, not only “what showed up on this camera’s timeline.”

The system's cameras may have LPR enabled, and when it is enabled, it will detect "license plate recognition" events when it sees a license plate come into view. However, it is possible that the recognized license is only a partial match, so keep that in mind when using this tool. Users will be able to save license plates into the system, and then additionally label them with a name.

Regarding vehicle labels: Users in the Rhombus LPR system can assign labels to vehicles. When a vehicle (license plate) is assigned a label, and then later is recognized by a rhombus security camera, it will attach the label to the event and will be available on the events returned from (get-saved-vehicles).

You should use the location-tool if trying to pair vehicle events to a particular location. Never use location UUIDs in reports, use names.

As such, if the user is asking anything about a label or labels it would be best practice to first call get-vehicle-labels and then get-vehicle-events or get-vehicle-events.

This tool has 3 modes of operation, determined by the "requestType" parameter:

  • get-vehicle-events: Retrieves a list of vehicle events that have been detected by the system. Please keep in mind that this has the potential to return a lot of data. However, 7 days should be a reasonable time range to start from if the user is not specific.

  • get-saved-vehicles: Retrieves a list of saved vehicles that have been saved in the organization.

  • get-vehicle-labels: Retrieves a list of vehicle labels that have been saved in the organization.

Its very likely that "vehicle", "car", and "license plates" are used interchangeably. Please keep this in mind.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesOrg LPR operation (vehicle events, saved vehicles, labels, plate search, save vehicle). Per-camera VOD timeline seekpoints use events-tool (eventType camera).
vehicleEventsArgsYesOnly necessary for requestType 'get-vehicle-events'
timeZoneYesThe timezone for formatting timestamps which should come from the location of the device for the LPR event, or the user's timezone. This is necessary for the tool to produce accurate formatted timestamps.
licensePlateQueryYesLicense plate number to search. Required for 'search-license-plates'.
vehicleNameYesName for the vehicle. Required for 'save-vehicle'.
vehicleLicensePlateYesLicense plate for the vehicle. Required for 'save-vehicle'.
vehicleDescriptionYesDescription for the vehicle. Optional for 'save-vehicle'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
vehicleEventsNoA list of license plate events, as requested by the request typeget-vehicle-events
vehicleLabelsNoA list of vehicle labels, as requested by the request typeget-vehicle-labels
savedVehiclesNoA list of saved vehicles, as requested by the request typeget-saved-vehicles
licensePlateSearchResultsNoLicense plate search results
saveVehicleResultNoResult of saving a vehicle
errorNoAn error message if the request failed.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It warns about potential large responses and partial matches. However, it claims '3 modes' while the schema includes 5 modes (missing search-license-plates and save-vehicle), which is a significant omission.

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 well-structured with sections, bold text for sibling tool comparison, and bullet-like formatting for modes. It front-loads the purpose. However, it is somewhat lengthy and repeats mode names unnecessarily.

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

Completeness3/5

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

Covers most aspects but misses two schema modes (search-license-plates, save-vehicle). Also lacks explanation of the output schema (though output exists). The description is fragmented with mode details mixed with general notes.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining which parameters are used for which modes and providing context like date range recommendation. It enhances understanding beyond the schema.

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 the tool interacts with the Rhombus LPR system for license plate events and registered plates. It explicitly distinguishes itself from the events-tool, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use this tool vs. events-tool (camera), and mentions location-tool for pairing events with locations. Also gives a best practice for labels: first call get-vehicle-labels then get-vehicle-events.

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

policy-alerts-toolA

Retrieves Rhombus policy alerts. Policy alerts in the Rhombus system are generated based on user-defined alert policies configured in the Rhombus Console. These policies trigger alerts when specific events occur, such as:

  • AI & Computer Vision Events: Based on intelligent video analytics for motion, people, vehicles, facial recognition, license plate recognition, or unusual behavior.

  • Device Status Changes: Like camera disconnections or sensor low battery.

  • Physical or Visual Tamper: Detection of physical movement of a device or obstruction of a camera's field of view.

  • Access Control Events: Such as unauthorized access attempts in restricted areas.

Alerts are generated on triggers, but are NOT the same as notifications. Only certain alerts generate notifications based on user settings.

Can inquire about labels that have been seen.

Please note, this is not an exhaustive list, and there may be other types of triggers or events that generate policy alerts within the Rhombus system.

This tool allows you to filter existing alerts by existing/expiring, a specific time range (before or after a timestamp in ISO 8601 format), by a list of device UUIDs, or by a list of location UUIDs. You can also specify the maximum number of results to return. The output is provided in JSON format.

Pagination: Results are paginated and have a maximum page size. If the response includes a lastEvaluatedKey (for queryType "expiringSoon") or both lastTimestampISO and lastUuid (for queryTypes "existing" and "alert-groups"), more results are available. Pass these values back in the next call using the corresponding input parameters (lastEvaluatedKey, or lastTimestampISO and lastUuid) to retrieve the next page. Repeat until the response no longer includes these fields.

IMPORTANT: The "unhealthy-devices" queryType returns historical alert notifications that were triggered for device health issues. It does NOT return live/real-time device connection status. If no device health alert policies are configured, or alerts were dismissed, this may return empty even when devices are offline.

To check which devices are currently online/offline, use the get-entity-tool instead. The get-entity-tool returns the current state of all devices including their live connection status (the "connected" field). Request all entity types (CAMERA, DOORBELL_CAMERA, BADGE_READER, etc.) and check the "connected" field on each device to determine which are offline.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryTypeYesThe type of policy alerts to retrieve. Use "existing" to get current policy alerts, and "expiringSoon" to get policy alerts that are nearing their expiration date.
afterTimestampISOYesThe start of the time range for which to retrieve alerts. Only alerts that occurred AFTER this timestamp will be returned.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
beforeTimestampISOYesThe end of the time range for which to retrieve alerts. Only alerts that occurred BEFORE this timestamp will be returned.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
deviceFilterYesA list of UUIDs representing the specific devices to filter alerts by. Only alerts emitted by these devices will be returned. Please truncate any facets, such as .v0
locationFilterYesA list of UUIDs representing the specific locations to filter alerts by. Only alerts associated with these locations will be returned. Please truncate any facets, such as .v0
maxResultsYesThe maximum number of policy alerts to return. A good default is 100, but you may increase or decrease this number as needed. A reasonable hard maximum is 1000 alerts.
lastEvaluatedKeyYesOpaque pagination cursor from a previous response. When the response includes lastEvaluatedKey, pass it here on the next call to retrieve the next page. Used by queryType 'expiringSoon'.
lastTimestampISOYesPagination cursor (ISO 8601 timestamp). When the response includes lastTimestampISO, pass it here with lastUuid on the next call for the next page. Used by queryTypes 'existing' and 'alert-groups'.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
lastUuidYesPagination cursor (UUID of last item). Pass together with lastTimestampISO from the previous response to fetch the next page. Used by queryTypes 'existing' and 'alert-groups'.
timeZoneYesThe timezone from the location of the camera of the policy alert, for formatting timestamps. This is necessary for the tool to produce accurate formatted timestamps.
alertUuidYesThe UUID of a specific policy alert. Required for 'details' and 'dismiss'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
errorMsgNo
policyAlertsYes
lastEvaluatedKeyNoIf present, more results are available. Pass this value as lastEvaluatedKey on the next call to get the next page (queryType 'expiringSoon').
lastTimestampISONoIf present with lastUuid, more results are available. Pass both as lastTimestampISO and lastUuid on the next call for the next page ('existing' or 'alert-groups'). ISO 8601 format.
lastUuidNoIf present with lastTimestampISO, more results are available. Pass both on the next call for the next page ('existing' or 'alert-groups').

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: alerts vs notifications, unhealthy-devices returns historical not live data, large response warning, pagination details for different query types. No contradictions.

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

Conciseness3/5

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

The description is very long and dense, covering many aspects but lacking conciseness. It repeats some schema info and could be more streamlined. However, it is well-structured with sections.

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?

Given the complexity (13 params, multiple query types, pagination, output filtering), the description is highly complete. It covers pagination per query type, output filtering warnings, and sibling tool differentiation. It explicitly states it's not exhaustive, setting expectations.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds meaning for queryType enum values, time format details, pagination cursors, and output filtering. It goes beyond schema by explaining when to use each pagination parameter.

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 'Retrieves Rhombus policy alerts' and distinguishes them from notifications. It explains what triggers alerts and contrasts with get-entity-tool for live device status, effectively differentiating from siblings.

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

Usage Guidelines5/5

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

Explicit guidance on when to use this tool (for policy alerts) and when not to (for live device status, use get-entity-tool). It also explains pagination and output filtering, providing clear context for alternative usage.

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

reboot-camerasB

this tool is for rebooting one or more cameras causing them to reconnect to the server, this is a helpful option when a camera is experiencing connectivity issues or is in need of troubleshooting. THIS TOOL PERFORMS AN ACTION.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraUuidsYesAn array of camera UUID strings which are unique identifiers for cameras
confirmationIdYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. Only states 'performs an action' and reconnection effect. Does not mention potential side effects like service interruption, permission requirements, or confirmation process.

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

Conciseness3/5

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

Description is adequately concise but includes redundant phrases like 'this is a helpful option' and all-caps 'THIS TOOL PERFORMS AN ACTION'. Front-loaded with purpose, but could be more direct.

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

Completeness2/5

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

For a destructive tool with no output schema, description lacks details on synchronous/asynchronous behavior, effect on ongoing operations, and purpose of confirmationId. Incomplete for reliable invocation.

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

Parameters2/5

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

Schema coverage is 50% (only cameraUuids has description). Description adds no parameter-specific information beyond the schema. The confirmationId parameter is left completely unexplained.

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?

Description clearly states the tool reboots cameras and causes reconnection, distinctly different from sibling tools like 'camera-tool' or 'camera-uptime-tool'. Verb+resource is specific.

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?

Mentions usage when camera has connectivity issues or needs troubleshooting, providing clear context. Does not explicitly compare to alternatives or state when not to use, but guidance is helpful.

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

report-toolA

Scope: This tool returns aggregated counts and time-series summaries over specified intervals and scopes. Use events-tool when you need raw, event-level data (individual events with timestamps). Use this tool for high-level reports, analytics, and trends—especially over periods of a day or more.


People / occupancy counting strategy

When asked to count people on a camera or at a location, follow this strategy:

  1. Always call GET_OCCUPANCY_ENABLED_CAMERAS first to discover which cameras have occupancy counting enabled.

  2. If the target camera IS in the list, call GET_OCCUPANCY_COUNT_REPORT for that device. The response will automatically include a faceCountEnrichment field with the number of unique individuals identified by face recognition in the same time range. Present both data sources: occupancy estimate and unique face count.

  3. If the target camera is NOT in the list, tell the user that camera does not have occupancy counting enabled, and list the cameras that do. You can still call GET_SUMMARY_COUNT_REPORT with PEOPLE type — its response will also include faceCountEnrichment with unique face data as a fallback. If the PEOPLE count returns zero, the response will also include the list of occupancy-enabled cameras and a hint.

  4. When both occupancy data and face recognition data are available, synthesize both in your answer (e.g., "Occupancy estimates ~15 people. Face recognition identified 9 unique individuals during this period.").

PEOPLE type (in GET_SUMMARY_COUNT_REPORT): Not a unique person count; it counts people-detection events. Requires people detection to be enabled on the camera. Use for high-level activity trends, not for deduplicated head counts.


Summary and occupancy

  • GET_SUMMARY_COUNT_REPORT: Aggregated counts (people, faces, motion, vehicles, etc.) over time at device, location, or org scope. Interval: minutely, hourly, daily, weekly, monthly, yearly. When called with PEOPLE type at DEVICE scope, the response is automatically enriched with face recognition data.

  • GET_OCCUPANCY_ENABLED_CAMERAS: List of cameras with occupancy reporting enabled. Always call this first before any people/occupancy counting request to verify camera support.

  • GET_OCCUPANCY_COUNT_REPORT: Occupancy count time series for a specific device over a time range. Response is automatically enriched with face recognition data. If the device does not support occupancy, the response will include a hint and the list of cameras that do.


Line crossing

  • GET_LINE_CROSSING_ENABLED_CAMERAS: Cameras at a location with line crossing enabled, plus their configs. Call first to see which cameras support threshold crossing reports.

  • GET_THRESHOLD_CROSSING_COUNT_REPORT: Ingress/egress counts for line crossings over time. Supports human and vehicle detection; bucket size: quarter hour, hour, day, week. Response includes computed metrics: average entries/exits per hour, hour with most entries/exits, busiest hour (with breakdown).


Custom LLM events

  • FIND_PROMPT_CONFIGURATIONS: All custom event prompt configurations (e.g. "black dog sightings", "delivery truck arrivals", "parking availability %"). Each has prompt text, UUID, and promptType (COUNT, PERCENT, BOOLEAN). Call first to discover available custom events.

  • GET_CUSTOM_LLM_REPORT: This is the PRIMARY way to get custom event reports. Aggregated time-series for one custom event by prompt UUID. Automatically selects the correct API based on promptType: COUNT (numeric counts), PERCENT (percentages), BOOLEAN (true/false). Intervals: minutely, quarter-hourly, hourly, daily, weekly, monthly. Always use this for custom event reports, trends, and analytics. Use FIND_PROMPT_CONFIGURATIONS first to get the promptUuid and promptType.

  • GET_CUSTOM_EVENTS_REPORT: Raw individual event values only (not aggregated). Use only when you need per-event granularity, not for reports or trends.


Audit and diagnostics

  • GET_AUDIT_FEED: Audit log of all user/admin actions in the org over a time range. Returns who did what and when (principalName, targetName, action, displayText).

  • GET_DIAGNOSTIC_FEED: Device diagnostic events over a time range.

  • GET_THRESHOLD_CROSSING_EVENTS: Individual line-crossing events (not aggregated counts).

  • GET_PEOPLE_COUNT_EVENTS: Most recent people count readings for specified devices.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYes
occupancyCountRequestYesRequired for requestType === 'get-occupancy-count-report', null for other request types.
summaryCountRequestYesRequired for requestType === 'get-summary-count-report', null for other request types.
occupancyEnabledCamerasRequestYesRequired for requestType === 'get-occupancy-enabled-cameras', null for other request types.
lineCrossingEnabledCamerasRequestYesRequired for requestType === 'get-line-crossing-enabled-cameras', null for other request types.
thresholdCrossingCountRequestYesRequired for requestType === 'get-threshold-crossing-count-report', null for other request types.
findPromptConfigurationsRequestYesRequired for requestType === 'find-prompt-configurations', null for other request types.
customLLMReportRequestYesRequired for requestType === 'get-custom-llm-report', null for other request types.
auditFeedRequestYesRequired for requestType === 'get-audit-feed', null for other request types.
diagnosticFeedRequestYesRequired for requestType === 'get-diagnostic-feed', null for other request types.
thresholdCrossingEventsRequestYesRequired for requestType === 'get-threshold-crossing-events', null for other request types.
customEventsReportRequestYesRequired for requestType === 'get-custom-events-report', null for other request types.
peopleCountEventsRequestYesRequired for requestType === 'get-people-count-events', null for other request types.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
errorMsgNo
summaryCountReportNoReport data for various high level organization metrics like people counts, bandwidth counts, face counts, etc.
occupancyCountReportNo
occupancyEnabledCamerasReportNoList of cameras that have occupancy reporting enabled
lineCrossingEnabledCamerasReportNoCameras at a location that have line crossing enabled with their configurations
thresholdCrossingCountReportNoThreshold crossing count report showing ingress and egress counts over time with calculated metrics
promptConfigurationsReportNoList of custom event prompt configurations
customLLMReportNoCustom LLM report showing event data over time - supports COUNT, PERCENT, and BOOLEAN prompt types
auditFeedReportNoAudit feed showing user actions
diagnosticFeedReportNoDiagnostic feed showing device events
thresholdCrossingEventsReportNoIndividual threshold crossing events
customEventsReportNoCustom events report time series
peopleCountEventsReportNoMost recent people count events

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It details response enrichment (faceCountEnrichment), fallback behavior, auto-selection of API based on promptType, and output filtering warnings (responses may exceed 400k characters). However, it does not mention rate limits, permissions, or whether operations are read-only, though these are less critical for a report tool.

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 well-structured with clear sections (Scope, People/occupancy counting strategy, Summary and occupancy, Line crossing, Custom LLM events, Audit and diagnostics, Output filtering). It is front-loaded with the core purpose and key distinction. While comprehensive, some repetition (e.g., faceCountEnrichment mentioned multiple times) slightly reduces conciseness, but every section earns its place with actionable guidance.

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?

Given the tool's complexity (12 sub-tools) and that an output schema exists, the description is remarkably complete. It covers all sub-tool use cases, provides lookup strategies for cameras and prompts, explains fallback behavior, and warns about large responses with output filtering options. It also instructs the agent on error handling (e.g., telling user when camera lacks occupancy). No gaps identified.

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

Parameters4/5

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

Schema coverage is 93%, so baseline is 3. The description adds significant context beyond the schema: it explains when each requestType is appropriate, how parameters relate to sub-requests (e.g., 'Required for requestType ===...'), and provides usage warnings for includeFields and filterBy. This adds practical meaning that helps the agent construct correct requests.

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 the tool returns aggregated counts and time-series summaries. It explicitly contrasts with events-tool (raw event-level data), providing a specific verb and resource distinction. The scope is well-defined: high-level reports, analytics, trends over periods of a day or more.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use and when-not-to-use guidance, including a direct comparison with events-tool for raw data. It also gives step-by-step strategies for people counting (always call GET_OCCUPANCY_ENABLED_CAMERAS first), line crossing, and custom events, with fallback instructions and alternatives.

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

rules-toolA

This tool manages Rhombus automation rules for triggering actions based on events.

It has the following modes of operation, determined by the "requestType" parameter:

  • list: List all automation rules in the organization.

  • create: Create a new automation rule. Requires ruleName and ruleConfig (JSON string with the rule definition).

  • update: Update an existing rule. Requires ruleUuid and ruleConfig (JSON string with updated fields).

  • delete: Delete a rule. Requires ruleUuid.

  • get-records: Get the event trigger history for a specific rule. Requires ruleUuid.

Rules can trigger notifications, recordings, and other actions based on events from cameras, sensors, doors, etc.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of rules operation to perform.
ruleUuidYesThe UUID of the rule. Required for 'update', 'delete', and 'get-records'.
ruleNameYesThe name of the rule. Required for 'create'.
ruleConfigYesJSON string of the rule configuration. Required for 'create' and 'update'. Contains the rule definition.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rulesNoList of rules
ruleNoResult of create/update/delete operation
ruleRecordsNoRule trigger event records
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that create/update require JSON config and that responses can be large, but it does not specify side effects (e.g., whether updates are idempotent, if deletion is permanent), authentication requirements, or potential errors. More detail would improve transparency.

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 well-structured with a clear list of modes followed by output filtering details. It front-loads the purpose and uses bullet-like formatting for readability. However, it could be slightly more concise by merging redundant warnings about response size.

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

Completeness4/5

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

Given the tool's complexity (5 modes, 6 params) and the presence of an output schema, the description covers the essential operational modes and parameter roles. It lacks information about prerequisites (e.g., permissions) and error handling, but overall it provides sufficient context for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

The input schema has 100% coverage, so parameters are already described. The description adds value by grouping parameters by mode (e.g., list requires no ruleUuid) and clarifying output filtering parameters' purpose. It also explains that ruleConfig is a JSON string for rule definition, beyond the schema's basic description.

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 the tool manages Rhombus automation rules for triggering actions based on events. It lists specific modes (list, create, update, delete, get-records) and provides context that rules can trigger notifications, recordings, etc. This distinguishes it from sibling tools like camera-tool or events-tool.

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 each mode of operation and when to use each one, including required parameters per mode. It also warns about large responses and recommends using includeFields and filterBy. However, it does not explicitly state when NOT to use this tool or compare it to alternatives.

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

search-toolA

This tool performs visual and data searches across Rhombus camera footage and events.

It has the following modes of operation, determined by the "requestType" parameter:

  • license-plate: Search for license plate sightings by plate number. Requires query (the plate number or partial match).

  • object-by-color: Search for objects by color in camera footage. Requires query (color name) and cameraUuid.

  • object-by-text: Semantic search for objects in footage using a text description. Requires query (text description).

  • motion-search: Search for motion events in a camera's field of view. Requires cameraUuid, startTime, and endTime.

All search types support optional startTime and endTime to narrow the search window. Use the get-entity-tool with entityType CAMERA to get camera UUIDs.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of search to perform.
queryYesThe search query string. Required for 'license-plate' (plate number), 'object-by-text' (text description of object), 'object-by-color' (color name).
cameraUuidYesThe UUID of the camera to search. Required for 'motion-search' and 'object-by-color'.
startTimeYesStart time for the search range.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
endTimeYesEnd time for the search range.Time format is in ISO 8601 format. Both UTC ("2025-08-04T20:54:27.123Z") and time zone offsets ("2025-08-04T13:54:27.123-07:00") are accepted to ensure an unambiguous point in time.
deviceUuidsYesOptional list of device UUIDs to filter search results.
locationUuidsYesOptional list of location UUIDs to filter search results.
timeZoneYesThe timezone for formatting timestamps.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
licensePlateResultsNoLicense plate search results
objectColorResultsNoObject color search results
objectTextResultsNoObject text search results
motionResultsNoMotion search results
errorNoAn error message if the request failed.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It discloses that responses can exceed 400k characters and suggests using includeFields/filterBy. It does not mention rate limits, authentication needs, or side effects, which is acceptable for a read-only search tool.

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 well-organized with bullet points and clear sections. It is detailed but could be slightly more concise by reducing redundancy (e.g., repeating the warning about large responses). Overall, it is effective.

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

Completeness4/5

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

Given the tool's complexity (10 params, multiple modes, output schema exists), the description covers operation modes, parameter requirements, and output filtering. It does not explain the return structure, but the output schema handles that. It is mostly complete for agent use.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by specifying which parameters are required per requestType, and provides examples and warnings for includeFields and filterBy, which goes beyond the schema's descriptions.

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 explicitly states it performs visual and data searches across Rhombus camera footage and events, with four distinct modes of operation. This clearly identifies the tool's purpose and differentiates it from sibling tools like lpr-tool or camera-tool.

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 clearly outlines when to use each mode by specifying required parameters. It advises using get-entity-tool to obtain camera UUIDs and warns about large response sizes. However, it does not explicitly state when NOT to use this tool (e.g., for simpler lookups).

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

time-conversion-toolA

This tool is capable of converting to and from epoch and ISO 8601 timestamps. Use this tool when you have one time format and need to convert to the other format. The tool will automatically detect the input format and convert to the other format.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_to_convertYesThe time to convert. This can be either an ISO 8601 timestamp string (e.g., '2023-10-05T14:48:00.000Z') or a Unix timestamp in milliseconds.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It states auto-detection and conversion, which is constructive. However, it omits details like error handling, output format, or restrictions, leaving some ambiguity.

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

Conciseness5/5

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

The description is only two sentences, concise and front-loaded with the core purpose. Every sentence adds value without redundancy.

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

Completeness4/5

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

For a simple conversion tool with one parameter and no output schema, the description adequately covers inputs, behavior, and usage. It lacks details on output format, but the context of bidirectional conversion implies the result will be the opposite format.

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?

The input schema covers 100% of parameters and includes a description. The tool description adds auto-detection context, but does not significantly enhance parameter understanding beyond the schema.

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 the verb 'convert' and the resources 'epoch and ISO 8601 timestamps', indicating bidirectional conversion with auto-detection. It distinguishes itself from sibling tools like 'time-tool' which may handle different time operations.

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 explicitly says when to use the tool: 'when you have one time format and need to convert to the other format'. It does not provide alternatives or exclusions, but the context is clear enough for a simple conversion tool.

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

time-toolA

This tool is capable of returning the time from a natural language query. If the user asks about the 'current time' use this tool. Try to kee time_description as close to the users initial query as possible. For example if someone says 'was X person seen today?' then time_description should be 'today'.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_descriptionYesA natural language description of the time (e.g., '2pm today', 'tomorrow at noon').
timezoneYesOptional IANA timezone string (e.g., 'America/Los_Angeles', 'UTC'). Will default to system timezone if not provided.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It describes a read-like operation but does not explicitly state it is safe or has side effects. For a simple query tool, this is adequate but not thorough.

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

Conciseness5/5

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

Two sentences plus an example, all highly relevant. No wasted words. The instructions are front-loaded and easy to parse.

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

Completeness4/5

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

Given the tool's simplicity, the description covers what the tool does, when to use it, and how to set parameters. Lacks details on return format, but for a time tool that is often acceptable. Overall sufficient for an agent to use correctly.

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

Parameters4/5

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

Schema provides 100% coverage for both parameters. The description adds valuable context by advising to keep time_description close to the user's query, which helps the agent formulate the parameter correctly.

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

Purpose4/5

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

The description clearly states it returns time from a natural language query, distinguishing it from sibling tools like time-conversion-tool. However, it could be slightly more explicit that it handles both current time queries and time descriptions.

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?

Provides clear guidance on when to use (e.g., 'if user asks about current time') and how to construct the time_description parameter. Lacks explicit exclusion of alternatives, but the sibling list includes time-conversion-tool which implies different use cases.

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

update-toolA

This tool allows updating configuration settings for various Rhombus entities. Currently supports:

  • Cameras: Update video settings (resolution, HDR, WDR, brightness, contrast, etc.), audio settings (recording, microphone, speaker), and device settings (name, timezone, LED control).

For LED control, use EXACTLY these field names in cameraDeviceSettings:

  • To turn LED off: {"led_stealth_mode": true} (recommended) or {"led_mode": "always_off"}

  • To turn LED on: {"led_stealth_mode": false} or {"led_mode": "always_on"} or {"led_mode": "auto"}

  • IMPORTANT: Use underscore in field names (led_mode, led_stealth_mode), not camelCase

The tool supports faceted UUIDs (e.g., "cameraUuid.v0" or "cameraUuid.v1") to update specific camera facets. If no facet is specified, defaults to "v0".

The tool guides users through a multi-step process:

  1. Entity selection (if not provided)

  2. Settings configuration with current values shown

  3. Confirmation and application of changes

Future support planned for:

  • Climate sensors

  • Door controllers

  • Environmental gateways

  • Audio gateways

  • Doorbell cameras

  • Badge readers

The tool uses elicitation forms for rich user interaction and shows current settings before updates.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityTypeYesType of entity to update
entityUuidYesUUID of the entity to update
cameraVideoSettingsYesJSON string of video settings to update for camera
cameraAudioSettingsYesJSON string of audio settings to update for camera
cameraDeviceSettingsYesJSON string of device settings to update for camera
stepYesCurrent step in the update process
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
needUserInputNo
messageNo
requestTypeNo
submitActionNo
entityTypeNo
entityUuidNo
currentSettingsNo
successNo
errorNo
updatedSettingsNo

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided, so the description must disclose all behavioral traits. It reveals that the tool mutates settings and uses a multi-step process with current value display, but lacks information on error handling, idempotency, authorization needs, or potential side effects like camera reboots.

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

Conciseness3/5

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

The description is lengthy and includes a mix of core functionality, specific instructions, and a generic output filtering section. It is front-loaded with the main purpose and structured with bullet points, but some parts like the future support list could be trimmed for conciseness.

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

Completeness4/5

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

For a tool with 8 parameters, a multi-step process, and faceted UUIDs, the description covers entity types, settings categories, process flow, and output filtering. It has an output schema so return values are covered. Missing details on error handling and validation slightly reduce completeness, but overall it is thorough.

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

Parameters4/5

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

Schema description coverage is 100%, giving a baseline of 3. The description adds significant value beyond the schema, especially for cameraDeviceSettings (exact LED field names, underscore note) and includeFields/filterBy (warning about large responses and usage examples). This enrichment justifies a 4.

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

Purpose4/5

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

The description clearly states that the tool updates configuration settings for Rhombus entities, specifically cameras currently, and lists the supported settings. It differentiates from sibling tools by focusing on updates rather than other operations, but does not explicitly contrast with other update tools.

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

Usage Guidelines3/5

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

The description provides step-by-step guidance and specific instructions for LED control, and mentions the faceted UUID default. However, it does not specify when to use this tool versus alternatives, nor does it provide when-not-to-use guidance or prerequisites.

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

user-access-trail-toolA

This tool traces a specific user's physical access events across all doors and access points. It answers questions like "Where did this person badge in?" or "Show me all access events for this user."

It has the following modes of operation, determined by the "requestType" parameter:

  • get-access-events-by-user: Get access events using a known userUuid. Requires userUuid.

  • get-access-events-by-email: Get access events by looking up the user's email first. Requires email. Automatically resolves the user UUID.

Both modes support optional startTimeMs, endTimeMs, and limit parameters. Use the user-tool to find user UUIDs if needed, or use the email-based lookup directly.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of access trail request.
userUuidYesUser UUID. Required for 'get-access-events-by-user'.
emailYesUser email address. Required for 'get-access-events-by-email'. Will resolve to userUuid automatically.
startTimeMsYesStart time filter in milliseconds since epoch.
endTimeMsYesEnd time filter in milliseconds since epoch.
limitYesMaximum number of events to return. Defaults to 100.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
userUuidNoResolved user UUID
userNameNoResolved user name
accessEventsNoList of access control events for the user, ordered by time
errorNoAn error message if the request failed.

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description must carry full burden. It explains modes, output filtering, and warns about large responses. But it doesn't disclose read-only nature, authentication needs, or error handling for missing users.

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

Conciseness5/5

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

The description is well-structured: first paragraph states purpose, second details modes, third covers output filtering. No fluff, every sentence adds value. Front-loaded with key info.

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?

Given complexity (8 params, modes, output filtering), the description covers all necessary parts: modes, parameter dependencies, default limit, output filtering syntax and warning. With output schema present, return value explanation is not needed.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining how requestType determines mode, role of email vs userUuid, and output filtering with examples. This extra context justifies a 4.

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 traces physical access events for a specific user across all doors and access points, and gives example questions. It distinguishes from sibling tools like user-tool by indicating when to use user-tool for UUID lookup.

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?

It explains two modes of operation and when to use each, and recommends user-tool for UUID lookup. However, it doesn't explicitly exclude other tools (e.g., events-tool) or state when not to use this tool.

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

user-audit-toolA

This tool retrieves configuration audit trails for specific users or specific targets (devices, policies, etc.). Unlike the general audit feed, this focuses on a SINGLE user or a SINGLE target entity.

It has the following modes of operation, determined by the "requestType" parameter:

  • audit-by-user: Get all configuration changes made BY a specific user. Requires userUuid (use user-tool to find it). Answers: "What did this admin change recently?"

  • audit-by-target: Get all configuration changes made TO a specific entity (camera, door, policy, etc.). Requires targetUuid. Answers: "Who changed the settings on this camera?"

Both modes return audit events with action, display text, who did it, what was changed, and when.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of audit request to make.
userUuidYesUser UUID whose actions to audit. Required for 'audit-by-user'. Use user-tool to find this.
targetUuidYesTarget entity UUID (camera, door, policy, etc.) to see what has been done to it. Required for 'audit-by-target'.
maxResultsYesMaximum number of audit events to return. Defaults to 50.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
auditEventsNoList of audit events, most recent first
errorNoAn error message if the request failed.

TDQS

A4.3/5.0
Behavior4/5

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

Without annotations, the description covers behavior well: it describes two modes, the structure of returned audit events, and warns about large responses. It does not mention authentication or side effects, but these are not critical for this read-only tool.

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 well-structured with sections, front-loaded with the main purpose. It is slightly verbose but every sentence adds value, making it efficient for an agent.

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

Completeness4/5

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

Given the output schema and schema coverage, the description is complete. It covers all parameters, provides usage context, and warns about large responses. It could mention the default maxResults explicitly, but overall it's sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the meaning of requestType and the relationship between userUuid/targetUuid and modes, and by detailing the filtering parameters with examples and warnings.

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 explicitly states it retrieves configuration audit trails for specific users or targets, distinguishing it from a general audit feed. It clearly lists two modes and their purposes.

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 provides clear guidance on when to use each mode, prerequisites like using user-tool to find userUuid, and explains output filtering to manage large responses. It does not explicitly state when not to use the tool, but the context is sufficient.

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

user-toolA

This tool manages Rhombus user operations including listing users, finding users by email, and viewing permissions.

It has the following modes of operation, determined by the "requestType" parameter:

  • list-users: List all users in the organization with their details and roles.

  • find-by-email: Find a specific user by their email address. Requires the email parameter.

  • get-permissions: Get the permissions for the current API user/token.

  • get-permission-groups: List all permission groups defined in the organization. Each row can be very large — see below.

User UUIDs returned here can be used with the access-control-tool to look up credentials.

IMPORTANT for 'get-permission-groups': Each permission group row includes five access maps whose size scales with the org's locations, devices, and other permission groups. The total payload for 'userPermissionGroupAccessMap' across all rows grows O(N^2) in the number of permission groups. Before calling, decide which fields you actually need and pass them via 'includeFields':

  • Safe/small fields (O(1) per row): 'permissionGroups.uuid', 'permissionGroups.name', 'permissionGroups.description', 'permissionGroups.mutable', 'permissionGroups.superAdmin', 'permissionGroups.installer', 'permissionGroups.defaultPermissionForNewLocations', 'permissionGroups.defaultAccessControlPermissionForNewLocations'.

  • Bounded fields (O(K) per row): 'permissionGroups.functionalityList', 'permissionGroups.accessibleLocations', 'permissionGroups.assignablePermissionGroups'.

  • Heavy fields (O(locations) / O(devices) / O(groups) per row): 'permissionGroups.locationAccessMap', 'permissionGroups.accessControlLocationAccessMap', 'permissionGroups.deviceAccessMap', 'permissionGroups.userPermissionGroupAccessMap', 'permissionGroups.locationGranularAccessMap'. Only request these when you specifically need them for a user. Typical usage when just picking a role uuid: 'includeFields: ["permissionGroups.uuid", "permissionGroups.name", "permissionGroups.description"]'.

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of user request to make.
emailYesThe email address of the user to find. Required for 'find-by-email'.
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
usersNoList of users in the organization
userNoA single user found by email
permissionsNoCurrent user permissions
permissionGroupsNoList of permission groups in the organization.
errorNoAn error message if the request failed.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description fully carries the burden of behavioral disclosure. It warns about response sizes (400k+ characters), explains the O(N^2) growth for permission group access maps, and recommends field filtering. This is comprehensive for a user management tool.

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 relatively long but well-structured with sections and bullet points. It is front-loaded with the tool's purpose and then dives into details. Each sentence seems necessary, though some redundancy could be trimmed (e.g., repeating the warning about response size in includeFields description).

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

Completeness4/5

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

Given the complexity (four modes, output filtering, heavy payload warnings) and the existence of an output schema, the description is mostly complete. It covers all modes, filter parameters, and performance considerations. It does not mention error handling or rate limits, but those are beyond typical expectations for a tool description.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema. For requestType, it explains each mode. For includeFields and filterBy, it provides examples and notes on performance. The schema coverage is 100% but the description enriches understanding, especially for the complex filtering and mode selection.

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

Purpose4/5

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

The description clearly states the tool manages Rhombus user operations with four specific modes. It mentions using UUIDs with access-control-tool, which helps differentiate, but does not explicitly contrast with other user-related sibling tools like user-audit-tool.

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

Usage Guidelines3/5

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

The description provides guidance on when to use each requestType and warns about heavy payloads for get-permission-groups. It also suggests using includeFields and filterBy to control output. However, it does not compare with sibling tools or specify when to use this tool versus alternatives like user-audit-tool.

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

video-walls-toolB

This tool interacts with Rhombus video walls. Rhombus video walls are a collection of camera feeds combined into a single view, allowing users to monitor multiple cameras.

The layout of created video walls is automatically determined by the number of cameras in video wall settings "numVisibleDevicesAtOnce".

Output filtering (all tools):

  • includeFields (string[]): Dot-notation paths to keep in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Omit to return all fields.

  • filterBy (array): Predicates to filter array items. Each entry: {field, op, value} where op is one of = != > >= < <= contains. All conditions are ANDed. Example: [{field:"vehicleLicensePlate", op:"=", value:"ABC123"}] WARNING: some tool responses exceed 400k characters — use these params to request only the data you need.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestTypeYesThe type of request to make.
videoWallCreateOptionsYesThe options for creating a video wall. This is required if your requestType === `create`
includeFieldsYesDot-notation field paths to include in the response (e.g. "vehicleEvents.vehicleLicensePlate"). Pass null to return all fields. WARNING: some responses can exceed 400k characters — use includeFields to request only the data you need. For high-volume tools this may be required to get a complete answer.
filterByYesFilter array items in the response by field values. All conditions are ANDed. Example: [{field: "vehicleLicensePlate", op: "=", value: "ABC123"}, {field: "confidence", op: ">", value: 0.8}] Use alongside includeFields to get only the specific records and fields you need.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoIf this field exists, then an error occured and contains the error message.
needUserInputNoIf this field exists and is true, then the tool requires additional input from the user.
commandForUserNoIf this field exists, then the tool requires additional input from the user.
videoWallsNoIf requestType is `list`, then this field will be populated with the list of video walls.
videoWallNoIf requestType is `get`, then this field will be populated with the video wall.
uuidNoThe uuid of the created video wall.

TDQS

B3.3/5.0
Behavior3/5

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

The description warns about large responses (400k characters) and recommends includeFields and filterBy, which is helpful. However, it does not disclose mutation safety, permissions, or side effects of creating a video wall. With no annotations, more detail on behavioral traits is expected.

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

Conciseness3/5

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

The description includes a lengthy generic section on output filtering that is likely repeated across tools. The purpose is front-loaded, but overall verbosity could be reduced. It is adequately structured but not concise.

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

Completeness4/5

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

Given the presence of an output schema, the description covers core aspects: purpose, parameter behavior (layout determination), and output size warnings. It adequately equips an agent to invoke the tool, though some edge cases (e.g., error handling) are omitted.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining how 'numVisibleDevicesAtOnce' determines layout and providing extensive context on output filtering. This goes beyond the schema definitions, earning a score above baseline.

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

Purpose4/5

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

The description states the tool interacts with Rhombus video walls and lists the supported actions (list, create) via requestType enum. It clearly identifies the resource and verbs, but does not explicitly differentiate from sibling tools like camera-tool or clips-tool.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it explain when to use list vs create beyond the schema. Prerequisites or context for using the tool are absent.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 31 tool updatesv0.1.33
    • First observedaccess-control-tool
    • First observedalarm-monitoring-tool
    • First observedanalytics-tool
    • First observedautomated-prompts-tool
    • First observedcamera-tool
    • First observedcamera-uptime-tool
    • First observedclips-tool
    • First observedcount-tool
    • First observedcreate-camera-policy-tool
    • First observeddoor-schedule-exception-tool
    • First observeddoor-tool
    • First observedentity-lookup-tool
    • First observedevents-tool
    • First observedfaces-tool
    • First observedget-entity-tool
    • First observedget-org-information
    • First observedguest-management-tool
    • First observedlocation-tool
    • First observedlpr-tool
    • First observedpolicy-alerts-tool
    • First observedreboot-cameras
    • First observedreport-tool
    • First observedrules-tool
    • First observedsearch-tool
    • First observedtime-conversion-tool
    • First observedtime-tool
    • First observedupdate-tool
    • First observeduser-access-trail-tool
    • First observeduser-audit-tool
    • First observeduser-tool
    • First observedvideo-walls-tool

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, with detailed descriptions that differentiate similar ones like events-tool vs report-tool or multiple door-related tools. However, some potential overlap exists between camera-tool and update-tool for camera settings, and between get-entity-tool and entity-lookup-tool, but the descriptions mitigate confusion.

Naming Consistency4/5

Tool names consistently use snake_case and follow a <domain>-tool pattern (e.g., access-control-tool, alarm-monitoring-tool). A few names like create-camera-policy-tool deviate slightly from the verb-noun pattern, but overall naming is predictable.

Tool Count3/5

With 31 tools, the server is on the high side for a typical MCP server. While the domain (physical security) is broad enough to justify many tools, some tools could be consolidated (e.g., multiple door-related tools). The count feels slightly heavy but still manageable.

Completeness3/5

The tool surface covers a wide range of operations across various domains (access control, cameras, analytics, LPR, etc.) but has notable gaps. Missing user creation, alarm management beyond monitoring, and full CRUD for locations (only create and update). Some operations require workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/RhombusSystems/rhombus-node-mcp'

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