RegiaBI apps

com.regiabiPublished by regiabi.comv0.6.126Updated Nov 14, 2026

AI Data Components over MCP: working what-if apps, interactive tables and maps, plus 90 chart types.

VerifiedStreamable HTTPWeb executableDeveloper ToolsData & Analytics

Overview

AI-generated overview

RegiaBI chart server that profiles a table, ranks about 90 chart types that fit it, and generates working interactive chart code for your project.

What you can do
  • Profile a table locally: row counts, cardinalities, measures versus dimensions, dates and places, with no data leaving the machine
  • List and rank the chart types that honestly fit the data, or suggest natural views for a Fabric App semantic model
  • Generate chart code, data and wiring for the open-source chart host, written into your project folder
  • Scaffold and check a Fabric App, query a semantic model, and optionally write a preview page
When to use it
Use it when a coding agent should turn a CSV, dataframe or semantic-model query result into interactive charts, maps or what-if data apps, and you want chart choices justified by the data rather than guessed. It is also aimed at Microsoft Fabric App and Power BI/Excel visual workflows.
Requirements
Either the hosted endpoint or a local process run with npx from the npm package. Authoring needs a RegiaBI account: browser sign-in on first use, or BIC_LICENSEE with BIC_LICENSE_KEY (plus BIC_SECRET_KEY if the account uses one), optionally via a credentials file. Running an already generated chart needs nothing. Optional BIC_MCP_QUERY_ROW_CAP and BIC_MCP_TELEMETRY settings.
Before you install
Authoring requires a trial or paid account, and a license key always overrides browser sign-in. Chart generation sends column names, types, counts and summary statistics to the RegiaBI service; a privacy_level argument can send names only or obfuscated sample rows. Sign-in stores tokens in a local file and sends the machine hostname. Generated code and data are written into the folder you name. Telemetry rows are sent unless disabled.

Installation

In SourceWeft

  1. Open RegiaBI apps in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.regiabi%2Fchart-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "regiabi-apps": {
      "type": "http",
      "url": "https://bizintelligencechampions.com/mcp"
    }
  }
}

README

RegiaBI: an MCP server and agent plugin

Make Generative AI for Data Apps and Maps Better.

AI Data Components for Power BI, Excel, Fabric Apps and the web: complete apps first, such as a what-if projection with its controls inside the chart and a table a reader works with, then maps such as a bivariate map with its two-way key, and about 90 everyday chart types, with selection and cross-filtering already wired. The code is yours: you pay to author a chart, never to run it.

This repository packages the RegiaBI chart MCP server (com.regiabi/chart-mcp, published on npm as @bicharts/chart-mcp) and its agent skill as a one-command plugin for Claude Code, GitHub Copilot CLI, Codex and Gemini CLI. It holds the plugin manifests, the pinned server command and the skill. The server itself is the npm package. The Claude Code plugin connects to the same server hosted by RegiaBI instead of running it on your machine (see Claude Code).

What it does

Give your coding agent a table (a CSV, a dataframe, or a query result from a semantic model) and it gets back working, interactive chart code that fits that data:

  • It profiles your data locally. Row counts, cardinalities, measures versus dimensions, dates, places. No data leaves your machine for this step.
  • It ranks about 90 chart types by what the data can honestly show, using a server-side eligibility engine rather than a guess, so a map is only offered when there are places to map and a sankey only when there are flows.
  • It returns verified source you own: D3 for JavaScript and TypeScript projects, Plotly or matplotlib for Python. The code has already passed render checks. It needs no license, no account and no connection to us to run, deploy or ship, for any number of viewers.

The tools:

ToolWhat it's for
assess_data_shapeProfiles a table locally. Free, and needs no account.
list_eligible_chartsThe authoritative list of chart types that fit this data, ranked for your project's language.
suggest_chartsFor a Microsoft Fabric App over a semantic model: finds the model's natural views and what fits each, in one call.
generate_chartWrites the chart: code, data and wiring for @bicharts/chart-host (open source), into your project.

Install

Claude Code

text
/plugin marketplace add codexguy/regiabi-plugins/plugin install regiabi-charts@regiabi

The Claude Code plugin connects to RegiaBI's hosted server at https://bizintelligencechampions.com/mcp. Claude Code signs you in through your browser the first time a tool needs your account (run /mcp if it doesn't ask). The hosted server profiles each table in memory and drops its rows; it can't read or write your files, so it returns each chart's code in the reply, and your agent writes it into your project.

