superbi-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
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