Skip to main content
Glama

rls_test_harness

Evaluate a DAX query against every role in a Power BI model plus an unfiltered baseline to reveal silent row-level security gaps where roles return identical row counts.

Instructions

Prove the model's security filters: evaluate one DAX query under EVERY role in the model plus an unfiltered baseline, returning a per-role matrix of {role, rowCount, sampleRows, error}. A role whose rowCount equals the baseline is not filtering that query - the classic silent-RLS-gap detector. Read-only.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesthe DAX query to evaluate per role (bare table expressions get EVALUATE prefixed)
sessionIdYes
sampleRowsNosample rows to return per role (default 5, max 100; rowCount is always the full count)
Behavior5/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 explicitly states 'Read-only' and describes the return contract (per-role matrix with role, rowCount, sampleRows, error) and the interpretation (rowCount equals baseline means no filtering). This is comprehensive transparency.

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 sentences, no fluff. The first sentence states the core action and output, the second explains the interpretation and safety. Well-structured and front-loaded.

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 there is no output schema, the description fully explains what the tool returns and how to interpret results. It covers the read-only nature, the baseline, and the error field. For a complex tool with multiple roles, this is sufficient for an agent to invoke it confidently.

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 description gives meaning to the query parameter by stating it is evaluated under every role, and clarifies sampleRows as part of the output matrix. Schema already covers query and sampleRows, but sessionId remains undocumented. The description adds value beyond the schema for the main parameters, though sessionId is a common standard.

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 a specific purpose: 'Prove the model's security filters' by evaluating a DAX query under every role plus a baseline. This distinguishes it from siblings like run_dax or run_dax_as_role, which operate on single roles. The phrase 'silent-RLS-gap detector' further clarifies its intended function.

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 indicates when to use it: to test RLS effectiveness by comparing row counts across roles. It provides context on the baseline and detection logic, but does not explicitly name alternatives or state when not to use it. Still, the usage context is clear enough for an agent to select this tool over a plain run_dax.

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

Install Server

Other Tools

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/cyphonica/powerbi-pbix-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server