Skip to main content
Glama

Create a Power BI report on a semantic model (dry run by default)

create_report
DestructiveIdempotent

Creates a Power BI report item bound to an existing semantic model: one page with cards, a column chart by month, a bar chart and a table built only on the model's measures and columns (PBIR definition), or one blank page with empty_page=true. Requires workspace, model and name; Report.ReadWrite.All or Item.ReadWrite.All, Contributor, and to read the model SemanticModel.ReadWrite.All. Returns JSON with the visuals, the REST call and next steps; with dry_run=false also the result, or kind consent. Changes Fabric only with dry_run=false, and only by adding one item: a report of that name is left as it is (kind already_exists), nothing is updated or deleted. Errors: {error, kind, hint}.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "workspace": "<workspace>",
      "model": "<model>",
      "name": "<name>"
    },
    "name": "create_report"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYesDisplay name of the report; a report of this name in the workspace is left alone and the call refused. Example: "shop_report".
modelYesSemantic model the report is bound to, name or id (as create_semantic_model named it). Example: "shop_model".
dry_runNotrue (default) returns what would be created and the REST calls, changing nothing; false creates or updates.
workspaceYesFabric workspace, name or id.
empty_pageNotrue creates the report with one blank page and reads nothing of the model; false (default) draws a page from its measures and columns. Example: false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "result": {
      -      "title": "Result",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "title": "create_reportOutput",
      -  "type": "object"
      -}New value: +null
  2. Changed1 schema field changed
    • addedInput schema / properties / empty_page
      Added value: +{
      +  "default": false,
      +  "description": "true creates the report with one blank page and reads nothing of the model; false (default) draws a page from its measures and columns. Example: false.",
      +  "title": "Empty Page",
      +  "type": "boolean"
      +}
  3. Added

TDQS

A4.4/5.0
Behavior5/5

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

Goes well past the annotations: it names the exact permission set (Report.ReadWrite.All or Item.ReadWrite.All, Contributor, SemanticModel.ReadWrite.All to read the model), states the precise write boundary ('only by adding one item... nothing is updated or deleted'), documents the collision outcome (kind already_exists), and describes the return payload (visuals, REST call, next steps, result or kind consent) and the error shape {error, kind, hint}. This is a large amount of behavior the annotations alone do not convey; the additive-only clarification sits alongside destructiveHint=true as a refinement rather than a contradiction.

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

Conciseness4/5

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

Front-loaded with purpose, then requirements, returns, side effects, and error shape in a logical order with zero filler sentences. It is dense to the point of being clause-stacked (the middle sentence carries visuals, permissions and prerequisites separated by semicolons), which costs some readability but nothing is redundant.

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 five-parameter tool that writes to Fabric with no output schema, the description covers what is needed: prerequisites, permissions, dry-run default, exactly what changes and what does not, the existing-name outcome, the return contents, and the error envelope. An agent can call this correctly and predict the result without inspecting anything else.

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 all five parameters are already documented, and the description largely restates them — the empty_page blank-page behavior and the name-collision refusal both appear verbatim in the schema. It adds only light framing by tying empty_page to 'reads nothing of the model', so baseline 3 applies.

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?

States a specific verb and resource ('Creates a Power BI report item bound to an existing semantic model') and immediately enumerates what the item contains (one page with cards, column chart by month, bar chart, table, or a blank page). The binding requirement to an existing model plus the 'built only on the model's measures and columns' clause clearly separates it from create_semantic_model and the other create_* siblings.

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?

Gives concrete preconditions (workspace, model and name required; the model must already exist), a default-safe mode ('dry_run by default', 'Changes Fabric only with dry_run=false'), and an in-tool branch rule for empty_page=true vs false. What's missing is explicit routing against alternatives — it never names create_semantic_model as the prerequisite step or says when not to use this tool (e.g. for an existing report, which is refused rather than updated).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.