什么是 RDL MCP Server?
借助 AI 编辑 SSRS 报表的 MCP 服务器,提供简单工具来读取、修改并维护 RDL 文件。
README
RDL MCP Server
mcp-name: io.github.bethmaloney/rdl-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 overviewget_rdl_datasets- View datasets, fields, and stored procedures (supports field limiting and filtering)get_rdl_parameters- List all report parametersget_rdl_columns- See column headers, widths, and bindings
Modify reports:
update_column_header/update_column_width- Change columnsadd_column/remove_column- Add or remove columnsupdate_column_format- Change number/date formattingupdate_stored_procedure- Swap stored proceduresadd_dataset_field/remove_dataset_field- Manage dataset fieldsadd_parameter/update_parameter- Manage parametersvalidate_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 uvor see installation docs
Note: uvx (included with uv) automatically handles the Python environment and dependencies. No manual Python package installation needed!
Quick Start
<details> <summary><b>Claude Desktop</b></summary>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
{
"mcpServers": {
"rdl-mcp": {
"command": "uvx",
"args": ["rdl-mcp"]
}
}
}
Add to VSCode settings (.vscode/mcp.json in your workspace or user settings):
{
"servers": {
"rdlMcp": {
"type": "stdio",
"command": "uvx",
"args": ["rdl-mcp"]
}
}
}
Note: Requires VSCode with Copilot Chat extension installed.
</details>After installation: Restart your AI assistant and try: "Describe the structure of my report.rdl file"
Set environment variables:
RDL_MCP_LOG_LEVEL:DEBUG,INFO,WARNING, orERRORRDL_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):
<!-- 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):
update_column_header(filepath="report.rdl",
old_header="Old Header",
new_header="New Header")
API Reference
<details> <summary>View all available tools</summary>Reading Tools
describe_rdl_report(filepath)- Report structure summaryget_rdl_datasets(filepath, field_limit?, field_pattern?)- Datasets with fields and stored proceduresfield_limit: 0 = counts only (default), -1 = all fields, N = limit to N fieldsfield_pattern: Optional regex to filter field names
get_rdl_parameters(filepath)- All parameters with configurationsget_rdl_columns(filepath)- Column headers, widths, bindings
Editing Tools
update_column_header(filepath, old_header, new_header)- Change column textupdate_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 columnfooter_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 columnupdate_stored_procedure(filepath, dataset_name, new_sproc)- Change dataset sprocadd_dataset_field(filepath, dataset_name, field_name, data_field, type_name)- Add field to datasetremove_dataset_field(filepath, dataset_name, field_name)- Remove field from datasetadd_parameter(filepath, name, data_type, prompt)- Add new parameterupdate_parameter(filepath, name, prompt?, default_value?)- Update parametervalidate_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:
-
Update version numbers in both files:
pyproject.toml:tomlversion = "0.2.0"server.json:json{ "version": "0.2.0", "packages": [ { "version": "0.2.0" } ] } -
Commit your changes:
bashgit add . git commit -m "Release v0.2.0: Add feature description" -
Create and push a git tag:
bashgit tag v0.2.0 git push origin main --tags -
Automated publishing: The GitHub Actions workflows automatically:
- Build and publish to PyPI (users can install via
uvx rdl-mcp) - Validate
server.jsonagainst the MCP schema - Publish to the MCP Registry (server appears in registry search)
- Update downstream registries (like GitHub's MCP marketplace)
- Build and publish to PyPI (users can install via
Contributing
PRs welcome! Priority areas:
- Better column detection for complex layouts
- More editing operations (reordering, grouping, etc.)
Requirements: Python standard library only
- Fork repo
- Create feature branch
- Make changes + tests
- 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.
常见问题
RDL MCP Server 是什么?
借助 AI 编辑 SSRS 报表的 MCP 服务器,提供简单工具来读取、修改并维护 RDL 文件。
相关 Skills
MCP构建
by anthropics
聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。
✎ 想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。
Slack动图
by anthropics
面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。
✎ 帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。
MCP服务构建器
by alirezarezvani
从 OpenAPI 一键生成 Python/TypeScript MCP server 脚手架,并校验 tool schema、命名规范与版本兼容性,适合把现有 REST API 快速发布成可生产演进的 MCP 服务。
✎ 帮你快速搭建 MCP 服务与后端 API,脚手架完善、扩展顺手,尤其适合想高效验证服务能力的开发者。
相关 MCP Server
Slack 消息
编辑精选by Anthropic
Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。
✎ 这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。
by netdata
io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。
✎ 这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。
by d4vinci
Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。
✎ 这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。