← Back to search

renovate-mcp

GitHub Actions Scanned 29d ago

MCP server for designing Renovate configurations interactively.

C
67.7 / 100

Versions

1.4.3latest
Jul 28, 2026
1.4.2
Jul 26, 2026
1.4.1
Jul 19, 2026
1.4.0
Jul 16, 2026
1.3.4
Jul 13, 2026
+ show 27 moreshow less
1.3.2
Jul 8, 2026
1.3.1
Jul 5, 2026
1.3.0
Jun 28, 2026
1.2.0
Jun 26, 2026
1.1.1
Jun 21, 2026
1.1.0
Jun 20, 2026
1.0.4
Jun 14, 2026
1.0.3
Jun 11, 2026
1.0.2
Jun 7, 2026
1.0.1
May 31, 2026
1.0.0
May 30, 2026
0.13.0
May 25, 2026
0.12.1
May 25, 2026
0.12.0
May 25, 2026
0.11.0
May 10, 2026
0.10.0
May 5, 2026
0.9.4
May 1, 2026
0.9.3
Apr 27, 2026
0.9.2
Apr 26, 2026
0.8.0
Apr 25, 2026
0.7.0
Apr 25, 2026
0.6.0
Apr 24, 2026
0.5.0
Apr 24, 2026
0.4.0
Apr 24, 2026
0.3.0
Apr 23, 2026
0.2.0
Apr 23, 2026
0.1.0
Apr 23, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 16

migrate_config
annotations: none low

Apply Renovate's built-in config migrations (deprecated key renames, template-variable rewrites, packageRules consolidation, host-rules unification, etc.) to a config and return the migrated result. Pass either configPath (file on disk, JSON or JSON5) or configContent (inline JSON object). Returns { isMigrated, migrated, diff }. Does not write — chain with write_config to persist. First call has higher latency than other tools (Renovate's migration library cold-loads in a worker thread).

resolve_config
annotations: none low

Expand every preset referenced by `extends` and return the fully resolved config. Built-in presets resolve offline against the committed catalogue. Pass `externalPresets: true` to fetch `github>` and `gitlab>` presets over HTTPS (with optional `RENOVATE_TOKEN` — or `GITHUB_TOKEN` / `GITLAB_TOKEN` as platform-specific fallbacks — for private repos). For GitHub Enterprise or self-hosted GitLab, pass `endpoint` (API base URL, e.g. `https://ghe.example.com/api/v3` or `https://gitlab.example.com/api/v4`); pass `platform` in addition to route `local>` presets through the same endpoint. `bitbucket>`, `gitea>`, and npm presets are structurally unsupported and remain in `presetsUnresolved` regardless. Endpoint and platform are **tool inputs only** — env vars like `RENOVATE_ENDPOINT` are not read, since the MCP server runs under Claude rather than in your shell. Pass either `repoPath` (reads the repo's config) or `configContent` (an inline config object). The response includes `mergeQuality` (`\"faithful\"` — presets are merged with Renovate's own mergeChildConfig in a worker thread; `\"preview\"` only if that worker was unavailable and a simplified in-process merge was used) plus a `disclaimer` and a `warnings` array. Handlebars expressions other than `{{argN}}` are left verbatim; run `dry_run` for full config resolution.

resolve_config_diff
annotations: none low

Compute a structural diff between two *fully-resolved* Renovate configs — the `before` and `after` of a config refactor — entirely offline. This is the resolve-level counterpart to `dry_run_diff`: where `dry_run_diff` shows how the *proposed PRs* change (and collapses to a vacuous 0-vs-0 when the environment can't reach registries), this answers \"does the new config produce the same effective settings as the old one, modulo the intended changes?\". Each side accepts `repoPath` (locates the repo's config) OR `configContent` (an inline config object); both sides are resolved with `resolve_config`'s preset expansion + faithful merge. Non-array top-level keys are deep-compared and reported with before/after values; array-valued top-level keys (`packageRules`, `customManagers`, `matchManagers`, …) get an order-insensitive set diff (members only in `before` are `removed`, only in `after` are `added` — a tweaked rule shows as one of each). Shared `externalPresets` / `endpoint` / `platform` knobs apply to both sides. Returns a structured diff (`summary`, `fieldChanges`, `arrayChanges`) plus a human-readable `text` rendering and per-side `resolution` metadata (`mergeQuality`, `presetsUnresolved`, `warnings`).

