superbi-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| set_shared_expressionB | Create or update a shared Power Query expression (a parameter, function, or staging query in the Queries pane). |
| bind_field_parameterA | Bind a FIELD PARAMETER to a visual so it actually swaps fields when opened in Desktop - the visual-side piece the model-side add_field_parameter cannot write. The chosen role's projection becomes the parameter COLUMN with active=true (the dynamic-projection marker) and the prototypeQuery Select swaps to the parameter column; the four model-side pieces (the NAMEOF calculated table, ParameterMetadata, SortByColumn, GroupByColumns) come from add_field_parameter - run it first. role defaults to the visual's measure well (Y, else Values). |
| set_data_colorA | Set a chart's data colour (the default series fill). For a branded single-measure chart, point this at a theme colour. |
| add_relationshipA | Create a relationship between two columns. Defaults to a star-schema Many->One (from = many/fact side, to = one/dimension side), but the cardinality is overridable to support 1:1, M:1, 1:M and M:M. fromCardinality/toCardinality = One | Many. crossFilteringBehavior = OneDirection | BothDirections | Automatic (overrides the bothDirections flag). securityFilteringBehavior = OneDirection | BothDirections | None. joinOnDateBehavior = DateAndTime | DatePartOnly. |
| add_template_measureA | Add a measure to a table in a closed .pbit template's model, editing the DataModelSchema JSON on disk with no Power BI Desktop. Collision-checked: fails if a measure of that name already exists on the table. The .pbit is written back in place (the original is copied to a .bak beside it first). |
| combine_folder_filesA | Generate a robust combine-files-from-folder query as a new query: Folder.Files -> filter by extension -> per-file parse -> Table.Combine. Schema-drift safe: it does NOT use Power Query's default 'expand with a sample file' (which silently drops columns only present in later files). fileType = csv | excel. keepFilename adds Source.Name and Source.Folder Path columns; skipErrors wraps each file in try..otherwise so one bad file does not break the refresh. Refresh afterwards. |
| set_show_items_no_dataA | Toggle 'Show items with no data' for one field in a visual: categories with no rows still appear (e.g. all months even with zero sales). The field must already be projected on the visual. Writes the projection's showAll flag. |
| add_pbir_visualA | Add a visual to a PBIR page: a fresh GUID folder definition/pages//visuals//visual.json. The query (projections + prototypeQuery) is built by the shared query builder. fields = JSON array of {role,table,field,kind} (kind=column|measure; role=Category|Y|Values|Rows|Columns|...). Returns the new visual GUID name. |
| open_reportA | Open a .pbix's report for editing (pages/visuals). The .pbix must be CLOSED in Power BI Desktop. Returns a reportSessionId. |
| stop_dax_traceA | Stop the session's DAX trace and return the structured events plus the Server Timings arithmetic: total query ms, storage-engine ms (sum of subclass-0 VertiPaq scans), formula-engine ms (query minus SE, floored at 0 because SE threads run in parallel), SE query count and cache matches. |
| list_pagesB | List the report pages (name, displayName, size, visual count). |
| fill_downA | Power Query Fill Down: replace nulls in a column with the most recent non-null value above. Appends Table.FillDown to the table's M query. columns is comma-separated. |
| set_summarize_byA | Set a column's default summarization (the implicit aggregation used when the column is dropped on a visual). summarizeBy = Default | None | Sum | Min | Max | Count | Average | DistinctCount. Set None on key/ID columns so they are not silently summed. |
| rename_columnsA | Power Query Rename Columns: rename columns in the query. Appends Table.RenameColumns to the table's M query. renames is comma-separated as from:to, e.g. "col1:Amount,col2:Region". |
| set_theme_cf_colorsA | Set the report theme's CONDITIONAL-FORMATTING gradient stops: min / center / max / null. Each is a hex colour; supply at least one. Run generate_theme first. |
| generate_calendar_table_mA | Generate a full date/calendar table as a new query: List.Dates over [startExpr..endExpr] with ~20 part columns (Year, Quarter, QuarterName, MonthNo, MonthName, MonthShort, YearMonthNo, YearMonth, ISOWeek, ISOYear, WeekdayNo, DayName, DayNo, DayOfYear, StartOfMonth, EndOfMonth, IsWeekend). startExpr/endExpr are RAW M, e.g. "#date(2020,1,1)" or a parameter reference. Pass fiscalYearEndMonth (1..12) to add FiscalYear/FiscalMonthNo/FiscalQuarter. Pass locale (e.g. en-NZ) to render month/day names in that culture. Refresh afterwards. |
| list_visual_data_rolesA | The QUERY data roles a visual type takes (Category / Y / Series / Values / Rows / ...), each with what it accepts (Grouping | Measure | GroupingOrMeasure), its per-role field cap, and the deprecated -> modern type mapping (card -> cardVisual, table -> tableEx, matrix -> pivotTable). Role metadata is HAND-CURATED for the mainstream visual types because the bundled theme schema only describes formatting cards, not query roles - coverage is reported honestly (curated | none). The role half of the discovery surface; list_visual_properties is the formatting half. |
| lock_filterA | LOCK a filter in view mode (shown in the filter pane but cannot be changed by viewers). scope=visual|page|report (visual needs page+visual; page needs page). Matches the filter on table[field]. Sets the filter's isLockedInViewMode flag. |
| delete_bookmarkB | Delete a report-level bookmark by name or displayName. |
| list_workspacesA | List the Power BI Service workspaces the caller can reach (GET /groups). Needs an AAD access token with the Power BI scopes (accessToken param or the DAXOPS_PBI_TOKEN env var); the token is used as a Bearer header only and never echoed. |
| group_byA | Power Query Group By: collapse rows to one per key-column combination with aggregates. Appends Table.Group to the table's M query. keyColumns is comma-separated. aggregations is comma-separated as name:op[:column], e.g. "Total:Sum:Amount,Lines:Count,Distinct Customers:CountDistinct:CustomerId". op = Sum | Count | Average | Min | Max | CountDistinct | All (column required except for Count/All). |
| add_table_visualB | Add a table visual. fields = JSON array of {table,field,kind} (kind=column|measure), shown left-to-right. |
| set_axisB | Configure a chart axis. axis = x (category) or y (value): toggle the axis and its title, set the value-axis start/end, display units (None|Thousands|Millions|Billions|Auto), and gridlines. |
| inject_evaluateandlogA | Wrap a measure's DAX in EVALUATEANDLOG so its value is captured in Server Timings / DAX Studio traces during debugging. Idempotent. Remember to strip_evaluateandlog afterwards. |
| delete_cultureA | Delete a culture (locale) and all its translations and linguistic metadata from the model. |
| add_calculated_columnC | Add a DAX calculated column to a table. |
| get_pbir_pageB | Get one PBIR page's page.json plus the names/types of its visuals. page = the GUID name or the displayName. |
| save_report_templateA | Save the report's current look as a reusable TEMPLATE bundle (inverse of apply_report_template): captures the live theme, the page's wallpaper + canvas size, and the report nav settings into one templateJson to re-apply later. page defaults to the first page. |
| set_theme_structural_colorsA | Set the report theme's STRUCTURAL colours. colors = JSON object with any of: firstLevelElements, secondLevelElements, thirdLevelElements, fourthLevelElements, background, secondaryBackground, tableAccent (foreground is an alias of firstLevelElements). Each value is a hex colour; only supplied keys change. Run generate_theme first. |
| set_visual_borderA | Set a visual's BORDER (typed convenience over set_visual_format). show/color/radius all optional. |
| style_pageA | One-shot 'make it beautiful' pass: apply a consistent card style (fill, rounded corners, shadow, header) to every DATA visual on a page (skips textboxes/shapes). Pair with set_page_background for a clean canvas. |
| set_table_olsA | Object-level security: set whether a role can SEE a whole table. permission = None (table hidden + inaccessible to the role), Read (visible), or Default (inherit). Creates the table permission if absent. |
| send_to_backA | Send a visual to the BACK of the page (z = current min - 1) - e.g. push a decorative panel behind the data visuals. |
| list_visual_typesA | List every canonical Power BI visualType key the formatting registry knows (52 types), each tagged data | container, with its card count. Use these keys with list_visual_properties / get_visual_schema and as a visual's type when adding visuals. |
| keep_top_rowsA | Power Query Keep Top Rows: keep only the first N rows. Appends Table.FirstN to the table's M query. |
| analyze_dependenciesA | Analyse measure/column dependencies and impact. Returns the live INFO.CALCDEPENDENCY lineage plus, when an object is named ([Measure] or Table[Column]), the direct dependants (which measures reference it) from the model tree. Read-only. |
| set_slicer_conditional_formattingA | Apply measure-driven conditional formatting to a SLICER or button-slicer (generalises the table/matrix FillRule builders). target = fill|font|callout. rules = JSON array of {min,max,color} bands driven by the measure. Verify the render in Desktop. |
| add_table_view_foldingA | ADVANCED: scaffold a Table.View that implements custom query folding over a non-foldable source. Emits Table.View(null, [handlers]). handlers is comma-separated from GetType, GetRows, OnTake, OnSkip, OnSelectColumns, OnSelectRows, GetRowCount. GetType+GetRows are the mandatory baseline (added automatically); OnTake is the cheapest win (bounded preview). FLAG: the handler bodies are TEMPLATES that defer to the table and must be specialised to actually fold into the native source. |
| add_percent_of_parentA | Generate a percent-of-parent measure over a hierarchy. hierarchyColumns is a comma-separated list of Table[Column] from top level to leaf, e.g. Product[Category], Product[Subcategory], Product[Product]. |
| update_relationshipA | Update an existing relationship's cardinality, filtering behaviour, active flag or join-on-date behaviour. Identify it by name, or by all four of fromTable/fromColumn/toTable/toColumn (order-insensitive). fromCardinality/toCardinality = One | Many (to switch 1:1 / M:1 / 1:M / M:M). crossFilteringBehavior = OneDirection | BothDirections | Automatic. securityFilteringBehavior = OneDirection | BothDirections | None. joinOnDateBehavior = DateAndTime | DatePartOnly. Any omitted property is left unchanged. |
| resize_pageA | Resize a page's canvas to an explicit width x height (pixels). Writes the section size + the pageSize object so it sticks in Desktop. For named presets use set_canvas_preset. |
| edit_visual_aggregationA | Change the AGGREGATION applied to a field projected on a visual: wraps the Select node's Column/Measure in an Aggregation { Function }. aggregation=Sum|Avg|Min|Max|Count|CountNonNull|Median|StdDev|Var (index 0..8). field='Table.Field' (the queryRef). scopedEvalBaseline=true wraps it in a context-free ScopedEval/AllRolesRef baseline (FLAG: confirm shape in Desktop). |
| set_gradient_colorA | Set a measure-driven GRADIENT-STOP saturation colour on a card that set_color_scale does not target (treemap/funnel/map dataPoint fill). minColor/maxColor (and optional centerColor for a 3-stop ramp) drive the fill by the measure; min/center/max set explicit stop values. card defaults to dataPoint. |
| impact_analysisA | BLAST RADIUS of one model object (a measure name or Table[Field]): every model dependant that transitively references it through DAX, plus - when reportSource is given - every report visual touching the object or any dependant measure (page/visual/context). The pre-rename / pre-delete safety check. Read-only. |
| unpivot_weekly_csvA | Stream-unpivot a WIDE CSV (one column per week, e.g. '23/06/2024_SALES','23/06/2024_VOLUME') into a TALL CSV (keys + WeekKey + one column per measure), one row at a time. USE THIS when a CSV has hundreds of period columns and Power Query's Table.UnpivotOtherColumns runs the mashup OUT OF MEMORY on big files - the tall CSV then loads with Csv.Document() and no transform. Optional 2-pass scope filter keeps only rows whose scopeColumn value appears for filterColumn=filterValue (e.g. 'the categories the supplier sells in'). Empty weeks are skipped. |
| add_does_not_contain_filterA | Add a DOES-NOT-CONTAIN filter (Not(Contains)) on a text column at a scope=visual|page|report. For scope=visual pass page+visual; scope=page pass page. |
| refresh_datasetA | Trigger a refresh of a published dataset (POST .../refreshes, notifyOption NoNotification). Returns the requestId to correlate in get_refresh_status. Needs an AAD access token with the Power BI scopes (accessToken param or DAXOPS_PBI_TOKEN); never echoed. |
| get_slicer_defaultsA | READ-ONLY read-back of every slicer's selection state: bound field, strictSingleSelect / singleSelect flags, display mode, and any default selection values written as Categorical filters in the slicer's own container. The read partner of set_slicer_selection / fix_slicer_single_select. Scope to one page or omit for all pages. |
| ungroup_visualsA | UNGROUP a group: clears parentGroupName from every child and removes the group container. groupName = the group name returned by group_visuals. |
| add_percent_of_totalB | Generate a percent-of-total measure for a base measure over a dimension. scope = ALL | ALLSELECTED | ALLEXCEPT (default ALLSELECTED). |
| add_tooltip_fieldsA | Add EXTRA FIELDS to a visual's DEFAULT (data) tooltip (the Tooltips field-well), so they show on hover. fields = JSON array of {table,field,kind} (kind=measure|column). Adds the projections + query Select entries. Distinct from set_visual_tooltip_page (which swaps the whole tooltip for a report page). |
| set_forecastA | Set a FULL forecast on a line chart (the forecast object: length/units/ignore-last/confidence/seasonality) - more complete than add_analytics_line forecast, which only sets the band. units = Point|Day|Month|Year. confidenceInterval e.g. 0.95. Verify the render in Desktop. |
| set_image_sourceA | Re-source an EXISTING image visual: rewrite its sourceFile to a new image (add_image only creates new ones). imageUrlOrPath = a local file (embedded) or an http(s)/data URL. Preserves the visual's current scaling. |
| add_perspectiveA | Create a perspective - a named, focused view that shows only a chosen subset of tables/columns/measures (e.g. a 'Finance' or 'Sales' lens over a large model). Add members with add_to_perspective. |
| set_column_olsA | Object-level security: set whether a role can SEE a column. permission = None (column hidden + inaccessible to the role), Read (visible), or Default (inherit). |
| create_csv_tableA | Create a fully-typed import table from a (staged) CSV in ONE call: reads the header + samples rows to infer each column's type (Int64/Double/String), builds the Csv.Document M, declares EVERY column automatically, and refreshes. Removes the add_data_column-per-column grind. Pairs with stage_excel_to_csv / unpivot_weekly_csv. Pass pathExpression to control how the M references the file (e.g. 'DataFolder & "file.csv"'); omit to embed the absolute path. |
| rls_test_harnessA | 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. |
| add_analytics_lineA | Add an ANALYTICS reference line to a chart. kind = constant | min | max | average | median | trend | forecast. constant needs value; min/max/average/median compute from measureTable+measure; trend/forecast need no value. Optional label (data-label text on the line) and color (hex). Structure matched to the legacy analytics shape - verify the render in Desktop. |
| connect_xmlaA | Connect to a Fabric/Premium XMLA endpoint (powerbi://...) instead of local Power BI Desktop. Returns a sessionId that every session-based tool (run_dax, validate_dax, export_tmdl, run_bpa...) accepts unchanged - DAX runs against the Service, no Desktop needed. Endpoint/catalog/token default from DAXOPS_XMLA_ENDPOINT / DAXOPS_XMLA_CATALOG / DAXOPS_PBI_TOKEN; the token is held in memory only and never echoed. |
| add_calculated_tableB | Create a new calculated table from a DAX table expression (e.g. a Calendar via CALENDAR()). |
| set_visual_formatA | Set ANY formatting on a visual (TOTAL customizability) - the universal styling engine. formatJson e.g. { "vcObjects": { "title": {"show":true,"text":"My Title"}, "background": {"show":true,"color":"#FFFFFF","transparency":100} }, "objects": { "legend": {"show":false} } }. Each property is encoded by kind (show->bool, text->text, transparency/fontSize->number, color/fontColor->colour, alignment/position->enum; otherwise inferred: boolean->bool, number->number, #RRGGBB->colour, else text) and MERGED in - untouched objects/properties and any selector are preserved. Returns the objects/properties changed. |
| sentinel_diffA | Sentinel: compare two integrity snapshots (before vs after a refresh) and raise ranked alerts on any regression - a whole category dropped to zero, a table's rows collapsed, the grand total fell, a measure started erroring. Explains the likely cause and proposes the fix. status=fail means a report is now WRONG - do not trust the refresh. Pure/headless (two snapshot files). |
| group_keep_all_columnsA | Group By keeping ALL columns: Table.Group with {each _} then expand the grouped table over its non-key columns - the workaround for the editor's Group By dropping non-aggregated columns. The expanded set is derived at evaluation time so it survives schema drift. keys is comma-separated. Appends two steps to the table's M query. |
| clone_pageA | Deep-clone a report page: copies the whole section, assigns a fresh unique section name and a new ordinal at the end, sets newDisplayName, and regenerates EVERY visual's id so ids stay globally unique across the report. Returns the new page name. |
| set_page_displayA | Set a page's DISPLAY OPTION (how the canvas fits the screen: FitToPage|FitToWidth|ActualSize) and/or its VISIBILITY (AlwaysVisible|HiddenInViewMode - hide the page from viewers). Both optional; set at least one. |
| delete_template_measureA | Delete a measure from a table in a closed .pbit template's model, editing the DataModelSchema JSON on disk with no Power BI Desktop. Fails if the measure does not exist. Written back in place (with a .bak guard). |
| set_translationA | Set a translated Caption, Description or DisplayFolder for a model object in a culture. objectType = table | column | measure | hierarchy | model. For a column/measure/hierarchy, also pass its table. Run add_culture first. |
| set_bookmark_optionsA | Set a bookmark's OPTIONS - the Data / Display / Current-page / Selected-visuals toggles. suppressData=true turns DATA off, suppressDisplay=true turns DISPLAY off, suppressActiveSection=true turns CURRENT-PAGE off. targetVisuals = JSON array of visual names to scope the bookmark to those visuals (empty array clears the scope). Only the supplied options change. |
| set_card_imageA | Set a hero/callout IMAGE on a cardVisual (the new card's image element). imageUrlOrPath = a local file (embedded) or an http(s)/data URL. fit = Fit|Fill|Normal. Verify the render in Desktop. |
| add_buttonA | Add a BUTTON with any action: actionType = bookmark | back | pageNavigation | drillthrough | qna | webUrl | clearAllSlicers | applyAllSlicers. bookmark needs bookmarkName; pageNavigation/drillthrough need a destination page (in destinationOrUrl); webUrl needs a url (in destinationOrUrl); back/qna/clearAllSlicers/applyAllSlicers need neither (clearAllSlicers/applyAllSlicers act on the page's slicers, e.g. a native Clear-all-slicers button). Writes the actionButton visualLink the product uses. Returns the new visual id. |
| add_coverage_flagA | Close the loop on blank-on-select (the partner to audit_robustness). Adds a boolean calculated column to a dimension flagging whether each member has rows in a fact table. Filter slicers or add a report-level filter on it = users can no longer select a dead value (e.g. a brand with no sales). Returns how many members have data vs are dead. Idempotent + auto-recalcs. |
| rewrite_connection_stringA | Find/replace a literal substring (a server/db name, file path, URL, ...) across Section1.m inside a .pbix's DataMashup, clearing PermissionBindings. Returns how many occurrences were replaced. RISKY - work on a COPY; the .pbix must be CLOSED in Desktop; refuses protected client paths. |
| set_font_color_rulesA | Apply DISCRETE rule-based FONT-COLOUR bands to a measure column in a table/matrix: each value in [min, max) renders its band text colour. Same rule structure as set_conditional_formatting, applied to the text colour instead of the background. rules = JSON array of {min, max, color}. |
| add_svg_gaugeA | Author an SVG ARC GAUGE measure (DataCategory=ImageUrl): a semicircular gauge mapping the value onto min..max, rendered in-cell. thresholds (optional JSON array of {at,color}, ascending) tint the value arc by the highest band the value clears. |
| document_reportA | One-call Markdown documentation artifact for a report: pages, every visual (type, position, size, title, field bindings), page/report filter counts, bookmarks and the theme - rendered purely from the existing readers. When outPath is given the Markdown is also written to disk. |
| add_query_groupA | Create a query group - a display folder for queries (shared expressions / partitions) in the Power Query Queries pane, e.g. 'Staging' or 'Parameters'. Assign objects to it with set_object_query_group. |
| extract_report_colorsA | READ-ONLY report-wide colour inventory: every hardcoded colour literal across all visuals AND the theme, with the exact locations of each occurrence (theme.dataColors[2], page/visual objects paths). The scouting pass before recolor_report. |
| update_calendarA | Update a table's calendar definition: change the primary date column and/or replace the associated period-column group (columns are validated against the table). FLAG: stamped as the PBI_Calendar table annotation (the Wave R convention) because the native calendar TOM objects are absent from this build. |
| add_calendar_based_time_intelligenceA | Add native (non-Gregorian) calendar-based time intelligence: a calendar object on the calendar table's primary date column with a calendarColumnGroup over the associated period columns. associatedColumns is comma-separated. FLAG: the calendar / calendarColumnGroup objects are very new and absent from this build, so this is stamped as a PBI_Calendar table annotation - confirm in Desktop. |
| set_visual_tooltip_pageA | Point a visual's hover TOOLTIP at a report-page tooltip (instead of the default data tooltip). Writes the visualTooltip {type='ReportPage', section=} on the visual. The tooltip page should already be flagged with set_page_type tooltip. Verify the render in Desktop. |
| add_relative_date_filterA | Add a RELATIVE DATE filter at a scope=visual|page|report on a date column: mode=Last|Next|This, count units of unit=Days|Weeks|Months|Years. includeCurrent includes the current period; calendar=true aligns to calendar boundaries (vs a rolling window). For scope=visual pass page+visual; scope=page pass page. |
| set_visual_propertyA | Set ANY visual formatting property (the universal escape hatch). objectName/propertyName are Power BI formatting ids e.g. labels/show, legend/position, categoryAxis/showAxisTitle, valueAxis/start, dataPoint/fill. kind = text|number|bool|color|raw. target = objects (data formatting) or vcObjects (container: title, background, border). |
| set_table_visibilityA | Hide or show a whole table in the field list (e.g. hide a bridge/parameter table). |
| set_theme_sentiment_colorsA | Set the report theme's SENTIMENT colours: good / neutral / bad (the KPI sentiment ramp). Each is a hex colour; supply at least one. Run generate_theme first. |
| convert_legacy_to_pbirA | BEST-EFFORT explode a legacy Report/Layout (.pbix or a raw Layout JSON file) into a PBIR definition tree written to a target folder (default .Report next to the source): pages -> page.json, visualContainers -> visual.json, generating GUID names. Returns a pbirSessionId over the new tree. FLAG: best-effort - open in Power BI Desktop to validate/upgrade. pbir->legacy is not implemented. |
| pbix_doctorA | READ-ONLY 17-point file-level container scan of a CLOSED .pbix: zip part inventory vs expected parts, Version/DataModel/DataMashup presence and sizes, stale SecurityBindings and DataMashup PermissionBindings, sensitivity-label parts, zero-byte / truncated / duplicate parts, and whether the report part is legacy or PBIR. Never writes. |
| add_anomaly_detectionA | Add ANOMALY DETECTION to a line chart (the anomalyDetection object). sensitivity 0-100 optional (higher = more anomalies). explainBy = comma-separated fields the explanation groups by. Verify the render in Desktop. |
| save_golden_setA | Capture a measure-regression baseline: evaluate every model measure (or a comma-separated subset) via EVALUATE ROW and write a deterministic, git-friendly golden-set JSON file (sorted by name, no timestamps). A measure that errors is recorded as an error-state golden so regressions to/from errors are caught. Replay with run_golden_set. |
| run_bpaA | Run the Best Practice Analyzer: a catalogue of ~90 lint rules (merging the Tabular Editor and semantic-link-labs rulesets) across Performance, DAXExpressions, ErrorPrevention, Maintenance, NamingConventions, Formatting, Metadata and RelationshipsLayout. Read-only. Returns every finding (ruleId, category, severity 1 info/2 warning/3 error, objectType, objectName, message, fixable) plus a summary count by category and severity. Filter with categories / severities / ruleIds (comma-separated) and scope (Model|Table|Column|Measure|Relationship|Partition|Hierarchy). Use fix_bpa to auto-remedy fixable findings. |
| add_index_columnB | Power Query Add Index Column: add a sequential index. Appends Table.AddIndexColumn to the table's M query. |
| import_tmdlA | Import a TMDL folder (the official deserializer) into the live model. DEFAULTS TO A DRY RUN that returns the table/measure diff and changes NOTHING. Applying TMDL REPLACES the live model metadata (createOrReplace semantics), so the actual apply is gated behind applyToLiveModel:true. The folder may be a model TMDL folder or a PBIP SemanticModel (the nested 'definition' subfolder is auto-detected). |
| list_calendarsA | List the model's calendar-based time-intelligence definitions: table, primary column and column groups. FLAG: read from PBI_Calendar table annotations (the Wave R convention) because the native calendar/calendarColumnGroup TOM objects are absent from this build. Read-only. |
| set_model_settingsA | Set model-level settings (any subset; omitted settings unchanged): discourageImplicitMeasures (force explicit measures - a best practice), defaultMode = Import | DirectQuery | Dual | DirectLake | Push | Default, directLakeBehavior = Automatic | DirectLakeOnly | DirectQueryOnly, culture (model locale, e.g. en-US). |
| add_custom_calendar_time_intelligenceA | Generate integer-index time intelligence for a custom (445/454/544/weekly/13-period) calendar - the case where built-in TI breaks. Builds *TD/PY/PYTD/prev-week/MAT(364) measures off DayIndex/MonthIndex/Year/PeriodIndex columns on the calendar table. kind = 445 | 454 | 544 | weekly | 13period. |
| add_view_switcherA | THE premium pattern from pro reports: one page, a button bar that swaps between VIEWS - each view shows its own visuals and hides the rest. Builds the Display-only bookmarks + the buttons + sets the initial state to the first view. views = JSON array of {name, visuals:[visualName,...]} (visual names from list_visuals/add_* results). Ground-truthed from a real report. |
| set_visual_interactionsA | Set how a SOURCE visual affects a TARGET visual when a data point is selected (edit interactions). interaction = filter | highlight | none. sourceVisual/targetVisual are visual names (from list_visuals). Writes a { source, target, type } override in the page config (type: 1=filter, 2=highlight, 3=none). Verify the render in Desktop. |
| add_moving_averageA | Generate a rolling moving-average measure over the last N periods. unit = day | month (default day). |
| move_measureA | Move a measure to another table (its home table changes; DAX references to it are unaffected because measures are referenced as [Name]). KPI, format string, display folder, description, annotations, lineage tag and culture translations all travel with it (a deep clone is re-homed and translations are re-pointed - TOM forbids re-attaching a removed object). |
| sort_rowsA | Power Query Sort Rows: sort by one or more columns. Appends Table.Sort to the table's M query. sorts is comma-separated as column[:direction], e.g. "Region:Ascending,Sales:Descending". direction = Ascending | Descending (default Ascending). |
| audit_datamashup_credentialsA | READ-ONLY credential audit of a .pbix's DataMashup: reports whether the embedded M carries credential material (connection strings with Password=/pwd=/AccountKey=/SAS tokens/etc) and whether a PermissionBindings blob is present. Reports PRESENCE and LOCATION only (indicator, query, line number) - secret values are NEVER echoed. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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