Skip to main content
Glama
JimmyAlter

guarded-sql-mcp

by JimmyAlter

Device software

device_software
Read-onlyIdempotent

List installed software on a device by hostname, optionally filtering by package name substring.

Instructions

List software installed on a device, optionally filtered by package name.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return (1-100, default 25).
hostnameYesDevice hostname, e.g. "nb-lt-001". Case-insensitive.
name_containsNoSubstring of the software name, e.g. "Chrome". Matched literally: % and _ have no special meaning.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsYes
hasMoreYesMore rows matched than were returned.
rowCountYesRows in this response.
truncatedYesLong values were cut or rows dropped to fit the response size limit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "hasMore": {
      +      "description": "More rows matched than were returned.",
      +      "type": "boolean"
      +    },
      +    "rowCount": {
      +      "description": "Rows in this response.",
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "rows": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "installed_at": {
      +            "type": [
      +              "string",
      +              "number",
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": [
      +              "string",
      +              "number",
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "version": {
      +            "type": [
      +              "string",
      +              "number",
      +              "boolean",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "truncated": {
      +      "description": "Long values were cut or rows dropped to fit the response size limit.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "rowCount",
      +    "hasMore",
      +    "truncated",
      +    "rows"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, fully covering the safety profile. The description adds that filtering is optional and by package name, but does not discuss pagination, sorting, or limits. With annotations handling safety, a 3 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.

Conciseness5/5

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

Single sentence, front-loaded with the core action, and no wasted words. It efficiently conveys the purpose and optional filter.

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 rich schema (100% coverage) and annotations, and the absence of an output schema, the description is nearly complete. The only missing element is any indication of return volume or that results are paginated, but as a simple list tool, this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are well-documented in the schema (limit, hostname, name_contains with patterns and examples). The description adds the concept of optional filtering by package name, which is already in the schema. Baseline 3 is correct when schema does the heavy lifting.

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?

States a specific verb ('List') and resource ('software installed on a device') and adds the filtering capability. It is clear what the tool does, though it does not differentiate itself from siblings like get_device, which might also return software info.

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?

Usage is implied by the description: use this to see installed software. However, there is no explicit guidance on when to choose this over get_device or other alternatives, and no exclusions or prerequisites are mentioned.

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