io.github.mafaq229/pbirb-mcp
PYPI · PBIRB-MCP · SCANNED SEP 20
MCP server for editing Power BI Report Builder paginated reports (RDL)
Available components
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
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
claude mcp add mafaq229-pbirb-mcp -- uvx pbirb-mcp
{
"mcpServers": {
"mafaq229-pbirb-mcp": {
"command": "uvx",
"args": [
"pbirb-mcp"
]
}
}
} {
"servers": {
"mafaq229-pbirb-mcp": {
"command": "uvx",
"args": [
"pbirb-mcp"
]
}
}
} codex mcp add mafaq229-pbirb-mcp -- uvx pbirb-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mafaq229-pbirb-mcp": {
"type": "local",
"command": [
"uvx",
"pbirb-mcp"
],
"enabled": true
}
}
} openclaw mcp add mafaq229-pbirb-mcp --command uvx --arg pbirb-mcp
mcp_servers:
mafaq229-pbirb-mcp:
command: "uvx"
args: ["pbirb-mcp"] {
"McpServers": {
"mafaq229-pbirb-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"pbirb-mcp"
]
}
}
} assistant mcp add mafaq229-pbirb-mcp -t stdio -c uvx -a pbirb-mcp
{
"mcpServers": {
"mafaq229-pbirb-mcp": {
"command": "uvx",
"args": [
"pbirb-mcp"
]
}
}
} 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
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 →
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 →
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}.
| Name | Type | Req | Description |
|---|---|---|---|
| element_name | string | yes | – |
| label_or_expression | string | yes | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| element_name | string | yes | – |
| hidden_expression | string | yes | – |
| path | string | yes | – |
| toggle_textbox | string|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.
| Name | Type | Req | Description |
|---|---|---|---|
| left | string | yes | – |
| name | string | yes | – |
| path | string | yes | – |
| top | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| height | string|null | – | – |
| name | string | yes | – |
| path | string | yes | – |
| width | string|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}.
| Name | Type | Req | Description |
|---|---|---|---|
| group_name | string | yes | – |
| location | string | yes | – |
| path | string | yes | – |
| tablix_name | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| group_name | string | yes | – |
| path | string | yes | – |
| sort_expressions | array | yes | – |
| tablix_name | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| group_name | string | yes | – |
| path | string | yes | – |
| tablix_name | string | yes | – |
| toggle_textbox | string|null | – | – |
| visibility_expression | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| left | string | yes | – |
| name | string | yes | – |
| path | string | yes | – |
| top | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| height | string|null | – | – |
| name | string | yes | – |
| path | string | yes | – |
| width | string|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}.
| Name | Type | Req | Description |
|---|---|---|---|
| action_type | string | yes | – |
| drillthrough_parameters | array | – | – |
| image_name | string | yes | – |
| path | string | yes | – |
| target_expression | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| image_name | string | yes | – |
| path | string | yes | – |
| sizing | string | yes | – |
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}.
| Name | Type | Req | Description |
|---|---|---|---|
| embedded_name | string | yes | – |
| image_name | string | yes | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| keep | boolean | yes | – |
| name | string | yes | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| group_name | string | yes | – |
| path | string | yes | – |
| tablix_name | string | yes | – |
| value | string | yes | – |
No output schema declared.
No examples provided.
set_page_footer ~57
Same as set_page_header, for <PageFooter>.
| Name | Type | Req | Description |
|---|---|---|---|
| height | string|null | – | – |
| path | string | yes | – |
| print_on_first_page | boolean|null | – | – |
| print_on_last_page | boolean|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.
| Name | Type | Req | Description |
|---|---|---|---|
| height | string|null | – | – |
| path | string | yes | – |
| print_on_first_page | boolean|null | – | – |
| print_on_last_page | boolean|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'.
| Name | Type | Req | Description |
|---|---|---|---|
| orientation | string | yes | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | integer|null | – | – |
| margin_bottom | string|null | – | – |
| margin_left | string|null | – | – |
| margin_right | string|null | – | – |
| margin_top | string|null | – | – |
| page_height | string|null | – | – |
| page_width | string|null | – | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| path | string | yes | – |
| query_dataset | string|null | – | – |
| query_label_field | string|null | – | – |
| query_value_field | string|null | – | – |
| source | string | yes | – |
| static_values | array|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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| path | string | yes | – |
| query_dataset | string|null | – | – |
| query_value_field | string|null | – | – |
| source | string | yes | – |
| static_values | array|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}.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | integer | yes | – |
| parameter_order | array | yes | – |
| path | string | yes | – |
| rows | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| path | string | yes | – |
| prompt | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| path | string | yes | – |
| type | string | yes | – |
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}.
| Name | Type | Req | Description |
|---|---|---|---|
| group_name | string | yes | – |
| path | string | yes | – |
| repeat | boolean | yes | – |
| tablix_name | string | yes | – |
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').
| Name | Type | Req | Description |
|---|---|---|---|
| height | string | yes | – |
| path | string | yes | – |
| row_index | integer | yes | – |
| tablix_name | string | yes | – |
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}.
| Name | Type | Req | Description |
|---|---|---|---|
| chart_name | string | yes | – |
| color | string | yes | – |
| path | string | yes | – |
| series_name | string | yes | – |
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}.
| Name | Type | Req | Description |
|---|---|---|---|
| expression | string|null | – | – |
| path | string | yes | – |
| tablix_name | string | yes | – |
| text | string|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.
| Name | Type | Req | Description |
|---|---|---|---|
| height | string | – | – |
| name | string | yes | – |
| path | string | yes | – |
| width | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| action_type | string | yes | – |
| drillthrough_parameters | array | – | – |
| path | string | yes | – |
| target_expression | string | yes | – |
| textbox_name | string | yes | – |
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 `&`, including for the VB.NET string-concat operator).
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| runs | array | yes | – |
| textbox_name | string | yes | – |
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').
| Name | Type | Req | Description |
|---|---|---|---|
| background_color | string|null | – | – |
| border_color | string|null | – | – |
| border_style | string|null | – | None | Solid | Dotted | Dashed | Double. |
| border_width | string|null | – | – |
| can_grow | boolean|null | – | Allow textbox to grow vertically when content exceeds the height. Direct Textbox child, not Style. |
| can_shrink | boolean|null | – | Allow textbox to shrink when content is shorter than the height. Direct Textbox child, not Style. |
| color | string|null | – | Text color — '#RRGGBB' or named. |
| font_family | string|null | – | – |
| font_size | string|null | – | RDL size, e.g. '11pt'. |
| font_weight | string|null | – | Normal | Bold | Lighter | ... or numeric. |
| format | string|null | – | Number/date format (e.g. '#,0.00', 'C2', 'd'). |
| padding_bottom | string|null | – | – |
| padding_left | string|null | – | – |
| padding_right | string|null | – | – |
| padding_top | string|null | – | RDL size (e.g. '2pt', '0.05in'). |
| path | string | yes | – |
| text_align | string|null | – | Left | Center | Right | Justify | General. |
| textbox_name | string | yes | – |
| vertical_align | string|null | – | Top | Middle | Bottom. |
| writing_mode | string|null | – | Horizontal | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| background_color | string|null | – | – |
| border_color | string|null | – | – |
| border_style | string|null | – | – |
| border_width | string|null | – | – |
| can_grow | boolean|null | – | – |
| can_shrink | boolean|null | – | – |
| color | string|null | – | – |
| font_family | string|null | – | – |
| font_size | string|null | – | – |
| font_weight | string|null | – | – |
| format | string|null | – | – |
| padding_bottom | string|null | – | – |
| padding_left | string|null | – | – |
| padding_right | string|null | – | – |
| padding_top | string|null | – | – |
| path | string | yes | – |
| text_align | string|null | – | – |
| textbox_names | array | yes | – |
| vertical_align | string|null | – | – |
| writing_mode | string|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}.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| text_or_expression | string | yes | – |
| textbox_name | string | yes | – |
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 `&`, including for the VB.NET string-concat operator in expressions).
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | – |
| textbox_name | string | yes | – |
| value | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute 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}.
| Name | Type | Req | Description |
|---|---|---|---|
| background_color | string|null | – | – |
| border_color | string|null | – | – |
| border_style | string|null | – | – |
| border_width | string|null | – | – |
| can_grow | boolean|null | – | – |
| can_shrink | boolean|null | – | – |
| color | string|null | – | – |
| font_family | string|null | – | – |
| font_size | string|null | – | – |
| font_weight | string|null | – | – |
| format | string|null | – | – |
| padding_bottom | string|null | – | – |
| padding_left | string|null | – | – |
| padding_right | string|null | – | – |
| padding_top | string|null | – | – |
| path | string | yes | – |
| row | – | yes | Integer index, or one of: 'header', 'details', '<group>_header', '<group>_footer'. |
| tablix_name | string | yes | – |
| text_align | string|null | – | – |
| vertical_align | string|null | – | – |
| writing_mode | string|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 '=').
| Name | Type | Req | Description |
|---|---|---|---|
| condition | string | yes | RDL expression body, e.g. 'Fields!Status.Value = "Active"'. |
| field_expression | string | yes | Value 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}.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute 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.
| Name | Type | Req | Description |
|---|---|---|---|
| alias_strategy | string|null | – | When 'preserve_field_names', positionally remap <DataField> cells to the new DAX column list. |
| dataset_name | string | yes | – |
| dax_body | string | yes | Full DAX (e.g. EVALUATE TOPN(10, 'Sales')). |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_blank | boolean|null | – | – |
| allow_null | boolean|null | – | – |
| hidden | boolean|null | – | – |
| multi_value | boolean|null | – | – |
| name | string | yes | – |
| path | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dataset_name | string | yes | – |
| force_at_prefix | boolean | – | – |
| name | string | yes | – |
| path | string | yes | – |
| value_expression | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute 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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute path to the .rdl file to read. |
No output schema declared.
No examples provided.
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.