A Leaner Tool Catalog, and Counts Without Enumerating
August 26, 2026 · InfraScout Team
InfraScout exposes over two hundred tools. Handing all of them to the model on every turn is the simple approach, and it is charged as input on every single turn of every conversation — whether the model calls one tool or none.
Anthropic connections have loaded tools on demand for a while. OpenAI connections now do too.
308 KB down to 49.6 KB upfront
Measured against the full registry, the upfront catalog on an OpenAI turn drops from 308 KB to 49.6 KB — an 84% reduction, or roughly 72,500 tokens a turn that no longer has to be sent.
Built-in tool groups are declared as searchable namespaces, and their members load only when the model reaches for them. It applies to all three OpenAI surfaces: chat, agentic workflows, and Task Agents.
One thing to know if you want to see the effect. This engages where a conversation has not already been narrowed to specific tool groups — a conversation whose groups you picked at the start is already narrow and stays that way. Start a new conversation and let InfraScout choose the tools, and you will see it.
Counting a directory without reading it
"How many users and groups are synced from on-premises?" is a two-integer question, and answering it used to mean enumerating the directory and counting what came back — dozens of tool calls and a large amount of directory data carried through the conversation to produce two numbers.
Seven identity tools now accept count_only: users, groups, service principals, administrative units, group members, group owners, and administrative unit members. Pass it and the tool returns the match count for your filter, discarding the page.
Two caveats, both surfaced to the model at call time:
- A count reads an eventually-consistent index and can lag changes from the last few minutes. Fine for "roughly how many guest accounts"; worth knowing before the number goes into a compliance statement.
- Directory role members cannot be counted. Microsoft Graph does not support it there, so the argument is deliberately not offered rather than advertising a query that gets rejected. Count a role's members by listing them.
Page ceilings on groups and group members rose from 100 to 999 in the same pass. That makes a full page about ten times heavier, so those tools now also carry the projection guidance that has to accompany a higher ceiling — ask for the fields your question needs rather than taking every property on every object.
Better routing to the right tool
Several tools now describe themselves more usefully, which shows up as fewer wasted turns before the AI reaches the one that answers your question.
Identity is answered directly. The AI now has your name, your tenant, your role, and whether your access is read-only available to it without a directory lookup — so "what am I allowed to do here?" is answered immediately rather than through a search and a couple of Graph calls.
Agent recency is answerable. agent_list returns last_seen and accepts sort_by=last_seen, so "which hosts checked in most recently" has a direct answer instead of being approximated from inventory freshness — a different question with a different answer.
Role definitions demand a projection. An unprojected list of role definitions carries every role's full permission set, and unlike a page of users it cannot be narrowed by paging, because the endpoint returns the whole catalog at once. The tool now takes a projection, its description asks for one, and it routes privileged-access questions to the two tools that actually answer them.
Expanding directory role members needs a top-level projection. Microsoft Graph honors a nested projection inside an expansion only when a top-level one is present too — and it silently ignores it otherwise rather than reporting a problem. The difference is large: the same call measured 524 KB unprojected against 25 KB projected, which is the difference between a one-call privileged-access audit and a result too large to read in full. The tool description now states the requirement, and the tool reference carries the working example.
Multi-tenant connections are reachable. entra_connection_list is how the AI discovers which tenants you have connected, and it is now always present in the catalog rather than something the AI has to go looking for. That matters if you have more than one connection: reaching a non-default tenant requires its identifier, and the identifier comes from that tool.
Nothing to configure
All of this is server-side. No setting changed and no connection needs updating. The tools behave identically — there are simply fewer of them in front of the model at any moment, and the ones that are there describe themselves more accurately.
Questions or feedback? Reach us at info@infrascout.cloud.