Skip to main content
Glama
jameshgordy

Snipe-IT MCP Server

by jameshgordy

Snipe-IT MCP Server

A comprehensive Model Context Protocol (MCP) server for managing Snipe-IT inventory systems. This server enables AI assistants to perform full CRUD operations across your entire Snipe-IT instance with 40 tools covering all major API endpoints.

Features

Asset Management

  • Full CRUD Operations: Create, read, update, delete, and search assets with enhanced filtering

  • Barcode/Serial Lookup: Direct bytag/byserial API endpoints for reliable barcode scanning

  • Asset Operations: Checkout, checkin, audit, and restore assets

  • Checkout Requests: Submit and cancel checkout requests for requestable assets

  • File Attachments: Upload, download, list, and delete asset files

  • Label Generation: Generate printable PDF labels

  • Maintenance Tracking: Create and manage maintenance records

  • License Associations: View licenses assigned to assets

Inventory Tracking

  • Consumables: Complete management of consumable items

  • Components: Manage components with checkout/checkin to assets

  • Accessories: Track accessories with checkout/checkin to users, assets, or locations

Users & Organization

  • Users: Full user management including restore and current user endpoint

  • User Assets: View all items checked out to a user (assets, accessories, licenses, consumables, EULAs)

  • Two-Factor Auth: Reset user 2FA (admin function)

  • Companies: Multi-tenant company management

  • Departments: Organizational department management

  • Groups: Permission group management

System Configuration

  • Categories: Manage categories for all item types

  • Manufacturers: Track manufacturer information

  • Models: Define asset models with depreciation, custom fields, and file attachments

  • Status Labels: Configure asset statuses with asset listing

  • Locations: Manage physical locations with hierarchy, asset/user queries

  • Suppliers: Track supplier information

  • Depreciations: Define depreciation schedules

Custom Fields

  • Fields: Create and manage custom field definitions

  • Fieldsets: Group custom fields for assignment to models with field reordering

  • Field Association: Associate/disassociate fields with fieldsets

Licensing

  • License Management: Full CRUD for software licenses

  • Seat Assignments: Checkout/checkin license seats

  • License Files: Manage license documentation

Reporting & Auditing

  • Activity Logs: Query all activity history

  • Item Activity: Get activity for specific items

  • Status Summary: Asset counts grouped by status label

  • Audit Tracking: Track assets due/overdue for audit

Import & System Administration

  • CSV Imports: Full import workflow (upload, map columns, process)

  • System Info: Get Snipe-IT version information

  • Backups: List and download database backups

  • LDAP Operations: LDAP sync and connection testing

Related MCP server: Freshservice MCP Server

Requirements

  • Python 3.11+

  • UV package manager

  • Snipe-IT instance with API access

  • API token with appropriate permissions

Installation

1. Clone the repository

git clone https://github.com/jameshgordy/snipeit-mcp.git
cd snipeit-mcp

2. Install dependencies

uv sync

3. Configure environment variables

The server supports two authentication modes; pick one.

Mode A — API key (stdio or HTTP, single shared identity)

Create a .env file:

SNIPEIT_URL=https://your-snipeit-instance.com
SNIPEIT_TOKEN=your-api-token-here
SNIPEIT_ALLOWED_TOOLS=manage_assets,system_info  # Optional: restrict exposed tools

Variable

Required

Description

SNIPEIT_URL

Yes

Your Snipe-IT instance URL

SNIPEIT_TOKEN

Yes

API token for authentication

SNIPEIT_ALLOWED_TOOLS

No

Comma-separated list of tool names to expose. If unset, all tools are available.

Getting an API Token:

  1. Log in to your Snipe-IT instance

  2. Navigate to your user profile (top right menu)

  3. Go to "Manage API Keys" or "Personal Access Tokens"

  4. Generate a new token with required permissions

Mode B — Interactive OAuth login (HTTP only, per-user identity)

In this mode the MCP server runs as a web service and acts as an OAuth proxy in front of Snipe-IT's built-in Laravel Passport provider. Each user logs in to Snipe-IT (going through your normal SAML / SSO if configured) and the MCP server uses that user's own access token for every tool call.

One-time Snipe-IT setup (admin):

  1. Visit https://your-snipeit-instance.com/admin/oauth

  2. Create a new OAuth client

  3. Set the redirect URI to https://your-mcp-public-url/auth/callback

  4. Note the generated client ID and secret

Environment variables:

SNIPEIT_URL=https://your-snipeit-instance.com
SNIPEIT_OAUTH_CLIENT_ID=...                  # from /admin/oauth
SNIPEIT_OAUTH_CLIENT_SECRET=...              # from /admin/oauth
SNIPEIT_MCP_BASE_URL=https://your-mcp-public-url
MCP_TRANSPORT=http
MCP_PORT=8000
# MCP_HOST=0.0.0.0                            # defaults to 127.0.0.1

Variable

Required

Description

SNIPEIT_URL

Yes

Your Snipe-IT instance URL

SNIPEIT_OAUTH_CLIENT_ID

Yes

OAuth client ID from /admin/oauth

SNIPEIT_OAUTH_CLIENT_SECRET

Yes

OAuth client secret from /admin/oauth

SNIPEIT_MCP_BASE_URL

Yes

Public URL where this MCP server is reachable (used in the OAuth callback)

SNIPEIT_MCP_REDIRECT_PATH

No

Override OAuth callback path (default /auth/callback)

MCP_TRANSPORT

Yes

Must be http for OAuth mode

MCP_HOST

No

Bind address (default 127.0.0.1; use 0.0.0.0 behind a reverse proxy)

MCP_PORT

Yes

TCP port for the HTTP server

LOG_LEVEL

No

DEBUG/INFO/WARNING/ERROR/CRITICAL (default INFO)

NOTE

OAuth mode requires HTTP transport — starting withMCP_TRANSPORT=stdio while OAuth env vars are set fails at startup with a clear error.

Mode C — multi-identity (HTTP, one container, per-user tokens)

In this mode one container serves all people, each still acting under their own Snipe-IT personal access token. Instead of one container per person (each with a private SNIPEIT_TOKEN), every person gets a random MCP token that they put into their own MetaMCP server entry. The server maps MCP token → identity → Snipe-IT PAT per request, so the Snipe-IT activity log shows the correct person for every action, and the container log carries a second, Snipe-IT-independent audit trail.

Mode C requires HTTP transport and is mutually exclusive with OAuth mode (startup fails if both are configured).

Per-person tokens: generate one random token per person, e.g. openssl rand -hex 32. Tokens must be at least 32 characters, unique per person, and different from that person's Snipe-IT PAT (startup validates all of this and exits with a clear error otherwise).

Environment variables:

SNIPEIT_URL=https://your-snipeit-instance.com   # one instance for all
# One block per person (<KEY> matches [A-Z0-9_]+, e.g. STAAT):
SNIPEIT_IDENTITY_STAAT_MCP_TOKEN=...            # required, >= 32 chars, unique
SNIPEIT_IDENTITY_STAAT_SNIPEIT_TOKEN=...        # required, the person's Snipe-IT PAT
SNIPEIT_IDENTITY_STAAT_DISPLAY_NAME=...         # optional, shown in logs
SNIPEIT_IDENTITY_STAAT_ALLOWED_TOOLS=...        # optional CSV, e.g. manage_assets,system_info
SNIPEIT_IDENTITY_STAAT_READ_ONLY=true           # optional, blocks all write actions
# Transport (required for this mode):
MCP_TRANSPORT=http
MCP_PORT=8000
MCP_HOST=127.0.0.1

Variable

Required

Description

SNIPEIT_URL

Yes

Snipe-IT instance URL (shared by all identities)

SNIPEIT_IDENTITY_<KEY>_MCP_TOKEN

Yes

Random bearer token the person uses to authenticate to this MCP server (min 32 chars, unique per person)

SNIPEIT_IDENTITY_<KEY>_SNIPEIT_TOKEN

Yes

That person's Snipe-IT personal access token

SNIPEIT_IDENTITY_<KEY>_DISPLAY_NAME

No

Human-readable name used in log lines (identity keys are logged at startup, never token values)

SNIPEIT_IDENTITY_<KEY>_ALLOWED_TOOLS

No

Comma-separated tool allowlist for that person; enforced at call time and in tools/list

SNIPEIT_IDENTITY_<KEY>_READ_ONLY

No

When true, blocks all write actions (create, update, delete, checkout, checkin, audit, restore, file uploads, imports, LDAP sync, …); read actions stay allowed

SNIPEIT_IDENTITIES_FILE

No

Path to a JSON file with the same fields (list of objects with an explicit key). If set, the file wins and all SNIPEIT_IDENTITY_* env vars are ignored (logged at startup). For secret-mount based environments.

MCP_TRANSPORT

Yes

Must be http

MCP_PORT

Yes

TCP port for the HTTP server

MCP_HOST

No

Bind address (default 127.0.0.1)

LOG_LEVEL

No

DEBUG/INFO/WARNING/ERROR/CRITICAL (default INFO)

MetaMCP configuration — one entry per person: the only difference between the entries is the bearer token; the URL is identical for everyone.

MetaMCP server entry (per person, Ownership: Private)
  Name:         snipeit
  Type:         Streamable HTTP
  URL:          http://snipeit-mcp:8000/mcp        ← identical for all
  Bearer Token: <that person's MCP token>          ← the only difference

How a request is handled:

  1. The HTTP layer checks Authorization: Bearer <mcp_token>. Missing or unknown token → 401 with WWW-Authenticate: Bearer, before any tool runs. Token comparison is constant-time (hmac.compare_digest).

  2. The identity is stored in a request-scoped context variable; the tool call then authenticates to Snipe-IT with that person's PAT.

  3. One JSON audit line per tool call goes to stderr (logger snipeit_mcp.audit): identity, tool, action, outcome, duration, and a SHA-256 digest of the arguments (arguments themselves are never logged, and no token ever appears in logs).

{"ts":"2026-08-26T09:41:02.113456+00:00","identity":"STAAT","tool":"manage_assets","action":"update","ok":true,"duration_ms":142,"args_digest":"9f2c1ab04e6d7731"}

Health endpoint: unauthenticated GET /healthz returns {"status":"ok","identities":<n>} — use it for container healthchecks (see deploy/docker-compose.yml).

WARNING

Known, accepted limitations — read before deploying:

  • The container still holds all people's PATs in environment variables. Whoever can read them (Portainer admin, Docker host access) can impersonate any identity. Per-request attribution becomes robust, but it is not tamper-proof.

  • One container for everyone is a single point of failure for all of them — if it goes down, nobody's Snipe-IT access via MCP works.

  • Bearer-token authentication only protects traffic that stays on the internal Docker network. Do not publish the port to a wider network (the compose file deliberately has no ports: mapping).

  • Only OAuth mode (Mode B) provides cryptographically sound per-user attribution, and it does not fit centrally managed clients like MetaMCP.

Production Deployment

For running the server as a long-lived HTTPS service on a Linux VM (the typical shape for OAuth mode), the repo ships two helper scripts under scripts/:

Script

Purpose

scripts/setup-snipeit-mcp.sh

One-shot installer. Creates a snipeit-mcp service user, installs uv if missing, writes /etc/snipeit-mcp.env (seeding SNIPEIT_* values from a .env at the repo root if present), installs and starts a hardened systemd unit, and probes the local OAuth metadata endpoint. Idempotent.

scripts/update-snipeit-mcp.sh

Routine update — git pull, re-uv sync, restart the service, re-probe.

Quick-start on a fresh VM (assumes Debian/Ubuntu with systemd; needs root):

# 1. Clone the source tree
sudo git clone https://github.com/jameshgordy/snipeit-mcp.git /opt/snipeit-mcp

# 2. (Optional) Drop a .env at the repo root so setup can seed
#    SNIPEIT_URL / SNIPEIT_OAUTH_CLIENT_ID / _SECRET / SNIPEIT_MCP_BASE_URL.
#    Missing values become __FILL_ME__ placeholders in /etc/snipeit-mcp.env.
scp .env you@vm:/tmp/snipeit-seed.env
sudo mv /tmp/snipeit-seed.env /opt/snipeit-mcp/.env

# 3. Install and start
sudo bash /opt/snipeit-mcp/scripts/setup-snipeit-mcp.sh

# 4. Future updates
sudo bash /opt/snipeit-mcp/scripts/update-snipeit-mcp.sh
NOTE

The scripts are committed with the executable bit set, sosudo /opt/snipeit-mcp/scripts/... works once they're checked out via git clone. The sudo bash ... form above is the bullet-proof alternative — it doesn't care about file permissions, useful if you transferred the scripts via scp/drag-and-drop and the bit didn't come along.

What the installer configures:

Path

Purpose

/opt/snipeit-mcp/

Source tree (owned by service user)

/var/lib/snipeit-mcp/

FASTMCP_HOME — DCR'd MCP client registrations persist here

/etc/snipeit-mcp.env

Secrets and deployment-specific URLs (SNIPEIT_* only)

/etc/systemd/system/snipeit-mcp.service

systemd unit; infra settings (MCP_TRANSPORT, MCP_HOST, MCP_PORT, LOG_LEVEL, FASTMCP_HOME) are baked into its Environment= directives

Configurable at install time via environment variables on the setup-snipeit-mcp.sh invocation:

Variable

Default

Notes

SOURCE_DIR

/opt/snipeit-mcp

Source tree path

