PBIFORGE
PBIFORGE is an MCP server that generates, customizes, and exports Power BI dashboards (.pbit/.pbix) from various data sources — all running locally with no data rows sent to AI models.
Create dashboards from:
A local CSV file path (no API key required)
Raw CSV text pasted directly (no API key required)
Base64-encoded CSV data with optional branding image
Natural language descriptions via LLMs like Claude or GPT (API key required)
Live SQL databases (SQL Server, PostgreSQL, Oracle)
Customize reports:
Add specific visuals (bar charts, line charts, KPI cards, slicers) using plain English
Apply color themes extracted from reference images (PNG/JPG)
Edit styling via natural language (e.g. "dark navy background", "change primary color to #FF5733")
Add filters and slicers (year, dropdown, date range) to specific or all pages
Inspect the current report structure before further edits
Export as:
.pbittemplate file saved locally.pbixfile returned as base64Hosted public download URL (requires
PUBLIC_BASE_URLenvironment variable)
ReportForge PBI
Generate Power BI (.pbit) dashboards from CSV files or live SQL databases — locally, on your own machine, in seconds.
ReportForge profiles your data, designs a sensible dashboard layout (KPI cards + charts + filters), compiles it to a Power BI template, and writes the result to disk. Open the .pbit in Power BI Desktop and you have a working report.
Highlights
CSV upload — drop a single
.csv, get a.pbit. No Power BI required to generate it.Live SQL sources — SQL Server, PostgreSQL, Oracle. The generated
.pbitqueries the database on open; credentials are never embedded.Plain-English prompts — describe what you want ("bar chart company by revenue, line of growth over year"). Powered by Claude or GPT — bring your own API key. Without a key, ReportForge still produces a sensible default dashboard from a CSV profile; the prompt is ignored.
Layout from a reference image — drop in a screenshot of a dashboard you like. ReportForge reads the structure (card count, chart types, filter panel) and applies it to the generated layout, then adopts the color palette as the report theme.
Multiple chart types — bar, column, line, area, pie, donut, scatter, table. KPI cards. Slicers.
Browser UI — runs on
http://127.0.0.1:8000/. Local-only by default.MCP server — exposes the same tools to Claude Desktop over stdio for "/" prompts inside Claude.
Related MCP server: powerbi-mcp-local
Quick start
# 1. Clone
git clone https://github.com/twilize5/reportforge.git
cd reportforge-pbi
# 2. Install Python deps (creates .venv)
.\setup_local.ps1
# 3. Install pbi-tools.core somewhere on PATH or at C:\pbi-tools\
# Download: https://github.com/pbi-tools/pbi-tools/releases
# 4. Start the local server
.\run_api.ps1Open http://127.0.0.1:8000/ in your browser.
If you'd rather use ReportForge inside Claude Desktop, see LOCAL_SETUP.md for the stdio MCP setup.
The browser UI
Field | What it does |
Data source | Pick |
CSV file | Single CSV with a header row. Columns are profiled automatically (measures, dimensions, dates, geographic fields). |
SQL fields |
|
Prompt | Plain-English description of what you want to see. Requires an LLM key (see "AI assistance" below). Without a key the prompt is ignored and you get the deterministic default dashboard. |
Style reference image | Optional PNG/JPG. ReportForge reads the dashboard structure (number of KPI cards, chart types, filter panel presence) using Claude Vision and mirrors that layout in the generated report. Colors are also extracted and applied as the report theme. |
AI assistance | Required for prompts to take effect. Pick Anthropic/OpenAI and paste an API key, or pick local Qwen through Ollama. Only column names (not data rows) are sent to the model. |
The downloaded .pbit opens in Power BI Desktop, prompts for any data-source credentials, and renders the dashboard.
How prompts work
ReportForge always runs the deterministic dashboard builder (KPI cards, headline bar/line chart, donut for low-cardinality dims, second "Breakdowns" page when the dataset is rich). On top of that, if you supply an LLM key, your prompt is interpreted and additional visuals are appended.
What the LLM sees:
Your prompt
Column names + roles (
measure/dimension)Column semantic types (
temporal,geographic,categorical, etc.)Visuals the deterministic builder already produced (so it doesn't duplicate them)
What it does NOT see: any of your data rows.
The model returns a JSON list of chart specs (type, x-axis column, y-axis column, title); ReportForge validates each spec against the column profile and adds the ones that pass.
The response header X-ReportForge-Parser tells you which path ran for any given generate (llm:anthropic, llm:openai, llm:qwen, llm:<provider>-empty, no-key, or deterministic-only). The UI shows this under each "Report ready" message.
SQL data sources
ReportForge ships with lazy driver imports — the base install works for CSV-only use. Install drivers only for the databases you need:
# SQL Server (also needs the Microsoft ODBC Driver 17 or 18, installed system-wide)
.\.venv\Scripts\python.exe -m pip install pyodbc
# PostgreSQL
.\.venv\Scripts\python.exe -m pip install psycopg2-binary
# Oracle (thin mode - no Oracle client install required)
.\.venv\Scripts\python.exe -m pip install oracledbIn the UI, pick the source kind from the Data source dropdown. ReportForge:
Connects with the credentials you supply.
Pulls
SELECT TOP 1000(orLIMIT 1000) to profile column types, cardinality, and roles.Generates a Power Query M expression that Power BI Desktop will use to fetch the full dataset live.
Compiles everything into a
.pbit.
The credentials never make it into the .pbit file — Power BI Desktop will prompt for sign-in on first open. This is the standard Power BI Template behavior.
Example: SQL Server
Field | Example |
Server |
|
Database |
|
Schema |
|
Table |
|
Username/Password | Leave blank for Windows auth, fill for SQL auth. |
Example: free-form query
Paste a SELECT (with joins, filters, anything) into the Or: SELECT query box. ReportForge will profile the first 1000 rows of the result and target the same query in the generated M.
AI assistance
Provider | Model used | Where to get a key |
Anthropic | Claude Sonnet with fallbacks | |
OpenAI |
| |
Local Qwen | Auto-detected Ollama Qwen model, or | No API key required |
What gets sent to the model:
Your prompt
The list of column names + their inferred roles
The list of visuals already generated by the deterministic builder
Nothing else. Your data rows never leave your machine.
The key is cached in the browser tab's sessionStorage so you don't have to re-paste it on every generate. It's wiped when the tab closes.
For local Qwen, choose Local Qwen 2.5 (Ollama) in the provider dropdown. The Windows installer bundles a CPU-only Ollama runtime and will start it when ReportForge launches; qwen2.5:3b is pulled on first use if it is missing, so the first Qwen generation can take a few minutes and needs internet access. ReportForge calls http://127.0.0.1:11434 by default; override with QWEN_OLLAMA_URL or OLLAMA_HOST if your Ollama server runs elsewhere.
If you skip the key, ReportForge falls back to the deterministic dashboard builder only. Your prompt has no effect in that case — the dashboard is built purely from the column profile.
Style reference image
Drop any PNG/JPG (a screenshot of a dashboard you like, a brand mockup, a Tableau page). ReportForge runs two extractions in parallel:
Layout extraction (Claude Vision, requires Anthropic key) Reads the structural layout of the reference dashboard:
How many KPI/metric cards are visible → used as the KPI card count in the generated report
Which chart types are present (bar, column, line, area, donut, etc.) → influences chart type selection
Whether a right-side filter/slicer panel exists → adds or omits a slicer panel
Whether the KPI cards are in a left-column rail or a top-row grid → picks the matching layout template
Palette extraction (Claude Vision, or local Pillow fallback) Extracts the color scheme:
Primary, secondary, and accent colors
Page canvas background
Chart series palette (8-color rotation)
The layout extraction requires an ANTHROPIC_API_KEY. If no key is available, ReportForge still samples colors locally with Pillow and the layout falls back to the data-driven default.
API endpoints
All endpoints are local-only (127.0.0.1:8000).
Method + path | Purpose |
| Liveness probe. |
| The browser UI. |
| Multipart: |
| Multipart: |
| LLM-only path (requires |
| The MCP server, exposed over HTTP. Used by Claude Desktop and other MCP-aware clients. |
For Claude Desktop integration over stdio, point the launcher at run_mcp_stdio.ps1 — see LOCAL_SETUP.md.
Windows installer (single .exe for end users)
A double-clickable installer is available for users who don't want to run setup_local.ps1. It bundles Python, all dependencies, the FastAPI app, and pbi-tools.core into one .exe. See installer/README.md for the build process. End-user install flow:
Download
ReportForge-PBI-Setup-1.0.3.exe(or the latest version).Run it (admin required — installs into
Program Files).Start Menu → ReportForge PBI. The server starts and your browser opens automatically.
User data (generated reports, sources, sessions) lives at
%LOCALAPPDATA%\ReportForge\and survives reinstall/uninstall.
Power BI Desktop External Tool button
Optional. Adds a ReportForge PBI button to the External Tools ribbon in Power BI Desktop. See EXTERNAL_TOOL_SETUP.md.
Some tenants block External Tools registration via Fabric tenant policy. If the ribbon button doesn't appear after registering, the browser UI still works — just open http://127.0.0.1:8000/ directly.
Architecture (one screen)
┌──────────────┐
CSV / SQL → ┤ data_profiler / data_sources ┤ → DatasetProfile
└──────────────┘
│
▼
build_intent_from_profile (deterministic)
│
│ + prompt parser (regex OR LLM)
│ + image layout hint extractor (Claude Vision)
│ + image palette extractor (Claude Vision / Pillow)
▼
ReportIntent (Pydantic)
│
▼
build_bim_from_profile → semantic model (BIM JSON)
build_m_for_source → Power Query M
build_layout_from_intent → report layout (visuals + theme)
│
▼
pbi-tools.core compile → .pbit
inject_data_mashup (DataMashup binary)
inject_report_layout (Report/Layout)
│
▼
.pbit fileKey files:
main.py— FastAPI app, endpoints, static UI mount.orchestrator.py— pipelines (pipeline_from_csv,pipeline_from_source).data_profiler.py— CSV profiler.data_sources.py— DB profilers + M generators for MSSQL / Postgres / Oracle.auto_intent.py— deterministic intent + layout builder, regex prompt parser.llm_intent.py— LLM-driven prompt parser (Anthropic + OpenAI).image_analyzer.py— palette extraction and layout hint extraction from reference images.file_writer.py— writes the project tree, injects DataMashup + Report/Layout.mcp_server.py— MCP tools for Claude Desktop.static/index.html— browser UI.
Troubleshooting
.pbit won't open / "An error occurred while opening the file".
Usually a stale generation in generated_reports/. Delete and regenerate. If it persists, check the server logs — pbi-tools.core errors usually show up there.
External Tools button doesn't appear in Power BI Desktop.
Most often a Fabric tenant policy. See the troubleshooting section in EXTERNAL_TOOL_SETUP.md.
LLM call fails silently.
When the LLM call errors or returns an empty visuals list, ReportForge falls back to the deterministic builder and surfaces llm:<provider>-empty in the X-ReportForge-Parser response header (visible in the UI status message). Double-check the key value, the provider dropdown, and that openai is installed (pip install openai) if you picked OpenAI.
SQL profiling fails with "pyodbc/psycopg2/oracledb is required". Install the relevant driver into the venv (see SQL data sources).
Generation succeeds but the dashboard looks plain blue, not like my reference image.
The local Pillow palette extractor is more conservative than the Anthropic vision path. If you have an ANTHROPIC_API_KEY set, the vision path gives better color results. Or open the resulting .pbit and tweak the theme manually.
Reference image supplied but the layout doesn't match it.
Layout extraction requires an ANTHROPIC_API_KEY — without one, only colors are sampled and the layout falls back to the data-driven default. Check that the key is set and that the reference image clearly shows the dashboard structure (card tiles, chart panels, filter sidebar).
Project state
This is the local-first incarnation of ReportForge. Railway deployment is not the supported path right now — everything is designed to run on your machine, talk to local CSVs and databases, and write .pbit files into generated_reports/.
The roadmap (see .claude/plans/) covers:
Phase 1: SQL connectors (✅ this release).
Phase 2: joined multi-table models with auto-relationship inference.
Phase 3: read the model out of an open Power BI Desktop session via a .NET helper.
Available Tools
13 toolsadd_filterB
Add a slicer or filter to the report. Examples:
"add a Year slicer to the Overview page"
"add a Region dropdown filter"
"add a date range filter for all pages" page_name: specific page, or None for all pages
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | No | ||
| session_id | Yes | ||
| filter_description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It explains page scope but fails to mention mutation effects, authentication needs, or side effects. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short and front-loaded with action. Parameter hint is included but could be better integrated. No wasted sentences, but structure could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool adds filters to a report, but missing context on prerequisites (e.g., existing report) and return values (output schema exists but not described). Session_id unexplained despite being required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must explain parameters. It clarifies page_name's purpose and illustrates filter_description with examples, but does not explain session_id or provide format/constraints for filter_description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds a slicer or filter to a report, using strong verb 'add' and specifying the resource. Examples further clarify the types of filters. It distinguishes the tool from siblings like add_visual by focusing on filters/slicers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like add_visual. Examples imply usage but do not provide criteria for selection or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_visualA
Add a visual to an existing report session. description: plain English e.g. "bar chart of units sold by product category" page_name: which page to add to (default: Overview)
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | No | Overview | |
| session_id | Yes | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description lacks behavioral disclosure. It does not mention side effects, error conditions, permissions, or what happens if the session doesn't exist. Only a hint on page_name default is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief with two sentences and two parameter lines. Every sentence adds value, focusing on the core action and essential parameter hints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are not required in the description. However, the description omits preconditions (e.g., session must exist) and error scenarios, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description partially compensates by explaining 'description' with an example and 'page_name' with its default. However, 'session_id' is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and resource 'visual to an existing report session', distinguishing it from siblings like add_filter or create_report which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when adding a visual to an existing session but provides no explicit when-to-use, when-not-to-use, or alternatives. No guidance on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_image_themeC
Extract color palette from a dashboard image and apply it as the report theme. image_base64: base64-encoded image string media_type: image/png or image/jpeg
| Name | Required | Description | Default |
|---|---|---|---|
| media_type | No | image/png | |
| session_id | Yes | ||
| image_base64 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It does not mention whether the operation is destructive, permissions required, error handling, or performance implications. Only basic parameter types are hinted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but mixes the main sentence with inline parameter descriptions, which is somewhat unstructured. Could be separated into a proper description block and a parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool performs extraction and application which is complex, but the description lacks details on output, error states, or limitations. An output schema exists but is not described. Missing important context for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds brief explanations for image_base64 and media_type. However, session_id is required and completely undocumented. No format constraints or examples provided beyond media_type values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool extracts a color palette from a dashboard image and applies it as a report theme. This is specific and distinguishes it from sibling tools like edit_styling which likely handles manual styling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool instead of alternatives (e.g., manual styling via edit_styling). Does not mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dashboardA
Create a complete Power BI dashboard from a local dataset path. USE THIS TOOL when the user says "create a dashboard/report from this dataset" and provides a local file path. Prefer this over create_report because this reads real data rows and does not require an Anthropic API key.
Supports CSV files. Returns a local .pbit file_path, not base64.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| dataset_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that it supports CSV files, returns a local .pbit file_path (not base64), and reads real data rows. However, does not mention permissions, side effects, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second gives usage guidance, third describes format and output. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists (not shown) and description already states return format, the description covers input, output, file support, and usage context. Could mention error handling but overall complete for a creation tool with siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds meaning: 'local dataset path' for dataset_path and implies title is optional. However, title parameter is not explained, and with only 2 parameters, the description compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a complete Power BI dashboard from a local dataset path', uses specific verb and resource, and distinguishes from create_report by noting it reads real data rows and does not require an Anthropic API key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'USE THIS TOOL when the user says "create a dashboard/report from this dataset" and provides a local file path.' Also provides an alternative: 'Prefer this over create_report...'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_from_csvA
Create a Power BI dashboard from a CSV file. Auto-generates KPI cards, bar chart, line chart, pie chart, and slicer — no prompt required. csv_base64: base64-encoded CSV bytes. filename: original filename (used for table naming in the data model). prompt: optional report title override (e.g. "Q4 Sales Overview"). image_base64: optional branding image (base64) to extract theme colors from. Returns: session_id, pbix_base64 (save as .pbit), report_title, columns_detected, domain.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | ||
| filename | No | data.csv | |
| csv_base64 | Yes | ||
| image_base64 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It details auto-generation of visuals, optional parameters, and return values. Missing disclosure on destructive actions, rate limits, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with front-loaded purpose; each sentence adds value. Could be slightly more efficient by grouping parameters, but overall no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and output schema, description covers inputs, behavior, and return fields. Missing error cases or limitations, but still sufficiently complete for usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the tool description explains each parameter's purpose (csv_base64, filename, prompt, image_base64), adding meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a Power BI dashboard from a CSV file, specifies auto-generated visuals, and distinguishes from siblings like create_from_csv_file_path and create_from_csv_text by emphasizing base64 input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for base64 CSV input but lacks explicit when-to-use or when-not-to-use. Sibling tools suggest alternative input methods, but no direct comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_from_csv_file_pathB
Create a Power BI dashboard from a CSV file already on this computer. Preferred for Claude Desktop because it avoids putting large CSV/base64 data into the conversation context.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the tool is destructive, read-only, or what happens on error. It only states the creation action without additional context about side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first clearly states purpose, second provides usage guidance. No wasted words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the fundamental use case but lacks details on expected output (though an output schema exists), error handling, or prerequisites. For a tool with moderate complexity, it is minimally complete but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not explain parameters. It mentions 'file_path' implicitly but does not describe the 'prompt' parameter or provide format/syntax guidance. The description adds almost no value over schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a Power BI dashboard from a CSV file already on this computer,' specifying the verb (create), resource (dashboard), and source (CSV file). It also distinguishes from siblings like create_from_csv_text by noting it avoids large data in conversation context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Preferred for Claude Desktop because it avoids putting large CSV/base64 data into the conversation context,' guiding when to use this tool over alternatives. It implies not to use it when data is not already a file path, but does not explicitly name sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_from_csv_textB
Create a Power BI dashboard from raw CSV text. This is easier to use from Claude Desktop than base64 input. Does not require an Anthropic API key unless image theming is used elsewhere.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | ||
| csv_text | Yes | ||
| filename | No | data.csv |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only mentions API key requirement and ease of use. Does not disclose behavior on errors, overwriting, or data limits. For a creation tool, more behavioral context would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise three sentences, front-loaded with purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes the creation from CSV text and provides usage hints. However, does not mention what the tool returns (despite output schema existing) or clarify if it creates a new dashboard or modifies existing. For a creation tool, complete enough but leaves some ambiguity about output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no parameter descriptions. Description only mentions 'raw CSV text' implicitly covering csv_text parameter, but does not explain prompt or filename parameters. Insufficient compensation for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a Power BI dashboard from raw CSV text. Mentions ease of use over base64, hinting at distinction but does not explicitly differentiate from sibling tools like create_from_csv or create_from_csv_file_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers usage guidance: easier from Claude Desktop than base64, and API key not needed unless image theming used elsewhere. Lacks explicit when-not-to-use compared to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reportA
Create a new Power BI report from a natural language description. Do NOT use this when the user provides a CSV/dataset file path; use create_dashboard instead. This tool needs a valid Anthropic API key. Returns a session_id to use in all subsequent tool calls. Example: "monthly sales by region with YoY comparison for retail team"
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses authentication requirement (API key) and return value (session_id for subsequent calls). Could mention side effects or error handling but adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences plus an example, front-loaded with main action. No wasted words, efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage restrictions, prerequisites, and return value. With output schema but no annotations, description is sufficient for invocation. Lacks error handling details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'description' with 0% schema coverage. Description adds meaning by specifying 'natural language description' and providing an example, though lacks format or length constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('create') and resource ('Power BI report') with method ('from a natural language description'). Example distinguishes it from siblings like create_dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when NOT to use (when user provides CSV/dataset file path) and directs to create_dashboard. Also mentions prerequisite (valid Anthropic API key).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_stylingB
Edit report styling via natural language. Examples:
"make all charts use a dark navy background"
"change primary color to #FF5733"
"use a minimal flat style with no borders"
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| instruction | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must handle behavioral disclosure. It only says 'Edit report styling' with examples, lacking details on side effects, reversibility, error handling, or output nature. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with one line and three examples. No redundant information; every element earns its place. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 params, output schema exists), the description covers the tool's purpose but omits context for session_id and does not explain the output. Output schema helps, but the missing parameter explanation reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only mentions 'instruction' implicitly through examples. The 'session_id' parameter is not explained at all, leaving its purpose unclear. The description adds some value for instruction but fails to cover session_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Edit report styling via natural language', specifying the verb (Edit) and resource (report styling). It distinguishes from siblings like add_filter, add_visual, and apply_image_theme by focusing on styling changes via NL instructions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via natural language and provides examples, but does not explicitly state when to use this tool versus alternatives, nor does it exclude other tools. Usage guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_pbit_fileA
Compile the current session and save the .pbit locally. Claude Desktop should prefer this over export_pbix to avoid huge base64 output.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It reveals the tool compiles and saves locally but lacks details on side effects, permissions, or file handling. Adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has an output schema (implied). The description explains preference over export_pbix but omits comparison with export_pbit_url. Given the sibling set, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no meaning to the session_id parameter beyond its type. The parameter is not explained, leaving the agent to infer its purpose from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles the current session and saves a .pbit file locally. It also distinguishes itself from export_pbix, providing specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Claude Desktop should prefer this over export_pbix to avoid huge base64 output,' providing clear when-to-use guidance relative to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_pbit_urlA
Compile the current session, save the .pbit on the hosted server, and return a public download URL. Set PUBLIC_BASE_URL on Railway for this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals that the tool compiles, saves a .pbit to a server, and returns a URL, plus an environment variable dependency. However, it does not disclose side effects on the session, authorization needs, or whether multiple calls overwrite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and contains no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action and a prerequisite. With an output schema present (but not shown), it likely covers the return. However, it omits details about session behavior after compilation, persistence of the URL, and authentication requirements, leaving some gaps for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. The only parameter session_id is not explained; the description mentions 'the current session' but does not clarify that session_id identifies it. This leaves the agent guessing about the parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs: 'Compile', 'save', 'return', and clearly identifies the resource: 'current session', '.pbit on the hosted server', 'public download URL'. It distinguishes from sibling export_pbit_file by specifying that the output is a URL rather than a file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Set PUBLIC_BASE_URL on Railway') but does not explicitly compare this tool with alternatives like export_pbit_file or export_pbix. An agent could infer usage from the action (returning a URL) but lacks guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_pbixA
Compile the current session into a .pbix file and return it as base64. The base64 string can be decoded and saved as report.pbix.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral insight. It discloses the output format (base64) and suggests decoding, but does not clarify if the operation is read-only or modifies the session, nor does it mention permissions or potential side effects. It is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the action and output format. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, output schema exists), the description adequately covers the core functionality. It explains the output format but misses error cases or state requirements. Still, it is nearly complete for a straightforward export tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its one required parameter session_id. The description mentions 'current session' but does not explain what session_id is or how to obtain it. It adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'compile' and the resource 'current session' into a .pbix file, returning it as base64. This distinguishes it from sibling tools like export_pbit_file and export_pbit_url, which handle .pbit files. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over its siblings (e.g., export_pbit_file, export_pbit_url) or any prerequisites. It does not mention when not to use it, leaving the agent without comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_report_stateB
Return the current report structure for inspection. Useful for understanding what has been generated before editing.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states it returns the report structure, with no mention of side effects, authentication needs, rate limits, or response format. This is insufficient for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and each sentence adds value without redundancy. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no parameter descriptions, and a single parameter, the description should provide more context. It does not mention the return format despite an output schema existing, nor does it explain the session_id parameter, making it incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (session_id) with no description in the schema (0% coverage). The description does not explain the meaning or expected format of session_id, leaving the agent without guidance on how to use the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current report structure for inspection, using the verb 'Return' and resource 'current report structure'. It effectively distinguishes from sibling tools like create_report or add_filter, which are mutation or creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests using this tool before editing to understand what has been generated. It provides clear context for when to use, but does not explicitly mention alternatives or when not to use, though the read-only nature is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The creation tools (create_dashboard, create_from_csv, create_from_csv_file_path, create_from_csv_text, create_report) have overlapping purposes, with subtle distinctions that may confuse an agent. Other tools like add_filter, add_visual, and export variants are clearer.
All tool names follow a consistent verb_noun pattern using underscores (e.g., add_filter, create_report, export_pbit_file). Even compound names like create_from_csv_file_path maintain the pattern, with no mixing of conventions.
13 tools cover creation, editing, theming, export, and inspection, which is well-scoped for a report generation server. Not over or under-loaded.
Covers most CRUD-like operations: create reports from various sources, add visuals/filters, edit styling, export results, and inspect state. Minor gap: no tools for deleting visuals, filters, or pages, but core workflows are supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Qwen Image 3 AI image generation
NeuralBrain MCP Server - RAG, Vector Memory, LLM Routing, Agent Identity, x402 Payments
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Related MCP Servers
- AlicenseBqualityDmaintenanceBuild Power BI reports with natural language through an MCP server that connects AI assistants to Power BI's PBIR file format for creating pages, visuals, themes, and filters locally.5715MIT
- AlicenseCqualityBmaintenanceLocal-first MCP server for Power BI Desktop automation. Automate semantic model changes, DAX, Power Query, Excel, and report layout from MCP-capable AI clients.1001MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for creating, editing, and evaluating Power BI (.pbix/.pbit) files without Power BI Desktop. Supports 101 tools including report creation, data sources, DAX measures, and file manipulation.16MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Power BI — local PBIX file analysis, cloud API operations, report export, and semantic model extraction from Power BI Desktop.471MIT
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/twilize5/reportforge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server