write_config
annotations: none low

Write a Renovate config to disk. Runs renovate-config-validator first — refuses to write if validation fails unless force=true (which additionally requires confirmForce).

read_config
annotations: none low

Locate and parse the Renovate configuration in a repository. Searches for renovate.json, renovate.json5, .renovaterc(.json|.json5), .github/renovate.json, .gitlab/renovate.json, and the 'renovate' field of package.json — in that priority order.

lint_config
annotations: none low

Run a semantic lint pass over a Renovate config. Complements validate_config: schema validation catches structural bugs, this catches Renovate-specific footguns schema validation misses — malformed '/…/' regex patterns in fields like matchPackageNames, matchDepNames, matchSourceUrls, matchCurrentVersion, plus unknown manager names in matchManagers / excludeManagers (typos that Renovate silently ignores). Each finding includes a severity ('error' | 'warn'). Offline; does not shell out. Pass either configPath (file on disk, JSON or JSON5) or configContent (inline object).

explain_config
annotations: none low

Inverse of resolve_config: walk the same preset tree, but annotate every leaf field with the chain of presets that touched it. Each leaf in `explanation` carries `{ value, setBy }` where `setBy` lists every contribution in merge order — last entry wins for scalars and overwritten (non-mergeable) arrays; for mergeable arrays each entry adds its own slice. The `<own>` source means the value came from the user's input config (siblings of `extends`); other sources are preset references as written in `extends`. Use this to trace surprises like \"why is `prCreation` set to 'not-pending'?\". Pure analysis: same offline-by-default behaviour as resolve_config, plus the same `externalPresets` / `endpoint` / `platform` opt-ins. Pass `repoPath` (reads the repo's config) or `configContent` (an inline config). For full-fidelity output, run dry_run instead.

dry_run
annotations: none low

check_setup
annotations: none low

Report whether the Renovate CLI and config validator are reachable, their versions, and any env overrides in effect. Pass an optional `repoPath` to also diagnose the target repo's environment: parses the `.git/config` origin remote, reads any `endpoint`/`platform` in the repo's renovate config, probes endpoint reachability (using the same `https://`-only public-host allowlist as `dry_run`), and cross-references all three with token presence — surfaces actionable hints like 'set GITHUB_TOKEN before running dry_run'. The probe sends no credentials. Call this first when other tools fail with a spawn error or unexpected validation output.

suggest_presets
annotations: none low

validate_config
annotations: none low

Validate a Renovate configuration against the official schema using renovate-config-validator. Pass either configPath (file on disk) or configContent (inline JSON object). Returns validation output and a boolean `valid`.

dry_run_diff
annotations: none low

Compute a semantic diff between two `dry_run` reports — the proposed updates that were added, removed, or changed. Stateless: pass both reports as inputs. Each side accepts either the inline report (raw `{ repositories }` or a full `dry_run` summary with a `report` key) or `{ reportPath: \"<absolute path>\" }` pointing at a file produced by `dry_run`'s `reportOutputPath`. Mix and match freely. Updates are keyed by `(manager, packageFile, depName)`, so a version bump on the same dep shows up under `changed` rather than as `removed + added`. Compared fields per identity: `newValue`, `newVersion`, `updateType`, `branchName`, `groupName`, `schedule`. Returns a structured summary object plus a compact human-readable text rendering.

get_version
annotations: none low

Report the renovate-mcp server version and whether it's a released build (running from node_modules) or a local/dev build (typically launched via `command: node` against a checkout). Useful when the user asks which version is wired up.

test_package_rules
annotations: none low