STATE_DIR

/var/lib/snipeit-mcp

Service-user home / FASTMCP_HOME

ENV_FILE

/etc/snipeit-mcp.env

Generated env file

SEED_ENV_FILE

$SOURCE_DIR/.env

Optional seed for SNIPEIT_* values

MCP_TRANSPORT

http

Always http for OAuth mode

MCP_HOST

127.0.0.1

Bind address. Loopback by default; set MCP_HOST=0.0.0.0 to expose on all interfaces (e.g. a reverse proxy on a different host)

MCP_PORT

8000

TCP port

LOG_LEVEL

INFO

IMPORTANT

The scripts donot configure TLS — the server listens on plain HTTP on the chosen MCP_PORT. For public OAuth use, terminate TLS in front of it (corporate reverse proxy, Caddy, nginx, …) with a trusted certificate for the hostname in SNIPEIT_MCP_BASE_URL.

Exposing a VPN-only Snipe-IT to web-based MCP clients (DMZ reverse proxy)

Web-based MCP clients (Claude.ai, Mistral's Le Chat, …) run their MCP transport through the client vendor's own backend, which needs to reach SNIPEIT_MCP_BASE_URL from the public internet — a VPN-only address won't work. If your Snipe-IT instance itself is VPN-only, the typical shape is to keep the MCP VM internal and put a public-facing reverse proxy in a DMZ in front of it:

Web client backend ──HTTPS──► public reverse proxy (DMZ) ──HTTP──► MCP VM (internal) ──HTTPS──► Snipe-IT (internal)

What the DMZ proxy needs:

  • Public hostname matching SNIPEIT_MCP_BASE_URL (e.g. snipeit.mcp.example.com).

  • Trusted TLS certificate for that hostname — client backends will not accept internal CAs.

  • Upstream: the internal VM on http://<vm-ip>:<MCP_PORT>.

  • Forwarded headers: Host, X-Forwarded-Proto: https, X-Forwarded-Host, X-Forwarded-For. FastMCP uses these to build correct OAuth metadata URLs.

  • Do not strip WWW-Authenticate from upstream responses — MCP clients (Inspector, mcp-remote, web clients) rely on it to discover the OAuth flow. Header-allowlist proxies are a common culprit.

  • Do not add CORS headers — FastMCP handles its own.

NOTE

VPN is still required for the initial Snipe-IT login. The OAuth flow redirects the user's browser to https://<your-snipeit>/oauth/authorize for sign-in (and SSO bounce), which is VPN-only by definition. Once the user has signed in once, subsequent MCP tool calls and refresh-token rotation go client backend → DMZ → MCP VM → Snipe-IT entirely server-side, so users can keep using the web client from anywhere until the refresh token expires or is revoked, at which point a one-time VPN reconnect is needed to re-login.

MCP Client Configuration

The right configuration depends on whether the server runs in API-key mode (stdio, local, one shared identity) or OAuth mode (HTTP, remote, per-user identity). See the previous section for how the server picks between them.

Claude Desktop / Claude Code — API-key mode (stdio)

Add to your MCP configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

Option A: Install directly from GitHub (no clone required)

{
  "mcpServers": {
    "snipeit": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/jameshgordy/snipeit-mcp",
        "snipeit-mcp"
      ],
      "env": {
        "SNIPEIT_URL": "https://your-snipeit-instance.com",
        "SNIPEIT_TOKEN": "your-api-token-here"
      }
    }
  }
}

Option B: Run from a local clone

{
  "mcpServers": {
    "snipeit": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/snipeit-mcp",
        "run",
        "snipeit-mcp"
      ],
      "env": {
        "SNIPEIT_URL": "https://your-snipeit-instance.com",
        "SNIPEIT_TOKEN": "your-api-token-here"
      }
    }
  }
}

Claude Desktop / Claude Code — OAuth mode (via mcp-remote)

When the server runs in OAuth mode it speaks HTTP, not stdio, so it cannot be launched directly by Claude Desktop. Use mcp-remote as a stdio bridge — it handles Dynamic Client Registration, opens the browser for interactive login, caches the resulting tokens, and refreshes them transparently. The server must already be running and reachable at the URL below (e.g. on a VM, behind a reverse proxy, or on localhost for dev).

{
  "mcpServers": {
    "snipeit": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://your-mcp-public-url/mcp"
      ]
    }
  }
}
NOTE

NoSNIPEIT_* env vars belong here — the server holds them. The first connection opens a browser tab for Snipe-IT login (going through your SSO if configured); subsequent connections reuse the cached refresh token.

Claude.ai web (OAuth mode only)

Open https://claude.ai → Settings → ConnectorsAdd custom connector. Paste the public URL of your running MCP server (e.g. https://your-mcp-public-url/mcp) and follow the OAuth prompt.

IMPORTANT

Claude.ai web requires the MCP server to be reachable from the public internet over HTTPS —localhost and unencrypted HTTP do not work here. Use the mcp-remote bridge instead if you only have a localhost deployment.

Cursor

Add to your Cursor MCP settings using the same JSON shape as the Claude Desktop examples above — stdio (API-key) or mcp-remote bridge (OAuth) — whichever matches your server mode.

MCP Inspector (debugging)

npx @modelcontextprotocol/inspector

Then in the Inspector UI:

  • Transport Type: Streamable HTTP

  • URL: your server's /mcp endpoint

  • Connection Type: must be Via Proxy, not Direct

NOTE

Why "Via Proxy"? The Inspector UI is a static frontend served at http://localhost:6274 and the MCP server lives at a different origin (e.g. http://localhost:8000). In Direct mode the browser tries to talk to the MCP server itself, which fails for two compounding reasons: (a) FastMCP doesn't emit CORS headers for the Inspector origin, so requests are blocked client-side, and (b) the OAuth redirect flow needs server-side state the browser-only client can't keep. Via Proxy routes traffic through Inspector's own backend (at localhost:6277), which is same-origin from the MCP server's perspective and handles OAuth state correctly.

WARNING

LeaveClient ID and Client Secret in the OAuth panel empty — Inspector will perform Dynamic Client Registration with the MCP server. Pasting your Snipe-IT (upstream) client_id and secret there is the most common misconfiguration; those credentials belong only in the server's .env, not in any MCP client.

Available Tools (40 Total)

Asset Tools (8)

Tool

Description

manage_assets

CRUD operations with bytag/byserial lookup and advanced filtering

asset_operations

State operations (checkout, checkin, audit, restore)

bulk_asset_operations

Bulk edit and bulk audit across many assets at once (Snipe-IT v8.7+)

asset_files

File attachments (upload, list, download, delete)

asset_labels

Generate printable PDF labels

asset_maintenance

Full maintenance lifecycle (create, list, get, update, delete, complete)

asset_licenses

View licenses assigned to an asset

asset_requests

Submit/cancel checkout requests, list own requests and requestable assets

Inventory Tools (5)

Tool

Description

manage_consumables

CRUD operations for consumables

manage_components

CRUD operations for components

component_operations

Checkout/checkin components to assets

manage_accessories

CRUD operations for accessories

accessory_operations

Checkout/checkin accessories to users, assets, or locations

Kit Tools (1)

Tool

Description

manage_kits

CRUD for predefined kits plus kit content management (models, licenses, accessories, consumables)

User & Organization Tools (6)

Tool

Description

manage_users

CRUD operations for users (+ restore, me)

user_assets

Get items checked out to a user (assets, accessories, licenses, consumables, eulas)

user_two_factor

Reset user two-factor authentication

manage_companies

CRUD operations for companies

manage_departments

CRUD operations for departments

manage_groups

CRUD operations for permission groups

Configuration Tools (7)

Tool

Description

manage_categories

Manage categories for all item types

manage_manufacturers

Manage manufacturer information

manage_models

Manage asset models (+ list assets by model)

manage_status_labels

Manage status labels (+ list assets by status)

manage_locations

Manage locations (+ list assets/users by location)

manage_suppliers

Manage supplier information

manage_depreciations

Manage depreciation schedules

Custom Field Tools (2)

Tool

Description

manage_fields

CRUD + associate/disassociate fields with fieldsets

manage_fieldsets

CRUD operations for fieldsets (+ field listing, reorder)

License Tools (3)

Tool

Description

manage_licenses

CRUD operations for licenses

license_seats

Manage license seat assignments

license_files

Manage license file attachments

Reporting & Audit Tools (3)

Tool

Description

activity_reports

Query activity logs and item history

status_summary

Get asset counts grouped by status label

audit_tracking

Track assets due/overdue for audit

Import Tools (1)

Tool

Description

manage_imports

CSV import workflow (upload, map columns, process)

System Administration Tools (4)

Tool

Description

system_info

Get Snipe-IT version information

manage_backups

List and download database backups

ldap_operations

LDAP sync and connection testing

model_files

Manage file attachments for asset models

Usage Examples

Create an Asset

{
  "action": "create",
  "asset_data": {
    "status_id": 1,
    "model_id": 5,
    "asset_tag": "LAP-001",
    "name": "MacBook Pro 14",
    "serial": "C02X12345"
  }
}

Create a User

{
  "action": "create",
  "user_data": {
    "first_name": "John",
    "last_name": "Doe",
    "username": "jdoe",
    "email": "jdoe@example.com",
    "password": "securepassword",
    "password_confirmation": "securepassword",
    "department_id": 1
  }
}

Get Items Checked Out to User

{
  "user_id": 123,
  "asset_type": "all"
}

Checkout Component to Asset

{
  "action": "checkout",
  "component_id": 45,
  "checkout_data": {
    "assigned_to": 123,
    "assigned_qty": 2,
    "note": "RAM upgrade"
  }
}

Query Activity Logs

{
  "action": "list",
  "action_type": "checkout",
  "limit": 50
}

Create Custom Field

{
  "action": "create",
  "field_data": {
    "name": "MAC Address",
    "element": "text",
    "format": "MAC"
  }
}

Associate Field with Fieldset

{
  "action": "associate",
  "field_id": 5,
  "fieldset_id": 1,
  "required": true,
  "order": 1
}

Response Format

All tools return structured JSON responses:

Success (create):

{
  "success": true,
  "action": "create",
  "asset": {
    "id": 123,
    "asset_tag": "LAP-001",
    "name": "MacBook Pro 14"
  }
}

Success (list):

All list endpoints return pagination metadata:

{
  "success": true,
  "action": "list",
  "count": 3,
  "total": 1602,
  "limit": 20,
  "offset": 0,
  "has_more": true,
  "assets": [ ... ]
}

Field

Description

count

Number of items in this page

total

Total items matching the query

limit

Page size used

offset

Starting offset

has_more

true if more pages remain

Error:

{
  "success": false,
  "error": "Asset not found: Asset with tag LAP-999 not found."
}

Architecture

src/snipeit_mcp/
├── __init__.py        # Public API re-exports
├── __main__.py        # Entry point (snipeit-mcp script)
├── mcp_server.py      # FastMCP instance + tool whitelist
├── client.py          # SnipeIT API clients
├── config.py          # Transport + auth-mode config (OAuth / API key / multi-identity)
├── identity.py        # Multi-identity registry (tokens → PATs), ContextVar, validation
├── http_auth.py       # Multi-identity HTTP auth (401, /healthz) + audit log + tool policy
├── schemas.py         # Pydantic input schemas
└── tools/             # 10 modules grouped by Snipe-IT domain
    ├── assets.py
    ├── inventory.py
    ├── foundational.py
    ├── licenses.py
    ├── people.py
    ├── custom_fields.py
    ├── reports.py
    ├── imports.py
    └── system.py

Built with:

Troubleshooting

