Skip to main content
Glama
J-MaFf

s2-netbox-mcp

by J-MaFf

get_reader_access_history

Retrieves a reader's access grant/deny history by READERKEY, resolving person IDs to names. Scans recent system-wide records (default 2000) and optionally includes reader description.

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

TableJSON 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.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the composite nature, the absence of a server-side reader filter, client-side filtering, SCANWINDOW semantics, the opt-out RESOLVEDESCRIPTIONS default, and the single top-level READERDESCRIPTION field via one GetReaders full-table fetch. This exceeds typical transparency.

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

Conciseness3/5

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

The description is information-dense but long and run-on, especially the RESOLVEDESCRIPTIONS sentence, which is grammatically tangled and hard to parse. Every clause adds value, but the structure could be split into shorter sentences or bullets to make the key points easier for an agent to absorb.

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?

Despite having no output schema and no annotations, the description covers purpose, composite call behavior, filtering semantics, defaults, and return-field behavior (PERSONID enrichment and READERDESCRIPTION). An agent has enough context to invoke the tool correctly and predict important behavioral quirks.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds real value beyond the schema by explaining that RESOLVEDESCRIPTIONS is an inverted opt-out default, that SCANWINDOW scans system-wide records rather than a date range, and that READERDESCRIPTION is attached once per call rather than per match. This is useful additional semantic context.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Returns a single reader's access (grant/deny) history for a given READERKEY', and immediately clarifies it is a composite of GetAccessHistory + GetPerson. It distinguishes itself from the sibling get_access_history by noting the lack of a server-side reader filter and the client-side filtering approach.

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

Usage Guidelines4/5

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

The description gives clear context for when this tool is appropriate: per-reader history, client-side filtering, and SCANWINDOW-based scanning rather than date ranges. It contrasts the inverted RESOLVEDESCRIPTIONS default with get_access_history's behavior, but it could more explicitly state when to prefer this vs get_access_history or another sibling.

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