Skip to main content
Glama
karlattard237

Snipe-IT Copilot MCP

Snipe-IT Copilot MCP

A production-oriented Model Context Protocol server for Snipe-IT, designed specifically for Microsoft Copilot Studio generative orchestration.

This is a greenfield implementation. It talks directly to Snipe-IT with asynchronous httpx, exposes exactly 29 semantic tools, uses Streamable HTTP at /mcp, and declares inline Copilot-safe input/output schemas. It does not depend on a third-party Snipe-IT Python wrapper.

Why this server exists

Generic CRUD tools and loosely typed dict outputs make it difficult for an orchestrator to know which fields actually exist. This server makes important inventory data visible in the MCP contract itself. In particular, asset responses explicitly advertise asset_tag, serial, model_name, model_number, manufacturer, status, assignment, and location. user_inventory reuses the same asset normalizer and schema.

The public contract avoids $ref, $defs, definitions, multi-type type arrays, and ambiguous schema unions that Copilot Studio currently does not support reliably.

Related MCP server: mcp-m365-mgmt

Highlights

  • 29 tools, grouped by domain and safety class.

  • Only delete_resource can issue HTTP DELETE.

  • Direct asynchronous Snipe-IT REST calls with bounded requests/responses.

  • Shared service-account token and per-user Snipe-IT Passport OAuth modes.

  • HTTP 200 plus Snipe-IT application-error detection.

  • Exact tag, serial, email, username, and employee-number resolution.

  • Global search, per-field filters, advanced filter JSON, and custom-field name resolution.

  • Rich, defensive normalizers that preserve unknown values as extra_fields name/value arrays.

  • Limit/offset and page/per-page pagination normalized into predictable envelopes.

  • Structured JSON logs with credential redaction.

  • Health (/health) and readiness (/ready) endpoints.

  • Docker, systemd, nginx, idempotent setup/update scripts, schema linting, and tests.

Architecture

Copilot Studio -- Streamable HTTP /mcp --> FastMCP 3
                                             |
                 explicit schemas + 29 semantic tools
                                             |
                 resolvers -> normalizers -> async httpx client
                                             |
                                  Snipe-IT /api/v1

See docs/ARCHITECTURE.md, docs/SECURITY.md, docs/FEATURE_PARITY.md, and docs/SNIPEIT_API_COVERAGE.md.

Requirements

  • Python 3.11 or newer

  • uv

  • A reasonably current Snipe-IT release with API access

  • HTTPS with a publicly trusted or explicitly configured enterprise CA for production

The API audit was refreshed against Snipe-IT v8.6.2/current source on 2026-08-07. Optional endpoints remain registered and fail cleanly when an older connected server does not support them.

Quick start

For a complete installation walkthrough covering credentials, local development, Docker, Linux/systemd, HTTPS, and the Copilot Studio connection, see docs/INSTALLATION.md.

cp .env.example .env
# Edit .env first; do not commit it.
uv sync --frozen
set -a; . ./.env; set +a
mkdir -p .tmp/fastmcp
FASTMCP_HOME="$PWD/.tmp/fastmcp" uv run --frozen python -m snipeit_copilot_mcp

The production MCP URL is:

https://your-mcp-host.example/mcp

For local stdio development only:

MCP_TRANSPORT=stdio uv run python -m snipeit_copilot_mcp

Authentication

Shared API-token mode

Configure SNIPEIT_URL, SNIPEIT_TOKEN, and—in HTTP mode—a separate SNIPEIT_MCP_TOKEN of at least 32 characters. Copilot sends the latter as the MCP server bearer/API key. Snipe-IT sees only the service account represented by SNIPEIT_TOKEN; its permissions remain authoritative.

Never reuse the privileged upstream token as the inbound MCP credential.

Per-user OAuth mode

Create a Laravel Passport OAuth client in Snipe-IT with redirect URI:

https://your-mcp-host.example/auth/callback

Configure all SNIPEIT_OAUTH_* values, the public SNIPEIT_MCP_BASE_URL, an explicit Copilot callback allowlist, and a durable SNIPEIT_OAUTH_JWT_SIGNING_KEY. FastMCP exposes OAuth discovery/DCR-compatible proxy endpoints and forwards interactive login to Snipe-IT. Each tool call uses the authenticated user's upstream token, so their Snipe-IT permissions are preserved.

Keep FASTMCP_HOME on persistent, mode-restricted storage. For a horizontally scaled deployment, use a supported shared encrypted storage backend instead of local state.

Detailed configuration is in docs/COPILOT_STUDIO_SETUP.md.

Tool overview

Tool

Purpose

Safety

assets_search

Asset list/get/search/exact tag/exact serial/requestable catalog

Read-only

assets_write

Asset create/update

Write, non-delete

asset_lifecycle

Checkout/checkin/audit/restore

Write, non-delete

files_read

Attachment list/bounded download

Read-only

files_upload

Bounded multipart upload

Write, non-delete

asset_labels

Generate label PDF

Read/generate

asset_maintenance

Maintenance records, notes, types, completion

Mixed, non-delete

asset_licenses

Licences associated with an asset

Read-only

asset_requests

Request/cancel requestable asset

Write, non-delete

inventory_search

Accessories/components/consumables

Read-only

inventory_write

Inventory create/update

Write, non-delete

inventory_lifecycle

Inventory assignment/checkin

Write, non-delete

users_search

User lookup/current user

Read-only

users_write

Create/update/restore/explicit 2FA reset

High-impact write

user_inventory

All inventory assigned to one user

Read-only

organization_search

Companies/departments/groups

Read-only

organization_write

Organisation create/update

Write, non-delete

catalog_search

Reference/configuration and relationships

Read-only

catalog_write

Reference/configuration create/update

Write, non-delete

custom_fields_search

Fields/fieldsets/membership

Read-only

custom_fields_write

Field/fieldset writes and ordering

Write, non-delete

licenses_search

Licence search/get

Read-only

licenses_write

Licence create/update

Write, non-delete

license_seats

Seat list/checkout/checkin/update

Mixed, non-delete

reports

Activity/status/audit/depreciation reports

Read-only

imports

Explicit staged CSV workflow

High-impact write

system_read

Version/backups

Read-only

ldap_operations

Connection test or explicit sync

High-impact write

delete_resource

Confirmed deletion only

Destructive

Tool filtering

Unset SNIPEIT_ALLOWED_TOOLS to expose all tools. Set an exact comma-separated allowlist to expose a least-privilege subset:

SNIPEIT_ALLOWED_TOOLS=assets_search,users_search,user_inventory,inventory_search,catalog_search

Unknown, blank, or incorrectly cased names fail startup.

Testing and validation

uv sync --extra test
uv run pytest --cov=snipeit_copilot_mcp --cov-report=term-missing
uv run python scripts/validate_copilot_schemas.py

Integration tests require SNIPEIT_INTEGRATION_TESTS=true and separate test-instance credentials. Destructive integration tests additionally require SNIPEIT_INTEGRATION_ALLOW_DESTRUCTIVE=true; they never run by default.

Use MCP Inspector against the production transport:

npx @modelcontextprotocol/inspector http://127.0.0.1:8000/mcp

Docker

docker build -t snipeit-copilot-mcp:1.0.0 .
docker run --rm --env-file .env -p 127.0.0.1:8000:8000 \
  -e MCP_HOST=0.0.0.0 \
  -v snipeit-mcp-state:/var/lib/snipeit-copilot-mcp \
  snipeit-copilot-mcp:1.0.0

Terminate TLS at a trusted reverse proxy. Do not publish plaintext port 8000 directly to the internet.

systemd deployment

sudo git clone YOUR_REPOSITORY_URL /opt/snipeit-copilot-mcp
cd /opt/snipeit-copilot-mcp
sudo ./scripts/setup.sh
sudoedit /etc/snipeit-copilot-mcp.env
sudo systemctl enable --now snipeit-copilot-mcp.service
curl http://127.0.0.1:8000/health

Update:

sudo /opt/snipeit-copilot-mcp/scripts/update.sh

The installer creates a non-login, non-root service user; root-owned source and virtual environment; a persistent state directory; a mode-0640 environment file; a hardened unit; and automatic boot startup. TLS guidance and the nginx example are in deploy/.

Snipe-IT permissions

Tokens inherit the Snipe-IT user's permissions. Grant only the domains and actions the deployed allowlist needs. The MCP never retries alternative endpoints to bypass a 403 and returns permission_denied clearly.

Troubleshooting

  • 401 from the MCP boundary: verify Copilot's MCP API key/OAuth connection, not the upstream token.

  • authentication_failed: verify SNIPEIT_TOKEN or complete the per-user Passport login.

  • permission_denied: adjust the Snipe-IT user's permissions; the MCP will not bypass them.

  • HTML instead of JSON: verify the Snipe-IT URL and reverse proxy and ensure API requests retain Accept: application/json.

  • Missing tools: check the exact SNIPEIT_ALLOWED_TOOLS allowlist and run the schema linter.

  • TLS failure: install the correct CA and set SNIPEIT_CA_BUNDLE; do not disable verification in production.

  • Optional endpoint unavailable: inspect system_read(action_name="version") and the API coverage matrix.

Upgrade strategy

The client ignores unknown response fields, normalizers tolerate missing nested objects, and useful unknown values are retained as bounded extra_fields. Public schemas remain stable. Before upgrading FastMCP or Snipe-IT, run the full suite, schema linter, MCP Inspector tools/list, and representative mocked/safe integration calls.

Acknowledgements

This project was inspired by jameshgordy/snipeit-mcp. The feature parity guide maps its capabilities to this Copilot Studio implementation.

OpenAI Codex assisted with the design, implementation, security review, testing, and documentation of this project.

License

MIT. See LICENSE.

Available Tools

29 tools
asset_labelsA
Read-onlyIdempotent

Generate a bounded printable Snipe-IT asset-label PDF for explicitly supplied asset IDs. Returns file metadata and base64 content suitable for a client to save. Do not use for ordinary asset lookup or for unbounded label generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
label_nameNo
asset_ids_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, open-world behavior, so the bar is lower. The description adds that generation is bounded, must use explicitly supplied IDs, and returns base64 file content suitable for saving. It does not cover auth requirements or output 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?

Three sentences, front-loaded with purpose, then return payload, then exclusions. No filler, and the ordering puts the key constraint where an agent will read it first.

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?

With an output schema present, return values need not be explained, and annotations cover safety. The description handles purpose, bounds, and exclusions well, but leaves material gaps: label_name's meaning and asset_ids_json's format are undocumented anywhere, which matters for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must carry the burden. It hints that asset IDs are explicitly supplied and bounded, but never clarifies the JSON-string format of asset_ids_json, and label_name is not mentioned at all. Half the parameters remain semantically unexplained.

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

Purpose5/5

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

The description states a specific verb ('Generate'), resource ('printable Snipe-IT asset-label PDF'), and scope ('for explicitly supplied asset IDs'). It is immediately distinguishable from lookup-oriented siblings like assets_search and catalog_search.

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

Usage Guidelines4/5

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

It gives an explicit when-not clause: 'Do not use for ordinary asset lookup or for unbounded label generation.' That clearly routes the agent away from misuse. It stops short of naming the specific alternative tool for lookup or unbounded generation.

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

asset_licensesB
Read-onlyIdempotent

Read software licences associated with one asset, resolving an exact asset tag or serial when needed. Returns product keys only when Snipe-IT and the caller's permissions expose them. This tool is read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
serialNo
asset_idNo
asset_tagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds genuine non-structured context: product keys are returned only when both Snipe-IT and the caller's permissions expose them. The trailing 'This tool is read-only' sentence partly restates readOnlyHint=true, keeping it short of a 5.

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

Conciseness4/5

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

Three short sentences with the primary action front-loaded and no filler. The final read-only sentence is largely redundant with the annotations, so it does not fully earn its place.

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?

An output schema exists, so return-shape explanation is not required, and the permission caveat is a useful addition. However, for a zero-required-parameter tool with 0% schema coverage, the description never clarifies identifier selection rules or pagination, leaving a real gap.

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

Parameters2/5

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

Schema description coverage is 0% across 5 parameters, so the description must carry the load. It mentions 'exact asset tag or serial', which touches two parameters, but asset_id, limit, and offset are never explained, nor is it stated that at least one identifier must be supplied. Compensation is partial at best.

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

Purpose4/5

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

States a specific verb and resource ('Read software licences') scoped to 'one asset', which is clearer than a bare resource name. It does not explicitly contrast with licenses_search, licenses_write, or license_seats, so sibling differentiation is left to inference.

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

Usage Guidelines2/5

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