Offline \"what-if\": given a hypothetical dependency context and a config, report which `packageRules` match (in order), which matcher decided each, and what each matched rule contributes. Answers \"why didn't my rule match?\". Rules are evaluated with Renovate's REAL matchers in a worker thread (faithful), classified against the fields you actually supplied — a matcher that needs a field you didn't pass is reported as `unevaluatable`, never silently treated as a non-match. Matchers needing post-lookup data (matchUpdateTypes, matchCurrentVersion, matchNewValue, matchCurrentAge) or the merge-confidence API (matchConfidence) are unevaluatable offline; matchJsonata is advisory. Pass either `repoPath` (reads + expands the repo's config) or `configContent` (an inline config); `externalPresets`/`endpoint`/`platform` opt into external preset expansion so `extends`-provided rules are included (same semantics as resolve_config). Deprecated matcher keys (matchPackagePatterns, …) are warned about — run migrate_config first. Run dry_run for full-fidelity confirmation.

preview_custom_manager
annotations: none low

annotate_dry_run
annotations: none low

Given a `dry_run` report and a config, attribute EACH proposed update to the `packageRules` that matched it — answering \"which of my rules produced these updates?\". Stateless and offline: run `dry_run` first, then pass its report here (inline `report` or `reportPath`, same shapes as `dry_run_diff`) plus a config source (`repoPath` or `configContent`). Each update is matched with Renovate's REAL matchers in a worker thread against the facts present in the report; fields the report doesn't carry (e.g. datasource, depType) are reported under each update's `unevaluatable` and aggregated in `fieldGaps` rather than silently treated as non-matches. `rulesNeverMatched` flags likely-dead rules. Deprecated matcher keys are warned about — run migrate_config first. Run dry_run for full-fidelity confirmation.

Permissions 4

network medium
Server uses network capabilities via: fetch()
filesystem low
Server uses filesystem capabilities via: fs, fs sync ops, path
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 45

low
Tool 'migrate_config' has no annotations annotation_checker · 100%
low
Tool 'resolve_config' has no annotations annotation_checker · 100%
low
Tool 'resolve_config_diff' has no annotations annotation_checker · 100%
low
Tool 'write_config' has no annotations annotation_checker · 100%
low
Tool 'read_config' has no annotations annotation_checker · 100%
low
Tool 'lint_config' has no annotations annotation_checker · 100%
low
Tool 'explain_config' has no annotations annotation_checker · 100%
low
Tool 'dry_run' has no annotations annotation_checker · 100%
low
Tool 'check_setup' has no annotations annotation_checker · 100%
low
Tool 'suggest_presets' has no annotations annotation_checker · 100%
low
Tool 'validate_config' has no annotations annotation_checker · 100%
low
Tool 'dry_run_diff' has no annotations annotation_checker · 100%
low
Tool 'get_version' has no annotations annotation_checker · 100%
low
Tool 'test_package_rules' has no annotations annotation_checker · 100%
low
Tool 'preview_custom_manager' has no annotations annotation_checker · 100%
low
Tool 'annotate_dry_run' has no annotations annotation_checker · 100%
medium
OAuth implementation without PKCE auth_checker · 75%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: migrate_config manifest_parser · 85%
info
Tool: resolve_config manifest_parser · 85%
info
Tool: resolve_config_diff manifest_parser · 85%
info
Tool: write_config manifest_parser · 85%
info
Tool: read_config manifest_parser · 85%
info
Tool: lint_config manifest_parser · 85%
info
Tool: explain_config manifest_parser · 85%
info
Tool: dry_run manifest_parser · 85%
info
Tool: check_setup manifest_parser · 85%
info
Tool: suggest_presets manifest_parser · 85%
info
Tool: validate_config manifest_parser · 85%
info
Tool: dry_run_diff manifest_parser · 85%
info
Tool: get_version manifest_parser · 85%
info
Tool: test_package_rules manifest_parser · 85%
info
Tool: preview_custom_manager manifest_parser · 85%
info
Tool: annotate_dry_run manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (17) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'migrate_config': Cross-tool prerequisite: 'first call/use' poisoning · 85%
info
SBOM generated: 728 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%