RDL MCP Server

io.github.bethmaloney由 GitHub 帳號 bethmaloney 發布v0.1.0更新於 Oct 24, 2026

Edit SSRS reports using AI - simple tools to read and modify RDL files

已驗證STDIO僅桌面開發者工具資料與分析

概覽

AI 產生的概覽

一個本機 MCP 伺服器,讓 AI 助理透過結構化工具讀取和修改 SSRS 報表定義(RDL)檔案,不必手動編輯 XML。

可以做什麼
檢視報表:描述報表結構,列出資料集及其欄位和預存程序,列出參數,查看欄位標題、寬度與繫結,並可限制欄位數量與用正規表示式篩選。編輯欄位:修改標題、寬度與數字/日期格式,新增或移除欄位(含頁尾運算式)。管理資料集:更換預存程序,新增或移除資料集欄位。管理參數:新增參數並更新提示或預設值。修改後驗證 RDL 的 XML 結構。
適用情境
適合維護 SSRS 報表、希望讓助理對 RDL 檔案做針對性修改的情境,例如調整欄寬、重新格式化金額、新增參數或把資料集切換到新的預存程序,而不必手動編輯數千行 XML。
執行需求
以 PyPI 套件形式透過 uvx 在本機以 stdio 執行,需要 Python 3.8 或以上版本以及 uv。需在用戶端設定(如 Claude Desktop 或裝有 Copilot Chat 的 VS Code)。選用環境變數 RDL_MCP_LOG_LEVEL 和 RDL_MCP_LOG_FILE 控制記錄。未宣告身分驗證。
安裝前請注意
編輯類工具會寫入所指定的 RDL 檔案,包括增刪欄位、資料集欄位和參數以及更換預存程序;請保留備份或使用版本控制,並在修改後執行 validate_rdl。伺服器需要對這些檔案有讀寫權限。可透過 RDL_MCP_LOG_FILE 將記錄寫入指定檔案路徑。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 RDL MCP Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

RDL MCP Server

mcp-name: io.github.bethmaloney/rdl-mcp

[PyPI] [License: MIT] [Python 3.8+] [MCP]

Edit SSRS reports using AI assistants instead of wrestling with 2000+ lines of XML. This Model Context Protocol (MCP) server gives Claude, Copilot, and other AI tools simple commands to read and modify RDL files.

What It Does

Read reports:

  • describe_rdl_report - Get report structure overview
  • get_rdl_datasets - View datasets, fields, and stored procedures (supports field limiting and filtering)
  • get_rdl_parameters - List all report parameters
  • get_rdl_columns - See column headers, widths, and bindings

Modify reports:

  • update_column_header / update_column_width - Change columns
  • add_column / remove_column - Add or remove columns
  • update_column_format - Change number/date formatting
  • update_stored_procedure - Swap stored procedures
  • add_dataset_field / remove_dataset_field - Manage dataset fields
  • add_parameter / update_parameter - Manage parameters
  • validate_rdl - Validate XML after changes

Why it's better than editing XML:

  • AI sees clean JSON instead of verbose XML namespaces
  • One-line commands instead of error-prone string manipulation
  • Automatic validation catches errors before they break reports
  • No dependencies - just Python 3.8+ standard library

Installation

Requirements:

  • Python 3.8 or higher
  • uv (Python package manager and tool runner)

Installing uv:

  • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
  • Windows: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • Alternative (all platforms): pip install uv or see installation docs

Note: uvx (included with uv) automatically handles the Python environment and dependencies. No manual Python package installation needed!

Quick Start

Claude Desktop

Edit config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
json
{  "mcpServers": {    "rdl-mcp": {      "command": "uvx",      "args": ["rdl-mcp"]    }  }}
GitHub Copilot (VSCode)

Add to VSCode settings (.vscode/mcp.json in your workspace or user settings):

json
{  "servers": {    "rdlMcp": {      "type": "stdio",      "command": "uvx",      "args": ["rdl-mcp"]    }  }}

Note: Requires VSCode with Copilot Chat extension installed.

After installation: Restart your AI assistant and try: "Describe the structure of my report.rdl file"

Optional: Enable debug logging

Set environment variables:

  • RDL_MCP_LOG_LEVEL: DEBUG, INFO, WARNING, or ERROR
  • RDL_MCP_LOG_FILE: Path to log file

Usage

