Skip to main content
Glama
jgstew

bigfix-root-mcp

by jgstew

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

session_relevance_query

Evaluate session relevance on the root server; returns the JSON envelope (result, evaltime_ms).

analyze_relevance

Statically analyze a relevance expression offline - parse, types, dialect, unknown inspectors with suggestions, complexity. Never evaluates it.

search_inspectors

Fuzzy-search the offline inspector reference by name or phrase.

client_query_submit

Submit a client fast query, return its query_id immediately.

client_query_results

Fetch current (cumulative) results for a query ID; safe to call repeatedly.

client_query

Submit + poll in one call with progress notifications; stops on expected count reached, results stable, or timeout.

get_server_info

Root server version info (/api/serverinfo).

list_sites

Sites visible to the configured operator.

get_computer_group

Look up a group by name - requires an explicit site_path.

get_operator

Look up a console operator by name.

get_dashboard_variable

Read a dashboard datastore variable.

whoami

Configured user/root server, main-operator status, write-gate state; connectivity smoke test.

api_get

Read-only escape hatch: GET any /api/ path (try help for discovery).

get_computer

One computer's full record (/api/computer/{id}).

find_computers

Find computers by case-insensitive name substring.

applicable_fixlets

Content currently relevant to one computer.

get_action / get_action_status

An action's definition, and its per-computer execution state.

list_actions

Actions visible to the configured operator.

find_content

Search fixlets/tasks/analyses/baselines by name across sites; resolves the site_path needed by get_content.

get_content

One fixlet, task, analysis or baseline by site path and ID.

list_operators / list_roles

Console operators and roles (master operator only).

validate_bes_xml

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_qna

Evaluate client relevance with the qna binary on containers or admin-inventoried hosts - about a second per warm run. Never touches the BigFix deployment.

list_qna_targets

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_action

Stop an in-flight action (POST /api/action/{id}/stop).

set_dashboard_variable

Set a dashboard datastore variable.

import_bes_content

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

bigfix://relevance/session-cookbook

Session relevance that works - every expression verified against a live root server - plus the operators that don't exist.

bigfix://relevance/client-cookbook

Client (fast query) relevance, targeting forms, reading cumulative results.

bigfix://guide/tools

Which tool answers which question, how to read bounded responses, what operator scope means.

bigfix://relevance/reference/dialects

Client versus session relevance: where each is evaluated, which one a tool expects.

bigfix://relevance/reference/client-relevance

Client relevance language reference (from bigfix-relevance-analyzer).

bigfix://relevance/reference/session-relevance

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):

  1. expected_count_reached - as many distinct computers reported as targeted;

  2. results_stable - no new computers for stable_polls consecutive polls;

  3. 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 / [besapi] config key

Default

Root server URL

BES_ROOT_SERVER (e.g. https://bes.example.com:52311)

-

REST operator

BES_USER_NAME

-

Password

BES_PASSWORD

-

Write tools

BIGFIX_ALLOW_WRITES: true to register them

off

TLS verification

BES_SSL_VERIFY: false, true, or a CA bundle path

false (besapi default)

qna inventory

BIGFIX_QNA_INVENTORY: path to a hosts.toml (see qna evaluation)

unset

qna containers

BIGFIX_QNA_CONTAINERS: 0 to forbid container-image targets

on when [qna] installed

Transport

BIGFIX_MCP_TRANSPORT: stdio or http (streamable HTTP on 127.0.0.1:8000/mcp, banner on). No auth layer of its own - put authentication in front before binding beyond localhost.

stdio

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-mcp

To keep it on PATH instead, as a managed tool:

uv tool install bigfix-root-mcp
bigfix-root-mcp

With pip

pip install bigfix-root-mcp
bigfix-root-mcp               # or: python -m bigfix_root_mcp

From a checkout

uv 0.12+ required:

uv sync
uv run bigfix-root-mcp        # or: uv run python -m bigfix_root_mcp

Verifying 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-mcp

then 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_WRITES unset, 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_query with target_all evaluates 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_operator tells 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 required site_path parameter.

  • 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. Set BIGFIX_QNA_CONTAINERS=0 to 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, or become flags 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_run defaults to true. The response describes the call that would be made and nothing is sent. A write only happens on an explicit dry_run=false.

  • Every attempt is audit-logged to stderr as one BIGFIX WRITE line 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-query.md

Client fast query protocol reference: endpoints, payloads, live-captured result schema, termination heuristics and their tradeoffs.

besapi-notes.md

besapi behaviors this wrapper depends on or works around (error surfacing, connection lifecycle, return shapes, site-path state).

design-decisions.md

Why the server is shaped this way, plus FastMCP 4 beta specifics.

besapi-proposals.md

Proposed upstream besapi changes that would let this project shrink.

rest-endpoints.md

Live-verified REST paths, site-path rules, and relevance findings (including the operators that don't exist).

security-review.md

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 pytest

Linting, 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-push

Useful 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 it

Tests run entirely offline against a scripted fake BESConnection, including in-memory end-to-end MCP calls via fastmcp.Client.

Available Tools

11 tools
api_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative REST API path under /api/, e.g. 'help', 'computers', 'sites', 'computer/123'. Query strings allowed.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_textYesClient relevance to evaluate on each targeted agent.
target_allNoTarget all computers.
stable_pollsNoStop after this many consecutive polls with no new computers reporting (once at least one has).
expected_countNoStop once this many computers reported. Defaults to the targeted computer count when knowable.
timeout_secondsNoMax seconds to wait (1-600).
target_relevanceNoClient relevance targeting expression.
target_computer_idsNoTarget these BigFix computer IDs.
poll_interval_secondsNoSeconds between polls (min 2).
target_computer_namesNoTarget these computer names.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

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+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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesQuery ID returned by client_query_submit.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_textYesClient relevance to evaluate on each targeted agent.
target_allNoTarget all computers.
target_relevanceNoClient relevance targeting expression.
target_computer_idsNoTarget these BigFix computer IDs.
target_computer_namesNoTarget these computer names.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

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, 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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_pathYesSite path containing the group, e.g. 'master', 'custom/MySite', 'operator/SomeOperator'.
group_nameYesName of the computer group.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
var_nameYesDashboard variable name.
dashboard_nameYesDashboard name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_nameYesBigFix operator user name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
relevanceYesA BigFix session relevance expression to evaluate.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

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+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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 11 tool updatesv0.1.0
    • First observedapi_get
    • First observedclient_query
    • First observedclient_query_results
    • First observedclient_query_submit
    • First observedget_computer_group
    • First observedget_dashboard_variable
    • First observedget_operator
    • First observedget_server_info
    • First observedlist_sites
    • First observedsession_relevance_query
    • First observedwhoami

TDQS

A4/5.0
Disambiguation5/5

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 Consistency2/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A read-only MCP server for InvGate Asset Management, enabling natural language queries for assets, people, computers, servers, software, and API health.
    12
    15
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Security-first, read-only MCP server for Microsoft SQL Server, enabling safe natural-language querying of databases.
    15
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A read-only MCP server that enables AI assistants to query ServiceNow instances—incidents, changes, users, CMDB—with malformed query linting and injection protection.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    2
    MIT

Latest Blog Posts

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