bigfix-root-mcp
This server provides read-only access to the HCL BigFix root server REST API, with optional write tools when BIGFIX_ALLOW_WRITES=true.
Session relevance queries: Evaluate server-side data (computers, fixlets, actions, sites, operators, etc.) instantly.
Client fast queries: Submit, poll, and retrieve live agent responses with targeting by computer ID/name or relevance, configurable timeout and stability detection.
Server and site info:
get_server_info,list_sites,get_computer_group,get_operator,list_operators/roles(master operator), read/write dashboard variables (get_dashboard_variable,set_dashboard_variable).Computer management: Find by name (
find_computers), get full record (get_computer), list applicable content/actions (applicable_fixlets,list_actions), and retrieve action status/details (get_action,get_action_status).Content browsing: Search for fixlets, tasks, analyses, baselines by name (
find_content) and fetch specific content by site path and ID (get_content).Generic API access:
api_getas a read-only escape hatch to any/api/path for discovery or custom reads.XML validation: Validate BES XML against BigFix schemas offline (
validate_bes_xml).Identity check:
whoamireturns configured user, root server URL, and master operator status (affects result scope).Optional writes: Stop actions, set dashboard variables, import custom content (dry-run defaults, audit logging).
Safe handling: All list/blob tools report
truncatedandtotal_availableto bound large result sets.Built-in help: Access session relevance cookbooks, tool usage guides, and predefined prompts (e.g.,
diagnose_computer).
All results reflect the configured operator’s visibility; only a master operator sees the full fleet.
Provides read-only tools for interacting with the HCL BigFix root server REST API, including session relevance queries, client fast queries, server info retrieval, site listing, computer group and operator lookups, dashboard variable reads, and a generic read-only API escape hatch.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bigfix-root-mcphow many computers are reporting in my enterprise"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bigfix-root-mcp
A minimal, read-only MCP server around the besapi library, exposing the HCL BigFix root server REST API to MCP clients. Built on FastMCP 4 (stateless).
Focus: session relevance queries (data the server already has) and client fast query (live questions answered by BigFix agents), plus a few read-only helpers.
Strongly recommend using the official BigFix Platform MCP server instead: https://help.hcl-software.com/bigfix/11.0/platform/Platform/MCP/c_introduction.html
The capabilities of this MCP server are intentionally limited, where as the official one is not.
Tools
Tool | Purpose |
| Evaluate session relevance on the root server; returns the JSON envelope ( |
| Statically analyze a relevance expression offline - parse, types, dialect, unknown inspectors with suggestions, complexity. Never evaluates it. |
| Fuzzy-search the offline inspector reference by name or phrase. |
| Submit a client fast query, return its |
| Fetch current (cumulative) results for a query ID; safe to call repeatedly. |
| Submit + poll in one call with progress notifications; stops on expected count reached, results stable, or timeout. |
| Root server version info ( |
| Sites visible to the configured operator. |
| Look up a group by name - requires an explicit |
| Look up a console operator by name. |
| Read a dashboard datastore variable. |
| Configured user/root server, main-operator status, write-gate state; connectivity smoke test. |
| Read-only escape hatch: GET any |
| One computer's full record ( |
| Find computers by case-insensitive name substring. |
| Content currently relevant to one computer. |
| An action's definition, and its per-computer execution state. |
| Actions visible to the configured operator. |
| Search fixlets/tasks/analyses/baselines by name across sites; resolves the |
| One fixlet, task, analysis or baseline by site path and ID. |
| Console operators and roles (master operator only). |
| Validate BES XML against the BigFix schemas. No server call. |
Relevance analysis (advisory)
The relevance-taking tools statically analyze their relevance with
bigfix-relevance-analyzer
before sending it (dialect pinned per tool). The analysis is advisory
only: even a query the analyzer rejects still goes to the server, because
the analyzer's inspector table is a snapshot - an unknown inspector there may
still exist on the live server. When there are findings, the response carries
an analysis key (findings, suggestions, dialect mismatch); a clean query
adds nothing. Server-side relevance errors gain a Static analysis: appendix
with the findings and did-you-mean suggestions, so a typo'd inspector is a
one-round-trip fix.
qna fast evaluation (opt-in)
Absent unless the [qna] extra is installed - see qna evaluation.
Tool | Purpose |
| Evaluate client relevance with the |
| List the admin-configured inventory targets and whether container images are allowed. |
Write tools (opt-in)
Absent unless BIGFIX_ALLOW_WRITES is set - see Writes.
Tool | Purpose |
| Stop an in-flight action ( |
| Set a dashboard datastore variable. |
| Create/update custom content in a site. Does not deploy it. |
Result bounding
Every tool that can return an unbounded payload is windowed and says so.
List-shaped tools take limit/offset and report returned,
total_available and truncated; blob-shaped tools report truncated and
total_chars, and drop an oversized payload rather than cut it into something
that looks complete.
This is not optional politeness: BigFix relevance has no row-limiting
operator (first, firsts, items, elements are all undefined), so
bounding the response is the only way to bound a result. find_content on the
reference deployment matches 12,395 fixlets.
Related MCP server: MSSQL-MCP
Resources and prompts
Relevance is the hard part, so the server ships reference material clients can pull on demand rather than repeating it in every tool description:
Resource | Contents |
| Session relevance that works - every expression verified against a live root server - plus the operators that don't exist. |
| Client (fast query) relevance, targeting forms, reading cumulative results. |
| Which tool answers which question, how to read bounded responses, what operator scope means. |
| Client versus session relevance: where each is evaluated, which one a tool expects. |
| Client relevance language reference (from bigfix-relevance-analyzer). |
| Session relevance language reference (from bigfix-relevance-analyzer). |
Prompts: diagnose_computer, patch_status, find_stale_agents,
troubleshoot_relevance.
Relevance errors also carry a cause hint: the server recognizes the common failure shapes (a non-existent limiting operator, client relevance in a session query, singular-vs-plural) and appends what to do instead, so a bad expression is a retry rather than a dead end.
Client fast query semantics
Client queries are answered by live agents: results accumulate at
/api/clientqueryresults/{id} over seconds to minutes as clients report in,
and there is no completion flag. The client_query tool polls with three
termination heuristics (reported in stop_reason):
expected_count_reached- as many distinct computers reported as targeted;results_stable- no new computers forstable_pollsconsecutive polls;timeout- partial results at timeout are a normal outcome (offline agents never report), not an error.
For long waits, use client_query_submit then client_query_results
repeatedly instead of a single blocking call.
Configuration
Environment variables win over config files:
Setting | Env var / | Default |
Root server URL |
| - |
REST operator |
| - |
Password |
| - |
Write tools |
| off |
TLS verification |
|
|
qna inventory |
| unset |
qna containers |
| on when |
Transport |
|
|
Config files are searched in besapi's order: /etc/besapi.conf,
~/besapi.conf, ~/.besapi.conf, ./besapi.conf - same
[besapi] section format as besapi/bescli, so an existing config just works.
Prefer keeping credentials in ~/besapi.conf over MCP client config files.
Example MCP client config (see .mcp.json):
{
"mcpServers": {
"bigfix-root": {
"command": "uvx",
"args": ["bigfix-root-mcp"]
}
}
}Install / run
Published on PyPI. Requires Python 3.11+.
With uv (preferred)
No install step - uvx fetches and runs it in a throwaway environment, which is
also what the MCP client configuration above uses:
uvx bigfix-root-mcpTo keep it on PATH instead, as a managed tool:
uv tool install bigfix-root-mcp
bigfix-root-mcpWith pip
pip install bigfix-root-mcp
bigfix-root-mcp # or: python -m bigfix_root_mcpFrom a checkout
uv 0.12+ required:
uv sync
uv run bigfix-root-mcp # or: uv run python -m bigfix_root_mcpVerifying a download
Every release since v0.1.3
also attaches the wheel and sdist with a SHA256SUMS.txt, checkable with
sha256sum -c SHA256SUMS.txt.
Smoke test against a live root server with MCP Inspector:
npx @modelcontextprotocol/inspector bigfix-root-mcpthen call whoami, session_relevance_query with number of bes computers,
and client_query targeting a known computer ID.
Operator scope
Every result is limited to what the configured REST operator can see. Only a
master operator has full visibility; a regular operator can never be
certain its view is complete, and cannot distinguish "does not exist" from
"outside my scope". So number of bes computers returning 35 means 35
computers visible to this operator - a lower bound, not the BigFix total.
whoami reports is_main_operator for exactly this reason: check it before
treating any result as the full state of BigFix. The tool descriptions carry
this caveat so LLM clients don't overstate scoped results.
Safety and design notes
Read-only by default: with
BIGFIX_ALLOW_WRITESunset, only read tools are registered - the write tools do not exist as far as any client can tell. One nuance: submitting a client query does create a query object server-side, but agents only evaluate relevance against it - no managed-endpoint state changes.Client fast query is a powerful read.
client_querywithtarget_allevaluates arbitrary client relevance on every agent the operator can see, and the BigFix agent runs as SYSTEM/root. That can read file contents, registry values and process lists fleet-wide, and the results come back in the tool response. Scope the configured operator to the smallest useful set of computers;whoami.is_main_operatortells you which you have.Explicit site paths: this server never uses besapi's mutable "current site path" connection state (
set_current_site_path/get_current_site_path- a bescli convenience); tools that need a site take a requiredsite_pathparameter.Stdout hygiene: stdout belongs to the MCP stdio transport; all logging goes to stderr, and config loading avoids besapi helpers that print.
TLS: verification is off by default to match besapi; set
BES_SSL_VERIFY=true(or a CA bundle path) for anything beyond a lab.Generic BigFix logic here is written to be upstreamed into besapi - see docs/besapi-proposals.md.
qna evaluation
pip install "bigfix-root-mcp[qna]" adds
bigfix-remote-client-relevance
and registers evaluate_client_relevance_qna / list_qna_targets (with the
extra absent, the tools do not exist). It evaluates client relevance with
the BigFix qna binary on lab targets in about a second per warm run - the
fast half of the feedback loop next to the advisory analysis.
What it is not: qna runs on the target machine, not through the BigFix
deployment. No operator scope, no site subscriptions, no client settings -
inspectors that depend on deployment state will differ from client_query.
Iterate here, confirm on real agents with client_query. (The package's
Fast Query transport is an upstream stub; this server does not expose it.)
Targets are deliberately constrained:
Container images (
ubuntu:22.04, ...) may be passed by the caller; needs docker or podman on the server host. First use of an image is slow (agent artifact download + derived image build); later runs are ~1s. SetBIGFIX_QNA_CONTAINERS=0to forbid these.Inventory hosts come only from an admin-configured hosts.toml named by
BIGFIX_QNA_INVENTORY(the package's inventory format: ssh/local/container entries). The MCP client can pick entries by name but can never supply ssh hosts, users, orbecomeflags of its own.
Security notes: qna executes on the targets; the controller downloads BigFix
agent artifacts from support.bigfix.com (SHA256-verified against the release
site's sums) on first use of a version, so the server host makes outbound
requests; every run leaves a BIGFIX QNA audit line on stderr.
Writes
Set BIGFIX_ALLOW_WRITES=true to register the three write tools. The flag
controls registration, so with it off there is nothing to call.
Two guardrails apply to all of them:
dry_rundefaults to true. The response describes the call that would be made and nothing is sent. A write only happens on an explicitdry_run=false.Every attempt is audit-logged to stderr as one
BIGFIX WRITEline with the operator, target, dry-run flag and outcome.
The set is limited on purpose to operations whose blast radius is reversible
or nil. import_bes_content creates content; it does not run it - a fixlet
imported this way does nothing until somebody deploys an action against it in
the console.
Not implemented, and not to be added without their own design round:
deploying actions (POST /api/actions), any DELETE, creating sites or
operators, and file upload. Deploying an action is arbitrary code execution as
root across the fleet, which is a different category of risk from anything
here.
Documentation
Doc | Contents |
Client fast query protocol reference: endpoints, payloads, live-captured result schema, termination heuristics and their tradeoffs. | |
besapi behaviors this wrapper depends on or works around (error surfacing, connection lifecycle, return shapes, site-path state). | |
Why the server is shaped this way, plus FastMCP 4 beta specifics. | |
Proposed upstream besapi changes that would let this project shrink. | |
Live-verified REST paths, site-path rules, and relevance findings (including the operators that don't exist). | |
Threat model and findings for the tool surface. |
Development
Requires Python 3.11+ and uv 0.12+. uv sync
creates .venv from the committed uv.lock and installs the dev dependency
group; no manual venv or pip install -e step.
uv sync
uv run pytestLinting, formatting, type checking and the packaging checks all run through
pre-commit (ruff, mypy, bandit, slyp, zizmor, and the uv lock/build checks).
Install both hook types - some checks are deliberately deferred to pre-push
because they are too slow to want on every commit:
uv run pre-commit install --hook-type pre-commit --hook-type pre-pushUseful invocations:
uv run pre-commit run --all-files # the commit-stage hooks
uv run pre-commit run --all-files --hook-stage manual # everything, as CI runs itTests run entirely offline against a scripted fake BESConnection, including
in-memory end-to-end MCP calls via fastmcp.Client.
Available Tools
11 toolsapi_getA
Read-only escape hatch: GET any BigFix REST API path under /api/.
GET is non-mutating across the BigFix REST API. Use path 'help' to discover available endpoints. Response text is truncated to 50KB.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative REST API path under /api/, e.g. 'help', 'computers', 'sites', 'computer/123'. Query strings allowed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It explicitly states that GET is non-mutating and that response text is truncated to 50KB, which are critical safety and limitation details. It could mention error behavior or authentication, but the core behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, with the main purpose front-loaded in the first sentence and three short, information-dense sentences total. Every sentence earns its place, covering purpose, safety, discovery, and a key limitation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, fully documented schema, and an output schema available), the description is complete for an agent to select and invoke it correctly. It explains scope, non-mutation, truncation, and how to discover endpoints, covering all necessary aspects without redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of the 'path' parameter, including examples and the allowance for query strings. The description adds the specific 'help' endpoint example, but this is also present in the schema, so it adds minimal value beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a read-only escape hatch for GET requests to any BigFix REST API path under /api/, with a specific verb and resource. It distinguishes itself from sibling tools by being a generic low-level access point rather than a purpose-built endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: anytime a read-only GET request to the BigFix REST API is needed. It also gives a practical tip to use path 'help' for discovery. However, it does not explicitly name alternatives or state when not to use it, which would warrant a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_queryA
Submit a BigFix client (fast) query and wait for results, polling until done or timeout. Targeting: set exactly one of target_all, target_computer_ids, target_computer_names, or target_relevance (client relevance evaluated on each agent to decide applicability). Targeting is limited to the configured operator's scope, so target_all means all computers this operator can see, not necessarily all computers in BigFix.
| Name | Required | Description | Default |
|---|---|---|---|
| query_text | Yes | Client relevance to evaluate on each targeted agent. | |
| target_all | No | Target all computers. | |
| stable_polls | No | Stop after this many consecutive polls with no new computers reporting (once at least one has). | |
| expected_count | No | Stop once this many computers reported. Defaults to the targeted computer count when knowable. | |
| timeout_seconds | No | Max seconds to wait (1-600). | |
| target_relevance | No | Client relevance targeting expression. | |
| target_computer_ids | No | Target these BigFix computer IDs. | |
| poll_interval_seconds | No | Seconds between polls (min 2). | |
| target_computer_names | No | Target these computer names. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the tool polls, waits until done or timeout, and constraints targeting to exactly one mode. It also clarifies that target_all means within the operator's scope. It does not explicitly state side-effect freedom (e.g., read-only), but the query nature makes that implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences, first being the core action, second addressing targeting constraints. Every clause provides necessary information without fluff. The most important usage guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no annotations, and an output schema (which covers returns), the description covers the essential behavioral context: synchronous polling, timeout, targeting options, and scope limits. It omits details about poll_interval and timeout ranges, but those are in the schema. It is sufficient for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond the schema: target_relevance is explained as 'client relevance evaluated on each agent to decide applicability,' expected_count's default behavior is clarified ('Defaults to the targeted computer count when knowable'), and stable_polls' stopping condition is rephrased. This adds genuine value over the raw property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+behavior: 'Submit a BigFix client (fast) query and wait for results, polling until done or timeout.' This clearly distinguishes it from siblings like client_query_submit and client_query_results, which handle submission and retrieval separately. The sync-and-poll nature is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear, actionable targeting rule: 'set exactly one of target_all, target_computer_ids, target_computer_names, or target_relevance.' It also explains the operator-scope limitation. It doesn't mention alternatives like client_query_submit/results for async use, so it misses the 'when-not' guidance, but the provided context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_query_resultsA
Fetch current results for a previously submitted client fast query.
Results are cumulative and there is no completion flag: safe and cheap to call repeatedly until reported_count stops growing or the expected number of computers have reported.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | Query ID returned by client_query_submit. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains key traits: results are cumulative, no completion flag, and repeated calls are safe/cheap. This goes beyond the schema and provides important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence states the purpose directly, and the second adds essential behavioral nuance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description covers purpose, usage (polling approach), and key behavioral traits. It is sufficiently complete for an agent to decide when and how to use the tool. The output schema covers return value details, so no further explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents query_id as 'Query ID returned by client_query_submit' with 100% coverage. The description reinforces the 'previously submitted' link but adds little beyond that. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and a specific resource ('current results for a previously submitted client fast query'), distinguishing it clearly from sibling tools like client_query_submit and client_query. The phrase 'previously submitted' clarifies the stateful nature of this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear polling guidance: results are cumulative, there is no completion flag, and it is safe/cheap to call repeatedly until reported_count stabilizes. It does not explicitly name alternatives or exclusions, but the context makes it obvious that this is the retrieval counterpart to client_query_submit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
client_query_submitA
Submit a BigFix client (fast) query. Targeting: set exactly one of target_all, target_computer_ids, target_computer_names, or target_relevance (client relevance evaluated on each agent to decide applicability). Targeting is limited to the configured operator's scope, so target_all means all computers this operator can see, not necessarily all computers in BigFix.
| Name | Required | Description | Default |
|---|---|---|---|
| query_text | Yes | Client relevance to evaluate on each targeted agent. | |
| target_all | No | Target all computers. | |
| target_relevance | No | Client relevance targeting expression. | |
| target_computer_ids | No | Target these BigFix computer IDs. | |
| target_computer_names | No | Target these computer names. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses the non-obvious targeting constraint and that target_all is scoped by the operator's permissions, not the whole BigFix deployment. This is meaningful, though it does not discuss submission latency or polling behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with high information density. Every phrase contributes, and the most essential usage rule (set exactly one target) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter submission tool with no annotations, the description covers the main input constraints and a critical semantic caveat. An output schema exists, so return values need not be described. The only notable gap is the lack of a pointer to sibling tools for alternative query workflows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds crucial extra semantics: mutual exclusivity of targeting parameters, target_relevance as an applicability expression, and the real meaning of target_all. These clarifications go beyond the schema property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Submit a BigFix client (fast) query') and resource, and adds useful targeting detail. It distinguishes from session relevance by specifying 'client', but does not explicitly contrast with the sibling 'client_query' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete invocation guidance: 'set exactly one of target_all, target_computer_ids, target_computer_names, or target_relevance' and clarifies the operator-scope limitation of target_all. It does not mention when to prefer this tool over siblings, so it misses the exclusion side.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_computer_groupA
Look up a computer group by name within an explicit site path.
Implemented against /api/computergroups/{site_path} directly rather than besapi's get_computergroup, which routes through the mutable "current site path" connection state this server avoids.
| Name | Required | Description | Default |
|---|---|---|---|
| site_path | Yes | Site path containing the group, e.g. 'master', 'custom/MySite', 'operator/SomeOperator'. | |
| group_name | Yes | Name of the computer group. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral transparency burden. It conveys that the operation is a read-only lookup and discloses that it intentionally bypasses mutable connection state, which is valuable behavior context. It does not discuss potential errors or authentication, but for a simple lookup with an output schema, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the primary purpose, and the second sentence explains the implementation rationale. No information is redundant or excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two required parameters, full schema coverage, and an output schema. The description provides the necessary context about what the tool does and why it is built a certain way. For a straightforward lookup tool, this fully covers the agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters (site_path and group_name) with examples, giving 100% schema description coverage. The tool description adds little beyond reinforcing the 'explicit site path' aspect, which is a minor enhancement. Therefore, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Look up'), a clear resource ('computer group'), and the precise scope ('by name within an explicit site path'). It also distinguishes itself from an alternative implementation (besapi's get_computergroup), making the tool's purpose unambiguous even among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that this tool is the preferred choice when an explicit site path is required and the mutable state of besapi's get_computergroup should be avoided. While it doesn't explicitly mention sibling tools or provide exclusion criteria, it gives a clear rationale for choosing this tool over the alternative implementation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboard_variableA
Read a BigFix dashboard datastore variable value (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| var_name | Yes | Dashboard variable name. | |
| dashboard_name | Yes | Dashboard name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It states 'read-only', which is a useful safety signal, but it does not mention potential errors, permissions, or any side effects. The transparency is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose without wasted words. It is succinct and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema present and full schema parameter coverage, the description is mostly complete. It tells the agent what the tool does and that it's read-only. It lacks broader usage context, but the simplicity of the tool keeps this from being a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema's own parameter descriptions, which fully document 'dashboard_name' and 'var_name'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and identifies the exact resource ('BigFix dashboard datastore variable value'), clearly distinguishing it from sibling tools that target other resources. The parenthetical '(read-only)' reinforces the operation type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The sibling list includes many other read-oriented tools, but the description offers no exclusions, prerequisites, or explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operatorA
Look up a BigFix operator (console user) by name.
| Name | Required | Description | Default |
|---|---|---|---|
| user_name | Yes | BigFix operator user name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral transparency burden. It only states the action 'look up' and does not disclose whether this is a read-only operation, what happens if the operator is not found, or any other behavioral traits. This is a minimal disclosure that leaves the agent uncertain about important side effects or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action and resource. It is concise and free of filler or redundant information, earning a perfect score for conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and has an output schema, but the description lacks critical contextual details such as the read-only nature and error behavior. While the output schema may cover return values, the absence of annotations and minimal description leaves the agent without complete context on how this tool behaves in different scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of the single parameter user_name, with a clear description. The tool description adds no additional meaning beyond the schema, but with full schema coverage the description is not required to supplement parameters. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific and unambiguous: 'Look up a BigFix operator (console user) by name.' It uses a clear verb ('look up'), identifies the resource ('BigFix operator'), and specifies the method (by name). It distinguishes itself from sibling tools like whoami (current operator) and get_server_info (server information).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need to look up an operator by name. However, it does not explicitly state when to use it versus alternatives, nor does it mention any exclusions or prerequisites. The usage context is inferred rather than fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoA
Get BigFix root server info (version, etc) from /api/serverinfo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It accurately describes a read-only 'Get' operation from a specific endpoint, but omits any details about authentication requirements, response format, or potential side effects. For a simple no-parameter tool, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the verb, resource, and endpoint with no wasted words. It is appropriately concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, no annotations, output schema present), the description is largely complete: it states what it does and where. However, it lacks any context about prerequisites or read-only nature, so it falls just short of a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially covered. The description doesn't need to explain parameters, and the baseline for 0 parameters is 4. No additional semantic information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('BigFix root server info (version, etc)') along with the exact endpoint ('from /api/serverinfo'). This distinguishes it from sibling tools like whoami or api_get, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives such as api_get. The endpoint implies the use case (retrieving server info), but there are no exclusions or alternative recommendations, leaving the agent to infer usage from the endpoint and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesA
List all sites visible to the configured operator.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the visibility scope, but does not mention return format, pagination, or any side effects. The verb 'list' implies read-only, but this is not explicitly confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant phrasing. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with an output schema, the description is nearly complete. It clearly states what the tool does and the scope, though it could benefit from a note about potential limitations (e.g., whether the list is always exhaustive or if operator visibility is the only filter).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description is not required to add parameter-level meaning. Per the rubric, a tool with no parameters receives a baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('sites') with an explicit scope ('visible to the configured operator'), clearly stating the tool's function. It also differentiates this tool from siblings like 'whoami' or 'get_computer_group' by focusing on sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as 'get_computer_group' or 'api_get'. The description implies a simple listing operation but provides no context, prerequisites, or exclusions to help an agent choose it over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_relevance_queryA
Evaluate a BigFix session relevance query on the root server.
Session relevance queries data the server already has (computers, fixlets, actions, sites, operators...) with no client round-trip. Examples: 'number of bes computers', '(name of it, id of it) of bes computers whose (now - last report time of it < 1 * day)'.
There is no server-side result limit, so bound large result sets in the relevance itself (e.g. 'firsts 100 of bes computers'). Returns the raw JSON envelope: {"result": [...], "evaltime_ms": ...}.
Results are evaluated within the configured operator's scope. Unless whoami reports is_main_operator, counts and lists are a lower bound on what exists - report them as visible to this operator, not as the complete state of BigFix.
| Name | Required | Description | Default |
|---|---|---|---|
| relevance | Yes | A BigFix session relevance expression to evaluate. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses the absence of a server-side result limit, warns to bound large result sets, specifies the return envelope shape, and reveals that results are scoped to the operator's visibility, potentially being a lower bound unless whoami shows is_main_operator. This is rich, actionable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured: it starts with a one-sentence purpose, then a paragraph explaining the query context, then critical caveats, and finally the operator-scope note. Each sentence contributes necessary information, with no fluff. The use of examples and the raw envelope format makes it efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is remarkably complete. It covers what the tool does, the data source, return format, result limits, and scope/visibility nuances. Although an output schema exists, the description still explains the envelope structure and operator-bound implications, leaving little room for misinterpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the sole parameter as 'A BigFix session relevance expression to evaluate,' and coverage is 100%, so the baseline is 3. The description adds value by providing concrete example expressions and guidance on bounding result sets (e.g., using 'firsts 100'), which helps the agent construct valid inputs and avoid performance issues.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Evaluate a BigFix session relevance query on the root server.' It clearly distinguishes from sibling client query tools by noting 'no client round-trip' and listing the data domains (computers, fixlets, actions, sites, operators). This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that session relevance queries the server's already-held data with no client round-trip, which effectively tells the agent when to use this tool versus client query tools. It also provides examples and a critical caveat about no server-side result limit, implying the need to bound queries. However, it does not explicitly name alternative tools or state 'use client query for client-side data,' so there's no direct exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Show the configured connection: user, root server, main operator status.
Cheap connectivity and permission smoke test. is_main_operator tells you whether results from the other tools can be treated as the full state of BigFix (master operator) or only as this operator's scoped view, which may be incomplete in ways this operator cannot detect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds valuable context about the 'is_main_operator' field and its implications for scoped vs. full-state results, and calls the tool 'cheap.' It does not explicitly mention side effects or auth requirements, but these are minimal for a read-only smoke test.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary purpose is front-loaded, and the second sentence adds crucial interpretive context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema (so return values need not be described), and no parameters. The description explains the key semantic nuance of is_main_operator and the tool's role as a smoke test, making it complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description appropriately does not discuss parameters since there are none, and the input schema is empty with 100% coverage, so there is nothing to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does with a specific verb and resource: 'Show the configured connection: user, root server, main operator status.' It also distinguishes itself from siblings like get_operator or get_server_info by focusing on the current connection and its role as a smoke test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Cheap connectivity and permission smoke test,' which gives clear context for when to use it. It also explains how is_main_operator affects interpretation of other tool results, implying this should be used to establish context. However, it does not explicitly name alternatives or exclusions.
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. Dates show when Glama detected each change.
11 tool updates
v0.1.0- First observed
api_get - First observed
client_query - First observed
client_query_results - First observed
client_query_submit - First observed
get_computer_group - First observed
get_dashboard_variable - First observed
get_operator - First observed
get_server_info - First observed
list_sites - First observed
session_relevance_query - First observed
whoami
TDQS
Each tool targets a distinct resource or operation: server info, session relevance, client query lifecycle (submit/results/combined), sites, computer groups, operators, dashboard variables, and a generic API GET. The three client query tools are clearly separated by their role in the workflow, and session_relevance_query vs client_query is explicitly server-side vs client-side.
Naming is inconsistent: most tools use verb_noun (get_server_info, list_sites, get_operator), but there are noun phrases (session_relevance_query, client_query, client_query_results), an object-verb (client_query_submit, api_get), and a standalone verb (whoami). This mixing of verb-first and noun-first patterns makes the set harder to predict.
11 tools is well within the ideal range for a domain-specific server. Each tool serves a distinct need, from connectivity checks to relevance queries, client data collection, and resource lookups. No tool feels superfluous, and the count is appropriate for a read-only BigFix root server interface.
The tool surface comprehensively covers the read-only querying and inspection domain: server info, session relevance, client relevance, sites, computer groups, operators, dashboard variables, and a generic API escape hatch. The powerful session_relevance_query and api_get cover any gaps for listing or deep inspection, and the absence of mutating tools is consistent with the stated read-only nature.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Related MCP Servers
- AlicenseAqualityCmaintenanceA read-only MCP server for InvGate Asset Management, enabling natural language queries for assets, people, computers, servers, software, and API health.12151MIT
- AlicenseNot gradedqualityAmaintenanceSecurity-first, read-only MCP server for Microsoft SQL Server, enabling safe natural-language querying of databases.15MIT
- AlicenseAqualityCmaintenanceA read-only MCP server that enables AI assistants to query ServiceNow instances—incidents, changes, users, CMDB—with malformed query linting and injection protection.7MIT
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that enables natural language querying of DSpace 7+ repositories via the REST API, allowing users to search, retrieve items, and analyze repository data.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jgstew/bigfix-root-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server