Building a Fabric App, or want the charts written straight to disk? setup_fabric_app, suggest_charts, query_semantic_model and generate_chart's out_dir need the server running on your machine. Add it alongside the plugin:

text
claude mcp add bic-chart-local -- npx -y @bicharts/[email protected]

GitHub Copilot CLI

text
copilot plugin marketplace add codexguy/regiabi-pluginscopilot plugin install regiabi-charts@regiabi

Codex

text
codex plugin marketplace add codexguy/regiabi-plugins

Then install RegiaBI apps from the Plugins Directory.

Gemini CLI

text
gemini extensions install https://github.com/codexguy/regiabi-plugins

Any other MCP client

VS Code, Cursor, Claude Desktop and any other MCP client can run the server directly:

json
{  "mcpServers": {    "bic-chart": {      "command": "npx",      "args": ["-y", "@bicharts/chart-mcp"]    }  }}

Configure

Nothing, usually. Writing a chart needs a RegiaBI account; running a chart you've already generated needs nothing.

Sign in when it asks. The first time your agent calls a tool that needs an account, the server opens your browser at bizintelligencechampions.com. Sign in, or create a free account (it comes with a free trial), and click Allow. The call your agent made then finishes by itself. The server keeps the sign-in in ~/.bic/oauth.json and renews it on its own, and you can sign a device out at any time from your account page.

Or use a license key (a machine with no browser, CI, a container). Leave sign-in alone and give the server your account's credentials instead, in one of two ways:

  • As environment variables on the server: BIC_LICENSEE and BIC_LICENSE_KEY, plus BIC_SECRET_KEY if your account uses one.

  • A credentials file, so no secret ever sits in a project's committed config. Put this in ~/.bic/credentials.json (or point BIC_CREDENTIALS_FILE at another path):

    json
    { "licensee": "...", "licenseKey": "..." }

A key, when one is set, always wins over a sign-in. A key applies to the server on your machine; the hosted server behind the Claude Code plugin always uses the browser sign-in.

Use

Ask your agent for the chart you want, in plain words, in the project you want it in. For example:

Assess the shape of ./sales.csv, tell me which charts fit it, then generate the best one into ./charts.

The agent profiles the file, asks the server which chart types fit, and writes the chart's code and data into ./charts, ready to import. The skill this plugin installs walks the agent through the rest: wiring cross-filtering between charts, sizing and theming are the host library's job, so the agent doesn't write them.

Building a Microsoft Fabric App? Scaffold it from Rayfin's data app template, then ask your agent which charts suit your semantic model. suggest_charts answers from the model's own numbers.