Just ask your AI assistant in natural language:

  • "What datasets does this report use?"
  • "Make the Account Number column 2 inches wide"
  • "Format the Amount column as currency with 2 decimals"
  • "Add a new Amount column that shows the sum in the footer"
  • "Add a Status column but leave the footer blank"
  • "Update the main dataset to use the V2 stored procedure and add the TaxAmount field"
  • "Remove the obsolete Status column"
  • "Add a Year parameter to filter the report"

The AI assistant will use the appropriate MCP tools automatically.

Example: Editing vs. XML

Without MCP (manually editing XML):

xml
<!-- Find this in 2000+ lines --><TablixCell><CellContents><Textbox><Paragraphs>  <Paragraph><TextRuns><TextRun>    <Value>Old Header</Value>  </TextRun></TextRuns></Paragraph></Paragraphs></Textbox></CellContents></TablixCell>

With MCP (one command):

python
update_column_header(filepath="report.rdl",                     old_header="Old Header",                     new_header="New Header")

API Reference

View all available tools

Reading Tools

  • describe_rdl_report(filepath) - Report structure summary
  • get_rdl_datasets(filepath, field_limit?, field_pattern?) - Datasets with fields and stored procedures
    • field_limit: 0 = counts only (default), -1 = all fields, N = limit to N fields
    • field_pattern: Optional regex to filter field names
  • get_rdl_parameters(filepath) - All parameters with configurations
  • get_rdl_columns(filepath) - Column headers, widths, bindings

Editing Tools

  • update_column_header(filepath, old_header, new_header) - Change column text
  • update_column_width(filepath, column_index, new_width) - Modify width (e.g. "2.5in")
  • update_column_format(filepath, column_index, format_string) - Change format (e.g. "#,0.00", "dd/MM/yyyy", "C2")
  • add_column(filepath, column_index, header_text, field_binding, width?, format_string?, footer_expression?) - Add column
    • footer_expression: Optional expression for footer/total row - e.g. "=Sum(Fields!Amount.Value)", "=Count(Fields!ID.Value)", "Total:", or leave empty
  • remove_column(filepath, column_index) - Remove column
  • update_stored_procedure(filepath, dataset_name, new_sproc) - Change dataset sproc
  • add_dataset_field(filepath, dataset_name, field_name, data_field, type_name) - Add field to dataset
  • remove_dataset_field(filepath, dataset_name, field_name) - Remove field from dataset
  • add_parameter(filepath, name, data_type, prompt) - Add new parameter
  • update_parameter(filepath, name, prompt?, default_value?) - Update parameter
  • validate_rdl(filepath) - Validate XML structure

All tools return {success: bool, message?: string, error?: string} or structured data.

Limitations & Roadmap

Current limitations:

  • Tablix (table) controls only - no Matrix or Chart support yet
  • Works best with standard report layouts
  • Some complex RDL features may still need manual XML editing

Planned features:

  • Column reordering, grouping, and sorting configuration
  • Expression builder helpers
  • Dataset field management

Troubleshooting

Server not appearing?

  • Check absolute path in config is correct
  • Verify Python 3.8+: python3 --version
  • Restart your MCP client

Permission errors?

  • Make script executable: chmod +x rdl_mcp_server.py
  • Check RDL file read/write permissions

Releasing a New Version

This server is published to PyPI and the MCP Registry. To release a new version:

  1. Update version numbers in both files:

    pyproject.toml:

    toml
    version = "0.2.0"

    server.json:

    json
    {  "version": "0.2.0",  "packages": [    {      "version": "0.2.0"    }  ]}
  2. Commit your changes:

    bash
    git add .git commit -m "Release v0.2.0: Add feature description"
  3. Create and push a git tag:

    bash
    git tag v0.2.0git push origin main --tags
  4. Automated publishing: The GitHub Actions workflows automatically:

    • Build and publish to PyPI (users can install via uvx rdl-mcp)
    • Validate server.json against the MCP schema
    • Publish to the MCP Registry (server appears in registry search)
    • Update downstream registries (like GitHub's MCP marketplace)

Contributing

PRs welcome! Priority areas:

  • Better column detection for complex layouts
  • More editing operations (reordering, grouping, etc.)

Requirements: Python standard library only

  1. Fork repo
  2. Create feature branch
  3. Make changes + tests
  4. Submit PR

License

MIT License - see LICENSE file for details.

This means you're free to use, modify, and distribute this software for any purpose, commercial or non-commercial.

來源:README.md,提交 ed2b981

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分