# SSRS2 (remote · ssrs2.net)

Markdown to editable PowerPoint, Word, PDF; checks, edits and previews RDLC/RDL reports.

- Trust score: 65/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-17

## Components

- remote · `ssrs2.net`: 34/100, [markdown](https://verifymcp.io/servers/antoinegou-ssrs2/mcp-licensed.md), [page](https://verifymcp.io/servers/antoinegou-ssrs2/mcp-licensed)
- remote · `ssrs2.net`: 65/100 (this document), [markdown](https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2.md), [page](https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2)
- nuget · `SSRS2.Mcp`: 60/100, [markdown](https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2-mcp.md), [page](https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2-mcp)

## Channel facts

- Endpoint: `https://ssrs2.net/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.5.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-17.

- **Endpoint Security**: 66/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 405, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 49/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3748 tokens (~624/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 6 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 7 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the SSRS2 MCP server?

SSRS2 is a hosted endpoint at https://ssrs2.net/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http antoinegou-ssrs2 'https://ssrs2.net/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "antoinegou-ssrs2": {
      "url": "https://ssrs2.net/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "antoinegou-ssrs2": {
      "type": "http",
      "url": "https://ssrs2.net/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.antoinegou-ssrs2]
url = "https://ssrs2.net/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "antoinegou-ssrs2": {
      "type": "remote",
      "url": "https://ssrs2.net/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add antoinegou-ssrs2 --url 'https://ssrs2.net/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  antoinegou-ssrs2:
    url: "https://ssrs2.net/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "antoinegou-ssrs2": {
      "Transport": "http",
      "Url": "https://ssrs2.net/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add antoinegou-ssrs2 -t streamable-http -u 'https://ssrs2.net/mcp'
```

### Other

```json
{
  "mcpServers": {
    "antoinegou-ssrs2": {
      "type": "http",
      "url": "https://ssrs2.net/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-17 (score 65, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [cosmetic] “describe_report” added an optional parameter “part”

### 2026-10-16 (score 64, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “convert_report” rewrote its description, which is the text the model reads
- [security] Tool “validate_report” rewrote its description, which is the text the model reads
- [functional] Server version: 1.5.0 → 1.5.1

### 2026-10-15 (score 64, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-14 (score 63)

First indexed and scored.

## MCP tools (6)

### `convert_report` (~431 tokens)

Convert a report to a file

Converts a report (RDL or RDLC) or Markdown (a document, or slides) with SSRS2 (Report Viewer's rules) to pptx (PowerPoint's own text boxes, tables and pictures, a slide per page: a Markdown deck becomes a deck), pdf, docx, xlsx, mhtml, tiff, png (the first page), csv or xml. It is checked first, as validate_report checks it: with errors nothing is written. Returns validate_report's answer and written: the file's name and size, url (downloaded once, within ten minutes), curl (the command that saves it), and what it holds read back as PowerPoint (slides) or Word and a PDF reader (document) get it. help: ["answers"] says more.

Input parameters:

- `culture` (string|null): The culture of a report that names no Language (en-US, de-CH); left out, en-US.
- `format` (string|null): pptx (default), pdf, docx, xlsx, mhtml, tiff, png, csv or xml.
- `help`: true, or topics (["markdown", "decks"]): the reference only.
- `markdown` (string|null): Markdown's text: a document, or slides with marp: true. Give rdlc or markdown.
- `name` (string|null): The file's name, without its extension (default: the Markdown's title, else report).
- `parameters` (object|null): Report parameter values by name (a multi-value one's separated by commas).
- `pictures` (object|null): The pictures the Markdown names, by its paths: {"images/chart.png": "<base64>"}; 5 MB each, 20 MB in all.
- `rdlc` (string|null): The report definition's XML (RDL or RDLC). Give rdlc or markdown.
- `sampleData`: Rows per dataset: {"DataSet": [{"Field": value}]}, dates as ISO text. Left out, made up from the fields' types.

### `compare_reports` (~176 tokens)

Group reports by structure

Groups report definitions (RDL or RDLC) by structure, to plan one change across many: a group's reports have the same items, datasets, parameters and code modules and differ only in places, texts and looks, so one set of operations naming their items changes them alike. Returns groups, the largest first: structure (edit_report's structure), roles (what role:signature and the like name there), differs (how its first report differs from the first group's), places (items placed otherwise), and versions: each report and its version.

Input parameters:

- `detail` (string|null): "full": each group's reports listed too, beside their versions.
- `reports` (object, required): The reports by name: {"Receipt_de-CH.rdlc": "<the report's XML>", ...}; 50 at most, 20 MB in all.

### `render_preview` (~487 tokens)

Render a report's pages

Renders a report definition (RDL or RDLC) or Markdown (a document, or slides: a page each) with SSRS2, the Report Viewer engine, and returns its pages as PNG, as a PDF of it would show them: a JSON summary first (what validate_report answers, no need to validate first; madeUpRows; conversion for Markdown, what it approximated at its lines; text, what the pages print, page by page in reading order, where values are read exactly), then an image per page, or one image of numbered thumbnails (sheet) to see a deck or a long report whole. A report with errors is not rendered. help: ["answers"] says more.

Input parameters:

- `culture` (string|null): The culture of a report that names no Language (en-US, de-CH); left out, en-US.
- `dpi` (integer): The images' dots per inch, 48 to 200 (default 96: an A4 page is 794 x 1123 pixels).
- `firstPage` (integer): The first page to return (default 1).
- `help`: true, or topics (["markdown", "decks"]): the reference only.
- `madeUpRows`: "all": every made-up row in the answer, not a summary.
- `markdown` (string|null): Markdown's text: a document, or slides with marp: true. Give rdlc or markdown.
- `pages` (integer|null): Pages to return: 3 by default, 10 at most; with sheet, 30.
- `parameters` (object|null): Report parameter values by name (a multi-value one's separated by commas).
- `pictures` (object|null): The pictures the Markdown names, by its paths: {"images/chart.png": "<base64>"}; 5 MB each, 20 MB in all.
- `rdlc` (string|null): The report definition's XML (RDL or RDLC). Give rdlc or markdown.
- `sampleData`: Rows per dataset: {"DataSet": [{"Field": value}]}, dates as ISO text. Left out, made up from the fields' types.
- `sheet` (boolean): One image of up to 30 pages as numbered thumbnails, too small to read: look at a page itself for that.

### `describe_report` (~227 tokens)

Outline a report

Outlines a report definition (RDL or RDLC) to plan a change: its page, datasets and fields, parameters, and every item top to bottom with its kind, place and size in cm, what it shows and does (hidden, toggled, page breaks), and its role (title, table, totals, declaration, signature...), which role:signature and the like name in edit_report and validate_report whatever the report calls the item. Returns version (edit_report's baseVersion) and outline; with item, that part's XML as written, with its lines (to copy an edit's find from).

Input parameters:

- `detail` (string|null): "full": every text whole and why each role was guessed.
- `item` (string|null): One part in full: a name, a role (role:signature) or a path (WorkInstructions/TablixRow[3]): its outline and XML.
- `part` (integer): Outline part, from 1.
- `rdlc` (string, required): The report definition's XML (RDL or RDLC).

### `edit_report` (~505 tokens)

Change a report

Changes a report definition (RDL, RDLC) given as its XML by operations (the SSRS2 designer's own), all or none. The text is patched (the rest as it was), then checked: its new problems and pages said. The answer's rdlc is the changed report (past 200 KB, url and curl: a download within ten minutes).
Operations ("op"): dataset, parameter, page, header, footer, code, textbox, table, matrix, list, chart, gauge, indicator, databar, sparkline, image, barcode, subreport, line, rectangle, set, remove, space, move, swap, copy, field, column, remove_column, row, total, group, sort, widths, filter. A new item goes "after" or "before" an item or a role (role:signature), "in" a container or "at":[x, y] cm. Call help: ["textbox","set"] first: their words.

Input parameters:

- `baseVersion` (string|null): describe_report's version.
- `check` (boolean): Check after (default true).
- `detail` (string|null): "full": every item, the diff whole.
- `dryRun` (boolean): The diff, not the report.
- `edits`: Or exact replacements: [{find, replace, in?, all?}].
- `fit` (boolean): With keepPages: a block that costs rows is written in the form checked to keep them.
- `help`: Operations' names, or true.
- `keepPages` (boolean): Refuse a change that would print more pages, or at fewer table rows (variants, rowCounts too).
- `maxPages` (integer|null): Refuse a report printing more pages.
- `operations` (array|null): The operations, in order.
- `parameters` (object|null): Parameter values.
- `pictures` (object|null): Pictures an image names by its file: {"path": "<base64>"}.
- `rdlc` (string|null): The report's XML.
- `rewrite` (boolean): Write anew a report that cannot be patched.
- `rowCounts`: As validate_report's: {DataSet: "1..30"}.
- `sampleData`: Rows: {DataSet: [{Field: value}]}.
- `summary` (string|null): Said back.
- `variants`: As validate_report's; their pages said.

### `validate_report` (~549 tokens)

Validate a report

Checks a report definition (RDL or RDLC) or Markdown with SSRS2's engine (Report Viewer's rules): XML, schema, every expression compiled, then a run with rows through every page. Returns ok, a summary and diagnostics (code, severity, item, property, expression, line, message, hint); atRunTime counts what failed as it ran (#Error cells). Call it after each change until ok is true and atRunTime absent. Expressions are Visual Basic and may only compute (restrictedCode). Also layout, expect, variants, rowCounts and the report as it was (baselineRdlc): help: ["checks"].

Input parameters:

- `baselineRdlc` (string|null): The report as it was (its XML): only new warnings are said, with pages before.
- `culture` (string|null): The culture of a report that names no Language (en-US, de-CH); left out, en-US.
- `expect`: Rules: {"order": ["role:table", "Block?", "role:signature"]}, samePage, page, pages, maxPages, noOverlap. An item named and not printed fails its rule, unless written Name? (a variant may hide it).
- `help`: true, or topics (["markdown", "decks"]): the reference only.
- `layout`: true, or names and roles (role:signature): where each item printed, its page and place in cm.
- `madeUpRows`: "all": every made-up row in the answer, not a summary.
- `markdown` (string|null): Markdown's text: a document, or slides with marp: true. Give rdlc or markdown.
- `parameters` (object|null): Report parameter values by name (a multi-value one's separated by commas).
- `pictures` (object|null): The pictures the Markdown names, by its paths: {"images/chart.png": "<base64>"}; 5 MB each, 20 MB in all.
- `rdlc` (string|null): The report definition's XML (RDL or RDLC). Give rdlc or markdown.
- `render` (boolean): false: the definition only, no expression runs.
- `rowCounts`: {"Requests": "1..30"}: the pages of each count and the first that adds a page.
- `sampleData`: Rows per dataset: {"DataSet": [{"Field": value}]}, dates as ISO text. Left out, made up from the fields' types.
- `variants`: Renders again with rows changed: [{"name": "no deposit", "sampleData": {"Deposit": null}}].

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2#diagnostics

## Score history

- 2026-10-17: 65
- 2026-10-16: 64
- 2026-10-15: 64
- 2026-10-14: 63

## Common questions

### What is the SSRS2 MCP server?

SSRS2 is an MCP server listed in the public MCP registry as io.github.AntoineGou/ssrs2. Markdown to editable PowerPoint, Word, PDF; checks, edits and previews RDLC/RDL reports. This page covers its hosted endpoint (https://ssrs2.net/mcp).

### Is the SSRS2 MCP server safe to use?

SSRS2 scores 65 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the SSRS2 MCP server expose?

SSRS2 exposes 6 tools: convert_report, compare_reports, render_preview, describe_report, edit_report, validate_report. Their descriptions and schemas cost roughly 2,375 tokens of context every time the server is loaded.

### Does the SSRS2 MCP server require authentication?

No. We connected to SSRS2 without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the SSRS2 MCP server still maintained?

SSRS2 is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://ssrs2.net/mcp
- Repository: https://github.com/AntoineGou/SSRS2
- Website: https://ssrs2.net/documentation#agents
- Changelog RSS feed: https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2.xml
- Changelog JSON feed: https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2.json
- HTML version of this page: https://verifymcp.io/servers/antoinegou-ssrs2/ssrs2
