Skip to main content
Glama
J-MaFf

s2-netbox-mcp

by J-MaFf

get_reader_access_history

Read-only

Fetch a reader's grant/deny access history by READERKEY, resolve person IDs to names, and filter recent system-wide records to find matches.

Instructions

Returns a single reader's access (grant/deny) history for a given READERKEY, with each match's PERSONID enriched to a name (composite: wraps NBAPI GetAccessHistory + GetPerson). GetAccessHistory has no server-side reader filter, so this reads and filters client-side. Rather than a date range, it scans the most recent SCANWINDOW system-wide records (default 2000). RESOLVEDESCRIPTIONS defaults to true — an inverted, opt-out default like get_access_history's own RESOLVEDESCRIPTIONS: it attaches a single top-level READERDESCRIPTION field for the given READERKEY (not one per match — every match already shares this identical READERKEY by construction) via one GetReaders full-table fetch; set to false to omit it entirely.

Input Schema

NameRequiredDescriptionDefault
READERKEYYesRequired. Only access records for this reader are returned.
MAXMATCHESNoOptional. Maximum number of matches to include, in chronological order. Defaults to 100.
SCANWINDOWNoOptional. Number of most-recent system-wide access records to scan. Defaults to 2000.
RESOLVEDESCRIPTIONSNoOptional (default true — on by default). Attaches a single top-level READERDESCRIPTION field (the description for this call's own READERKEY, not one per match) via one GetReaders full-table fetch. Set to false to omit the field entirely.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.3.0

TDQS

A4.4/5.0
Behavior5/5

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

With only readOnlyHint available, the description carries real weight: it discloses the client-side scan over system-wide records, the SCANWINDOW fallback instead of a date range, and the cost of the RESOLVEDESCRIPTIONS path (one GetReaders full-table fetch). These are genuine operational traits an agent could not infer from annotations.

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

Conciseness3/5

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

The purpose is front-loaded and every claim is substantive, but the body is one dense run-on that re-explains RESOLVEDESCRIPTIONS details the schema already states verbatim, and the inverted-default caveat is buried mid-paragraph. It is informative but not tightly structured.

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?

No output schema exists, and the description supplies the important return-shape nuance (PERSONID enriched to a name, single top-level READERDESCRIPTION). It does not describe ordering guarantees or what a match record otherwise contains, leaving a modest gap for a history-returning tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: SCANWINDOW counts most-recent system-wide records rather than the reader's own, and READERDESCRIPTION is attached once at the top level rather than per match, with the reasoning. That is real semantic enrichment over the field text.

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 — 'Returns a single reader's access (grant/deny) history for a given READERKEY' — and explicitly frames itself as a composite wrapper over NBAPI GetAccessHistory + GetPerson. It is clearly distinguishable from the sibling get_access_history by scoping to one reader.

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?

Explains the key selection context: GetAccessHistory has no server-side reader filter, so this tool filters client-side, which tells an agent when this wrapper is the right call and hints at its cost. It references get_access_history as the sibling precedent but never states an explicit when-not-to-use rule or a preferred alternative.

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