The 'when needed' phrasing around asset tag/serial resolution hints at how to identify the target asset, but there is no explicit when-to-use guidance and no named alternative (e.g. licenses_search for licenses not tied to an asset). An agent must infer the boundary from the name alone.

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

asset_lifecycleA

Checkout, checkin, audit, or restore one Snipe-IT asset after deterministically resolving its ID. Human identifiers and exact user email are accepted when unambiguous. Use only when the user explicitly requests the lifecycle action. This tool never deletes an asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
serialNo
asset_idNo
asset_tagNo
user_emailNo
action_nameYes
location_idNo
assigned_to_idNo
next_audit_dateNo
checkout_to_typeNouser
expected_checkinNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true. The description adds meaningful context beyond these: it never deletes an asset, it resolves IDs deterministically, and email/identifiers must be unambiguous. It does not describe what each action does to asset state or any permission/rate requirements.

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?

Three tight sentences, front-loaded with the core actions and scope, followed by input constraints and the deletion disclaimer. No filler or redundancy.

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?

An output schema exists so return values need not be explained, and the safety profile is covered by annotations. However, for an 11-parameter mutation tool with 0% schema coverage, the description leaves most parameter semantics and per-action behavior undocumented, which is a notable gap.

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

Parameters2/5

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

Schema description coverage is 0% across 11 parameters, so the description carries the full burden and only partially compensates. It hints at action_name via the verb list and references identifiers and exact user email, but says nothing about expected_checkin, next_audit_date, location_id, assigned_to_id, checkout_to_type, note, or serial vs asset_tag vs asset_id.

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 names specific verbs (checkout, checkin, audit, restore) and a specific resource (one Snipe-IT asset), and explicitly scopes out deletion, which distinguishes it from delete_resource. It stops short of naming how it differs from nearby siblings like asset_maintenance or inventory_lifecycle, so it is clear but not fully differentiated.

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 gives an explicit gating condition ('Use only when the user explicitly requests the lifecycle action') and states the identifier-resolution requirement. It does not name alternative sibling tools or when-not-to-use cases beyond the explicit-request rule, 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_maintenanceB

List, retrieve, create, update, complete, or add/list notes for Snipe-IT asset maintenance, and list maintenance types. Use for maintenance records only. The tool cannot delete maintenance records or types; deletion is isolated in delete_resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
costNo
limitNo
notesNo
titleNo
offsetNo
asset_idNo
start_dateNo
action_nameYes
supplier_idNo
maintenance_idNo
completion_dateNo
maintenance_type_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already disclose non-readonly, non-idempotent, non-destructive, open-world behavior. The description adds no further behavioral detail: it does not state whether update/complete are reversible, what happens to omitted fields, whether partial updates are supported, or what the output contains. With annotations carrying meaningful safety signals, the description should add extra context but does not.

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 tight sentences: the first lists supported actions, the second scopes the tool and points to deletion. No filler, front-loaded with the capability summary, and easy to parse quickly.

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

Completeness2/5

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

The tool handles many actions with 12 parameters, one required, and no schema descriptions, making guidance critical. Despite having an output schema (which reduces the need to explain returns), the description does not clarify how parameters map to actions, what requiredness looks like per action, or typical workflows. It is inadequate for a multi-action tool with zero parameter documentation.

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

Parameters1/5

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

Schema description coverage is 0%, so 12 parameters (including action_name, maintenance_id, asset_id, dates, cost, notes, and maintenance_type_id) have no documented meaning anywhere. The description does not explain any parameter usage, requiredness, dependencies, or how they map to the various actions. It leaves the agent guessing how to populate the schema for each action.

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 enumerates specific actions (list, retrieve, create, update, complete, add/list notes) and clearly scopes the tool to Snipe-IT asset maintenance records and types. It is explicit about what the tool cannot do (delete) and names the sibling that handles deletion. It loses a point only because it packs multiple distinct operations into one tool, which can blur the primary purpose at a glance.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use ('Use for maintenance records only'), a clear exclusion ('cannot delete maintenance records or types'), and points to the alternative tool ('delete_resource'). An agent can immediately decide whether this tool is appropriate or should route to delete_resource.

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

asset_requestsA

Submit or cancel the authenticated user's request for a requestable asset. Use only when the user explicitly asks to request or cancel a request. This does not approve requests, checkout assets, or delete data.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
serialNo
asset_idNo
asset_tagNo
action_nameYes
expected_checkoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare write (readOnlyHint=false), non-destructive, non-idempotent, and open-world behavior. The description adds real context beyond that: the operation is limited to the authenticated user's own request and requires explicit user intent, plus the negative capability list. It does not say what happens on a duplicate submit/cancel or whether permission scopes are required, so it is not a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then the trigger condition, then the exclusions. No filler and nothing repeated from structured fields.

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?

An output schema exists, so return values need not be described. However, for a 6-parameter tool with 0% schema coverage, the description leaves the most consequential ambiguity unresolved: which identifier to supply and what action_name accepts.

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

Parameters2/5

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

Schema description coverage is 0% across 6 parameters, so the description must carry the load. It only hints at action_name's two modes (submit/cancel) without giving literal values, and says nothing about asset_id vs asset_tag vs serial vs expected_checkout vs note, leaving the agent unable to choose the identifying parameter.

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

Purpose5/5

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

States a specific verb pair (submit/cancel) on a specific resource (a requestable asset request), scoped to the authenticated user's own request. It also explicitly distinguishes itself from adjacent operations (approval, checkout, deletion), so an agent can separate it from assets_write, asset_lifecycle, or delete_resource.

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?

"Use only when the user explicitly asks to request or cancel a request" is an explicit trigger condition, and "does not approve requests, checkout assets, or delete data" is an explicit when-not boundary. It stops short of naming the sibling tool to use for approval/checkout instead, which keeps it out of the top band.

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

assets_writeA
Idempotent

Create or update a Snipe-IT hardware asset using explicit common fields and optional custom fields. Use only for an explicit create or update request. This tool cannot delete, checkout, checkin, audit, or restore assets. Returns the normalized asset when the backend includes it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
notesNo
serialNo
archivedNo
asset_idNo
model_idNo
asset_tagNo
status_idNo
company_idNo
action_nameYes
location_idNo
requestableNo
supplier_idNo
order_numberNo
purchase_costNo
purchase_dateNo
warranty_monthsNo
custom_fields_jsonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false and idempotent=true, so the safety profile is covered; the description still earns credit by scoping the write surface explicitly and noting the return is conditional on the backend including the asset. It does not, however, explain the create-vs-update discriminator that underlies the idempotent claim.

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?

