关于 RDL MCP Server
RDL MCP Server 为使用 SSRS 报表的开发者提供读取和修改 RDL 文件的工具,将 XML 结构转换为更易处理的数据,并在修改后验证 XML。
主要功能
- 01查看报表结构、数据集和参数
- 02读取列标题、宽度与绑定
- 03增删列及数据集字段
- 04修改列格式和存储过程
- 05添加或更新报表参数
- 06验证 RDL XML
适用场景
- 01检查报表所用数据集和存储过程
- 02调整列标题、宽度或数字格式
- 03新增筛选参数或数据集字段
- 04修改后验证 RDL 文件
MCP 相关
该 MCP 服务将读取、修改和验证 RDL 文件的操作作为工具提供给 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
15收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| filepath | string | 是 | RDL 文件的路径 |
详细介绍
RDL MCP 服务
mcp-name: io.github.bethmaloney/rdl-mcp
使用 AI 助手编辑 SSRS 报表,无需再费力处理 2000 多行 XML。这个 Model Context Protocol (MCP) 服务为 Claude、Copilot 和其他 AI 工具提供简单的命令,用于读取和修改 RDL 文件。
功能介绍
读取报表:
describe_rdl_report- 获取报表结构概览get_rdl_datasets- 查看数据集、字段和存储过程(支持限制字段数量和筛选)get_rdl_parameters- 列出所有报表参数get_rdl_columns- 查看列标题、宽度和绑定
修改报表:
update_column_header/update_column_width- 更改列add_column/remove_column- 添加或移除列update_column_format- 更改数字/日期格式update_stored_procedure- 替换存储过程add_dataset_field/remove_dataset_field- 管理数据集字段add_parameter/update_parameter- 管理参数validate_rdl- 在修改后验证 XML
比编辑 XML 更好的原因:
- AI 看到的是清晰的 JSON,而不是冗长的 XML 命名空间
- 使用单行命令,无需进行容易出错的字符串操作
- 自动验证可在错误导致报表无法使用前将其捕获
- 无依赖项——仅需 Python 3.8+ 标准库
安装
要求:
- Python 3.8 或更高版本
- uv(Python 包管理器和工具运行器)
安装 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" - 其他方式(所有平台):
pip install uv,或参阅安装文档
注意: uvx(包含在 uv 中)会自动处理 Python 环境和依赖项。无需手动安装 Python 包!
快速开始
Claude Desktop
编辑配置文件:
- 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"]
}
}
}
GitHub Copilot (VSCode)
添加到 VSCode 设置中(工作区中的 .vscode/mcp.json 或用户设置):
{
"servers": {
"rdlMcp": {
"type": "stdio",
"command": "uvx",
"args": ["rdl-mcp"]
}
}
}
注意: 需要安装 Copilot Chat 扩展的 VSCode。
安装完成后: 重启 AI 助手并尝试提问:"Describe the structure of my report.rdl file"
可选:启用调试日志
设置环境变量:
RDL_MCP_LOG_LEVEL:DEBUG、INFO、WARNING或ERRORRDL_MCP_LOG_FILE:日志文件路径
用法
只需用自然语言向 AI 助手提问:
- “这个报表使用了哪些数据集?”
- “将 Account Number 列的宽度设为 2 英寸”
- “将 Amount 列格式设为保留 2 位小数的货币格式”
- “添加一个新的 Amount 列,在页脚显示总和”
- “添加 Status 列,但保持页脚为空”
- “将主数据集更新为使用 V2 存储过程,并添加 TaxAmount 字段”
- “移除已过时的 Status 列”
- “添加 Year 参数以筛选报表”
AI 助手会自动使用相应的 MCP 工具。
示例:编辑方式对比 XML
不使用 MCP(手动编辑 XML):
<TablixCell><CellContents><Textbox><Paragraphs>
<Paragraph><TextRuns><TextRun>
<Value>Old Header</Value>
</TextRun></TextRuns></Paragraph>
</Paragraphs></Textbox></CellContents></TablixCell>
使用 MCP(一条命令):
update_column_header(filepath="report.rdl",
old_header="Old Header",
new_header="New Header")
API 参考
查看所有可用工具
### 读取工具describe_rdl_report(filepath)- 报告结构摘要get_rdl_datasets(filepath, field_limit?, field_pattern?)- 包含字段和存储过程的数据集field_limit:0 = 仅统计数量(默认),-1 = 所有字段,N = 限制为 N 个字段field_pattern:用于筛选字段名称的可选正则表达式
get_rdl_parameters(filepath)- 所有参数及其配置get_rdl_columns(filepath)- 列标题、宽度和绑定
编辑工具
update_column_header(filepath, old_header, new_header)- 更改列文本update_column_width(filepath, column_index, new_width)- 修改宽度(例如 "2.5in")update_column_format(filepath, column_index, format_string)- 更改格式(例如 "#,0.00"、"dd/MM/yyyy"、"C2")add_column(filepath, column_index, header_text, field_binding, width?, format_string?, footer_expression?)- 添加列footer_expression:页脚/合计行的可选表达式,例如 "=Sum(Fields!Amount.Value)"、"=Count(Fields!ID.Value)"、"Total:",也可以留空
remove_column(filepath, column_index)- 移除列update_stored_procedure(filepath, dataset_name, new_sproc)- 更改数据集存储过程add_dataset_field(filepath, dataset_name, field_name, data_field, type_name)- 向数据集添加字段remove_dataset_field(filepath, dataset_name, field_name)- 从数据集中移除字段add_parameter(filepath, name, data_type, prompt)- 添加新参数update_parameter(filepath, name, prompt?, default_value?)- 更新参数validate_rdl(filepath)- 验证 XML 结构
所有工具均返回 {success: bool, message?: string, error?: string} 或结构化数据。
限制与路线图
当前限制:
- 仅支持 Tablix(表格)控件,暂不支持 Matrix 或 Chart
- 最适用于标准报告布局
- 某些复杂的 RDL 功能可能仍需手动编辑 XML
计划中的功能:
- 列重新排序、分组和排序配置
- 表达式构建器辅助工具
- 数据集字段管理
故障排除
未显示服务?
- 检查配置中的绝对路径是否正确
- 确认 Python 3.8+:
python3 --version - 重启 MCP 客户端
权限错误?
- 使脚本可执行:
chmod +x rdl_mcp_server.py - 检查 RDL 文件的读写权限
发布新版本
此服务发布在 PyPI 和 MCP Registry 上。发布新版本的步骤如下:
-
更新两个文件中的版本号:
pyproject.toml:version = "0.2.0"server.json:{ "version": "0.2.0", "packages": [ { "version": "0.2.0" } ] } -
提交更改:
git add . git commit -m "Release v0.2.0: Add feature description" -
创建并推送 git 标签:
git tag v0.2.0 git push origin main --tags -
自动发布:GitHub Actions 工作流会自动:
- 构建并发布到 PyPI(用户可以通过
uvx rdl-mcp安装) - 根据 MCP schema 验证
server.json - 发布到 MCP Registry(服务会显示在注册表搜索结果中)
- 更新下游注册表(例如 GitHub 的 MCP marketplace)
- 构建并发布到 PyPI(用户可以通过
贡献
欢迎提交 PR!优先改进方向:
- 改进对复杂布局的列检测
- 增加更多编辑操作(重新排序、分组等)
要求:仅使用 Python 标准库
- Fork 仓库
- 创建功能分支
- 进行更改并添加测试
- 提交 PR
许可证
MIT License - 详情请参阅 LICENSE 文件。
这意味着你可以出于任何目的(无论商业或非商业)自由使用、修改和分发此软件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。