Zebra BI plugin
The Zebra BI plugin bundles the Zebra BI MCP connector with the skills that put it to work, in one install for AI assistants such as Claude, ChatGPT and GitHub Copilot Chat, and for coding agents such as Claude Code, Codex and Copilot CLI. The connector draws your business data as interactive IBCS-style charts and tables, inline in the conversation. The skills tell your assistant when to use it and how, for variances, data stories and files to share. The plugin comes in Claude's format and in Agent Plugins, the format VS Code, Copilot CLI, ChatGPT and Codex read. Any other MCP client can connect to the Zebra BI MCP on its own.
The MCP has one tool, render_visual. Your assistant or agent sends it aggregated figures, such as actuals with a previous year, plan or forecast, and Zebra BI draws the variances. Hosts that support MCP Apps show the interactive visual; the others show a text summary of what was drawn.
The skills add three things on top of the tool:
- Charts and variances. When and how to show business figures as a Zebra BI visual, and how to explain actuals against previous year, previous month, plan or forecast.
- Data stories. Hand your assistant or agent a dataset and get back the story a controller would tell: one key message, the three to five findings that prove it, and a Zebra BI chart for each one. Every number comes from a computation on your data, and the story never adds a cause the data does not show.
- Files to share. One A4 PDF of a story, or a PowerPoint deck and an Excel workbook with live Zebra BI for Office visuals, in your company's brand. Made only when someone asks for a file.
Skills
| Skill | What it does |
|---|---|
chart-from-data | When to show findings as a visual, and how to shape the data for render_visual. |
variance-analysis | How to explain actuals against previous year, previous month, plan or forecast, and show the variances. |
data-source | Finds a dataset (local CSV or Excel, Excel in SharePoint or OneDrive, a Power BI semantic model) and remembers it in .zebra/sources/, so the file, sheet, date format or query is never asked twice. |
data-story | Analyses the data and tells an IBCS story in the conversation, with a Zebra BI chart for every supporting message. In Claude Code it also saves the story in .zebra/stories/. |
story-pdf | Turns a saved story into one A4 PDF: the key message and KPIs, each supporting message with its chart, page numbers. Chart labels and values stay text. Claude Code only. |
story-artifact | Publishes a saved story as one shareable Claude artifact page: the key message and KPIs, each supporting message with its Zebra BI chart. Charts are pictures of the Zebra BI charts, or live charts with hover on request. A plain artifact page, since the Dashboard artifact type cannot carry Zebra BI charts. Claude Code only. |
story-office | Writes a saved story as a PowerPoint deck and an Excel workbook. Each chart is a live Zebra BI for Office visual where the Charts or Tables add-in is installed, and a picture of the chart for everyone else. Claude Code only. |
story-brand | Sets the look and voice of story files: colours, fonts, logo, credit line, your PowerPoint template and its layouts, and the tone of the writing. The charts keep their IBCS colours whatever the brand. |
In Claude Code the skills run as /zebra-bi:<skill>, for example:
/zebra-bi:data-story ~/Downloads/sales.csv # tell the story in the conversation
/zebra-bi:story-pdf sales-2026-q3 # one shareable PDF
/zebra-bi:story-artifact sales-2026-q3 # one shareable artifact page
/zebra-bi:story-office sales-2026-q3 # PowerPoint deck and Excel workbook
/zebra-bi:story-brand # dress story files in your company's brand
Install
Install the MCP in VS Code Install the MCP in VS Code Insiders
The MCP URL is https://mcp.zebrabi.com.
- Claude Code:
/plugin marketplace add zebrabi/zebra-bi, then/plugin install zebra-bi@zebrabi. Installs the MCP and the skills. - VS Code: run "Chat: Install Plugin From Source" and enter
https://github.com/zebrabi/zebra-bi. Installs the MCP and the skills. The VS Code buttons above install the MCP only. - claude.ai, Claude Desktop and Cowork: add the MCP URL as a custom connector under Settings > Connectors. This adds the MCP only.
- ChatGPT: in developer mode, add the MCP URL with "Add custom MCP server". This adds the MCP only.
Where the charts draw. Claude Desktop chat and claude.ai show the visual inline. The Claude Code desktop tab draws it only through the MCP added as a connector in the Claude Desktop app (step 3). The plugin's own copy, which Claude Code loads too, returns the chart's data, so the skills use the connector when both are there. The Claude Code terminal cannot show MCP Apps and prints the chart data instead.
Data stories and files. data-story works wherever the MCP is connected. The .zebra/ folder, the PDF, the artifact page and the Office files need Claude Code, python3 (standard library only) and Google Chrome, Microsoft Edge or Chromium. In Claude chat or Cowork, story-pdf, story-artifact and story-office hand over the story as JSON instead of building a file. Readers need the Zebra BI Charts or Tables for Office add-in, and its licence, to see the Office visuals live.
What this plugin sends and runs
- The MCP. The skills call
render_visualonce per chart. Each call sends the chart's arguments: the category and period labels, the aggregated values per scenario and the titles. The labels are your data's own values, so a chart by customer or employee sends those names; leave out anything that should not leave your machine. Each skill says so in one line before its first chart. The source file is never sent. A chart that fails to render is reported to Zebra's error monitoring together with the arguments that were sent. story-pdf,story-artifactandstory-office. Their Python scripts send the same chart arguments to the same MCP over HTTPS and printSending <n> chart(s) to <endpoint>first. A chart whose arguments did not change is reused from.zebra/stories/<story>/visuals/. Once a day they download the chart renderer (theui://pagerender_visualnames intools/list) and cache it in$CLAUDE_PLUGIN_DATA, or in~/.cache/zebra-biwhen that is not set. A renderer or chart fetched from another MCP address is never reused. The plugin sends no telemetry.- The artifact page.
story-artifactpublishes the page and a picture of each chart to claude.ai as a private artifact, which its owner shares from the page's Share menu. It holds the story's aggregated numbers, not the source data. With--liveit also carries the Zebra BI renderer, which draws the charts in each reader's browser. - A local browser.
story-pdf,story-artifact,story-officeand thestory-brandpreview start Chrome, Edge or Chromium headless, with a throwaway profile and its background traffic (updates, sync, metrics, safe-browsing lists) turned off. The scripts drive it over a private pipe that no other program can reach; on Windows over a remote-debugging port bound to 127.0.0.1. The browser closes when the file is done. - A web font, if a brand sets one. With
fonts.web_cssset, the headless browser loads that stylesheet while it builds the PDF, and an artifact page loads it in every reader's browser, so the font host (for an artifact, always Google Fonts) sees each reader's address. The default brand sets none. - What is written. Files under
.zebra/in your working folder (sources, stories, brand, and the PDF, PowerPoint and Excel files) and the renderer cache. A source read from SharePoint or a Power BI model keeps a full copy of the sheet or query result in.zebra/sources/. Nothing keeps.zebra/out of git, so add it to.gitignorewhen the working folder is a repository and the data is confidential. - Sign-in. The MCP asks for sign-in, and the scripts sign in on their own, apart from the connector:
python3 -I scripts/story.py sign-inopens the Zebra BI sign-in page in your browser (OAuth with PKCE, answered on a 127.0.0.1 port) and keeps the token inauth.jsonnext to the renderer cache, readable only by you. Sign-in stops when the MCP's sign-in metadata names another server. The token is sent only to the MCP it was issued for, and to its sign-in server to refresh or revoke it. Without a valid token a build stops withZebra BI needs sign-inand writes no file.story.py sign-outrevokes and forgets every kept sign-in, an older MCP address included.
Help
- Documentation and support: https://help.zebrabi.com/
- Email: support@zebrabi.com
- Privacy policy: https://zebrabi.com/legal/?doc=privacy-policy
- Terms: https://zebrabi.com/legal/
Repository layout
| Path | Read by |
|---|---|
.claude-plugin/plugin.json, .mcp.json | Claude Code, claude.ai, Claude Desktop, Cowork, the Anthropic directory |
.claude-plugin/marketplace.json | Claude Code and Copilot marketplaces |
plugin.json, mcp.json | Agent Plugins 1.0: VS Code, Copilot CLI, ChatGPT and Codex |
skills/ | Hosts that install the plugin |
scripts/, assets/ | The story skills in Claude Code: profiling, PDF and Office builds, the brand default and the page template |
CONTRIBUTING.md covers the internals and how to run the checks.
Versions
The plugin and the MCP carry separate versions. Every plugin release bumps version in .claude-plugin/plugin.json and plugin.json, because Claude Code updates an install only when version changes and third-party marketplaces do not update plugins automatically; the release workflow makes that bump, and CI checks the two match and that every manifest carries the same MCP URL. The MCP server, its version and its MCP Registry entry are released from its own repository.
Releases are cut from develop; CONTRIBUTING.md covers how.