Three sentences, all load-bearing: purpose first, usage gate second, exclusions and return semantics last. No filler or restatement of the name.

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?

An output schema exists, so return-value detail is not required, and the exclusion list covers a lot of ground for a busy write tool. But with 18 undescribed parameters, an unexplained required action_name, and no statement of what identifies the target asset on update, the definition leaves the agent guessing at the exact call shape.

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

Parameters2/5

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

Schema description coverage is 0% across 18 parameters, so the description carries the full semantic burden and mostly fails to. It gestures at "explicit common fields and optional custom fields" (presumably custom_fields_json), but never names a field, gives the custom_fields_json format, or explains the required action_name discriminator that selects create vs update.

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 a specific verb pair (create/update) and a specific resource (Snipe-IT hardware asset), and explicitly enumerates what it is NOT (delete, checkout, checkin, audit, restore). That enumeration cleanly separates it from siblings such as asset_lifecycle, delete_resource, and asset_maintenance without opening any schema.

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?

"Use only for an explicit create or update request" is a clear gating condition, and the negative list tells the agent when to look elsewhere. It stops short of naming the sibling to use for the excluded operations (e.g., asset_lifecycle for checkout/checkin), so routing is 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.

catalog_writeB
Idempotent

Create or update supported Snipe-IT catalog records with explicit model, status, hierarchy, contact, depreciation, and type fields. Use for normal requested configuration writes. This tool has no delete action; all catalog deletion goes through delete_resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
cityNo
nameNo
emailNo
notesNo
phoneNo
stateNo
monthsNo
addressNo
countryNo
item_idNo
pendingNo
archivedNo
zip_codeNo
parent_idNo
deployableNo
manager_idNo
action_nameYes
category_idNo
fieldset_idNo
status_typeNo
catalog_typeYes
model_numberNo
category_typeNo
depreciation_idNo
manufacturer_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safety profile (not read-only, not destructive, idempotent, open-world). The description adds one useful behavioral fact beyond them: there is no delete action and deletions live in delete_resource. However, it doesn't clarify how create vs update is disambiguated or what action_name controls, so it only modestly enriches the annotation picture.

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?

Three sentences, front-loaded with the core purpose, followed by usage context and the deletion exclusion. No wasted prose, though the field enumeration is somewhat list-like rather than informative.

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?

An output schema exists so return values needn't be explained, and annotations cover the safety profile. But for a 26-parameter tool with 0% parameter coverage, the description leaves significant gaps around what catalog_type values exist and how action_name selects the operation, making it only minimally complete given the complexity.

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

Parameters2/5

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

With 26 parameters at 0% schema description coverage, the description carries the full documentation burden but only gestures at broad field categories. It never explains the two required parameters (catalog_type, action_name), which are the most critical for invocation, nor the integer IDs (parent_id, manager_id, depreciation_id, etc.). This leaves most parameter semantics undocumented in both schema and description.

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 gives a specific verb pair (create/update) and resource (Snipe-IT catalog records) and enumerates the field domains covered (model, status, hierarchy, contact, depreciation, type). It also distinguishes itself from delete_resource, so an agent can route writes vs deletes correctly. It stops short of naming the search sibling, but the scope is clear.

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?

"Use for normal requested configuration writes" tells the agent the operational context, and the explicit routing of all deletions to delete_resource acts as a strong when-not-to-use exclusion. It lacks guidance on how it relates to catalog_search or other write siblings, so it is not fully exhaustive.

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

custom_fields_writeA
Idempotent

Create/update fields and fieldsets, associate or disassociate a field, or reorder fields. Use explicit actions create_field, update_field, create_fieldset, update_fieldset, associate, disassociate, or reorder. This tool cannot delete fields or fieldsets.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
orderNo
elementNotext
field_idNo
requiredNo
help_textNo
action_nameYes
fieldset_idNo
field_formatNoANY
field_valuesNo
show_in_emailNo
field_encryptedNo
field_order_jsonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful constraint (no deletion), but with 13 parameters it says nothing about what each action mutates, what is required per action, or auth/permission needs.

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?

Three short sentences, front-loaded with the capability list followed by the action vocabulary and the exclusion. No filler or redundancy.

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?

The output schema exists, so return values need not be described, and the description does cover purpose and the action vocabulary. However, for a 13-parameter multi-action tool with zero schema documentation, the absence of any parameter-to-action mapping is a real completeness gap.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema supplies only parameter names and defaults. The description usefully fills the one critical gap by naming the valid action_name values (the schema has no enum), but it leaves the other twelve parameters (field_id, fieldset_id, element, field_format, field_order_json, etc.) with no explanation of which action consumes them.

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 a specific verb+resource (create/update/associate/reorder fields and fieldsets) and enumerates the seven supported operations by name. It also explicitly excludes deletion, which cleanly separates it from custom_fields_search and delete_resource siblings.

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

Usage Guidelines4/5

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

It tells the agent to drive the tool via explicit action_name values and states a clear negative boundary ('cannot delete fields or fieldsets'), which implicitly routes deletion elsewhere. It stops short of naming the alternative tool or explaining when to pick a specific action over another.

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

delete_resourceA
Destructive

Permanently or destructively remove confirmed Snipe-IT data. Use only for an explicit deletion request after the calling agent has retrieved and shown the exact target and received immediate user confirmation. For files, provide parent_id and file_id; for records, provide resource_id. This is the only MCP tool that can issue HTTP DELETE.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idNo
parent_idNo
resource_idNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds genuine value beyond that: permanence of the deletion, the mandatory confirm-with-user precondition, and the parameter routing per target type. It does not disclose permission requirements or whether deletion cascades to related records.

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?

Three sentences, front-loaded with the destructive scope and the exclusivity claim, followed by the precondition and the parameter routing. Every sentence carries information an agent needs; no 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 a destructive mutation with full annotation coverage and an existing output schema, the description is nearly complete: it covers destruction semantics, the confirmation workflow, and argument selection. The remaining gap is the undefined resource_type vocabulary, which matters because that parameter is required.

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 0%, so the description must compensate. It does clarify the file path (parent_id + file_id) versus the record path (resource_id), but the required resource_type parameter is never explained — no accepted values or what entities it covers — so half the semantic burden is still unmet.

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 a specific verb and resource ('remove confirmed Snipe-IT data') with the scope modifier 'Permanently or destructively'. It also distinguishes itself from all siblings by declaring it is 'the only MCP tool that can issue HTTP DELETE', so an agent can route to it without opening other schemas.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use gate ('only for an explicit deletion request after the calling agent has retrieved and shown the exact target and received immediate user confirmation') and branches the usage by target type (files vs records). Nothing about selection is left to inference.

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

