
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
rdl-mcp
Advanced tools
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.
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 bindingsModify 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 changesWhy it's better than editing XML:
1. Get the server:
git clone https://github.com/yourusername/rdl-mcp.git
cd rdl-mcp
2. Configure your MCP client:
Edit config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows, ~/.config/Claude/claude_desktop_config.json on Linux):
{
"mcpServers": {
"rdl-mcp": {
"command": "python3",
"args": ["/absolute/path/to/rdl_mcp_server.py"]
}
}
}
Add to VSCode settings (.vscode/settings.json in your workspace or user settings):
{
"github.copilot.chat.mcp.servers": {
"rdl-mcp": {
"command": "python3",
"args": ["/absolute/path/to/rdl_mcp_server.py"]
}
}
}
Note: MCP support in GitHub Copilot requires VSCode with Copilot Chat extension installed.
3. Restart your AI assistant and try: "Describe the structure of my report.rdl file"
Requirements: Python 3.8+ (no other dependencies)
Set environment variables:
RDL_MCP_LOG_LEVEL: DEBUG, INFO, WARNING, or ERRORRDL_MCP_LOG_FILE: Path to log fileJust ask your AI assistant in natural language:
The AI assistant will use the appropriate MCP tools automatically.
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")
describe_rdl_report(filepath) - Report structure summaryget_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 fieldsfield_pattern: Optional regex to filter field namesget_rdl_parameters(filepath) - All parameters with configurationsget_rdl_columns(filepath) - Column headers, widths, bindingsupdate_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 column
footer_expression: Optional expression for footer/total row - e.g. "=Sum(Fields!Amount.Value)", "=Count(Fields!ID.Value)", "Total:", or leave emptyremove_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 structureAll tools return {success: bool, message?: string, error?: string} or structured data.
Current limitations:
Planned features:
Server not appearing?
python3 --versionPermission errors?
chmod +x rdl_mcp_server.pyThis server is published to the MCP Registry. To release a new version:
Update version number in server.json:
{
"version": "0.2.0"
}
Commit your changes:
git add .
git commit -m "Release v0.2.0: Add feature description"
Create and push a git tag:
git tag v0.2.0
git push origin main --tags
Automated publishing: The GitHub Actions workflow automatically:
server.json against the MCP schemaPRs welcome! Priority areas:
Requirements: Python standard library only
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.
FAQs
Edit SSRS reports using AI - MCP server for RDL files
The pypi package rdl-mcp receives a total of 34 weekly downloads. As such, rdl-mcp popularity was classified as not popular.
We found that rdl-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.