Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.mafaq229/pbirb-mcp

PYPI · PBIRB-MCP · SCANNED SEP 20

MCP server for editing Power BI Report Builder paginated reports (RDL)

Available components

−1 this week 61 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 1 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 93 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability76
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 17305 tokens (~121/item across 143 items; 143 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage70
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 10% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 15 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_data_source" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 143 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the io.github.mafaq229/pbirb-mcp server?

io.github.mafaq229/pbirb-mcp runs locally as a PyPI package, launched with uvx pbirb-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · pbirb-mcp

# add to Claude Code
claude mcp add mafaq229-pbirb-mcp -- uvx pbirb-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "mafaq229-pbirb-mcp": {
      "command": "uvx",
      "args": [
        "pbirb-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "mafaq229-pbirb-mcp": {
      "command": "uvx",
      "args": [
        "pbirb-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add mafaq229-pbirb-mcp -- uvx pbirb-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mafaq229-pbirb-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "pbirb-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add mafaq229-pbirb-mcp --command uvx --arg pbirb-mcp
# ~/.hermes/config.yaml
mcp_servers:
  mafaq229-pbirb-mcp:
    command: "uvx"
    args: ["pbirb-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "mafaq229-pbirb-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "pbirb-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add mafaq229-pbirb-mcp -t stdio -c uvx -a pbirb-mcp
// mcp.json
{
  "mcpServers": {
    "mafaq229-pbirb-mcp": {
      "command": "uvx",
      "args": [
        "pbirb-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −3
    • Stability: pass → 0.77 functional
  • 16 Sept 26 0
    • Stability: 0.97 → pass security
  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 −14
    • Malware scan: pass → unverified security
  • 12 Sept 26 +15
    • Malware scan: unverified → pass security
  • 11 Sept 26 −2
    • Stability: pass → 0.83 functional
  • 10 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/pbirb-mcp@0.4.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 1 package
Packages resolved 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 143 exposed · ~17,305 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
set_document_map_label ~97

Set <DocumentMapLabel> on any named ReportItem (Textbox / Image / Rectangle / Chart / Tablix / etc.). Surfaces in the rendered report's navigable document-map / table-of-contents pane. Pass '' to clear. Idempotent. Returns {element, kind, changed: bool}.

NameTypeReqDescription
element_namestringyes
label_or_expressionstringyes
pathstringyes

No output schema declared.

No examples provided.

set_element_visibility ~102

Set <Visibility> on any named ReportItem (Tablix, Textbox, Image, Rectangle, Subreport, Chart). For group-level visibility use set_group_visibility; for detail-row use set_detail_row_visibility. toggle_textbox optionally points at a textbox name that toggles expand/collapse.

NameTypeReqDescription
element_namestringyes
hidden_expressionstringyes
pathstringyes
toggle_textboxstring|null

No output schema declared.

No examples provided.

set_footer_item_position ~78

Move an existing named ReportItem inside <PageFooter> to (top, left). Errors if there is no <PageFooter> (call set_page_footer first) or no item by that name.

NameTypeReqDescription
leftstringyes
namestringyes
pathstringyes
topstringyes

No output schema declared.

No examples provided.

set_footer_item_size ~57

Resize a named item inside <PageFooter>. Same shape as set_header_item_size.

NameTypeReqDescription
heightstring|null
namestringyes
pathstringyes
widthstring|null

No output schema declared.

No examples provided.

set_group_page_break ~111

Set <BreakLocation> on a tablix group's page-break rule. location ∈ {None, Start, End, StartAndEnd, Between}. Passing 'None' removes the <PageBreak> element (the canonical 'no break' shape). Idempotent. Returns {tablix, group, kind: 'Group', location, changed}.

NameTypeReqDescription
group_namestringyes
locationstringyes
pathstringyes
tablix_namestringyes

No output schema declared.

No examples provided.

set_group_sort ~71

Replace a group's <SortExpressions> with a fresh list. Each entry is an RDL expression, e.g. =Fields!Region.Value.

NameTypeReqDescription
group_namestringyes
pathstringyes
sort_expressionsarrayyes
tablix_namestringyes

No output schema declared.

No examples provided.

set_group_visibility ~86

Set <Visibility> on a group's TablixMember. Accepts a Hidden expression and an optional ToggleItem (a textbox name that toggles the group expand/collapse).

NameTypeReqDescription
group_namestringyes
pathstringyes
tablix_namestringyes
toggle_textboxstring|null
visibility_expressionstringyes

No output schema declared.

No examples provided.

set_header_item_position ~78

Move an existing named ReportItem inside <PageHeader> to (top, left). Errors if there is no <PageHeader> (call set_page_header first) or no item by that name.

NameTypeReqDescription
leftstringyes
namestringyes
pathstringyes
topstringyes

No output schema declared.

No examples provided.

set_header_item_size ~95

Resize a named item inside <PageHeader>. Mirrors set_body_item_size — at least one of width / height; missing fields untouched; idempotent ({changed: false} when nothing differs). Closes the v0.2 parity gap where only the body variant existed.

NameTypeReqDescription
heightstring|null
namestringyes
pathstringyes
widthstring|null

No output schema declared.

No examples provided.

set_image_action ~88

Same shape as set_textbox_action but operates on a named <Image>. action_type ∈ Hyperlink / Drillthrough / BookmarkLink. Returns {image, kind, action_type, changed}.

NameTypeReqDescription
action_typestringyes
drillthrough_parametersarray
image_namestringyes
pathstringyes
target_expressionstringyes

No output schema declared.

No examples provided.

set_image_sizing ~114

Set <Image>/<Sizing> on a named Image. sizing ∈ AutoSize / Fit / FitProportional / Clip. AutoSize renders at native size (box grows to fit); Fit stretches to fill (ignores aspect ratio); FitProportional preserves aspect ratio; Clip renders at native size, clipped to the box. Idempotent: same value → {changed: false}, no save.

NameTypeReqDescription
image_namestringyes
pathstringyes
sizingstringyes

No output schema declared.

No examples provided.

set_image_source ~132

Repoint an existing <Image> at a different embedded image entry without delete-and-readd. Sets Source=Embedded and rewrites <Value> to embedded_name. Refuses with a clear error if embedded_name isn't in <EmbeddedImages> — leaving a dangling reference would render as a broken image. Add the image first via add_embedded_image. Idempotent: same (Source, Value) pair → {changed: false}, no save. Returns {name, kind, changed: bool}.

NameTypeReqDescription
embedded_namestringyes
image_namestringyes
pathstringyes

No output schema declared.

No examples provided.

set_keep_together ~111

Set <KeepTogether> on a named Tablix / Rectangle / Chart / Textbox / Map / Gauge. Tells the renderer 'don't split this across pages if you can help it'. Best-effort — items larger than a page are still split. keep=False removes the element. Refuses for Image / Line / Subreport and other kinds where the RDL XSD doesn't allow it.

NameTypeReqDescription
keepbooleanyes
namestringyes
pathstringyes

No output schema declared.

No examples provided.

set_keep_with_group ~102

Set <TablixMember>/<KeepWithGroup> on the member that wraps the named group. value ∈ {None, Before, After}. Typical use: a column-header row's member with 'After' to glue it to the data rows that follow. value='None' removes the element.

NameTypeReqDescription
group_namestringyes
pathstringyes
tablix_namestringyes
valuestringyes

No output schema declared.

No examples provided.

set_page_footer ~57

Same as set_page_header, for <PageFooter>.

NameTypeReqDescription
heightstring|null
pathstringyes
print_on_first_pageboolean|null
print_on_last_pageboolean|null

No output schema declared.

No examples provided.

set_page_header ~76

Create or update <PageHeader>: height plus PrintOnFirstPage / PrintOnLastPage flags. All fields optional — only what's passed gets written.

NameTypeReqDescription
heightstring|null
pathstringyes
print_on_first_pageboolean|null
print_on_last_pageboolean|null

No output schema declared.

No examples provided.

set_page_orientation ~56

Set page orientation by swapping PageHeight and PageWidth when the current orientation doesn't match the requested one. Idempotent. Accepts 'Portrait' or 'Landscape'.

NameTypeReqDescription
orientationstringyes
pathstringyes

No output schema declared.

No examples provided.

set_page_setup ~116

Update <Page> dimensions, margins, and column count on the first ReportSection. All fields are optional — only what's passed gets written. columns=1 strips the <Columns/> element.

NameTypeReqDescription
columnsinteger|null
margin_bottomstring|null
margin_leftstring|null
margin_rightstring|null
margin_topstring|null
page_heightstring|null
page_widthstring|null
pathstringyes

No output schema declared.

No examples provided.

set_parameter_available_values ~173

Set or clear <ValidValues> on a report parameter. source='static' with a non-empty static_values writes a list of <ParameterValue> entries (each entry can be a string or {value, label} dict). source='static' with static_values=[] or omitted CLEARS the <ValidValues> element entirely (mirrors set_parameter_prompt('') and returns cleared=true). source='query' writes a <DataSetReference> to a lookup dataset. Replaces any existing <ValidValues> block.

NameTypeReqDescription
namestringyes
pathstringyes
query_datasetstring|null
query_label_fieldstring|null
query_value_fieldstring|null
sourcestringyes
static_valuesarray|null

No output schema declared.

No examples provided.

set_parameter_default_values ~156

Set or clear <DefaultValue> on a report parameter. source='static' with a non-empty static_values writes a <Values> list of expressions. source='static' with static_values=[] or omitted CLEARS the <DefaultValue> element entirely (mirrors set_parameter_prompt('') and returns cleared=true). source='query' writes a <DataSetReference> with ValueField only (no LabelField — defaults are values, not display strings). Replaces any existing block.

NameTypeReqDescription
namestringyes
pathstringyes
query_datasetstring|null
query_value_fieldstring|null
sourcestringyes
static_valuesarray|null

No output schema declared.

No examples provided.

set_parameter_layout ~157

Author <ReportParametersLayout>/<GridLayoutDefinition> explicitly. Writes <NumberOfRows> + <NumberOfColumns>; rewrites <CellDefinitions> so each name in parameter_order lands at (row=index // columns, col=index % columns). Strict permutation check (every existing parameter exactly once). rows*columns must be ≥ parameter count. Auto-creates the layout block when absent. Idempotent: same grid + order → no save. Complements reorder_parameters (declaration order) and sync_parameter_layout (gap-filling). Returns {rows, columns, order, kind, changed}.

NameTypeReqDescription
columnsintegeryes
parameter_orderarrayyes
pathstringyes
rowsintegeryes

No output schema declared.

No examples provided.

set_parameter_prompt ~62

Write the <Prompt> text on a ReportParameter. Empty string clears the <Prompt> element entirely; pass a single space ' ' for blank-but-present.

NameTypeReqDescription
namestringyes
pathstringyes
promptstringyes

No output schema declared.

No examples provided.

set_parameter_type ~86

Set <DataType> on a ReportParameter. type ∈ {Boolean, DateTime, Integer, Float, String}. Rejects with ValueError if any existing literal default value would be incompatible with the new type — fix defaults first via set_parameter_default_values, then retry.

NameTypeReqDescription
namestringyes
pathstringyes
typestringyes

No output schema declared.

No examples provided.

set_repeat_on_new_page ~112

Set <TablixMember>/<RepeatOnNewPage> on the member that wraps the named group. Most common use: repeat a group header row at the top of every page the group spans. Setting repeat=False removes the element (False is default). Returns {tablix, group, kind: 'TablixMember', repeat, changed}.

NameTypeReqDescription
group_namestringyes
pathstringyes
repeatbooleanyes
tablix_namestringyes

No output schema declared.

No examples provided.

set_row_height ~80

Set the Height of the Nth body row (0-indexed) in a tablix. Accepts any RDL size string ('0.25in', '1cm', '12pt').

NameTypeReqDescription
heightstringyes
pathstringyes
row_indexintegeryes
tablix_namestringyes

No output schema declared.

No examples provided.

set_series_color ~108

Write <Color> into a named series's <Style> block, overriding the chart palette for just that series. color accepts a named color ('Red'), a hex string ('#FF0000'), or an =expression. Pass '' to clear (series falls back to the palette). Returns {chart, series, kind, changed: bool}.

NameTypeReqDescription
chart_namestringyes
colorstringyes
pathstringyes
series_namestringyes

No output schema declared.

No examples provided.

set_tablix_corner ~162

Write the <TablixCorner> block — the top-left cell of a matrix-shaped tablix that holds the row-axis caption (e.g. 'Type'). Pass `text` for a literal value OR `expression` for a VB.NET '=...' formula. Mutually exclusive. Textbox name is deterministic: '<tablix_name>_Corner'. Refuses if the tablix has no named column group (the corner is only meaningful in a matrix). Replaces any existing TablixCorner block. Returns {tablix, name, kind: 'TablixCorner', changed}.

NameTypeReqDescription
expressionstring|null
pathstringyes
tablix_namestringyes
textstring|null

No output schema declared.

No examples provided.

set_tablix_size ~119

Resize a tablix by writing <Height> and / or <Width> directly. Each arg independently optional. Use after adding header / footer rows that change the body's natural height — v0.2's positioning tools only cover top/left, not size. Both values are RDL size strings. Returns {tablix, kind, changed: list[str]} — empty list when inputs match existing.

NameTypeReqDescription
heightstring
namestringyes
pathstringyes
widthstring

No output schema declared.

No examples provided.

set_textbox_action ~132

Set <Textbox>/<Action> to a Hyperlink (URL), Drillthrough (another report + optional parameters), or BookmarkLink (jump within document). target_expression accepts literal text or =expression. drillthrough_parameters is a list of {name, value} dicts wired into <Drillthrough>/<Parameters>. Idempotent: same action_type + target + parameters → {changed: false}, no save.

NameTypeReqDescription
action_typestringyes
drillthrough_parametersarray
pathstringyes
target_expressionstringyes
textbox_namestringyes

No output schema declared.

No examples provided.

set_textbox_runs ~213

Replace a textbox's content with multiple <TextRun> children for mixed styling within one display — e.g. '**Asset(s):** value' with a bold prefix + regular value in a single textbox. Each run is a dict with required 'text' and optional font_family / font_size / font_weight / font_style / color / format / text_decoration. Replaces the entire <Paragraphs> subtree (single-paragraph in v0.3; multi-paragraph deferred). Round-trip contract: get_textbox.runs[] returns the same shape this tool writes. Idempotent — identical input is a no-op short-circuit. Returns {textbox, kind, runs, changed}. Pass raw text in each run's `text` — encoding is handled; don't pre-encode XML entities (use `&` not `&amp;`, including for the VB.NET string-concat operator).

NameTypeReqDescription
pathstringyes
runsarrayyes
textbox_namestringyes

No output schema declared.

No examples provided.

set_textbox_style ~452

Set styling on a named Textbox. Properties route to the right nested Style node automatically: background_color, border_*, vertical_align, padding_*, writing_mode go on Textbox/Style; text_align on Paragraph/Style; font_*, color, format on TextRun/Style; can_grow / can_shrink go DIRECTLY on Textbox (not inside Style). All fields optional — only what's passed gets written. Cell-level styling: every tablix cell is a Textbox with a unique name, so use this tool with the cell's textbox name (e.g. 'HeaderAmount').

NameTypeReqDescription
background_colorstring|null
border_colorstring|null
border_stylestring|nullNone | Solid | Dotted | Dashed | Double.
border_widthstring|null
can_growboolean|nullAllow textbox to grow vertically when content exceeds the height. Direct Textbox child, not Style.
can_shrinkboolean|nullAllow textbox to shrink when content is shorter than the height. Direct Textbox child, not Style.
colorstring|nullText color — '#RRGGBB' or named.
font_familystring|null
font_sizestring|nullRDL size, e.g. '11pt'.
font_weightstring|nullNormal | Bold | Lighter | ... or numeric.
formatstring|nullNumber/date format (e.g. '#,0.00', 'C2', 'd').
padding_bottomstring|null
padding_leftstring|null
padding_rightstring|null
padding_topstring|nullRDL size (e.g. '2pt', '0.05in').
pathstringyes
text_alignstring|nullLeft | Center | Right | Justify | General.
textbox_namestringyes
vertical_alignstring|nullTop | Middle | Bottom.
writing_modestring|nullHorizontal | Vertical | Rotate270 — text orientation. Useful for narrow column headers.

No output schema declared.

No examples provided.

set_textbox_style_bulk ~258

Apply the same style kwargs to every named textbox in one call. Same kwarg surface as set_textbox_style. Missing names land in skipped rather than raising. Returns {textboxes, skipped, changed} where changed is the union of sub-paths affected across all textboxes. Pair with find_textboxes_by_style to discover names by current style.

NameTypeReqDescription
background_colorstring|null
border_colorstring|null
border_stylestring|null
border_widthstring|null
can_growboolean|null
can_shrinkboolean|null
colorstring|null
font_familystring|null
font_sizestring|null
font_weightstring|null
formatstring|null
padding_bottomstring|null
padding_leftstring|null
padding_rightstring|null
padding_topstring|null
pathstringyes
text_alignstring|null
textbox_namesarrayyes
vertical_alignstring|null
writing_modestring|null

No output schema declared.

No examples provided.

set_textbox_tooltip ~67

Set <Textbox>/<ToolTip>. Literal text or =expression. Pass '' to clear. Idempotent. Returns {textbox, kind, changed: bool}.

NameTypeReqDescription
pathstringyes
text_or_expressionstringyes
textbox_namestringyes

No output schema declared.

No examples provided.

set_textbox_value ~168

Replace the text content of a single-run textbox. value can be raw text or an =expression. Use this for the everyday 'change the textbox content' case (swap a literal label, update a stale parameter reference, replace a broken aggregate). Refuses with a redirect to set_textbox_runs when the textbox has multiple text runs (multi-run content needs the rich-text editor). Idempotent: identical value → {changed: false} no-op. Returns {textbox, kind, changed}. Pass raw text — encoding is handled; don't pre-encode XML entities (use `&` not `&amp;`, including for the VB.NET string-concat operator in expressions).

NameTypeReqDescription
pathstringyes
textbox_namestringyes
valuestringyes

No output schema declared.

No examples provided.

start_editing_transaction ~121

Open the report and start an editing transaction. Returns {transaction_id, path, expires_at}. Pass transaction_id to subsequent edit tools to mutate the live in-memory tree WITHOUT touching disk between calls — eliminates the per-edit parse+serialize round-trip. The transaction times out after PBIRB_MCP_TRANSACTION_TIMEOUT_S seconds (default 600); call commit_editing_transaction to flush or cancel_editing_transaction to discard. Refuses if an active transaction already owns this path.

NameTypeReqDescription
pathstringyesAbsolute path to the .rdl file to read.

No output schema declared.

No examples provided.

style_tablix_row ~390

Apply the same style kwargs to every cell in a tablix row in ONE call. Replaces the 12-individual-set_textbox_style-calls-per-row pattern. row accepts: integer (0-based body row index), 'header' (first leaf with KeepWithGroup=After — the column header row), 'details' (the Details leaf row), '<group>_header' (header row of a named row group), '<group>_footer' (footer row when present, e.g. after add_subtotal_row). Same style kwargs as set_textbox_style (font_*, color, background_color, border_*, padding_*, writing_mode, can_grow, can_shrink, etc.). Delegates writes to set_textbox_style_bulk. Returns {tablix, row, row_index, kind, cells, changed, skipped}.

NameTypeReqDescription
background_colorstring|null
border_colorstring|null
border_stylestring|null
border_widthstring|null
can_growboolean|null
can_shrinkboolean|null
colorstring|null
font_familystring|null
font_sizestring|null
font_weightstring|null
formatstring|null
padding_bottomstring|null
padding_leftstring|null
padding_rightstring|null
padding_topstring|null
pathstringyes
rowyesInteger index, or one of: 'header', 'details', '<group>_header', '<group>_footer'.
tablix_namestringyes
text_alignstring|null
vertical_alignstring|null
writing_modestring|null

No output schema declared.

No examples provided.

sum_where ~87

Emit =Sum(IIf(<condition>, <field_expression>, 0)) — the SSRS conditional-sum idiom. Both args are expression bodies (no leading '=').

NameTypeReqDescription
conditionstringyesRDL expression body, e.g. 'Fields!Status.Value = "Active"'.
field_expressionstringyesValue to sum, e.g. 'Fields!Amount.Value'.

No output schema declared.

No examples provided.

sync_parameter_layout ~129

Bring <ReportParametersLayout>/<GridLayoutDefinition>/<CellDefinitions> into sync with <ReportParameters>. Drops cells whose ParameterName no longer exists; appends cells for parameters that have no entry, placed at the next free (row, col) slot. add_parameter / remove_parameter / rename_parameter call this internally; the standalone tool is for repairing legacy reports authored before v0.3.0 where the layout drifted. No-op when the report has no <ReportParametersLayout>. Returns {added, removed}.

NameTypeReqDescription
pathstringyesAbsolute path to the .rdl file to read.

No output schema declared.

No examples provided.

update_dataset_query ~152

Replace the DAX command text of a named dataset. The full DAX expression is accepted verbatim; empty bodies are rejected. Optional alias_strategy='preserve_field_names' positionally rewrites <DataField> cells to the new DAX columns while keeping existing <Field Name> identifiers — so Fields!X.Value references in expressions keep resolving.

NameTypeReqDescription
alias_strategystring|nullWhen 'preserve_field_names', positionally remap <DataField> cells to the new DAX column list.
dataset_namestringyes
dax_bodystringyesFull DAX (e.g. EVALUATE TOPN(10, 'Sales')).
pathstringyes

No output schema declared.

No examples provided.

update_parameter_advanced ~132

Toggle the four boolean flags on a report parameter: multi_value, hidden, allow_null (writes <Nullable>), allow_blank. Each is independently optional. With no flags passed it's a no-op. Cascading parameters are NOT a flag — use set_parameter_available_values(source='query') + add_query_parameter on the lookup dataset to wire a dependency on another parameter.

NameTypeReqDescription
allow_blankboolean|null
allow_nullboolean|null
hiddenboolean|null
multi_valueboolean|null
namestringyes
pathstringyes

No output schema declared.

No examples provided.

update_query_parameter ~98

Change the value expression of an existing query parameter. Same PBIDATASET @-prefix normalisation as add_query_parameter applies on lookup; legacy Name='@X' parameters that already exist on disk are addressable via either @X or X.

NameTypeReqDescription
dataset_namestringyes
force_at_prefixboolean
namestringyes
pathstringyes
value_expressionstringyes

No output schema declared.

No examples provided.

validate_report ~172

Run schema/structural validation against an .rdl. Returns {valid, errors, xsd_used}. Structural checks always run (root element + required top-level sections). The Microsoft RDL 2016/01 XSD is bundled by default since v0.3.1 — when it's loaded, xsd_used is True and the schema-conformance bug class Power BI Report Builder rejects on load gets caught here. If the bundled XSD is missing (source-build without package-data) a {severity:warning, rule:'xsd-not-bundled'} issue surfaces instead of silent skip. Each issue is {severity, rule, location, message, suggestion?}; valid is True iff no severity='error' issue.

NameTypeReqDescription
pathstringyesAbsolute path to the .rdl file to read.

No output schema declared.

No examples provided.

verify_report ~118

One-shot static check: union of validate_report and lint_report. Returns {valid, issues, xsd_used} where valid is True iff no issue has severity='error'. Warnings (including 'xsd-not-bundled' when the schema file is missing) don't invalidate the report. Use this as the single 'is the report OK?' tool, or set PBIRB_MCP_AUTO_VERIFY=1 to have it run after every mutating call.

NameTypeReqDescription
pathstringyesAbsolute path to the .rdl file to read.

No output schema declared.

No examples provided.

Common questions

What is the io.github.mafaq229/pbirb-mcp server?

io.github.mafaq229/pbirb-mcp is listed in the public MCP registry as io.github.mafaq229/pbirb-mcp. MCP server for editing Power BI Report Builder paginated reports (RDL). This page covers its PyPI package (pbirb-mcp).

Is the io.github.mafaq229/pbirb-mcp server safe to use?

io.github.mafaq229/pbirb-mcp scores 61 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.mafaq229/pbirb-mcp server expose?

io.github.mafaq229/pbirb-mcp exposes 143 tools: describe_report, get_datasets, get_parameters, get_tablixes, update_dataset_query, and 138 more. Their descriptions and schemas cost roughly 17,305 tokens of context every time the server is loaded.

Is the io.github.mafaq229/pbirb-mcp server still maintained?

io.github.mafaq229/pbirb-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.mafaq229/pbirb-mcp server under?

io.github.mafaq229/pbirb-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.