files_readA
Read-onlyIdempotent

List attachment metadata or download one bounded attachment for a supported Snipe-IT parent. Download returns base64 only when the file fits max_inline_bytes; otherwise it reports metadata and content_truncated=true. This tool cannot upload or delete files.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
file_idNo
parent_idYes
action_nameYes
parent_typeYes
max_inline_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: base64 is returned only when the file fits max_inline_bytes, otherwise metadata with content_truncated=true, plus the explicit no-write boundary. Auth/rate-limit details are absent.

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?

Three tight sentences, front-loaded with the two modes and the truncation rule, with zero filler. Each sentence adds a distinct constraint (mode, size behavior, write exclusion).

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?

An output schema exists, so return values need not be explained, and annotations cover safety. However, with 7 parameters at 0% schema coverage, the description omits the action_name vocabulary and valid parent_type values, leaving an agent unable to construct a correct call from either field alone.

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

Parameters2/5

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

Schema coverage is 0% across 7 parameters, so the description must carry the load. It explains max_inline_bytes semantics well but leaves action_name (no enum values), parent_type, parent_id, file_id, limit and offset entirely undocumented, so most parameters remain opaque.

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 two specific modes (list attachment metadata, download one bounded attachment) for a named resource and system (Snipe-IT attachments), and explicitly bounds itself against siblings by saying it 'cannot upload or delete files', separating it from files_upload and delete_resource.

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 makes clear when each mode applies (list metadata vs. a single bounded download) and gives a negative boundary ('cannot upload or delete files'), which routes the agent away from write siblings. It stops short of naming the concrete alternatives or listing the action_name values that select each mode.

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

files_uploadA

Upload one explicitly supplied base64 attachment to a supported Snipe-IT parent. The filename is sanitized, upload size is bounded, and multipart encoding is used. This tool cannot read or delete attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
filenameYes
mime_typeNoapplication/octet-stream
parent_idYes
parent_typeYes
content_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing that the filename is sanitized, upload size is bounded, and multipart encoding is used, plus the read/delete limitation. It does not state auth requirements, the actual size ceiling, or the non-idempotent consequence of repeat uploads, so it is strong but not exhaustive.

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?

Three short sentences, front-loaded with the action and scope, then constraints, then non-capabilities. Every clause carries information; nothing is redundant.

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?

An output schema exists so return values need no explanation, and the write/safety profile is reasonably covered. However, for a 6-parameter tool with zero schema coverage and no enum hints, the description leaves the agent unable to determine valid parent_type values or payload size limits.

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

Parameters2/5

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

Schema description coverage is 0% and there are 6 parameters, so the description must carry the load. It only loosely gestures at filename and base64 content and never explains parent_type's accepted values, parent_id semantics, mime_type defaults, or the notes field, leaving most parameters undocumented in both places.

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 a specific verb+resource ('Upload one explicitly supplied base64 attachment') scoped to 'a supported Snipe-IT parent'. It also separates itself from the sibling files_read by declaring 'This tool cannot read or delete attachments', so an agent can route without opening a schema.

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 'one explicitly supplied base64 attachment' phrasing tells the agent this is for an already-obtained payload rather than fetching content, and the read/delete exclusion implicitly routes those needs to files_read. It stops short of naming the alternative tool or stating prerequisites (permissions, valid parent types).

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

importsA
Destructive

Run the Snipe-IT CSV import workflow in explicit stages: list, get, upload, configure, validate, or process. Upload never processes a file; process runs only when action_name=process is explicitly requested. This tool cannot delete import files; use delete_resource after separate confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
filenameNo
import_idNo
run_backupNo
action_nameYes
import_typeNo
content_base64No
field_map_jsonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and non-idempotent, and the description usefully narrows that: upload never processes a file, process only fires on an explicit request, and the tool cannot delete import files. It also implies a confirmation gate before deletion. It stops short of describing auth requirements, side effects of configure/validate, or backup behavior.

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?

Three sentences, zero filler, and the purpose is front-loaded before the two safety constraints. Each sentence carries distinct information and nothing is repeated from the annotations or schema.

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?

An output schema exists, so return values need no explanation, and the stage enumeration plus safety caveats cover the behavioral core of a multi-action tool. The gap is that an agent cannot tell which parameters belong to which stage (e.g. whether content_base64 is for upload and field_map_json for configure), which is essential for a 9-parameter action-dispatch tool.

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

Parameters2/5

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

Schema description coverage is 0% across 9 parameters. The description effectively supplies the value set for the required action_name (the six stages), which the schema leaves as an unconstrained string, but it says nothing about filename, import_id, content_base64, field_map_json, run_backup, limit, or offset, so most parameters remain undocumented in both places.

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 a specific verb (run) and resource (the Snipe-IT CSV import workflow) and enumerates the six stages the tool drives (list, get, upload, configure, validate, process). This lets an agent identify the tool without opening the schema, and the deletion clause distinguishes it from delete_resource.

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?

Gives an explicit trigger condition for the riskiest stage ('process runs only when action_name=process is explicitly requested') and routes deletion to delete_resource 'after separate confirmation'. However it does not say when to use list vs get vs configure vs validate, leaving the ordering of stages to inference.

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

inventory_lifecycleA

Checkout or check in accessories and components, or checkout consumables, using only assignment workflows officially exposed by Snipe-IT. Accessories accept user, asset, or location targets; components require an asset; consumables require a user. This tool never deletes records.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
item_idYes
quantityNo
action_nameYes
assigned_to_idNo
inventory_typeYes
checkout_to_typeNouser

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false; the description's 'never deletes records' largely restates destructiveHint=false rather than adding new behavior. It says nothing about the non-idempotent nature of repeated checkouts or any permission requirements, so it adds only modest value beyond the structured 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?

Three tight sentences, no filler, with the core capability front-loaded and per-type constraints following. Every clause conveys actionable information.

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?