What it runs, sends and fetches

  • Signing in opens your browser at bizintelligencechampions.com once; the server then keeps an access token and a refresh token in ~/.bic/oauth.json (readable only by you) and sends the access token with each call to the service.
  • It runs one local process: npx -y @bicharts/chart-mcp@<version>, the exact version the plugin pins. npm downloads that package from the public npm registry the first time. The Claude Code plugin runs nothing on your machine: it connects to https://bizintelligencechampions.com/mcp, which receives the tables your agent sends it, profiles them in memory and stores no rows.
  • assess_data_shape sends nothing. It profiles your data on your machine.
  • list_eligible_charts, suggest_charts and generate_chart call the RegiaBI service at bizintelligencechampions.com with your account's credentials and a profile of your table: column names, types, counts and summary statistics. By default no rows are sent; a privacy_level argument can send less (names only) or more (obfuscated sample rows). suggest_charts queries your semantic model through your Fabric App project's own fabric-app-data CLI, signed in as you, and sends the service the same kind of profile.
  • It writes the generated chart code and its data into the folder you ask for, and nowhere else.
  • Telemetry: one row when generate_chart hands code over (the call's duration, the row count, the language and the server's build) and one when a generation fails after the service answered. No data, and no usage counter: the service counts calls from the requests it receives. Set BIC_MCP_TELEMETRY=0 in the server's environment to turn both rows off.
  • Signing in sends this computer's name (its hostname), so the sign-in shows up on your account page and you can sign that machine out on its own.
  • check_app asks the npm registry for the latest versions of the packages your app uses (check_npm: false skips it), and preview.html loads d3 and mermaid from cdn.jsdelivr.net when you open it (it's only written when you pass preview_html: true).

Learn more

Support and terms

  • Support: a paid RegiaBI subscription includes direct support from the people who build the engine (setup, sign-in, a call that fails, a chart that didn't come out right), and a license you already hold for one of our Power BI or Excel visuals counts. Quote the correlationId from the result.
  • The server and the service it calls are covered by the RegiaBI Programmatic Access Terms and the privacy policy. The server's own license ships in its npm package.
  • The files in this repository (the plugin manifests, the README and the skill) are under the MIT license in LICENSE. They contain no server source.

Source: README.md at commit aa21195

Tools

11

assess_data_shape

Assess data shape

Profile a dataset locally (no data leaves the machine): per-column types, cardinality, ranges, measure/dimension roles, temporal/ordinal detection, and cross-column signals (nesting, shared values, association). This is the same measurement engine the BIC Power BI visual uses before generating a chart.

Parametersdatacultureformatscsv_pathcsv_textgroup_bymeasuresdimensionsdescriptionsnon_additiveprivacy_level

get_guide

Read the build guide

How to build an app with these charts, from the guide this package ships. Local and free: no network, no credentials. topic 'fabric-app' (the default) is what a Microsoft Fabric App on the Rayfin data app template needs: what to pull, generating, wiring in React, the Fabric App section and the time-savers. 'all' is the whole guide, including Blazor. 'chart-shapes' lists every chart type with the columns, limits and renderers it needs. 'settings' lists the choices a person can make about a chart, with their options and defaults.

Parameterstopic

list_eligible_charts

List eligible chart types

The AUTHORITATIVE list of chart types (maps, tables a reader works with and app widgets included) that can render this dataset — the server's own eligibility engine, NOT a local guess. Profiles the data locally, then sends that profile to the backend. NO LLM in the loop, but this is a NETWORK call and it is METERED — see the licensing note below. By default the tool DETECTS the project's language (JS/TS vs Python from the working dir) and returns the charts for THAT language, SCOPED and ordered by how well each type fits this data (best first; `order: 'variety'` favors newer and less-common types instead), each tagged with its source language and renderer. Pass `language` ('javascript'|'python') to force it, or `renderer` ('D3'/'PLOTLY'/…) to rank one specific renderer, or renderer '' for the full renderer-agnostic eligibility across ALL renderers (also ranked, by chart type alone, with no renderer/language tag). If the language can't be auto-detected and none is given, the tool asks you to specify one. Needs an account: eligibility IS the engine, so programmatic access to it is licensed. With nothing configured, the first call opens a browser sign-in, waits for it and then answers (a license key in the environment is the alternative for a machine with no browser). Free within a generous hourly allowance; beyond it each call draws usage credits. The reply carries a text block and a structured table: one row per chart type with its rank, name, preview flag, fit verdict, description, language and renderer. Rows flagged alsoWorthALook are a few picks from below the top fits, drawn so an offer can include something different; the fit order itself never changes. A type that fits only once the rows are totalled (raw rows where the chart wants one per category) is listed under its own heading, once per grain: each row carries the sentence that says how the rows are totalled first and that grain's projection key.

Parameterstopdataorderwidthheightcultureformatscsv_pathcsv_textgroup_bylanguagemeasures+10 more

generate_chart

Generate chart code

Generate ready-to-render chart code for a dataset via the BIC backend: the data shape is profiled locally, the backend picks a suitable chart type (or honors chart_type), and returns code that has passed the backend's eligibility gates and quality checks. Needs a trial or paid account: with nothing configured, the first call opens a browser sign-in, waits for it and then finishes the chart (a license key in the environment or ~/.bic/credentials.json is the alternative for a machine with no browser). The returned D3 code is a portable render(container, data, options) function meant to be MERGED into your own app; an integration contract describes exactly how to call it. A standalone HTML preview and file output are optional. The arguments chart_style, level_of_detail and culture are the person's choices, and the guide's 'settings' topic lists every choice a person can make with its options.

Parametersdatawrapmodelwidthheightpromptcultureformatsout_diroverlaycsv_pathcsv_text+35 more

preview_request

Preview what a request sends

Shows exactly what a chart generation would send to the BIC backend for these arguments - the measured shape of your data (column names, types, counts, ranges), the settings, and whether any sample rows travel - with the credentials removed. SENDS NOTHING and needs no license: it is local and free. Takes the same arguments as a generation. It answers 'what data leaves my machine?'; the eligibility list sends a subset of the same shape.

Parametersdatawrapmodelwidthheightpromptcultureformatsout_diroverlaycsv_pathcsv_text+35 more

check_request

Check a chart request against the data

Checks a chart request against this data before anything is generated. Takes the same arguments as a generation - the chart type and every setting (date grain, limit, overlay, required columns, rows policy, data labels and the rest) - and answers, in the server's own words, each ask this data can't honor and why: a channel the data doesn't have, too little of one for the ask, or a name the catalog doesn't know. When the chart type itself is denied, it also lists up to five chart types that fit this data, best fit first. An OK names the asks it checked. Profiles the data locally and sends that profile, as a generation would; no sample rows travel. NO LLM in the loop and no generation credits are spent, but this is a NETWORK call and it is METERED like the eligibility list: free within a generous hourly allowance, then usage credits per call. Needs an account: with nothing configured, the first call opens a browser sign-in (a license key in the environment is the alternative). The reply carries a text block and a structured result: the verdict (OK or DENY), the asks checked, each finding with its kind and reason, and the alternatives.

Parametersdatamodelwidthheightpromptcultureformatsoverlaycsv_pathcsv_textgroup_byindustry+31 more

check_chart

Check a generated chart locally

Verify a generated chart locally before deploying: draws the chart.js that generate_chart wrote, headless, against its data - the rows query_semantic_model saved, a CSV, or the rows it was generated for - through @bicharts/chart-host, and reports in plain words: the marks drawn by kind, anything thrown (with the line), whether it came out blank, anything drawn outside its frame, and whether a click on a mark reaches onSelect with source rows. Takes seconds; local and free (no network, no credentials, nothing sent). Run it after each generate_chart instead of deploying to see whether a chart works, and check at the size the panel will give it: by default it reads minChartWidth and minChartHeight off the app's BicChartPanel around the chart (else the size it was generated for); pass width and height only for another size. A WARNING line is a label cut off at that size even at a narrow font's width; the reply says whether more room fixes it. The app's own legend and frame fit is NOT run in the check, so a label it flags may already be handled in the app. Never edit the generated chart code by hand to clear a finding: regenerate it (generate_chart, with a prompt describing the fix) or report it. It does not judge colors or real font widths.

Parameterschartwidthheightcsv_pathdata_namechart_pathproject_dir

check_app

Check the whole app before deploying

Check how the app uses the chart library, before every deploy and after check_chart: reads the app's own source (never the files generate_chart and setup_fabric_app wrote) and reports, each with file, line and the library call to use instead: hand-written selection glue (a toggle, a second-click guard, a remount to clear) where useBicFilter + selects does it; each chart's filter wiring - the page filter its clicks set and the filters its query or component follows (filtered query, highlight only or none) - with a chart filtered by the filter it sets, a treatAs column the model's relationships can't carry to the panel, or to one of its measures (read from the tables each measure's expression reads) (read from the project's schema cache, .schema/models/*/model.sqlite), a total that isn't the sum of the parts the page shows (a rounding measure at the total), a click filter keyed coarser than the marks that set it, a chart carrying write markers whose query drops rows the write form can target, several charts sharing one click filter, a chart no page filter reaches, and a panel whose filtered query it isn't given; a "vs" measure in the app's .dax queries that is never blank (BLANK() - 1 is -1), a card that names a window ("2019 to 2025") over a query with no bound on it, and a query a line over time reads that can drop a quiet period (SUMMARIZECOLUMNS with no COALESCE or ADDMISSINGITEMS), a query whose range is a date written in (DATE ( y, m, d )) where it should come from the data or the person's words; a write that stores a placeholder name ("unknown") when no one is signed in or a time from the browser's clock, a Rayfin entity that takes any name on create or lets any row be updated again (rayfin/data), a name shown (createdBy) its policy doesn't check against the caller's token, a function that reads the caller's email from preferred_username or upn (Rayfin reads only the email claim), a write that resolves before its reload lands (so its button comes back on over t

Parameterscheck_npmdraw_chartsproject_dir

setup_fabric_app

Set up a Fabric App for these charts

Run once in a Microsoft Fabric App scaffolded from Rayfin's data app template, before the first chart: installs @bicharts/chart-host (at this server's version) and d3, adds src/lib/bic-chart-options.ts (the app's Fabric theme as chart options) and src/components/bic-chart-panel.tsx (a chart box that measures itself and shows the query's loading, error and empty states) and .agents/skills/regiabi-charts/SKILL.md (also written to .claude/skills/, where Claude Code reads it), ignores .bic/, and puts every @microsoft/rayfin-* package on npm's latest, the release `rayfin init` installs (run it before rayfin init; every package.json range it changes is listed, and the reply names the Rayfin version installed). Never overwrites a file; the one template file it edits - a vi.mock that fixes the template's own validate-visual test under ESM - is named in the reply, as is the one line of src/main.tsx it points at src/lib/bic-css-theme.ts (the theme without bundling Vega). With features: ["notes"] and/or ["scenarios"] (once Rayfin's data service is on), it also adds finished notes-on-marks and saved-scenario files - the Rayfin entities, registered in rayfin/data/schema.ts, a hook each, a notes dialog and a scenarios panel - built on chart-host's useBicFilter / useBicControls; write none of that by hand. Replies with a worked example that renders a generated chart from a live query.

Parametersfeaturesproject_dirskip_install

query_semantic_model

Query the semantic model for a chart

In a Microsoft Fabric App built on Rayfin's data app template: runs one chart's DAX query through the project's own tooling - its semantic model's Rayfin connector (rayfin/rayfin.yml), or on the template's older layout its `fabric-app-data` CLI - renames the `Table[Column]` and `[Measure]` headers to plain names (the names the chart.component.tsx that generate_chart writes will match on live rows), saves EVERY row as CSV, reads each column's role, format and description from the model, and profiles the result. Replaces the query, rename, save and profile steps with one call, and returns the arguments to pass to list_eligible_charts and generate_chart. Write the query at the chart's grain (one row per country for a country map). Local: the data goes only where the project's own tooling already sends it, and nothing reaches the chart server.

Parametersdaxnamerequiredaliasout_dirdax_fileproject_dir

suggest_charts

Suggest charts for a semantic model

Which charts suit this data? Answers 'what are good chart types for this dataset / model', 'what can I chart here', 'recommend some charts' for a semantic model in a Microsoft Fabric App built on Rayfin's data app template, in ONE call, from the model's real rows: reads its tables, columns, measures and relationships through the project's own tooling (its Rayfin connector, or the older layout's `fabric-app-data` CLI), finds its natural views (measures by place, flows between places, measures over time, measures by category), queries each at its grain, keeps the measures that vary there, and asks the server's eligibility engine what fits each view. Replies view by view with the real counts (rows, places, periods, categories) and the chart types that fit, and saves each view's rows and DAX under .bic/data so generate_chart can build any of them next. Pass `views` to ask about your own groupings. Answer the person from this reply rather than from general knowledge. One eligibility call per view: metered like list_eligible_charts (free within an hourly allowance, usage credits beyond it) and needs the same licence. For one table you already hold, use list_eligible_charts.

Parameterstopaliasviewsproject_dir

Version history

46
  1. v0.6.126LatestNov 14, 2026
  2. v0.6.125Nov 14, 2026
  3. v0.6.124Nov 13, 2026
  4. v0.6.123Nov 13, 2026
  5. v0.6.121Nov 13, 2026
  6. v0.6.119Nov 12, 2026
  7. v0.6.118Nov 12, 2026
  8. v0.6.117Nov 12, 2026
  9. v0.6.116Nov 11, 2026
  10. v0.6.115Nov 7, 2026
  11. v0.6.114Nov 5, 2026
  12. v0.6.113Nov 4, 2026
  13. v0.6.111Nov 3, 2026
  14. v0.6.108Oct 31, 2026
  15. v0.6.107Oct 31, 2026
  16. v0.6.105Oct 29, 2026
  17. v0.6.104Oct 23, 2026
  18. v0.6.101Oct 22, 2026
  19. v0.6.100Oct 21, 2026
  20. v0.6.97Oct 21, 2026
  21. v0.6.96Oct 20, 2026
  22. v0.6.95Oct 17, 2026
  23. v0.6.93Oct 15, 2026
  24. v0.6.91Oct 14, 2026
  25. v0.6.90Oct 14, 2026
  26. v0.6.88Oct 14, 2026
  27. v0.6.85Oct 9, 2026
  28. v0.6.83Oct 9, 2026
  29. v0.6.80Oct 9, 2026
  30. v0.6.78Oct 9, 2026
  31. v0.6.75Oct 8, 2026
  32. v0.6.74Oct 7, 2026
  33. v0.6.72Oct 6, 2026
  34. v0.6.67Oct 6, 2026
  35. v0.6.66Oct 4, 2026
  36. v0.6.64Oct 4, 2026
  37. v0.6.63Oct 3, 2026
  38. v0.6.61Oct 2, 2026
  39. v0.6.59Oct 2, 2026
  40. v0.6.57Oct 2, 2026
  41. v0.6.55Oct 2, 2026
  42. v0.6.52Oct 1, 2026
  43. v0.6.51Sep 30, 2026
  44. v0.6.50Sep 30, 2026
  45. v0.6.49Sep 30, 2026
  46. v0.6.47Sep 29, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts