Skip to main content
Glama

ReportForge PBI

reportforge MCP server reportforge MCP server

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 .pbit queries 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.ps1

Open 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 or one of the SQL connectors.

CSV file

Single CSV with a header row. Columns are profiled automatically (measures, dimensions, dates, geographic fields).

SQL fields

Server, Database, Schema, Table (or a free-form SELECT query). Username/password used only for profiling — never embedded in the .pbit.

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 oracledb

In the UI, pick the source kind from the Data source dropdown. ReportForge:

  1. Connects with the credentials you supply.

  2. Pulls SELECT TOP 1000 (or LIMIT 1000) to profile column types, cardinality, and roles.

  3. Generates a Power Query M expression that Power BI Desktop will use to fetch the full dataset live.

  4. 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

db-prod.corp.com,1433 or localhost\SQLEXPRESS

Database

AdventureWorks2022

Schema

Sales (defaults to dbo)

Table

Customer

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

https://console.anthropic.com/

OpenAI

gpt-4o-mini

https://platform.openai.com/api-keys

Local Qwen

Auto-detected Ollama Qwen model, or QWEN_MODEL / OLLAMA_MODEL

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

GET /health

Liveness probe.

GET /

The browser UI.

POST /generate-from-csv

Multipart: csv_file, prompt, image_file?, llm_provider?, llm_api_key?. Returns the .pbit file.

POST /generate-from-source

Multipart: kind, server, database, schema, table or query, username, password, prompt, image_file?, llm_provider?, llm_api_key?. Returns the .pbit.

POST /generate

LLM-only path (requires ANTHROPIC_API_KEY env var). For Claude Desktop.

/mcp/*

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:

  1. Download ReportForge-PBI-Setup-1.0.3.exe (or the latest version).

  2. Run it (admin required — installs into Program Files).

  3. Start Menu → ReportForge PBI. The server starts and your browser opens automatically.

  4. 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 file

Key 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 tools
add_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

ParametersJSON Schema
NameRequiredDescriptionDefault
page_nameNo
session_idYes
filter_descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_nameNoOverview
session_idYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
media_typeNoimage/png
session_idYes
image_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
dataset_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptNo
filenameNodata.csv
csv_base64Yes
image_base64No

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptNo
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptNo
csv_textYes
filenameNodata.csv

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
instructionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A3.6/5.0
Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count5/5

13 tools cover creation, editing, theming, export, and inspection, which is well-scoped for a report generation server. Not over or under-loaded.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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