An output schema exists so return values need no explanation, but this is a non-read-only, 7-parameter, 0%-documented mutation tool and the description covers only target-type rules. Missing action_name/quantity semantics and idempotency behavior leave meaningful gaps for correct invocation.

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 0% across 7 parameters, so the description must carry the load; it clarifies what checkout_to_type/assigned_to_id must be per inventory_type, which is genuinely useful. However, action_name, item_id, quantity and note are never explained, leaving half the surface undocumented.

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

Purpose4/5

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

States specific verbs (checkout/check in) and resources (accessories, components, consumables), and scopes itself to official Snipe-IT assignment workflows. It implicitly separates itself from record-creation tools, but never names a sibling such as inventory_write or asset_lifecycle, so the boundary is inferred rather than explicit.

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?

Gives real selection context by stating the valid target for each type: accessories accept user/asset/location, components require an asset, consumables require a user. That tells the agent how to pick arguments per case, but it offers no when-to-use/when-not guidance against the adjacent inventory_write or asset_lifecycle tools.

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

inventory_writeA
Idempotent

Create or update one accessory, component, or consumable using explicit fields. Use for ordinary inventory record writes after required IDs are known. This tool cannot assign, check in, check out, or delete inventory.

ParametersJSON Schema
NameRequiredDescriptionDefault
qtyNo
nameNo
notesNo
serialNo
item_idNo
min_amtNo
company_idNo
action_nameYes
category_idNo
location_idNo
supplier_idNo
model_numberNo
order_numberNo
purchase_costNo
purchase_dateNo
inventory_typeYes
manufacturer_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare the safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=true), and the description adds the capability boundary by listing the operations it deliberately omits. It does not disclose auth requirements, what an update overwrites, or error behavior, so it adds real value but not exhaustive behavioral detail.

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?

Three tight sentences, no redundancy; the core purpose and the capability boundary are front-loaded so the agent gets the essential routing information immediately.

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

Completeness2/5

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

An output schema exists so return values need not be explained, but for a 17-parameter write tool with 0% schema coverage the definition leaves parameter usage almost entirely undocumented. Given the tool's complexity, a description this thin is materially incomplete.

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

Parameters1/5

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

Schema description coverage is 0% across 17 parameters and the description contributes no parameter-level meaning beyond the phrase "explicit fields" and a vague "required IDs are known." With zero schema documentation and 17 params, the description fails to compensate, and the "required IDs" phrasing even misleads since only inventory_type and action_name are required while the rest carry defaults.

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 a specific verb pair (create or update) and a specific resource (one accessory, component, or consumable), and explicitly names the write actions it does NOT perform (assign, check in, check out, delete), which cleanly separates it from siblings like inventory_lifecycle and delete_resource.

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?

"Use for ordinary inventory record writes after required IDs are known" gives clear context, and the closing sentence enumerates the excluded operations, implying the alternative tools. It stops short of naming those alternatives or stating prerequisites/permission needs explicitly, so it is strong but not fully prescriptive.

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

ldap_operationsA
Destructive

Test the configured Snipe-IT LDAP connection or explicitly synchronize LDAP users. action_name=test only checks connectivity; action_name=sync can materially change users and must be used only when synchronization was explicitly requested. This tool never infers sync from a test request.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is covered. The description adds value by attributing destructiveness to the sync action specifically and warning that it materially changes users, but it does not mention permission requirements, rate limits, or scope of the sync.

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?

Three sentences, front-loaded with the two capabilities, followed by the critical safety constraint. No filler and every sentence carries distinct information.

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?

An output schema exists, so return values need no prose. For a single-parameter tool with destructive capability, the description covers capability, value semantics, and the guardrail against unintended sync — nothing an agent needs to call it safely is missing.

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

Parameters5/5

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

Schema coverage is 0% (a bare required string with no enum), so the description carries the full burden and does so: it enumerates the accepted values (test, sync) and explains the semantics and consequence of each. There is no ambiguity about what values are legal.

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 two concrete operations on a specific resource: testing the Snipe-IT LDAP connection and synchronizing LDAP users. It names the two action values and their distinct effects, so an agent can tell this apart from generic user-write siblings without opening the schema.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance per action (test = connectivity check only; sync = only when synchronization was explicitly requested) and an explicit prohibition (never infer sync from a test request). The routing logic between the two modes is fully spelled out.

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

license_seatsA
Idempotent

List, checkout, checkin, or update licence seats. Checkout accepts exactly one user or asset target; checkin removes an assignment but never deletes the licence or seat. Use mutation actions only for explicit assignment requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
limitNo
offsetNo
seat_idNo
license_idNo
action_nameYes
assigned_user_idNo
assigned_asset_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare idempotent=true, destructiveHint=false, and readOnlyHint=false, so safety is covered. The description adds non-obvious behavior: checkout's one-target cardinality and the fact that checkin removes an assignment without deleting the licence or seat. It stops short of covering the non-seat parameters.

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?

Three short sentences with the action list front-loaded and the destructive-behavior caveat immediately after. No padding, though the structure is dense enough that the mutation caveat could be easier 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?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. Still, for a mutating multi-action tool with seven undocumented parameters and no enum on the required action_name, the description leaves an agent guessing about pagination and note/ID semantics.

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 0% with 8 parameters, so the description must carry the load. It usefully documents the valid action_name values and the assigned_user_id/assigned_asset_id exclusivity, but says nothing about limit, offset, seat_id, license_id, or note.

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?

Names specific verbs (list, checkout, checkin, update) against a specific resource (licence seats), and the seat-level scope distinguishes it conceptually from licences_search and licenses_write. It never names a sibling explicitly, so it falls short of full differentiation.

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?

"Use mutation actions only for explicit assignment requests" is a genuine when-to-use condition, and "checkout accepts exactly one user or asset target" scopes the mutation path. It gives clear context but does not point to alternative siblings (e.g. licenses_search) for read access.

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

licenses_writeA
Idempotent

Create or update a Snipe-IT software licence. The public product_key input is deliberately translated to Snipe-IT's write-side serial field while reads expose product_key. Use only for explicit writes. This tool cannot delete licences or assign seats.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
notesNo
seatsNo
company_idNo
license_idNo
maintainedNo
action_nameYes
category_idNo
product_keyNo
supplier_idNo
order_numberNo
reassignableNo
purchase_costNo
purchase_dateNo
expiration_dateNo
manufacturer_idNo
termination_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this is a non-readonly, non-destructive, idempotent, open-world write. The description adds real context beyond them: the deliberate translation of public product_key into Snipe-IT's write-side serial field, and an explicit statement that deletion and seat assignment are out of scope. It still doesn't say what happens on update versus create or what permissions are needed.

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?

Three short sentences with the operation, the surprising field mapping, and the scope limits each front-loaded and given exactly one sentence. No filler or restatement of the title.

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?

An output schema exists so return values need no explanation, and scope plus the product_key mapping are covered. But for a 17-parameter write tool with no schema descriptions, the required action_name and the create/update discriminator are left unexplained, which is a meaningful gap.

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

Parameters2/5

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

Schema description coverage is 0% across 17 parameters, so the description must carry the burden, yet it only explains one field (product_key's serial mapping). The single required parameter, action_name, is never explained and has no enum, leaving the create-vs-update mechanism entirely opaque; the many id fields (license_id, company_id, category_id) are also unqualified.

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 a specific verb pair (create or update) and resource (Snipe-IT software licence), which cleanly separates it from licenses_search, license_seats and delete_resource. An agent can identify the operation without opening the schema.

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?

'Use only for explicit writes' gives a positive usage condition, and the closing sentence carves out two clear exclusions (no deletion, no seat assignment) that implicitly route to delete_resource and license_seats. It does not name those alternative tools explicitly, so it falls just 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.

organization_writeA
Idempotent

Create or update a Snipe-IT company, department, or group. Common relationship fields are explicit; group permissions can be supplied as a JSON object. Use only for requested writes. This tool cannot delete organisation records.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
notesNo
item_idNo
company_idNo
manager_idNo
action_nameYes
location_idNo
permissions_jsonNo
organization_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful constraint that deletion is out of scope and that permissions arrive as a JSON object, but says nothing about required permissions, validation failures, or what an update overwrites. With annotations carrying the safety burden, 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.

Conciseness4/5

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

Four short sentences, front-loaded with the create/update scope and with no filler. Slightly fragmented, but every sentence contributes a distinct fact.

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?

An output schema exists so return values need no explanation, and annotations cover the mutation profile. However, for a 9-parameter write tool with 0% schema coverage, the description leaves too much parameter meaning (action_name, organization_type values, update overwrite behavior) to inference.

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

Parameters2/5

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

Schema description coverage is 0% across 9 parameters, so the description must carry the full burden. It only hints at relationship fields generally and clarifies permissions_json, while the required action_name and organization_type (with no enum listed) and the distinction between item_id, company_id, and manager_id remain unexplained.

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

Purpose5/5

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

States a specific verb pair (create or update) and the exact resources it targets (Snipe-IT company, department, or group), and explicitly excludes delete. An agent can tell this apart from organization_search (read) and delete_resource (removal) without opening any schema.

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?

"Use only for requested writes" gives a clear when-to-use condition, and "cannot delete" establishes a when-not boundary that routes deletion elsewhere. It stops short of naming the alternative tool, so it 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.

reportsB
Read-onlyIdempotent

Read Snipe-IT activity, one item's history, checkout/checkin history, status summaries, depreciation reports, and assets due, overdue, or due-or-overdue for audit. Results explicitly advertise both activity fields and rich asset identity fields. This tool never audits or changes records.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo
date_toNo
item_idNo
user_idNo
date_fromNo
item_typeNohardware
target_idNo
action_nameYes
action_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
countNo
itemsNo
limitNo
totalNo
offsetNo
messageNo
successYes
has_moreNo
per_pageNo
error_codeNo
total_pagesNo
current_pageNo
validation_errorsNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is fully covered. The description reinforces this ('never audits or changes records') and adds a note about advertised return fields, but offers no pagination, rate-limit, or response-shape detail beyond 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?

Two sentences, front-loaded with the report list, with no filler. The second sentence about advertised result fields is slightly vague but does not bloat the definition.

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

Completeness2/5

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

For an 11-parameter multi-action tool with a required action_name and 0% schema coverage, the description omits the one thing an agent most needs: the valid action values and how they map to the listed reports. The presence of an output schema covers return values, but the input side is inadequately specified.

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

Parameters2/5

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

Schema coverage is 0% across 11 parameters, and the description does not explain any of them. It never defines what action_name values are valid, nor what item_id, user_id, target_id, action_filter, item_type, or the date range parameters do, leaving the agent to guess at the required routing parameter.

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 names a specific verb ('Read') and enumerates the concrete report families the tool produces: activity, item history, checkout/checkin history, status summaries, depreciation, and due/overdue assets. An agent gets a clear sense of what it returns, though it never distinguishes itself from siblings like assets_search or inventory_search that could overlap.

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

Usage Guidelines3/5

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

Usage is implied by the enumerated report types, and 'This tool never audits or changes records' acts as a mild when-not signal. However, there is no explicit guidance on when to choose this tool over asset_lifecycle, assets_search, or inventory_search, and the action_name routing that selects among report types is left unexplained.

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

system_readA
Read-onlyIdempotent

Read Snipe-IT version/system information, list backups, or download one bounded backup. Version data supports capability diagnosis. Backup content is base64 only when it fits max_inline_bytes. This tool cannot change settings or delete backups.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
action_nameNoversion
backup_filenameNo
max_inline_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
countNo
itemsNo
messageNo
successYes
versionNo
error_codeNo
full_versionNo
hash_versionNo
build_versionNo
validation_errorsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real behavioral context: backup payloads are base64-encoded only when within max_inline_bytes (implying truncation/bounding otherwise), and it explicitly disclaims settings changes and deletions. This goes beyond restating 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?

Three sentences: purpose first, then the base64/bounding constraint, then a negative scope statement. Front-loaded and mostly waste-free, though the negative clause partly duplicates the readOnly annotation.

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?

An output schema exists so return values need not be described, and annotations cover the safety profile. The three operational modes and the inline-size constraint are stated, leaving only the pagination params unaddressed.

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 0% across 5 params, so the description carries the burden. It explains action_name's modes and the meaning of max_inline_bytes, but leaves limit and offset (pagination) and backup_filename's exact usage undocumented. Partial compensation only.

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

Purpose4/5

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

States a specific verb (Read) plus the resource (Snipe-IT version/system info and backups) and enumerates the three supported modes: version data, list backups, download one backup. No sibling tool competes for this resource, so it is easily distinguishable, though it never explicitly names 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?

Gives a hint for one mode ('Version data supports capability diagnosis') and a constraint for the download mode, but never explains when to choose version vs list vs download; the routing is left to the reader to infer from action_name. No exclusions or explicit alternatives are provided.

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

user_inventoryB
Read-onlyIdempotent

Retrieve everything assigned to one unambiguously identified user in one call: rich assets, accessories, licences, consumables, and optional EULA/acceptance records. Assets use the same normalization as assets_search and explicitly include asset_tag, serial, model_name, model_number, manufacturer, status, and location. This tool is read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
user_idNo
usernameNo
include_eulasNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
userNo
eulasNo
assetsNo
messageNo
successYes
licencesNo
error_codeNo
accessoriesNo
consumablesNo
eulas_countNo
assets_countNo
licences_countNo
accessories_countNo
consumables_countNo
validation_errorsNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so 'This tool is read-only' is largely redundant. The description does add value beyond the structured fields: it discloses the breadth of what is returned, the optional EULA inclusion, and that assets follow the same normalization as assets_search with specific fields.

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?

Three tight sentences that front-load the core purpose and then qualify scope. Nothing is padded, though the field enumeration is somewhat list-heavy.

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?

An output schema exists so return values need not be spelled out, and the description reasonably covers retrieval scope. However, for a four-parameter read tool the identification semantics (which identifier to pass) and sibling disambiguation remain unexplained, leaving an agent to infer call mechanics.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, so the description carries the burden and only partially succeeds. 'Unambiguously identified user' hints that one of email/user_id/username is used for identification but never says which, whether they are alternatives or all required; 'optional EULA' loosely maps to include_eulas but is not tied to the flag.

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

Purpose4/5

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

The description states a specific verb and resource ('Retrieve everything assigned to one unambiguously identified user in one call') and enumerates the categories returned (assets, accessories, licences, consumables, EULAs). It partially distinguishes itself from siblings by citing the assets_search normalization, though it never contrasts with inventory_search directly.

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

Usage Guidelines3/5

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

Usage is only implied: the 'in one call' phrasing suggests this is the batched alternative to per-category lookups, but there is no explicit 'use this when...' or 'use X instead when...' statement. No prerequisites (e.g., needing at least one identifier) are given.

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

users_writeA
Destructive

Create, update, restore, or explicitly reset two-factor authentication for a Snipe-IT user. Use create/update/restore for requested administration; use reset_2fa only when the user explicitly asks for that high-impact security action. This tool cannot delete users.

ParametersJSON Schema
NameRequiredDescriptionDefault
vipNo
emailNo
notesNo
phoneNo
remoteNo
user_idNo
jobtitleNo
passwordNo
usernameNo
activatedNo
last_nameNo
company_idNo
first_nameNo
manager_idNo
action_nameYes
location_idNo
employee_numNo
department_idNo
password_confirmationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
messageNo
successYes
error_codeNo
validation_errorsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent, but the description adds real context beyond them: reset_2fa is flagged as a high-impact security action requiring explicit user intent, and deletion is explicitly out of scope. It stops short of describing what gets overwritten on update or any auth requirements.

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?

Three short sentences, front-loaded with the action set and immediately followed by the decision rule and the exclusion. No filler or repetition.

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

Completeness2/5

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

For a 19-parameter mutation tool with 0% schema description coverage, the description omits all field-level guidance needed to actually invoke it correctly (which fields are required per action, password_confirmation pairing, etc.). Output schema covers returns, so that is not a gap, but parameter completeness is not.

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

Parameters2/5

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

Schema description coverage is 0% across 19 parameters with no enums declared. The description names the action values (create, update, restore, reset_2fa) but explains nothing about which of the 18 data fields apply to which action or how user_id versus creating a new user works, so it fails to compensate for the coverage gap.

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 specific verbs and resource: create/update/restore/reset-2FA for a Snipe-IT user, and explicitly excludes deletion. An agent can distinguish this from users_search and delete_resource without opening any schema.

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?

Gives a clear rule for choosing reset_2fa ('only when the user explicitly asks') versus the routine create/update/restore path, and states the tool cannot delete. It does not name sibling tools (e.g. users_search for reads), so routing is implied rather than fully explicit.

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. 29 tool updatesv1.0.0
    • First observedasset_labels
    • First observedasset_licenses
    • First observedasset_lifecycle
    • First observedasset_maintenance
    • First observedasset_requests
    • First observedassets_search
    • First observedassets_write
    • First observedcatalog_search
    • First observedcatalog_write
    • First observedcustom_fields_search
    • First observedcustom_fields_write
    • First observeddelete_resource
    • First observedfiles_read
    • First observedfiles_upload
    • First observedimports
    • First observedinventory_lifecycle
    • First observedinventory_search
    • First observedinventory_write
    • First observedldap_operations
    • First observedlicense_seats
    • First observedlicenses_search
    • First observedlicenses_write
    • First observedorganization_search
    • First observedorganization_write
    • First observedreports
    • First observedsystem_read
    • First observeduser_inventory
    • First observedusers_search
    • First observedusers_write

TDQS

A3.6/5.0

Scored across 29 tools

Disambiguation4/5

Tools are mostly split by resource and operation (search, write, lifecycle), with clear descriptions distinguishing read-only from mutation workflows. Minor overlaps exist, such as maintenance types being available in both catalog_search and asset_maintenance, and asset_licenses versus licenses_search, but these are well explained.

Naming Consistency4/5

The set mostly follows a resource_action pattern (assets_search, users_write, licenses_search), making tools predictable. Minor deviations include bare nouns like imports and reports, singular/plural inconsistencies (asset_licenses vs licenses_search), and the verb_noun delete_resource.

Tool Count3/5

At 29 tools, the surface is heavy for a single MCP server. The broad Snipe-IT domain justifies many resource-specific tools, and each tool groups multiple related operations, but the count still exceeds typical scoped sets and risks overwhelming selection.

Completeness5/5

Coverage is comprehensive: CRUD and lifecycle operations exist for assets, inventory, users, organizations, catalog data, custom fields, licenses, and license seats, with dedicated tools for files, imports, reports, system info, LDAP, and deletion. No obvious dead ends remain for standard Snipe-IT workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    A
    quality
    A
    maintenance
    Enables AI assistants to perform full CRUD operations on Snipe-IT inventory systems, managing assets, users, licenses, and more via 39 tools.
    40
    32
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to interact with Hudu IT documentation, providing tools for companies, assets, knowledge base articles, credentials, IPAM, racks, and more, with security gates for passwords and destructive operations.
    70
    10 npm
    MIT