RDL文件编辑工具

一个通过AI助手简化SQL Server Reporting Services (SSRS) RDL文件编辑的工具,提供简单的命令来读取和修改RDL文件,避免了直接处理复杂的XML。

  • by bethmaloney
  • Python
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 bethmaloney/rdl-mcp

使用说明

RDL MCP服务器

mcp名称:io.github.bethmaloney/rdl-mcp

使用AI助手编辑SSRS报告,而不是纠结于2000多行XML。这 模型上下文协议(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或更高版本
  • 紫外线 (Python包管理器和工具运行器)

安装紫外线:

  • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
  • 窗户: 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
  • 窗户: %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"

Optional: Enable debug logging

设置环境变量:

  • RDL_MCP_LOG_LEVEL: DEBUG, INFO, WARNING,或 ERROR
  • RDL_MCP_LOG_FILE:日志文件的路径

用法

用自然语言问你的人工智能助手:

  • “这份报告使用了哪些数据集?”
  • “将帐号列设置为2英寸宽”
  • “将金额列设置为带2位小数的货币格式”
  • “添加一个新的金额列,在页脚中显示总和”
  • “添加状态列,但将页脚留空”
  • “更新主数据集以使用V2存储过程并添加TaxAmount字段”
  • “删除过时的状态列”
  • “添加年份参数以筛选报告”

AI助手将自动使用适当的MCP工具。

示例:编辑与XML

无MCP (手动编辑XML):

<!-- Find this in 2000+ lines -->
<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参考

View all available tools

阅读工具

  • 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.5英寸”)
  • 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:页脚/总计行的可选表达式-例如“=总和(字段!金额.Value)”、“=计数(字段!ID.Value)
  • 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(表)控件-尚不支持矩阵或图表
  • 与标准报告布局配合使用效果最佳
  • 一些复杂的RDL功能可能仍需要手动XML编辑

计划功能:

  • 列重新排序、分组和排序配置
  • 表达式生成器助手
  • 数据集字段管理

故障排除

服务器未出现?

  • 检查配置中的绝对路径是否正确
  • 验证Python 3.8+: python3 --version
  • 重新启动MCP客户端

权限错误?

  • 使脚本可执行: chmod +x rdl_mcp_server.py
  • 检查RDL文件读/写权限

发布新版本

此服务器发布到 PyPI 和那个 MCP注册表。要发布新版本,请执行以下操作:

  1. 更新版本号 在这两个文件中:

    pyproject.toml:

    version = "0.2.0"
    

    server.json:

    {
      "version": "0.2.0",
      "packages": [
        {
          "version": "0.2.0"
        }
      ]
    }
    
  2. 提交您的更改:

    git add .
    git commit -m "Release v0.2.0: Add feature description"
    
  3. 创建并推送一个git标签:

    git tag v0.2.0
    git push origin main --tags
    
  4. 自动发布:GitHub Actions工作流会自动执行:

    • 构建并发布到PyPI(用户可以通过以下方式安装 uvx rdl-mcp)
    • 验证 server.json 与MCP模式相反
    • 发布到MCP注册表(服务器出现在注册表搜索中)
    • 更新下游注册表(如GitHub的MCP市场)

贡献

PR欢迎!优先领域:

  • 对复杂布局进行更好的列检测
  • 更多编辑操作(重新排序、分组等)

要求:仅限Python标准库

  1. 分叉回购
  2. 创建特征分支
  3. 进行更改+测试
  4. 提交PR

许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

这意味着您可以出于任何商业或非商业目的自由使用、修改和分发此软件。