Authentication Errors

  • Verify your Snipe-IT URL includes the protocol (https://)

  • Check that your API token is valid and not expired

  • Ensure the token has appropriate permissions for the operations

Connection Errors

  • Verify network connectivity to your Snipe-IT instance

  • Check for any firewall or proxy restrictions

  • Ensure the Snipe-IT instance is running

Validation Errors

  • Check that required fields are provided (e.g., status_id and model_id for assets)

  • Verify that referenced IDs exist (categories, models, locations, etc.)

  • Review the tool documentation for required parameters

License

MIT License

Contributing

Contributions welcome! Please open an issue or submit a pull request.

Available Tools

40 tools
accessory_operationsA

Perform checkout/checkin operations on accessories.

Accessories can be checked out to a user, asset, or location. Each checkout decrements the available quantity, and checkin increments it back.

Operations:

  • checkout: Checkout an accessory to a user/asset/location (requires checkout_data with checkout_to_type and assigned_to_id)

  • checkin: Checkin an accessory (requires checkout_id from the checkout record)

  • list_checkouts: List all users who have this accessory checked out

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe operation to perform on the accessory
checkout_idNoCheckout ID (required for checkin action)
accessory_idYesAccessory ID
checkout_dataNoCheckout data (required for checkout action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description discloses the inventory effect (checkout decrements quantity, checkin increments it back) and notes that checkin requires the checkout_id from a prior checkout. This goes beyond the annotations (which only say non-read-only, non-idempotent, non-destructive) and provides useful behavioral context.

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 and succinct: an introductory sentence, a bulleted list of operations with requirements, and a clear return type. Every sentence serves a purpose with no redundant fluff, and the most critical information is front-loaded.

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 4 parameters and 3 actions, the description covers the main operations, required parameters, and the quantity side effect. It also states a return type. It does not detail edge cases or list_checkouts output specifics, but given the schema and output schema exist, this is largely sufficient.

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 description reiterates the required parameters for each action (e.g., checkout requires checkout_data with checkout_to_type and assigned_to_id) and adds the nuance that checkout_id comes from the checkout record. Since the schema already provides 100% coverage with clear descriptions, the incremental value is modest, earning a baseline score.

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 performs checkout/checkin operations on accessories and lists the three specific operations (checkout, checkin, list_checkouts) with their targets. This distinguishes it from sibling tools like asset_operations or component_operations by scope and action.

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 explains what each operation does and what parameters are required, but it does not explicitly contrast with alternatives or state when to use this tool over others. The context is clear from the name and sibling list, but no exclusions or alternative pointers are given.

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

activity_reportsA
Read-onlyIdempotent

Query Snipe-IT activity logs and reports.

Provides access to the activity log which tracks all actions performed in Snipe-IT including checkouts, checkins, updates, and more.

Actions:

  • list: List activity records with optional filtering

  • item_activity: Get activity for a specific item (requires item_type and item_id)

Returns: dict: Activity records matching the query

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return
actionYesThe action to perform
offsetNoNumber of results to skip
searchNoSearch query
item_idNoItem ID for item_activity
item_typeNoItem type for item_activity (e.g., 'asset', 'license', 'accessory')
target_idNoFilter by target ID
action_typeNoFilter by action type (e.g., 'checkout', 'checkin', 'update')
target_typeNoFilter by target type (e.g., 'asset', 'license', 'user')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is well-covered. The description adds meaningful behavioral context beyond annotations by specifying that item_activity requires both item_type and item_id, and by noting the return format (dict). It does not contradict annotations.

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

Conciseness4/5

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

The description is reasonably concise and well-structured with an intro, action list, and return type. It avoids excessive detail and is front-loaded with the core purpose. Slight redundancy exists in the 'Returns: dict' line, which is already covered by the output schema, but it does not significantly detract.

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 9 parameters and one required action enum, the description is sufficiently complete. It explains the two modes, the one constraint on item_activity, and the return type. The output schema exists, so the description need not dwell on return details. No critical gaps are evident.

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 parameter description coverage is 100%, so the schema already documents each parameter thoroughly. The description adds minimal extra parameter meaning—only the grouping into actions and the requirement for item_activity. This matches the baseline for high schema coverage.

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 a specific verb and resource: 'Query Snipe-IT activity logs and reports.' It further breaks down the two primary actions (list and item_activity), which helps distinguish it from sibling tools like audit_tracking or asset_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 provides clear context for when to use each action: 'list' for general activity records with filtering, and 'item_activity' for a specific item, noting it requires item_type and item_id. However, it does not explicitly mention alternative tools or exclusion criteria, so it stops short of full when-not usage guidance.

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

asset_filesA
Destructive

Manage file attachments for assets.

Operations:

  • upload: Upload one or more files to an asset

  • list: List all files attached to an asset

  • download: Download a specific file from an asset

  • delete: Delete a specific file from an asset

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoNotes for uploaded files (for upload action)
actionYesThe file operation to perform
file_idNoFile ID (required for download and delete actions)
asset_idYesAsset ID
save_pathNoPath to save downloaded file (for download action)
file_pathsNoList of file paths to upload (for upload action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

The description does not disclose behavioral traits beyond what the annotations already convey. Annotations mark this as destructive (destructiveHint=true), and while the description mentions 'delete' as an operation, it adds no extra detail such as whether deletions are irreversible or if special permissions are required. The return format is also redundant given the existing output schema.

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 title and bulleted operations, and it is concise without unnecessary fluff. The 'Returns' line is redundant with the output schema but does not significantly detract from readability. Overall, it is efficient and easy to scan.

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 (6 parameters, destructive action) and rich schema/annotations, the description provides a sufficient high-level overview but lacks deeper contextual details such as prerequisites (e.g., asset must exist), potential side effects of uploads, or behavior when actions fail. The schema covers parameter specifics, so the description is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema already provides; it merely lists high-level operations and returns a generic dict, leaving the schema to explain parameter details like file_id being required for download/delete.

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 as 'Manage file attachments for assets' and enumerates the specific operations (upload, list, download, delete). This distinguishes it from sibling tools like asset_operations or manage_assets, which handle broader asset lifecycle or CRUD operations, not file attachments.

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 context by listing the four operations, making it evident when to use this tool (e.g., uploading files to an asset, downloading attached files). However, it does not explicitly compare with alternatives or state when not to use it, so it falls short of a full 5.

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

asset_labelsA

Generate printable labels for assets.

Provide either asset_ids or asset_tags to generate labels for specific assets. The labels will be saved as a PDF file to the specified save_path.

Returns: dict: Result with path to generated labels PDF

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idsNoList of asset IDs to generate labels for
save_pathNoPath where the PDF labels file should be saved/tmp/asset_labels.pdf
asset_tagsNoList of asset tags to generate labels for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations are all false, providing minimal guidance. The description adds useful behavioral context: it generates a PDF file, saves it to a specified path, and returns a dict with the path. However, it does not disclose edge cases like what happens if both asset_ids and asset_tags are provided, whether existing files are overwritten, or any permission requirements. The description is adequate but not rich.

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 compact and front-loaded with the primary purpose. The input and return information are separated clearly, with a dedicated 'Returns:' section. Every sentence earns its place, and there is no repetition of schema details.

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 moderate complexity and the presence of a full input schema and an output schema reference, the description covers the essential use case well. It explains the two input modes and the artifact produced. However, it omits handling of edge cases (e.g., neither identifier provided, behavior when the file already exists) and does not elaborate on the return dict structure beyond a brief mention. This is slightly more than adequate but not exhaustive.

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 covers all three parameters with descriptions (100% coverage), and the description adds the key semantic insight that asset_ids and asset_tags are alternatives ('Provide either'). This goes beyond the schema, which simply lists each independently. The save_path parameter is also contextualized as the destination for the PDF.

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 begins with a specific verb+resource: 'Generate printable labels for assets.' This clearly distinguishes the tool from sibling tools like manage_assets or asset_files, which handle other asset-related operations. The scope is well-defined.

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 states the input options ('Provide either asset_ids or asset_tags') and the output behavior (saved to save_path). While it doesn't explicitly compare to alternatives, it gives unambiguous context for when to use this tool: whenever printable asset labels are needed. The lack of explicit exclusions or alternative tool references prevents a higher score.

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

asset_licensesA
Read-onlyIdempotent

Get all licenses checked out to an asset.

Returns: dict: List of licenses associated with the asset

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYesAsset ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the 'checked out' semantic but does not disclose additional behavioral traits like pagination, ordering, or error conditions. It does not contradict the annotations.

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 concise sentences with the primary action front-loaded. The 'Returns:' line is short and relevant, making the entire description efficient and easy to scan.

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 read-only tool with one parameter and an output schema, the description is sufficient to understand the tool's purpose and result format. It could mention edge cases or relationships to license seats, but the annotations and schema cover the essentials.

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 schema covers 100% of parameters with a clear description for asset_id ('Asset ID'), and the tool description does not add any further semantic detail. Baseline 3 applies because the schema already handles the parameter meaning.

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 uses a specific verb 'Get' with a clear resource 'licenses checked out' and scoping 'to an asset'. This distinguishes it from sibling tools like manage_licenses or license_seats, which manage licenses themselves or per-license seat assignments.

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 implies usage (when you need licenses associated with an asset) but provides no explicit guidance on when to prefer this tool over alternatives such as license_seats or asset_operations. No exclusions or alternatives are mentioned.

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

asset_maintenanceA
Destructive

Manage maintenance records for assets.

Operations:

  • create: Create a maintenance record for an asset (requires asset_id and maintenance_data)

  • list: List maintenance records, optionally filtered by asset_id, search, or completed

  • get: Get a single maintenance record by maintenance_id

  • update: Update a maintenance record (requires maintenance_id and update_data)

  • delete: Delete a maintenance record (requires maintenance_id)

  • complete: Mark a maintenance record complete (requires maintenance_id; Snipe-IT v8.7+)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoCompletion note (for complete action)
limitNoNumber of results to return (for list action)
actionYesThe maintenance operation to perform
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
asset_idNoAsset ID (required for create; optional filter for list)
completedNoFilter by completion state (for list action)
update_dataNoFields to change (required for update action)
maintenance_idNoMaintenance record ID (required for get, update, delete, complete)
maintenance_dataNoMaintenance record data (required for create action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructive behavior, and the description aligns by listing the delete operation explicitly. It adds useful behavior beyond the schema, such as the Snipe-IT v8.7+ version dependency for the complete action and a concise return contract. It does not contradict annotations.

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 compact and well-structured, with a leading purpose sentence followed by a tight bullet list of operations. Each operation is one line and includes only necessary conditions. There is no filler or duplication.

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?

For a multi-action dispatcher with ten parameters, the description provides a complete operation inventory, per-action parameter assignments, and the output type. The schema covers the remaining details, and the presence of an output schema means return values are fully documented. An agent here needs the information to select and invoke the correct action is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter's meaning, defaults, and action-specific requirements. The description restates which parameters are required for which action but does not add meaning beyond that. This meets the baseline for fully covered schemas.

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 opens with a specific verb and resource: 'Manage maintenance records for assets.' It then enumerates all six operations, each with a clear action and target record. This clearly distinguishes the tool from asset-related siblings like manage_assets or asset_licenses.

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 establishes when to use the tool and shows the functional context for each action, including action-specific requirements like asset_id for create and maintenance_id for get/update/delete/complete. It does not explicitly exclude alternatives, but no sibling tool covers maintenance records, so the usage context is sufficiently clear.

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

asset_operationsA

Perform state operations on assets (checkout, checkin, audit, restore).

Operations:

  • checkout: Check out an asset to a user, location, or another asset

  • checkin: Check in an asset back to inventory

  • audit: Mark an asset as audited

  • restore: Restore a soft-deleted asset

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe operation to perform on the asset
asset_idYesAsset ID
audit_dataNoAudit details (optional for audit action)
checkin_dataNoCheckin details (optional for checkin action)
checkout_dataNoCheckout details (required for checkout action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations indicate a non-read-only, non-idempotent, and non-destructive operation. The description adds semantic details like 'restore a soft-deleted asset' and 'mark as audited,' which are helpful. Yet it does not disclose prerequisites, side effects, or whether actions are reversible, and it repeats the return type that is also covered by the output schema.

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 a brief introduction, a bulleted list of operations, and a concise return section. Every sentence provides useful context without redundancy 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 the rich input schema and presence of an output schema, the description is sufficient for understanding the tool's core purpose and operation types. It lacks explicit mapping between actions and their required data objects (e.g., checkout_data is required for checkout), but the schema's required fields provide that. Overall, it is adequately complete for a dispatch tool.

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 all five parameters, so the baseline is 3. The description does not add significant parameter details beyond naming the operations; it mentions checkout targets (user, location, asset) which maps to the enum, but does not explain the action-to-data-object relationships.

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 uses a specific verb phrase 'Perform state operations on assets' and enumerates four distinct operations (checkout, checkin, audit, restore), which clearly distinguishes this tool from sibling tools focused on asset files, labels, maintenance, and licenses. It precisely defines the tool's scope.

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 operation list implies the tool is for state-changing actions on assets, and the descriptions of each operation (e.g., 'check out an asset to a user, location, or another asset') clarify appropriate scenarios. However, it does not explicitly mention alternatives or exclusions, leaving some ambiguity for agents comparing with manage_assets.

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

asset_requestsA

Manage asset checkout requests (as the authenticated user).

Allows users to request checkout of requestable assets. Assets must have the 'requestable' flag set (either on the asset or its model).

Operations:

  • request: Submit a request to checkout an asset (requires asset_id)

  • cancel: Cancel a pending request (requires asset_id)

  • list: List the authenticated user's own pending checkout requests

  • requestable: List assets the authenticated user may request

Note: Approving/denying requests is only available through the web UI - there are no API endpoints for these administrative functions.

Returns: dict: Result of the operation including success status

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (for requestable action)
actionYesThe request action to perform
offsetNoNumber of results to skip (for requestable action)
searchNoSearch query (for requestable action)
asset_idNoAsset ID (required for request and cancel; must be a requestable asset)
request_dataNoRequest details (for request action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, the description discloses important behavior: operations act only on the authenticated user's requests, assets must be requestable, and approval/denial are not exposed via API. This adds meaningful scope and limitation context that annotations alone do not provide.

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 a clear overview, a compact list of operations, and a relevant note about administrative limits. It is concise and front-loaded, though the return type line adds limited value given the presence of an output schema.

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?

The definition covers the scope, required asset property, supported operations, and parameter relationships, making it sufficient for selecting and invoking the tool. It is missing very little, such as exact cancellation behavior or error semantics, but these are not essential for initial correct invocation.

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 already covers all parameters, but the description goes further by mapping each operation to the relevant parameters, such as asset_id being required for request and cancel, and limit/offset/search applying to requestable. This association is not fully obvious from 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 this tool manages asset checkout requests scoped to the authenticated user, and enumerates four specific operations. This distinguishes it from sibling asset tools by naming the exact resource and user scope.

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 context: it explains the 'requestable' flag requirement, which operations exist, and that admin approval is intentionally not available through the API. It does not explicitly name alternative tools or say when not to use this tool, but the behavioral boundaries are clear.

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

audit_trackingA
Read-onlyIdempotent

Track asset audit status for compliance.

Snipe-IT tracks when assets were last audited and calculates when they're due for re-audit based on the configured threshold.

Operations:

  • due: Assets approaching their audit date (within warning threshold)

  • overdue: Assets that have passed their audit date

  • summary: Combined counts of due and overdue assets

The audit threshold is configured in Admin Settings → Notifications and determines the lookahead window for "due" assets.

Returns: dict: Audit status with asset details

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return
actionYesThe audit tracking action
offsetNoNumber of results to skip

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds meaningful context about audit threshold configuration and defines the operational semantics of 'due' vs 'overdue', going beyond the annotations without contradicting them.

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 a clear purpose statement, bulleted operations, and a brief note on configuration. Every sentence serves a purpose, and the content is front-loaded with the tool's function.

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 simplicity, annotations (safe read operation), and presence of an output schema, the description adequately covers behavior, operation semantics, and configuration context. It is complete for an AI 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?

Schema coverage is 100% for parameter descriptions, setting a baseline of 3. The description enriches the 'action' enum by explaining what each value (due, overdue, summary) actually computes, adding value beyond the schema's generic 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 clearly states the tool tracks asset audit status for compliance, with explicit operation modes (due, overdue, summary). It distinguishes itself from sibling tools by focusing on audit-specific reporting rather than general asset management or status reporting.

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 context for when to use the tool (for audit tracking) and enumerates the three available actions. It does not explicitly name alternative tools or exclusions, so it falls short of full guidance, but the usage context is well implied.

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

bulk_asset_operationsA
Destructive

Perform bulk operations on multiple assets at once (Snipe-IT v8.7+).

Operations:

  • edit: Apply the same field changes to every asset in asset_ids (PATCH /hardware/bulk; requires fields)

  • audit: Mark every asset in asset_ids as audited, optionally recording a note, location, and next audit date (POST /hardware/audit/bulk)

Snipe-IT applies per-asset permission checks, so one failing asset does not block the rest of the batch; check the returned payload for per-asset results.

Returns: dict: Result of the operation including success status and the API response

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoAudit note (for audit action)
actionYesThe bulk operation to perform
fieldsNoFields to set on every asset (for edit action): status_id, model_id, company_id, location_id/rtd_location_id, name, custom fields (_snipeit_*), etc.
asset_idsYesIDs of the assets to operate on
location_idNoLocation observed during audit (for audit action)
next_audit_dateNoNext audit date, YYYY-MM-DD (for audit action)
update_locationNoAlso move the assets to location_id, not just record it in the audit (for audit action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description meaningfully adds behavioral context beyond the annotations by explaining Snipe-IT's per-asset permission checks, partial batch behavior, and the need to inspect the returned payload for per-asset results. Annotations already signal destructiveness and non-idempotency, and the description reinforces those concerns within operation details. No contradiction with annotations.

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

Conciseness5/5

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

The description uses a compact structured format with a one-line summary, clear operation bullets, and a natively concise note about batch failure behavior and return value. There is minimal redundancy and the most important usage scope appears first.

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?

For a 7-parameter tool with two actions, the description covers the operations, endpoint paths, required parameter conditions, behavior during partial failures, and result expectations. Combined with 100% schema description coverage and an output schema, an agent has enough context to 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?

Schema description coverage is 100%, so each parameter is documented in the schema. The description still adds value by clarifying that 'fields' is required for the edit action and by mapping note, location_id, next_audit_date, and update_location to the audit action, which aids correct selection based on the chosen action.

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 'Perform bulk operations on multiple assets at once' and enumerates the two operations (edit, audit) with their specific endpoints. It distinguishes from single-asset tools by emphasizing the bulk nature and explicit action list.

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 implies this tool is for batch operations on multiple assets, while sibling tools like asset_operations handle single assets. It does not name an explicit alternative for single-asset workflows, so the usage guidance is strong but not fully explicit.

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

component_operationsA

Perform checkout/checkin operations on components.

Components can be checked out to assets (not users). Each checkout decrements the available quantity.

Operations:

  • checkout: Checkout component(s) to an asset (requires checkout_data with assigned_to asset ID)

  • checkin: Checkin component(s) from an asset (requires checkout_id)

  • list_assets: List all assets that have this component checked out

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe operation to perform on the component
checkout_idNoComponent asset ID from checkout record (required for checkin)
component_idYesComponent ID
checkout_dataNoCheckout data (required for checkout action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not destructive. The description adds a key behavioral detail beyond annotations: 'Each checkout decrements the available quantity.' It also discloses the return structure as a dict. This is valuable context, though it omits potential failure modes or authorization requirements, keeping it at a 4.

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 brief intro, a bulleted list of operations, and a return type line. It is not padded with fluff, though the 'Returns:' section could be trimmed since output schema already provides that detail. Still, it is efficient and easy to scan.

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 4 parameters, 3 actions, and an output schema, the description provides enough context to understand the tool's role and how to invoke each action. It covers purpose, operations, parameter requirements, and returns. It could mention edge cases or prerequisites (e.g., items must be in stock), but it is largely complete.

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 all parameters are already documented. The description adds value by mapping parameters to actions: it specifies that checkout requires checkout_data, checkin requires checkout_id, and list_assets needs none. This conditional information is not fully captured in the schema, so the description elevates the semantics.

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 opens with a specific verb and resource: 'Perform checkout/checkin operations on components.' It then enumerates three distinct operations (checkout, checkin, list_assets), making its purpose unmistakable. It also distinguishes itself from component management tools by focusing on operational actions rather than CRUD management.

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 context for when to use each operation by stating required inputs: checkout requires checkout_data, checkin requires checkout_id, and list_assets needs no extra. However, it does not explicitly compare with sibling tools or state when not to use this tool, so it stops short of a full 5.

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

ldap_operationsA

Manage LDAP synchronization.

Operations:

  • sync: Trigger LDAP user synchronization

  • test: Test LDAP connection settings

Note: LDAP must be configured in Snipe-IT settings before use. Previously required CLI (php artisan snipeit:ldap-sync) or web UI.

Returns: dict: Sync results or connection test status

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe LDAP action to perform

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-idempotent operation. Description adds the prerequisite configuration note but does not disclose specific side effects of sync (e.g., user creation/updates) beyond action names.

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 a leading summary, bulleted operations, and a return note. The 'Previously required CLI' sentence is slightly extra but adds helpful historical context; overall 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?

For a one-parameter tool, the description adequately covers prerequisites, operations, and return type. Given an output schema exists, it is complete enough for an agent to select and invoke the tool.

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 a single parameter having an enum and its own description. Description adds no further parameter detail beyond repeating the actions, which are already self-explanatory.

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 manages LDAP synchronization and enumerates the two operations (sync and test), making the purpose specific and distinguishable from sibling tools focused on assets, users, etc.

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 context: LDAP must be configured before use, and mentions the tool replaces the previous CLI/web UI flow. It implies when to use but does not explicitly state alternatives or when not to use.

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

license_filesA
Destructive

Manage file attachments for licenses.

Operations:

  • upload: Upload a file to a license

  • list: List all files attached to a license

  • download: Download a specific file from a license

  • delete: Delete a specific file from a license

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe file operation to perform
file_idNoFile ID (required for download and delete actions)
file_pathNoFile path to upload (for upload action)
save_pathNoPath to save downloaded file (for download action)
license_idYesLicense ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

The annotations declare destructiveHint=true, so the agent already knows delete is destructive; the description's 'delete' operation aligns with that. The description adds little beyond the schema and annotations, only noting that operations return a dict with success status and data. It does not disclose side effects like permanent deletion, auth requirements, or file size 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 appropriately brief and well-structured with a heading, a bulleted list of operations, and a returns line. No redundant sentences.

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 a complete input schema, an output schema, and annotations, the description provides a sufficient overview of the tool's operations and return format. It could mention constraints like file size or permanent deletion, but those are not essential for basic usage with the available structured metadata.

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 already describes all five parameters with 100% coverage, including the action enum and notes that file_id is required for download/delete. The description's operation list essentially paraphrases the enum values and does not add meaningful parameter semantics beyond what the schema provides.

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 uses the specific verb 'Manage' with the resource 'file attachments for licenses' and enumerates four concrete operations (upload, list, download, delete). This clearly distinguishes it from sibling tools like asset_files and model_files by focusing on licenses.

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 context that this tool is for license file management and lists operations with one-line definitions. However, it does not explicitly state when NOT to use this tool or point to alternatives for other entities, so it lacks exclusionary guidance.

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

license_seatsA

Manage license seat checkouts and checkins.

License seats can be assigned to users or assets.

Operations:

  • list: List all seats for a license (requires license_id)

  • checkout: Checkout a seat to a user or asset (requires license_id, seat_id, and checkout_data)

  • checkin: Checkin a seat (requires seat_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe action to perform on license seats
seat_idNoSeat ID (required for checkout and checkin)
license_idNoLicense ID (required for list and checkout)
checkout_dataNoCheckout data (required for checkout action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

The annotations contain no safety hints (all false), so the description must carry the burden. It lists operations and notes the return type ('dict: Result of the operation including success status and data'), but does not disclose side effects, permission requirements, or error conditions. The operation descriptions themselves imply state changes, but no further context is added.

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: a one-sentence summary, a brief note on seat assignability, a bulleted list of operations with requirements, and a return type line. Every sentence adds value; no filler or repetition.

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 multi-action tool, the description covers all three operations, their prerequisites, and the return shape. It omits edge cases (e.g., checking in an already-checked-in seat) and permission notes, but given an output schema exists and the sibling context is clear, this is reasonably complete.

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 important per-action parameter requirements, such as 'checkin requires seat_id' and 'checkout requires license_id, seat_id, and checkout_data'. This clarifies conditional usage beyond the flat schema and is genuinely useful for an agent selecting parameters.

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: 'Manage license seat checkouts and checkins.' It enumerates three specific operations (list, checkout, checkin) with their requirements, making it distinct from license-level tools like manage_licenses.

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?

Usage guidance is provided per operation, e.g., 'list: List all seats for a license (requires license_id)' and 'checkout: Checkout a seat to a user or asset (requires license_id, seat_id, and checkout_data)'. This gives concrete contexts for use, though it doesn't explicitly exclude alternative tools.

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

manage_accessoriesA
Destructive

Manage Snipe-IT accessories with CRUD operations.

Accessories are quantity-based items (cables, adapters, peripherals) that can be checked out to users. Unlike assets, accessories are tracked by quantity rather than individually.

Operations:

  • create: Create a new accessory (requires accessory_data with name, qty, and category_id)

  • get: Retrieve a single accessory by ID

  • list: List accessories with optional pagination and filtering

  • update: Update an existing accessory (requires accessory_id and accessory_data)

  • delete: Delete an accessory (requires accessory_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on accessories
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
accessory_idNoAccessory ID (required for get, update, delete)
accessory_dataNoAccessory data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description aligns with these. It adds the return format ('dict: Result ...') and the fact that delete is included, but it does not disclose deeper behavioral traits like irreversible changes, required permissions, or error handling. Since annotations cover the safety profile, this is adequate but not rich.

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 concise and well-structured: a one-line summary, a brief contextual note, a bulleted list of operations, and a return description. 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?

The description covers all five CRUD actions and their essential parameter requirements, and mentions the return type. An output schema exists, so detailed return fields are unnecessary. It lacks explicit notes on pagination defaults or sorting behavior, but those are documented in the input schema.

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 schema has 100% parameter coverage, so baseline is 3. However, the description adds critical requirement details: it specifies that create action requires accessory_data with name, qty, and category_id, which is not marked as required in the schema. This extra guidance significantly helps the agent form correct calls.

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 'Manage Snipe-IT accessories with CRUD operations' and enumerates all actions (create, get, list, update, delete), making the purpose unmistakable. It also distinguishes accessories from assets by noting they are quantity-based, but it does not explicitly differentiate from the sibling tool 'accessory_operations'.

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 contextual guidance by explaining that accessories are quantity-based and can be checked out to users, implying when this tool is appropriate. It also gives per-action requirement hints (e.g., create requires name, qty, category_id), but it does not explicitly compare to alternatives 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.

manage_assetsA
Destructive

Manage Snipe-IT assets with CRUD operations.

This tool handles all basic asset operations:

  • create: Create a new asset (requires asset_data with at least status_id and model_id)

  • get: Retrieve a single asset by ID, asset_tag, or serial number (uses dedicated bytag/byserial endpoints for reliable barcode scanning workflows)

  • list: List assets with optional pagination, filtering by status/model/company/location/category/manufacturer/assigned_to

  • update: Update an existing asset (requires asset_id and asset_data/extra_fields)

  • delete: Delete an asset (requires asset_id)

Use extra_fields for fields not in AssetData: asset_eol_date, custom fields (snipeit*), etc. For both create and update, extra_fields are validated against the model's fieldset before sending. Invalid field names will be rejected with a list of available fields.

Note: list action returns full asset objects. With high limits this can produce large responses. Use pagination (limit/offset) to control response size.

Sortable fields for list: id, name, asset_tag, serial, model, model_number, last_checkout, category, manufacturer, notes, expected_checkin, order_number, companyName, location, image, status_label, assigned_to, created_at, purchase_date, purchase_cost

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action). Valid fields: id, name, asset_tag, serial, model, model_number, last_checkout, category, manufacturer, notes, expected_checkin, order_number, companyName, location, image, status_label, assigned_to, created_at, purchase_date, purchase_cost
limitNoNumber of results to return per page (for list action). Default 20 because each asset payload is large (~5KB with custom fields).
orderNoSort order (for list action)
actionYesThe action to perform on assets
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
serialNoSerial number (alternative to asset_id for get)
asset_idNoAsset ID (required for get, update, delete)
model_idNoFilter by model ID (for list action)
asset_tagNoAsset tag (alternative to asset_id for get)
status_idNoFilter by status label ID (for list action)
asset_dataNoAsset data for standard fields (required for create, optional for update)
company_idNoFilter by company ID (for list action)
assigned_toNoFilter by assigned user/asset/location ID (for list action)
category_idNoFilter by category ID (for list action)
location_idNoFilter by location ID (for list action)
extra_fieldsNoAdditional fields not in AssetData: asset_eol_date, custom fields (_snipeit_*), etc. For update, fields are validated against the asset's model fieldset.
manufacturer_idNoFilter by manufacturer ID (for list action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Beyond annotations (destructiveHint=true), the description discloses important behaviors: warning about large list responses, extra_fields validation with rejection of invalid names, and the use of dedicated endpoints for get. This adds substantial context about the tool's behavior, though some details like return format are left to the output schema.

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 bullets and notes, making it easy to scan. It is somewhat lengthy due to listing all sortable fields (duplicated in schema) and detailed action requirements, but every section contributes value. The overall organization is effective for a complex CRUD tool.

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 (18 params, 5 actions) and the presence of an output schema and full schema coverage, the description provides complete operational guidance. It covers required inputs per action, validation behaviors, response size considerations, and sortable fields. Slightly more detail on return value specifics could improve it, but it is largely 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?

Despite 100% schema coverage, the description enriches parameter understanding by mapping parameters to actions, e.g., 'asset_id required for get, update, delete' and 'extra_fields are validated against the model's fieldset.' It also clarifies that asset_data needs status_id and model_id for create, which is not explicitly in the schema alone.

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: 'Manage Snipe-IT assets with CRUD operations.' It then enumerates each operation (create, get, list, update, delete) with specific actions, making it distinct from sibling tools like asset_files or asset_maintenance. The scope is well-defined as 'all basic asset 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 provides clear context for when to use each action, such as 'create requires asset_data with at least status_id and model_id' and 'get uses dedicated endpoints for barcode scanning.' However, it does not explicitly name alternatives or state when not to use this tool, though the sibling tool list implies specialized tools exist for other asset operations.

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

manage_backupsA
Idempotent

Manage Snipe-IT database backups.

Operations:

  • list: List available database backup files

  • download: Download a specific backup file

Note: Backup creation is triggered via web UI or CLI, not available via API.

Returns: dict: Backup list or download result

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe backup action to perform
filenameNoBackup filename (for download)
save_pathNoLocal path to save backup (for download)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior1/5

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

There is a contradiction: the annotation readOnlyHint=false conflicts with the description's implied read-only operations (list and download). Since readOnlyHint is false, the description should have clarified that no modifications are made. The note about backup creation not being available is helpful but insufficient.

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 well-structured with a clear bullet list of operations and a relevant note. The 'Returns: dict' line is redundant given the output schema, slightly reducing efficiency.

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 two-operation tool with a solid schema and output schema, the description covers the essentials, including the critical limitation about backup creation. However, the readOnlyHint contradiction and lack of explicit read-only clarification slightly reduce completeness.

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 schema provides full descriptions for all three parameters with 100% coverage, and the description text adds no extra meaning beyond the operations list. The baseline of 3 applies because the schema already does the heavy lifting.

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 Snipe-IT database backups, listing specific operations (list and download) and explicitly notes backup creation is not available via API. This distinguishes it from sibling tools by focusing on backup retrieval.

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 provides clear context: this tool handles listing and downloading backups only, and explicitly warns that backup creation must be done via web UI or CLI. No alternative tools are named, but the scope is well-defined.

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

manage_categoriesA
Destructive

Manage Snipe-IT categories with CRUD operations.

Categories organize assets, accessories, consumables, components, and licenses.

Operations:

  • create: Create a new category (requires category_data with name and category_type)

  • get: Retrieve a single category by ID

  • list: List categories with optional pagination and filtering

  • update: Update an existing category (requires category_id and category_data)

  • delete: Delete a category (requires category_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on categories
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
category_idNoCategory ID (required for get, update, delete)
category_dataNoCategory data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description is not responsible for that. The description adds operation-level details (e.g., requires category_data) but does not disclose side effects of delete (e.g., what happens to associated items) or other behavioral traits beyond what the annotations cover. Thus it adds some value but not rich context.

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 an introductory sentence, a clear list of operations, and a return type. It is somewhat longer than necessary but every sentence serves a purpose. It avoids redundancy and is easy to scan.

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 (multiple CRUD actions) and the presence of an output schema and annotations, the description is largely complete. It covers all actions, required parameters, and the return format. It lacks edge-case notes (e.g., pagination limits or error conditions) but these are minor gaps for a well-documented schema.

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 action, notably that create requires category_data with name and category_type, which is not fully captured in the schema's per-field optionality. This clarifies usage 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 it manages Snipe-IT categories with CRUD operations, listing each operation (create, get, list, update, delete) with a specific verb and resource. This distinguishes it from sibling tools like manage_assets or manage_models, which target different entities.

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 provides clear context by explaining that categories organize assets, accessories, consumables, components, and licenses, and it enumerates operations with their requirements. However, it does not explicitly name alternative tools or state when not to use this tool, so it lacks explicit exclusions.

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

manage_companiesA
Destructive

Manage Snipe-IT companies with CRUD operations.

Companies allow you to segment your assets and users by organization. Useful for multi-tenant installations or tracking assets by subsidiary.

Actions:

  • create: Create a new company (requires company_data with name)

  • get: Retrieve a single company by ID

  • list: List companies with optional pagination and filtering

  • update: Update an existing company

  • delete: Delete a company

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on companies
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
company_idNoCompany ID (required for get, update, delete)
company_dataNoCompany data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description enumerates all actions and specifies that create requires company_data with name, which adds practical behavioral detail. It also states the return format ('dict: Result of the operation including success status and data'), going beyond the annotations. The destructiveHint is consistent with the delete action, and no contradictions are present.

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 concise and well-structured, starting with a summary, then a brief context line, followed by a clean action list and return type. Every sentence serves a purpose without redundancy or unnecessary detail.

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 (8 parameters, multiple actions) and the presence of a full schema and output schema, the description adequately covers purpose, actions, and return format. It lacks explicit details about cascading effects of deletion, but the destructiveHint annotation compensates for that 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?

The input schema provides 100% coverage for all parameters, including descriptions for action, company_id, company_data, and list filters. The description adds minimal meaning beyond the schema, merely restating that create requires company_data and list supports pagination/filtering, which the schema already communicates.

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 opens with 'Manage Snipe-IT companies with CRUD operations,' clearly identifying the resource (companies) and the operations (CRUD). The action list further details each operation, and the contextual note about segmentation distinguishes this from sibling tools managing other resource types.

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 when companies are useful ('multi-tenant installations or tracking assets by subsidiary'), providing clear context for usage. It does not explicitly mention alternatives or exclusion criteria, but the resource-specific scope makes the intended use unambiguous.

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

manage_componentsA
Destructive

Manage Snipe-IT components with CRUD operations.

Components are items that can be checked out to assets (not users). Examples: RAM, hard drives, CPUs, etc.

Actions:

  • create: Create a new component (requires component_data with name, qty, category_id)

  • get: Retrieve a single component by ID

  • list: List components with optional pagination and filtering

  • update: Update an existing component

  • delete: Delete a component

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on components
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
component_idNoComponent ID (required for get, update, delete)
component_dataNoComponent data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already label this as non-read-only and destructive; the description confirms the delete action but adds little beyond that. It does state that create requires name, qty, and category_id, and that components are asset-checkout items, which is useful context but not a deep behavioral disclosure (e.g., no info on side effects, permissions, or irreversibility).

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?

Organized into a one-sentence summary, domain definition with examples, bullet-pointed action list, and a return type line. Each section has a purpose and the length is appropriate for a five-action CRUD tool.

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?

Covers all five actions, domain meaning, the parameter requirements for create, and a basic return description. It does not explain pagination shape, error handling, or update semantics, but the schema covers parameter details and the output schema (mentioned in context signals) likely covers return structure. Adequate for the complexity.

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?

With 100% schema coverage, description still adds value by mapping each action to the relevant parameters (e.g., 'get: Retrieve a single component by ID', 'list: List components with optional pagination and filtering', and explicitly identifying required fields for create: name, qty, category_id). This goes beyond the schema, which describes parameters individually but not per-action requirements.

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?

States 'Manage Snipe-IT components with CRUD operations' and enumerates all five actions with one-line explanations. Defines components in domain terms ('items that can be checked out to assets') and gives examples, making the tool's scope unmistakable.

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?

Provides domain context that components are not checked out to users, and lists actions, but never mentions when to prefer this tool over the sibling `component_operations` or how it relates to `manage_assets`/`manage_consumables`. No exclusions or alternatives discussed.

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

manage_consumablesA
Destructive

Manage Snipe-IT consumables with CRUD operations.

This tool handles all basic consumable operations:

  • create: Create a new consumable (requires consumable_data with name, qty, and category_id)

  • get: Retrieve a single consumable by ID

  • list: List consumables with optional pagination and filtering

  • update: Update an existing consumable (requires consumable_id and consumable_data)

  • delete: Delete a consumable (requires consumable_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on consumables
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
consumable_idNoConsumable ID (required for get, update, delete)
consumable_dataNoConsumable data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds per-action input requirements and notes the return shape (success status and data), which goes beyond the annotations without contradicting them.

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 concise and well-structured: a one-line summary followed by a scannable action list and a brief returns note. Every sentence adds relevant information 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 CRUD dispatcher with an output schema and rich input schema, the description adequately covers all actions, required fields, and result semantics. It could mention pagination/filtering parameters explicitly, but the schema already documents those, so the description is sufficiently complete.

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 the baseline is 3. The description adds value by specifying which parameters are required for each action (e.g., consumable_id for get/update/delete, consumable_data for create) and highlights key nested fields like name, qty, and category_id.

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 Snipe-IT consumables with a full CRUD operation set, and enumerates each action (create, get, list, update, delete). This distinguishes it from sibling resource managers by resource type and scope.

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 frames the tool as handling 'all basic consumable operations' and provides per-action requirements (e.g., create needs consumable_data with name, qty, category_id). It gives clear context for when to use each action, though it does not mention alternatives or exclusions.

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

manage_departmentsA
Destructive

Manage Snipe-IT departments with CRUD operations.

Departments are organizational units within a company that can be assigned to users.

Actions:

  • create: Create a new department (requires department_data with name)

  • get: Retrieve a single department by ID

  • list: List departments with optional pagination and filtering

  • update: Update an existing department

  • delete: Delete a department

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on departments
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
department_idNoDepartment ID (required for get, update, delete)
department_dataNoDepartment data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, and the description aligns by listing a delete action. The description adds a return type note ('dict...') and create requirements ('requires department_data with name'), but doesn't disclose specifics about deletion consequences or other behavioral nuances. With annotations covering the safety profile, this meets the baseline.

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 opening, a brief context sentence, bulleted actions, and a returns section. It is slightly longer than necessary but each section earns its place. No redundant or filler content.

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?

The description covers CRUD operations, parameter requirements, and return format. Since an output schema exists, it needn't explain return values in detail. It is sufficiently complete for a moderate-complexity CRUD tool, though it could mention pagination/filtering specifics (already in schema) or how department_data interacts with actions.

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 the baseline is 3. The description adds value by noting that create 'requires department_data with name', which is not enforced in the schema (name is nullable). This clarifies a critical requirement beyond what the structured schema provides.

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 opens with 'Manage Snipe-IT departments with CRUD operations', clearly stating the resource and verb. It then enumerates specific actions (create, get, list, update, delete), which distinguishes it from sibling tools focused on other resources like assets or users.

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 implies usage through its action list, making it clear the tool is for department management. It doesn't explicitly say when to use this over alternatives, but the resource-specific wording and sibling context make that self-evident. Minor deduction for not stating exclusions or alternatives.

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

manage_depreciationsA
Destructive

Manage Snipe-IT depreciations with CRUD operations.

Depreciations define how assets lose value over time (e.g., 3-year straight-line).

Operations:

  • create: Create a new depreciation (requires depreciation_data with name and months)

  • get: Retrieve a single depreciation by ID

  • list: List depreciations with optional pagination and filtering

  • update: Update an existing depreciation (requires depreciation_id and depreciation_data)

  • delete: Delete a depreciation (requires depreciation_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on depreciations
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
depreciation_idNoDepreciation ID (required for get, update, delete)
depreciation_dataNoDepreciation data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint=true), the description reveals that delete is one of the operations and explains the return format ('dict: Result of the operation including success status and data'). It also details parameter requirements per action, adding value beyond the safety hints.

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 a brief overview, a bulleted list of operations, and a return type. It is informative without being verbose; every sentence adds context.

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?

For a CRUD tool with 8 parameters and 5 actions, the description covers all operations, their required inputs, and the return type. It also defines the domain concept (depreciations), making it self-contained. The existing output schema covers return details, so this is complete.

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 schema has 100% coverage, providing descriptions for all parameters. The description adds value by clarifying that create requires depreciation_data with name and months, which is not explicitly marked as required in the schema's nested object. However, most parameter semantics are already in 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 states 'Manage Snipe-IT depreciations with CRUD operations' with a clear verb and resource, and it defines what depreciations are. This clearly distinguishes it from sibling tools that manage other Snipe-IT entities.

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 lists all CRUD operations and specifies required parameters for each (e.g., create requires depreciation_data, get/update/delete require depreciation_id). It provides clear operational context, though it does not explicitly mention alternatives or 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.

manage_fieldsA
Destructive

Manage Snipe-IT custom fields with CRUD operations.

Custom fields allow you to add additional data fields to assets beyond the built-in fields. Fields must be associated with fieldsets to be used.

Actions:

  • create: Create a new custom field (requires field_data with name, element)

  • get: Retrieve a single field by ID

  • list: List fields with optional pagination and filtering

  • update: Update an existing field

  • delete: Delete a field

  • associate: Associate a field with a fieldset

  • disassociate: Remove a field from a fieldset

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (for list action)
orderNoDisplay order in fieldset (for associate action)
actionYesThe action to perform on custom fields
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
field_idNoField ID (required for get, update, delete, associate, disassociate)
requiredNoWhether field is required in fieldset (for associate action)
field_dataNoField data (required for create, optional for update)
fieldset_idNoFieldset ID (required for associate/disassociate actions)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, and the description does not contradict this. It adds context about fieldset association requirements but does not detail potential side effects of delete or other mutations. The description adds some contextual value beyond annotations but lacks depth.

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 an intro, action list, and return type. It is concise without being overly terse, though the first sentence is slightly redundant with the action list.

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 7 actions and 9 parameters, the description provides sufficient overview and prerequisites. The output schema exists, so return values are covered. It could add more on edge cases or destructive consequences, but overall it is complete enough for effective 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% with detailed descriptions, so the baseline is 3. The description adds value by explicitly stating that create requires field_data with name and element, which is not fully captured in the schema's optional subfields. Most other parameter semantics are already present in 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 manages Snipe-IT custom fields with CRUD operations and enumerates all seven actions. It distinguishes from sibling tools like manage_fieldsets by focusing specifically on custom fields rather than fieldsets.

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 gives clear context on when to use the tool (to manage custom fields) and includes important prerequisites like fields needing to be associated with fieldsets. However, it does not explicitly name alternatives or state when not to use the tool.

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

manage_fieldsetsA
Destructive

Manage Snipe-IT fieldsets with CRUD operations.

Fieldsets are collections of custom fields that can be assigned to asset models. Each model can have one fieldset, and all assets of that model will have the custom fields defined in the fieldset.

Actions:

  • create: Create a new fieldset (requires fieldset_data with name)

  • get: Retrieve a single fieldset by ID

  • list: List fieldsets with optional pagination

  • update: Update an existing fieldset

  • delete: Delete a fieldset

  • fields: List all fields in a fieldset

  • reorder: Reorder fields in a fieldset (requires field_order list of field IDs)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (for list action)
actionYesThe action to perform on fieldsets
offsetNoNumber of results to skip (for list action)
field_orderNoOrdered list of field IDs (for reorder action)
fieldset_idNoFieldset ID (required for get, update, delete, fields, reorder)
fieldset_dataNoFieldset data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate destructive behavior (destructiveHint=true). The description adds context by listing delete and reorder actions and explaining the relationship between fieldsets and asset models, but does not detail side effects of deletion or modification on associated assets, which would be valuable beyond the annotation.

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 a clear opening statement, a brief conceptual paragraph, and a structured list of actions. It is moderately concise and each section earns its place, though the action list could be slightly more compact.

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 multi-action CRUD tool, the description covers all actions and their key inputs and explains the domain concept. It includes a brief returns statement, and since an output schema exists, detailed return values are not required. It could be more complete with explicit fieldset_id requirements and potential side effects, but overall it is 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%, but the description adds meaningful action-to-parameter mappings, such as requiring fieldset_data for create and field_order for reorder. It clarifies that fieldset_id is needed for get/update/delete/fields/reorder implicitly, and the schema's default null for fieldset_data is supplemented by the description's requirement statement.

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 opens with 'Manage Snipe-IT fieldsets with CRUD operations,' which clearly states the tool's purpose and resource. It then lists specific actions (create, get, list, update, delete, fields, reorder) with brief explanations, distinguishing this from sibling tools like manage_fields by focusing on fieldsets as collections of fields.

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 context for when to use this tool, including the role of fieldsets in asset models. It gives action-specific guidance, such as 'create requires fieldset_data with name' and 'reorder requires field_order list of field IDs,' but does not explicitly exclude alternative tools like manage_fields or provide when-not-to-use scenarios.

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

manage_groupsA
Destructive

Manage Snipe-IT permission groups with CRUD operations.

Groups are used to manage permissions for multiple users at once. Users can belong to multiple groups, and permissions are cumulative.

Actions:

  • create: Create a new group (requires group_data with name)

  • get: Retrieve a single group by ID

  • list: List groups with optional pagination and filtering

  • update: Update an existing group (including permissions)

  • delete: Delete a group

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (for list action)
actionYesThe action to perform on groups
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
group_idNoGroup ID (required for get, update, delete)
group_dataNoGroup data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already indicate destructive behavior (destructiveHint=true), and the description mentions the delete action. It adds useful context about cumulative permissions, but does not disclose potential side effects of deletion (e.g., effects on users) or any other operational details beyond what annotations provide.

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 and concise, using a clear intro, context sentence, bullet-point action list, and return type. Every sentence adds value and there is no 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?

The tool has a full schema, annotations, and an output schema, so the description does not need to explain return values. It clearly lists all actions and their key parameters, making it fairly complete. Minor gaps remain around edge cases like deletion side effects, but overall it is sufficient for a CRUD tool.

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?

All parameters are covered in the schema (100% coverage), so the baseline is 3. The description adds little beyond the schema, only restating that group_data is required for create and that update can modify permissions. No additional semantics are provided.

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 Snipe-IT permission groups with CRUD operations, and the explicit action list (create, get, list, update, delete) leaves no ambiguity about the resource and operations. It distinguishes from sibling tools by focusing specifically on permission groups.

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 context about groups ('used to manage permissions for multiple users at once') and notes that permissions are cumulative, which implies when this tool is relevant. However, it does not explicitly compare with alternatives like manage_users 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.

manage_importsA
Destructive

Manage CSV import operations for bulk data import.

The import workflow is: upload → update mappings → process

Operations:

  • list: List all import files

  • get: Get import file details including column mappings

  • upload: Upload a CSV file for import

  • update: Update import column mappings and settings

  • delete: Delete an import file

  • process: Execute the import

Common field mappings for assets:

  • asset_tag, name, serial, model_id, status_id

  • purchase_date, purchase_cost, order_number

  • notes, warranty_months, supplier_id

  • location_id, company_id, category_id

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe import action to perform
file_pathNoPath to CSV file (required for upload action)
import_idNoImport file ID (required for get, update, delete, process)
import_dataNoImport configuration (for update action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already include destructiveHint=true, and the description adds context by listing delete and process operations, plus a run_backup option to safeguard imports. It also explains the workflow, which goes beyond the annotation hints. No contradiction with annotations.

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

Conciseness5/5

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

The description is well-structured with a clear opening sentence, a concise workflow, a bulleted operation list, and a relevant field mappings section. Every part adds useful information without redundancy, making it appropriately sized and front-loaded.

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 multi-action tool, the description provides a high-level overview, workflow, and field mappings while leveraging annotations and output schema. It lacks detailed per-action behavior or error handling, but overall it gives enough context for an agent to use the tool correctly. The presence of an output schema reduces the need to explain 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?

The schema already provides descriptions for all parameters (100% coverage), so the baseline is 3. The description adds value by listing common field mappings for assets (e.g., asset_tag, name, serial) and clarifying the workflow, which helps interpret the field_map parameter 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 it manages CSV import operations for bulk data import, listing six specific actions (list, get, upload, update, delete, process). This specific verb+resource combination, with the workflow and operation list, distinguishes it from sibling tools that manage individual asset types or other features.

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 a clear workflow (upload → update mappings → process) and common field mappings for assets, giving practical context for when and how to use the tool. It doesn't explicitly state when not to use it or mention alternatives, but the workflow and field mappings offer strong usage guidance.

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

manage_kitsA
Destructive

Manage Snipe-IT predefined kits (bundles of models, licenses, accessories, consumables).

Kit CRUD:

  • create: Create a kit (requires kit_data with name)

  • get / list / update / delete: Standard operations by kit_id

Kit contents (requires kit_id and item_type):

  • list_items: List the kit's models/licenses/accessories/consumables

  • add_item: Attach an item to the kit (requires item_id; optional quantity)

  • update_item: Change an attached item's quantity (requires item_id)

  • remove_item: Detach an item from the kit (requires item_id)

Note: checking out a kit to a user is only available in the Snipe-IT web UI; there is no kit-checkout API endpoint. To perform a kit checkout via MCP, list the kit's items and check each out individually.

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action): id, name, created_at, updated_at, created_by
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on predefined kits
kit_idNoKit ID (required for all actions except create and list)
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
item_idNoID of the model/license/accessory/consumable (required for add_item, update_item, remove_item)
kit_dataNoKit data (required for create, optional for update)
quantityNoQuantity of the item in the kit (for add_item, update_item)
item_typeNoKit content type (required for list_items, add_item, update_item, remove_item)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal destructive and non-read-only behavior, and the description adds meaningful behavioral context beyond those flags: there is no API endpoint for kit checkout, and items are attached/detached individually. It also explains what each content operation does at a behavioral level. It does not claim any contradiction with the annotations.

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

Conciseness4/5

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

The description is well-structured with a short intro, bullet-style CRUD and kit-content sections, and a crucial note. It is compact for the number of actions and parameters it covers. The redundant 'Returns: dict' section slightly reduces efficiency because the availability of an output schema already covers return shape.

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 an 11-parameter, 9-action tool, the description covers the key combinations of action, kit_id, item_type, item_id, and kit_data accurately. A clear omission is naming which sibling checkout tools should be used after listing items, but the description provides enough to call the tool safely. No important behavioral or workflow gap remains.

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 the input schema already documents each parameter. The description adds value by grouping parameters by action, e.g., 'requires kit_id and item_type' for content operations and 'requires item_id; optional quantity' for add_item. This action-to-parameter mapping is useful because the schema alone does not aggregate requirements by action.

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 Snipe-IT predefined kits, which are bundles of models/licenses/accessories/consumables, and enumerates the exact CRUD and content operations. The phrase 'Manage' plus the operation list distinguishes it from related tools like manage_assets or manage_licenses.

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 maps actions to the parameters they require, so an agent can select the correct action. It also includes an important exclusion: kit checkout is not available via API and must be done by listing items and checking them out individually. It does not name explicit alternative sibling tools, but the usage guidance is strong enough for action selection.

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

manage_licensesA
Destructive

Manage Snipe-IT licenses with CRUD operations.

Licenses track software licenses with seat-based allocation.

Operations:

  • create: Create a new license (requires license_data with name and seats)

  • get: Retrieve a single license by ID

  • list: List licenses with optional pagination and filtering

  • update: Update an existing license (requires license_id and license_data)

  • delete: Delete a license (requires license_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on licenses
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
license_idNoLicense ID (required for get, update, delete)
license_dataNoLicense data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds no further side-effect information beyond what the schema and annotations provide; the 'Returns' line is redundant given the output schema. No contradiction, but minimal added behavioral context.

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 concise intro, a clearly formatted list of operations, and a short return note. It is appropriately sized for a multi-action CRUD tool, with no unnecessary 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 the tool's complexity (multi-action, many parameters), the description effectively covers each action's required inputs and highlights list pagination/filtering. The output schema and annotations handle return values and safety, so the description is reasonably complete despite not covering error handling or cross-tool relationships.

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 that create requires license_data with name and seats, and by mapping each action to the required parameters, which the schema's optional defaults do not fully convey. This goes beyond simply restating parameter names.

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?

States 'Manage Snipe-IT licenses with CRUD operations' and enumerates the five CRUD actions (create, get, list, update, delete). This clearly identifies the tool's scope and distinguishes it from sibling tools like license_seats or asset_licenses, which handle more specific license-related 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 operation list provides explicit context for when to use each action, including required parameters for create/update/delete. However, it does not explicitly contrast with sibling tools like license_seats or asset_licenses, so it stops short of full usage differentiation.

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

manage_locationsB
Destructive

Manage Snipe-IT locations with CRUD operations.

Locations represent physical places where assets are stored or deployed.

Operations:

  • create: Create a new location (requires location_data with name)

  • get: Retrieve a single location by ID

  • list: List locations with optional pagination and filtering

  • update: Update an existing location (requires location_id and location_data)

  • delete: Delete a location (requires location_id)

  • assets: List all assets at a specific location

  • users: List all users assigned to a location

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list/assets/users actions)
orderNoSort order (for list action)
actionYesThe action to perform on locations
offsetNoNumber of results to skip (for list/assets/users actions)
searchNoSearch query (for list action)
location_idNoLocation ID (required for get, update, delete, assets, users)
location_dataNoLocation data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already indicate destructive behavior (destructiveHint=true), so the description does not need to repeat that. However, it adds no additional behavioral context such as side effects of deleting a location, permission requirements, irreversibility, or implications for associated assets. The description mostly restates action outcomes ('delete: Delete a location') without deeper 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-organized with a brief intro, a bulleted list of operations, and a return-type statement. It is front-loaded with the tool's purpose and uses compact phrasing. No wasted sentences, though the operations list is somewhat lengthy but necessary for clarity.

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 complex multi-action tool and rich schema/annotations, the description covers all operations with their required parameters and a return-type summary. It does not explain edge cases like pagination or sorting nuances, but the schema covers those details. It lacks explicit usage guidance but is otherwise complete for selecting actions.

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 schema has 100% parameter description coverage, so the baseline is 3. The description adds useful per-action requirements, notably that create requires location_data with name and that assets/users require location_id. However, it states update 'requires location_id and location_data', which contradicts the schema's 'optional for update' designation, creating potential confusion for agents.

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 Snipe-IT locations and enumerates CRUD operations plus asset/user listing. While the verb 'Manage' is broad, the operation list provides specific actions and the resource 'locations' distinguishes it from sibling tools like manage_assets and manage_users.

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 implies usage for location management with a brief context sentence ('Locations represent physical places where assets are stored or deployed'), and the operation list suggests when to use each action. However, it does not explicitly state when to use this tool versus alternatives or provide exclusions for other resource-specific tools.

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

manage_manufacturersA
Destructive

Manage Snipe-IT manufacturers with CRUD operations.

Manufacturers represent the companies that produce assets.

Operations:

  • create: Create a new manufacturer (requires manufacturer_data with name)

  • get: Retrieve a single manufacturer by ID

  • list: List manufacturers with optional pagination and filtering

  • update: Update an existing manufacturer (requires manufacturer_id and manufacturer_data)

  • delete: Delete a manufacturer (requires manufacturer_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on manufacturers
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
manufacturer_idNoManufacturer ID (required for get, update, delete)
manufacturer_dataNoManufacturer data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds the CRUD operation breakdown and return format. It does not disclose additional behavioral details such as cascading deletes, authentication requirements, or partial update semantics, so it only partially supplements the annotations.

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 and front-loaded, with a clear purpose, context, bulleted operations, and a returns section. Every sentence adds value without unnecessary 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?

For an 8-parameter CRUD tool, the description covers all actions and their required parameters, and the output schema handles return details. It lacks guidance on when to use alternatives and error handling, but overall it is sufficiently complete for selecting and invoking 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%, but the description adds valuable nuance by stating that create requires manufacturer_data with name, which is not explicit in the schema's optional name field. It also summarizes list filtering and pagination, making parameter usage clearer.

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 manages Snipe-IT manufacturers with CRUD operations and enumerates specific actions. It is unambiguous about the resource and actions, though it doesn't explicitly differentiate from sibling tools like manage_suppliers.

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 per-action usage details and required parameters, implying when to use the tool. However, it doesn't explicitly mention when not to use it or point to alternatives (e.g., manage_suppliers for suppliers), so the guidance is only implied rather than explicit.

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

manage_modelsA
Destructive

Manage Snipe-IT asset models with CRUD operations.

Models define types of assets (e.g., 'MacBook Pro 14"', 'Dell XPS 15').

Operations:

  • create: Create a new model (requires model_data with name and category_id)

  • get: Retrieve a single model by ID

  • list: List models with optional pagination and filtering

  • update: Update an existing model (requires model_id and model_data)

  • delete: Delete a model (requires model_id)

  • assets: List all assets of a specific model

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list/assets actions)
orderNoSort order (for list action)
actionYesThe action to perform on asset models
offsetNoNumber of results to skip (for list/assets actions)
searchNoSearch query (for list action)
model_idNoModel ID (required for get, update, delete, assets)
model_dataNoModel data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so agents know this tool can be destructive. The description adds that delete is an operation and lists required IDs, but does not go beyond that to explain side effects (e.g., whether associated assets are affected) or authentication needs. It does not contradict annotations, but adds limited behavioral context.

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-organized with a clear lead sentence, a bulleted list of operations, and a return-value note. It is succinct, front-loaded with the tool's purpose, and every line contributes operational value with no 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?

Given the tool's complexity (8 parameters, 6 actions, output schema present), the description covers all actions and required parameters, plus it mentions the return format. It does not detail pagination/filtering behaviors for list/assets, but those are already covered by the schema, so the description is comprehensive for an agent.

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?

While the schema has 100% parameter description coverage, the description adds operational nuance beyond the schema—notably that 'create' requires model_data with name and category_id, and that model_id is needed for get/update/delete/assets. This helps the agent avoid invalid calls and is value-add over 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?

Description explicitly states 'Manage Snipe-IT asset models with CRUD operations' and enumerates all six supported actions with required parameters, clearly distinguishing this tool from sibling tools like manage_assets and manage_categories. The resource scope is unambiguous and operationally detailed.

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 context for when to use the tool (any CRUD operation on asset models) but does not explicitly name alternative tools or exclusion criteria. The resource definition implies when it is the right choice, so this is a solid 4 rather than 5.

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

manage_status_labelsA
Destructive

Manage Snipe-IT status labels with CRUD operations.

Status labels define the state of assets (deployable, pending, archived, etc.).

Operations:

  • create: Create a new status label (requires status_label_data with name and type)

  • get: Retrieve a single status label by ID

  • list: List status labels with optional pagination and filtering

  • update: Update an existing status label (requires status_label_id and status_label_data)

  • delete: Delete a status label (requires status_label_id)

  • assets: List all assets with a specific status label

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list/assets actions)
orderNoSort order (for list action)
actionYesThe action to perform on status labels
offsetNoNumber of results to skip (for list/assets actions)
searchNoSearch query (for list action)
status_label_idNoStatus label ID (required for get, update, delete, assets)
status_label_dataNoStatus label data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare the tool potentially destructive, and the description adds useful action-level context by showing that delete is the destructive action while create/get/list/update are not. It does not, however, disclose potential side effects (e.g., deleting a label in use) or permissions beyond what the schema and annotations imply.

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 concise summary, a domain context sentence, and a bulleted operation list. It is slightly redundant with the schema's parameter descriptions, but it remains efficiently organized and front-loaded.

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 actions, 8 parameters) and the presence of an output schema, the description covers all actions and their core requirements. It lacks nuanced details about error handling, edge cases, or dependencies, but the provided information is sufficient for basic tool selection and invocation.

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 already has 100% description coverage, but the description adds meaning by stating that create requires status_label_data with name and type, and that update requires both status_label_id and status_label_data. This clarifies action-specific parameter requirements that are not fully expressed in the 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 identifies the resource (Snipe-IT status labels) and enumerates the CRUD actions plus an 'assets' action, so the agent knows exactly what operations are available. 'Manage' is a generic verb, but the explicit operation list removes ambiguity and distinguishes this tool from other asset-related siblings.

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 context that status labels define asset states, helping the agent infer when this tool is relevant. However, it does not explicitly mention alternatives, exclusions, or when to choose a different tool such as status_summary or manage_assets.

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

manage_suppliersA
Destructive

Manage Snipe-IT suppliers with CRUD operations.

Suppliers are vendors from whom assets and consumables are purchased.

Operations:

  • create: Create a new supplier (requires supplier_data with name)

  • get: Retrieve a single supplier by ID

  • list: List suppliers with optional pagination and filtering

  • update: Update an existing supplier (requires supplier_id and supplier_data)

  • delete: Delete a supplier (requires supplier_id)

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on suppliers
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
supplier_idNoSupplier ID (required for get, update, delete)
supplier_dataNoSupplier data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the tool's destructive nature via the 'delete' action, consistent with destructiveHint=true annotation, and adds context by clarifying what suppliers are (vendors). It also states the return type (dict with success status and data). While not detailing permissions or irreversibility, the annotation already covers the destructive aspect.

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 a clear summary, a brief domain explanation, a bulleted list of operations, and a return type. Every sentence serves a purpose, and it remains concise without unnecessary detail.

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 multi-action CRUD tool, the description covers all operations, parameter requirements, and return type, which is sufficient for an agent to select and invoke it. However, it does not specify nuances like whether update is partial or full replacement, leaving a slight gap in completeness.

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 parameters are fully described in the schema, but the description adds valuable semantics by specifying that create requires 'supplier_data' with 'name' and that update needs both 'supplier_id' and 'supplier_data'. This goes beyond the schema's generic field 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 the tool manages Snipe-IT suppliers with CRUD operations, enumerating all five actions (create, get, list, update, delete). This differentiates it from sibling tools like manage_assets or manage_consumables by specifically targeting suppliers.

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 context for each action, including required parameters (e.g., 'create requires supplier_data with name', 'get, update, delete require supplier_id'). However, it does not explicitly mention alternatives or when not to use this tool, so it stops short of a 5.

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

manage_usersA
Destructive

Manage Snipe-IT users with CRUD operations.

This tool handles all user operations:

  • create: Create a new user (requires user_data with username, password, first_name)

  • get: Retrieve a single user by ID

  • list: List users with optional pagination and filtering

  • update: Update an existing user (requires user_id and user_data)

  • delete: Delete a user (requires user_id)

  • restore: Restore a soft-deleted user (requires user_id)

  • me: Get the currently authenticated user

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (for list action)
emailNoEmail for exact match (for list action)
limitNoNumber of results to return (for list action)
orderNoSort order (for list action)
actionYesThe action to perform on users
offsetNoNumber of results to skip (for list action)
searchNoSearch query (for list action)
user_idNoUser ID (required for get, update, delete, restore)
usernameNoUsername for exact match (for list action)
user_dataNoUser data (required for create, optional for update)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With annotations already indicating destructiveHint=true and readOnlyHint=false, the description adds value by revealing the soft-delete behavior through the 'restore' action and by noting that delete requires user_id. It does not introduce contradictions, and the inclusion of restore is a meaningful behavioral detail beyond the annotations.

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

Conciseness4/5

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

The description is well-structured with a short introductory sentence, a clear bulleted action list, and a brief return note. It is somewhat longer than the minimum needed but every part serves a purpose, so it earns a 4.

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 actions, 10 parameters), the description covers all actions, required parameters, and the return type. It does not mention pagination defaults or edge cases, but the schema and output schema fill in those details, making this sufficiently complete 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.

Parameters3/5

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

Schema description coverage is 100%, and each parameter already has a description indicating which actions it applies to (e.g., user_id is 'required for get, update, delete, restore'). The description's bullet list mostly rephrases this mapping without adding new semantic content, so it stays at the 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 'Manage Snipe-IT users with CRUD operations' and then enumerates all seven actions (create, get, list, update, delete, restore, me). This specific verb+resource combination, along with the exhaustive action list, fully distinguishes it from sibling tools like user_two_factor and user_assets.

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 phrase 'This tool handles all user operations' gives clear context for when to use it, and the bullet list further specifies each action's purpose. However, it does not explicitly mention alternatives or when not to use it (e.g., when to use user_two_factor instead), so it lacks the explicit exclusion/alternative guidance needed for a 5.

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

model_filesA
Destructive

Manage file attachments for asset models.

Models can have attached files such as documentation, manuals, datasheets, or images that apply to all assets of that model.

Operations:

  • upload: Upload a file to a model

  • list: List all files attached to a model

  • download: Download a specific file from a model

  • delete: Delete a specific file from a model

Returns: dict: Result of the operation including success status and data

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe file operation to perform
file_idNoFile ID (required for download and delete actions)
model_idYesModel ID
file_pathNoFile path to upload (for upload action)
save_pathNoPath to save downloaded file (for download action)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a write-capable tool with destructive operations. The description adds the scope of files (model-level) but does not disclose additional behavioral traits such as whether deletion is permanent, whether uploads overwrite existing files, or any permission requirements. It neither contradicts nor richly extends the annotations, so 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?

The description is well-structured and concise. It opens with a clear verb+resource statement, provides a brief explanatory line, then presents operations as a bulleted list. The Returns section is useful. No wasted words; every sentence contributes to understanding functionality.

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 has an output schema and annotations, the description covers the essential aspects: purpose, operations, and a return summary. It could add a note about permission requirements or error handling, but the schema and annotations fill in most gaps. For a multi-action file management tool, this is a strong description.

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% and each parameter has a description (action enum, file_id, model_id, file_path, save_path). The description lists operations but does not add significant meaning beyond the schema—e.g., it doesn't clarify relationships between actions and required params beyond what the schema already states. Baseline of 3 is correct since the schema carries the parameter semantics.

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 file attachments for asset models, with a specific verb ('Manage') and resource ('asset models'). It lists four distinct operations (upload, list, download, delete), making its purpose unambiguous. It distinguishes from sibling tools by explicitly scoping to model-level attachments, which is distinct from asset_files or license_files.

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 context on when to use the tool: for files that apply to all assets of a model (documentation, manuals, datasheets, images). It implies these are model-level attachments, differentiating from asset-level or license-level files. However, it does not explicitly state when not to use this tool or mention alternatives, so it stops short of a 5.

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

status_summaryA
Read-onlyIdempotent

Get asset counts grouped by status label.

Returns a summary of how many assets are in each status, useful for dashboard displays and reporting.

Returns: dict: Asset counts by status label

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to disclose safety. It adds a useful behavioral detail by specifying the return type as a dict, which goes beyond the annotations. No auth or rate limit info is needed given the tool's simple read-only nature.

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 short and front-loaded, with the main action in the first sentence. The second sentence adds context, and the 'Returns:' line repeats a bit of what the output schema likely provides, but it isn't bloated. It earns its place.

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?

For a zero-parameter, read-only tool with an output schema present, the description is fully complete. It explains what the tool returns and why it's useful, leaving no important gaps.

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 zero parameters, so the baseline is 4. The description doesn't need to explain any parameters. It adds no parameter info, but none is required.

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 uses a specific verb+resource construction: 'Get asset counts grouped by status label.' This clearly distinguishes it from sibling tools like manage_status_labels or asset_labels, which focus on managing labels rather than summarizing 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?

It provides clear usage context ('useful for dashboard displays and reporting') but does not explicitly mention alternatives or exclusion scenarios. This is sufficient for a simple read-only summary tool, but it lacks an explicit 'use this instead of X' or 'when not to use' clause.

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

system_infoA
Read-onlyIdempotent

Get Snipe-IT system information.

Returns version and installation details. Useful for compatibility checking and deployment verification.

Returns: dict: System version information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds meaningful context about the return value (version and installation details) and its use cases, without contradicting the annotations.

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 extremely concise, front-loaded with the core purpose, and uses a clear structure with a Returns section. Every sentence earns its place without unnecessary verbosity.

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?

For a simple, parameterless read-only tool with rich annotations and an output schema, the description fully covers what the tool does, what it returns, and when to use it. There are no gaps in context.

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 zero parameters, so the description need not explain parameter behavior. The baseline for zero parameters is 4, and the description does not mislead or omit anything relevant.

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 'Get Snipe-IT system information' with a specific verb and resource, and elaborates that it 'Returns version and installation details.' This distinguishes it from sibling tools, which are all management/operation-focused.

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 context for use: 'Useful for compatibility checking and deployment verification.' It does not explicitly mention alternatives or exclusions, but given the tool's unique purpose, the usage 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_assetsA
Read-onlyIdempotent

Get items checked out to a user.

Retrieves assets, accessories, licenses, and/or consumables that are currently checked out to the specified user. Also supports retrieving pending EULA acceptances.

Options:

  • assets: Hardware assets checked out to user

  • accessories: Accessories checked out to user

  • licenses: License seats assigned to user

  • consumables: Consumables checked out to user

  • eulas: Pending EULA/acceptance items (items requiring user acceptance)

  • all: All items except eulas (assets, accessories, licenses, consumables)

Note: The eulas option returns items requiring user acceptance via web portal. This helps identify users with pending acceptances for follow-up.

Returns: dict: Items checked out to the user

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUser ID
asset_typeNoType of items to retrieveall

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context beyond annotations: it explains the semantic difference between 'all' and other options, clarifies that 'eulas' returns items requiring user acceptance via web portal, and gives a return type. This goes beyond basic read-only behavior.

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 introductory sentence, a bulleted list of options, a note, and a returns section. It is not excessively verbose and all content is relevant. Minor redundancy with the schema's enum list, but it improves clarity.

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 (2 parameters, 1 required) and the presence of an output schema and safety annotations, the description sufficiently covers behavior. It explains all options, the special eulas case, and the return type. It does not mention edge cases like pagination or empty results, but these are less critical for a retrieval tool with clear annotations.

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% with descriptions for both user_id and asset_type. The description adds extra meaning by listing and explaining each enum value (assets, accessories, licenses, consumables, eulas, all) and the note about eulas, which goes beyond the schema's terse 'Type of items to retrieve'. This enrichment compensates for the minimal 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 the tool's function with a specific verb and resource: 'Get items checked out to a user.' It enumerates the types of items (assets, accessories, licenses, consumables, eulas) and explicitly differentiates from sibling management tools by focusing on retrieval. The 'Note' about eulas further clarifies the scope.

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 implicitly guides usage by explaining the available asset_type options and the purpose of each (e.g., 'eulas' for pending acceptances). However, it does not explicitly state when to use this tool versus alternatives like manage_assets or asset_operations. Clear context but no explicit exclusions or alternative recommendations.

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

user_two_factorA
Destructive

Manage user two-factor authentication.

Administrative functions for managing user 2FA settings.

Operations:

  • reset: Reset a user's 2FA, requiring them to re-enroll

Note: This is an administrative function that affects user security.

Returns: dict: Result of the operation

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesThe 2FA action to perform
user_idYesUser ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds meaningful context: resetting 2FA forces re-enrollment and is security-sensitive, which goes beyond the raw annotation flags. No contradiction exists.

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 structured with an operations list and a note, but contains some redundancy. The 'Returns' section is unnecessary given an output schema exists, and the second sentence ('Administrative functions...') repeats the initial purpose. Could be tightened without loss.

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?

With only two parameters and an output schema, the description covers the operation, its security impact, and the re-enrollment consequence. It lacks explicit permission requirements, but the 'administrative' label provides sufficient context for an agent to understand usage boundaries.

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 covers both parameters with descriptions (100% coverage). The description adds the behavioral effect of the 'action' parameter (reset) and what it means for the user, enriching the schema's minimal 'The 2FA action to perform' with concrete consequences.

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 user two-factor authentication and specifically lists the 'reset' operation with its effect ('requiring them to re-enroll'). This distinguishes it from sibling tools like manage_users or user_assets, which handle broader user/asset management.

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 notes this is an administrative function affecting user security, implying it should be used with caution and by authorized admins. It does not explicitly mention alternatives, but the operation is narrowly scoped to 2FA resets, making usage context clear.

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.

  1. 4 tool updatesv1.6.1
    • Changedasset_maintenance20 fields changed
      • removedInput schema / properties / action / const
        Removed value: -"create"
      • changedInput schema / properties / action / description
        Previous value: -"The maintenance operation to perform (currently only create is supported)"New value: +"The maintenance operation to perform"
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "create",
        +  "list",
        +  "get",
        +  "update",
        +  "delete",
        +  "complete"
        +]
      • addedInput schema / properties / asset_id / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / asset_id / default
        Added value: +null
      • changedInput schema / properties / asset_id / description
        Previous value: -"Asset ID"New value: +"Asset ID (required for create; optional filter for list)"
      • removedInput schema / properties / asset_id / type
        Removed value: -"integer"
      • addedInput schema / properties / completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Filter by completion state (for list action)"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Number of results to return (for list action)",
        +  "type": "integer"
        +}
      • addedInput schema / properties / maintenance_data / anyOf
        Added value: +[
        +  {
        +    "description": "Model for asset maintenance records.",
        +    "properties": {
        +      "asset_improvement": {
        +        "description": "Type of maintenance/improvement",
        +        "type": "string"
        +      },
        +      "completion_date": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Completion date (YYYY-MM-DD)"
        +      },
        +      "cost": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Maintenance cost"
        +      },
        +      "notes": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Maintenance notes"
        +      },
        +      "start_date": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Start date (YYYY-MM-DD)"
        +      },
        +      "supplier_id": {
        +        "description": "Supplier ID",
        +        "type": "integer"
        +      },
        +      "title": {
        +        "description": "Maintenance title",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "asset_improvement",
        +      "supplier_id",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / maintenance_data / default
        Added value: +null
      • removedInput schema / properties / maintenance_data / properties
        Removed value: -{
        -  "asset_improvement": {
        -    "description": "Type of maintenance/improvement",
        -    "type": "string"
        -  },
        -  "completion_date": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Completion date (YYYY-MM-DD)"
        -  },
        -  "cost": {
        -    "anyOf": [
        -      {
        -        "type": "number"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Maintenance cost"
        -  },
        -  "notes": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Maintenance notes"
        -  },
        -  "start_date": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Start date (YYYY-MM-DD)"
        -  },
        -  "supplier_id": {
        -    "description": "Supplier ID",
        -    "type": "integer"
        -  },
        -  "title": {
        -    "description": "Maintenance title",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / maintenance_data / required
        Removed value: -[
        -  "asset_improvement",
        -  "supplier_id",
        -  "title"
        -]
      • removedInput schema / properties / maintenance_data / type
        Removed value: -"object"
      • addedInput schema / properties / maintenance_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Maintenance record ID (required for get, update, delete, complete)"
        +}
      • addedInput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Completion note (for complete action)"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Number of results to skip (for list action)",
        +  "type": "integer"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Search query (for list action)"
        +}
      • addedInput schema / properties / update_data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Model for partial updates to maintenance records (all fields optional).",
        +      "properties": {
        +        "asset_improvement": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Type of maintenance/improvement"
        +        },
        +        "completion_date": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Completion date (YYYY-MM-DD)"
        +        },
        +        "cost": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Maintenance cost"
        +        },
        +        "is_warranty": {
        +          "anyOf": [
        +            {
        +              "type": "boolean"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Whether covered under warranty"
        +        },
        +        "notes": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Maintenance notes"
        +        },
        +        "start_date": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Start date (YYYY-MM-DD)"
        +        },
        +        "supplier_id": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Supplier ID"
        +        },
        +        "title": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Maintenance title"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Fields to change (required for update action)"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "action",
        -  "asset_id",
        -  "maintenance_data"
        -]New value: +[
        +  "action"
        +]
    • Changedasset_requests9 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "request",
        -  "cancel"
        -]New value: +[
        +  "request",
        +  "cancel",
        +  "list",
        +  "requestable"
        +]
      • addedInput schema / properties / asset_id / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / asset_id / default
        Added value: +null
      • changedInput schema / properties / asset_id / description
        Previous value: -"Asset ID (must be a requestable asset)"New value: +"Asset ID (required for request and cancel; must be a requestable asset)"
      • removedInput schema / properties / asset_id / type
        Removed value: -"integer"
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Number of results to return (for requestable action)",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Number of results to skip (for requestable action)",
        +  "type": "integer"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Search query (for requestable action)"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "action",
        -  "asset_id"
        -]New value: +[
        +  "action"
        +]
    • Addedbulk_asset_operations
    • Addedmanage_kits
  2. 38 tool updatesv1.6.0
    • First observedaccessory_operations
    • First observedactivity_reports
    • First observedasset_files
    • First observedasset_labels
    • First observedasset_licenses
    • First observedasset_maintenance
    • First observedasset_operations
    • First observedasset_requests
    • First observedaudit_tracking
    • First observedcomponent_operations
    • First observedldap_operations
    • First observedlicense_files
    • First observedlicense_seats
    • First observedmanage_accessories
    • First observedmanage_assets
    • First observedmanage_backups
    • First observedmanage_categories
    • First observedmanage_companies
    • First observedmanage_components
    • First observedmanage_consumables
    • First observedmanage_departments
    • First observedmanage_depreciations
    • First observedmanage_fields
    • First observedmanage_fieldsets
    • First observedmanage_groups
    • First observedmanage_imports
    • First observedmanage_licenses
    • First observedmanage_locations
    • First observedmanage_manufacturers
    • First observedmanage_models
    • First observedmanage_status_labels
    • First observedmanage_suppliers
    • First observedmanage_users
    • First observedmodel_files
    • First observedstatus_summary
    • First observedsystem_info
    • First observeduser_assets
    • First observeduser_two_factor

TDQS

A3.6/5.0

Scored across 40 tools

Disambiguation3/5

The manage_* CRUD tools are clearly separated by resource, but the asset domain is split across many tools (manage_assets, asset_operations, bulk_asset_operations, asset_maintenance, asset_files, asset_licenses, asset_requests) and audit/reporting tools (audit_tracking, status_summary) overlap in purpose. Descriptions are detailed enough to recover, but an agent could easily pick the wrong tool for an audit, status, or license-assignment task.

Naming Consistency4/5

The 21 manage_<resource> tools establish a clear CRUD convention, and patterns like <resource>_operations, <resource>_files, and license_seats provide additional structure. However, reporting/utility tools use inconsistent noun/gerund forms (audit_tracking, status_summary, system_info, activity_reports, asset_requests) rather than a uniform verb-based convention.

Tool Count2/5

40 tools is well beyond the 16-25 range the rubric considers heavy, even though Snipe-IT is a broad domain. The repeated CRUD sub-operations could be consolidated into fewer parameterized tools or grouped by resource without sacrificing coverage.

Completeness4/5

The server covers CRUD and lifecycle/state operations for nearly every Snipe-IT entity: assets, accessories, consumables, components, licenses, users, locations, and supporting data. The only notable gaps are operations the API itself does not expose (request approval, kit checkout, backup creation), so agents face a few web-only dead ends rather than missing core coverage.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Snipe-IT inventory systems through comprehensive asset and consumable operations. Supports creating, updating, tracking, and managing IT assets, consumables, maintenance records, file attachments, and generating labels.
    1
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to connect with Freshservice ITSM for managing tickets, assets, agents, and organizational data through natural language. It provides a comprehensive set of tools for performing CRUD operations on service desk records and searching across the Freshservice platform.
    53
    29
    1
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables AI agents to interact with the Shopmonkey REST API to manage shop management data including work orders, customers, vehicles, and inventory. It provides 33 tools across 9 resource groups with built-in support for rate limiting, concurrency control, and multi-location management.
    69
    2
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    Provides AI assistants with direct access to Autotask PSA for MSP operations. Enables natural language interaction for ticket management, time logging, company lookups, project tracking, and billing review through 39 comprehensive tools.
    100
    17
    Apache 2.0