renovate-mcp 1.3.4 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- export declare const RENOVATE_VERSION = "43.259.2";
1
+ export declare const RENOVATE_VERSION = "43.270.1";
2
2
  /**
3
3
  * All manager names accepted by Renovate's `matchManagers` /
4
4
  * `excludeManagers` fields. Includes both regular managers and custom
@@ -1,6 +1,6 @@
1
- // AUTO-GENERATED by scripts/generate-managers.mjs from renovate@43.259.2.
1
+ // AUTO-GENERATED by scripts/generate-managers.mjs from renovate@43.270.1.
2
2
  // Do not edit by hand. Run `npm run generate:managers` to refresh.
3
- export const RENOVATE_VERSION = "43.259.2";
3
+ export const RENOVATE_VERSION = "43.270.1";
4
4
  /**
5
5
  * All manager names accepted by Renovate's `matchManagers` /
6
6
  * `excludeManagers` fields. Includes both regular managers and custom
@@ -1,4 +1,4 @@
1
- export declare const RENOVATE_VERSION = "43.259.2";
1
+ export declare const RENOVATE_VERSION = "43.270.1";
2
2
  export interface DeprecatedKeyEntry {
3
3
  /** Key as it appeared in old configs. */
4
4
  readonly oldKey: string;
@@ -1,6 +1,6 @@
1
- // AUTO-GENERATED by scripts/generate-migrations.mjs from renovate@43.259.2.
1
+ // AUTO-GENERATED by scripts/generate-migrations.mjs from renovate@43.270.1.
2
2
  // Do not edit by hand. Run `npm run generate:migrations` to refresh.
3
- export const RENOVATE_VERSION = "43.259.2";
3
+ export const RENOVATE_VERSION = "43.270.1";
4
4
  /**
5
5
  * Deprecated config keys with their current replacement. Sourced from
6
6
  * Renovate's `MigrationsService.renamedProperties` — the "RenamePropertyMigration"
@@ -3,6 +3,6 @@ export interface GeneratedPreset {
3
3
  description: string | null;
4
4
  body: Record<string, unknown>;
5
5
  }
6
- export declare const RENOVATE_VERSION = "43.259.2";
6
+ export declare const RENOVATE_VERSION = "43.270.1";
7
7
  export declare const PRESETS: Record<string, GeneratedPreset>;
8
8
  export declare const PRESET_NAMES: readonly string[];
@@ -1,6 +1,6 @@
1
- // AUTO-GENERATED by scripts/generate-presets.mjs from renovate@43.259.2.
1
+ // AUTO-GENERATED by scripts/generate-presets.mjs from renovate@43.270.1.
2
2
  // Do not edit by hand. Run `npm run generate:presets` to refresh.
3
- export const RENOVATE_VERSION = "43.259.2";
3
+ export const RENOVATE_VERSION = "43.270.1";
4
4
  export const PRESETS = {
5
5
  "abandonments:recommended": {
6
6
  "namespace": "abandonments",
@@ -4513,6 +4513,27 @@ export const PRESETS = {
4513
4513
  ]
4514
4514
  }
4515
4515
  },
4516
+ "group:error-prone-supportMonorepo": {
4517
+ "namespace": "group",
4518
+ "description": null,
4519
+ "body": {
4520
+ "packageRules": [
4521
+ {
4522
+ "description": "Group packages from error-prone-support monorepo together.",
4523
+ "extends": [
4524
+ "monorepo:error-prone-support"
4525
+ ],
4526
+ "groupName": "error-prone-support monorepo",
4527
+ "matchUpdateTypes": [
4528
+ "digest",
4529
+ "patch",
4530
+ "minor",
4531
+ "major"
4532
+ ]
4533
+ }
4534
+ ]
4535
+ }
4536
+ },
4516
4537
  "group:error-proneMonorepo": {
4517
4538
  "namespace": "group",
4518
4539
  "description": null,
@@ -7349,6 +7370,7 @@ export const PRESETS = {
7349
7370
  "group:enumeratumMonorepo",
7350
7371
  "group:envelopMonorepo",
7351
7372
  "group:error-proneMonorepo",
7373
+ "group:error-prone-supportMonorepo",
7352
7374
  "group:eslintMonorepo",
7353
7375
  "group:eslint-config-globexMonorepo",
7354
7376
  "group:eslint-stylisticMonorepo",
@@ -7559,10 +7581,12 @@ export const PRESETS = {
7559
7581
  "group:serenity-jsMonorepo",
7560
7582
  "group:serilog-uiMonorepo",
7561
7583
  "group:servicestackMonorepo",
7584
+ "group:serwistMonorepo",
7562
7585
  "group:shedlockMonorepo",
7563
7586
  "group:shikiMonorepo",
7564
7587
  "group:shopify-app-bridgeMonorepo",
7565
7588
  "group:sitecore-jssMonorepo",
7589
+ "group:size-limitMonorepo",
7566
7590
  "group:skiasharpMonorepo",
7567
7591
  "group:slack-netMonorepo",
7568
7592
  "group:slf4jMonorepo",
@@ -10379,6 +10403,27 @@ export const PRESETS = {
10379
10403
  ]
10380
10404
  }
10381
10405
  },
10406
+ "group:serwistMonorepo": {
10407
+ "namespace": "group",
10408
+ "description": null,
10409
+ "body": {
10410
+ "packageRules": [
10411
+ {
10412
+ "description": "Group packages from serwist monorepo together.",
10413
+ "extends": [
10414
+ "monorepo:serwist"
10415
+ ],
10416
+ "groupName": "serwist monorepo",
10417
+ "matchUpdateTypes": [
10418
+ "digest",
10419
+ "patch",
10420
+ "minor",
10421
+ "major"
10422
+ ]
10423
+ }
10424
+ ]
10425
+ }
10426
+ },
10382
10427
  "group:shedlockMonorepo": {
10383
10428
  "namespace": "group",
10384
10429
  "description": null,
@@ -10463,6 +10508,27 @@ export const PRESETS = {
10463
10508
  ]
10464
10509
  }
10465
10510
  },
10511
+ "group:size-limitMonorepo": {
10512
+ "namespace": "group",
10513
+ "description": null,
10514
+ "body": {
10515
+ "packageRules": [
10516
+ {
10517
+ "description": "Group packages from size-limit monorepo together.",
10518
+ "extends": [
10519
+ "monorepo:size-limit"
10520
+ ],
10521
+ "groupName": "size-limit monorepo",
10522
+ "matchUpdateTypes": [
10523
+ "digest",
10524
+ "patch",
10525
+ "minor",
10526
+ "major"
10527
+ ]
10528
+ }
10529
+ ]
10530
+ }
10531
+ },
10466
10532
  "group:skiasharpMonorepo": {
10467
10533
  "namespace": "group",
10468
10534
  "description": null,
@@ -14560,6 +14626,15 @@ export const PRESETS = {
14560
14626
  ]
14561
14627
  }
14562
14628
  },
14629
+ "monorepo:error-prone-support": {
14630
+ "namespace": "monorepo",
14631
+ "description": "error-prone-support monorepo",
14632
+ "body": {
14633
+ "matchSourceUrls": [
14634
+ "https://github.com/PicnicSupermarket/error-prone-support"
14635
+ ]
14636
+ }
14637
+ },
14563
14638
  "monorepo:eslint": {
14564
14639
  "namespace": "monorepo",
14565
14640
  "description": "eslint monorepo",
@@ -16640,6 +16715,15 @@ export const PRESETS = {
16640
16715
  ]
16641
16716
  }
16642
16717
  },
16718
+ "monorepo:serwist": {
16719
+ "namespace": "monorepo",
16720
+ "description": "serwist monorepo",
16721
+ "body": {
16722
+ "matchSourceUrls": [
16723
+ "https://github.com/serwist/serwist"
16724
+ ]
16725
+ }
16726
+ },
16643
16727
  "monorepo:shedlock": {
16644
16728
  "namespace": "monorepo",
16645
16729
  "description": "shedlock monorepo",
@@ -16676,6 +16760,15 @@ export const PRESETS = {
16676
16760
  ]
16677
16761
  }
16678
16762
  },
16763
+ "monorepo:size-limit": {
16764
+ "namespace": "monorepo",
16765
+ "description": "size-limit monorepo",
16766
+ "body": {
16767
+ "matchSourceUrls": [
16768
+ "https://github.com/ai/size-limit"
16769
+ ]
16770
+ }
16771
+ },
16679
16772
  "monorepo:skiasharp": {
16680
16773
  "namespace": "monorepo",
16681
16774
  "description": "skiasharp monorepo",
@@ -20662,6 +20755,44 @@ export const PRESETS = {
20662
20755
  ],
20663
20756
  "versioning": "regex:^(?<major>\\d+)?(\\.(?<minor>\\d+))?(\\.(?<patch>\\d+))?([\\._+](?<build>(\\d\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$"
20664
20757
  },
20758
+ {
20759
+ "description": "Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).",
20760
+ "matchCurrentValue": "/^\\d+(-|$)/",
20761
+ "matchDatasources": [
20762
+ "docker"
20763
+ ],
20764
+ "matchPackageNames": [
20765
+ "eclipse-temurin",
20766
+ "amazoncorretto",
20767
+ "adoptopenjdk",
20768
+ "openjdk",
20769
+ "java",
20770
+ "java-jdk",
20771
+ "java-jre",
20772
+ "sapmachine",
20773
+ "/^azul/zulu-openjdk/",
20774
+ "/^bellsoft/liberica-openj(dk|re)-/",
20775
+ "/^cimg/openjdk/"
20776
+ ],
20777
+ "versioning": "docker"
20778
+ },
20779
+ {
20780
+ "description": "Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).",
20781
+ "matchCurrentValue": "/^\\d+(-|$)/",
20782
+ "matchDatasources": [
20783
+ "docker"
20784
+ ],
20785
+ "matchDepNames": [
20786
+ "eclipse-temurin",
20787
+ "amazoncorretto",
20788
+ "adoptopenjdk",
20789
+ "openjdk",
20790
+ "java",
20791
+ "java-jre",
20792
+ "sapmachine"
20793
+ ],
20794
+ "versioning": "docker"
20795
+ },
20665
20796
  {
20666
20797
  "allowedVersions": "/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\.|-|$)/",
20667
20798
  "description": "Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.",
@@ -9,6 +9,8 @@ export declare const CONFIG_JSON_MAX_BYTES = 1000000;
9
9
  export declare const REPORT_JSON_MAX_BYTES = 10000000;
10
10
  export declare const HOST_RULES_MAX_ITEMS = 256;
11
11
  export declare const HOST_RULE_JSON_MAX_BYTES = 64000;
12
+ export declare const BASE_BRANCHES_MAX_ITEMS = 50;
13
+ export declare const BRANCH_NAME_MAX_BYTES = 256;
12
14
  export declare const pathString: (description: string) => z.ZodString;
13
15
  export declare const tokenString: (description: string) => z.ZodString;
14
16
  export declare const endpointString: (description: string) => z.ZodString;
@@ -14,6 +14,8 @@ export const CONFIG_JSON_MAX_BYTES = 1_000_000;
14
14
  export const REPORT_JSON_MAX_BYTES = 10_000_000;
15
15
  export const HOST_RULES_MAX_ITEMS = 256;
16
16
  export const HOST_RULE_JSON_MAX_BYTES = 64_000;
17
+ export const BASE_BRANCHES_MAX_ITEMS = 50;
18
+ export const BRANCH_NAME_MAX_BYTES = 256;
17
19
  export const pathString = (description) => z.string().max(PATH_MAX_BYTES).describe(description);
18
20
  export const tokenString = (description) => z.string().max(TOKEN_MAX_BYTES).describe(description);
19
21
  export const endpointString = (description) => z.string().max(ENDPOINT_MAX_BYTES).describe(description);
@@ -1,4 +1,4 @@
1
- export declare const SERVER_VERSION = "1.3.4";
1
+ export declare const SERVER_VERSION = "1.4.1";
2
2
  export type BuildMode = "local" | "released";
3
3
  export interface VersionInfo {
4
4
  version: string;
@@ -1,5 +1,5 @@
1
1
  import { fileURLToPath } from "node:url";
2
- export const SERVER_VERSION = "1.3.4"; // x-release-please-version
2
+ export const SERVER_VERSION = "1.4.1"; // x-release-please-version
3
3
  // "released" = the server is running from a `node_modules/` install (global
4
4
  // `npm i -g`, project-local `npm i`, or `npx renovate-mcp`). Anything else —
5
5
  // most commonly an MCP config of `{"command": "node", "args": [".../dist/index.js"]}`
@@ -11,7 +11,7 @@ import { detectLookupProblems } from "../lib/lookupProblems.js";
11
11
  import { collectSecrets, scrubSecrets, writeHostRulesConfig, } from "../lib/hostRulesConfig.js";
12
12
  import { extractRenovateLogMsg, buildDryRunHeartbeatMessage, } from "../lib/dryRunProgress.js";
13
13
  import { classifyReportProblem } from "../lib/runtimeWarnings.js";
14
- import { HOST_RULES_MAX_ITEMS, endpointString, hostRuleRecord, pathString, repositoryString, tokenString, } from "../lib/inputLimits.js";
14
+ import { BASE_BRANCHES_MAX_ITEMS, BRANCH_NAME_MAX_BYTES, HOST_RULES_MAX_ITEMS, endpointString, hostRuleRecord, pathString, repositoryString, tokenString, } from "../lib/inputLimits.js";
15
15
  /**
16
16
  * Verbatim advisory warning emitted by `dry_run` when an inline secret is
17
17
  * detected on the tool input (the top-level `token` parameter or any non-empty
@@ -152,7 +152,7 @@ function countUpdates(report) {
152
152
  export function registerDryRun(server) {
153
153
  server.registerTool("dry_run", {
154
154
  title: "Dry-run Renovate",
155
- description: "Run Renovate in dry-run mode to preview what it would do — no PRs opened, no git pushes. Returns a structured JSON report plus a top-level `ok` boolean (false when the CLI failed OR the report records a validation/error-level problem, even if the exit code was 0). RE2 native-module fallback noise and Renovate's `Unsupported node environment` notice are filtered out of `reportErrors` — the former flows into `warnings` (still actionable, still surfaced), the latter into a separate `environmentWarnings[]` since the run still produced a usable report.\n\nEffective platform = `platform` input → `RENOVATE_PLATFORM` env → `local`. The `platformSource` field on the result echoes which step won; preflight errors and the env-overrides-default advisory both reference it so callers don't have to read the source to find where a surprising `gitlab`/`github` came from.\n\nThe full structured report ships inline by default. For large repos that is bigger than most MCP clients' response-content cap (≈75 KB on Claude Desktop) and the middle of the JSON is silently truncated. Pass `reportOutputPath` to redirect the structured report to a file (mode 0600), in which case `summary.report` collapses to `{ reportPath, repoCount, updateCount }` and `dry_run_diff` can pick it up via `{ reportPath: … }`. Pair with `summaryOnly: true` to also strip per-repo upgrade arrays from the inline payload when you only need the path + counts. `warnings`, `problems`, `reportErrors`, and `environmentWarnings` always stay inline regardless of these flags — those are the actionable bits.\n\n**Auth — prefer env vars.** Set `RENOVATE_TOKEN` (or `GITHUB_TOKEN` / `GITLAB_TOKEN`, auto-translated to `RENOVATE_TOKEN` for the spawned Renovate CLI) on the MCP server's env via `claude_desktop_config.json` / `.mcp.json`. This matches the precedence `resolve_config` uses, so a single `GITLAB_TOKEN` in `.mcp.json` works for both tools. The `token` input is retained as an ad-hoc / testing fallback — when supplied inline it is persisted in the MCP tool transcript that the client may share, replay, or feed back into the LLM, so an advisory entry is appended to the result `warnings` array steering callers toward env-var auth. For a remote-platform run, an actionable preflight error is returned before spawning Renovate when no token can be resolved at all.\n\nDefault mode runs `--platform=local` against the filesystem at `repoPath`. If your config extends `local>…` presets, pass `platform` (`github` or `gitlab`), `endpoint` (API base URL), `token`, and `repository` to run as a real platform client that can actually fetch those presets — Renovate still runs with `--dry-run`, so no PRs are opened. If you only need `gitlab>…` / `github>…` presets resolved against a self-hosted host (not a full remote run), pass just `endpoint` (and `token` if needed) while leaving `platform` unset — both flow through to Renovate in local mode too, which is enough to redirect those preset shortcuts away from the public defaults. The tool preflight-checks for `local>` presets under `--platform=local` (in `lookup` and `full` modes) and fails fast with remediation guidance rather than spawning a Renovate run that would fail opaquely with `config-validation`. The preflight is skipped for `dryRunMode=extract` so manifest-only extraction can be attempted regardless.\n\nCredentials for private registries (e.g. `COMPOSER_AUTH` for Packagist/Satis proxies, `NPM_TOKEN` / `.npmrc` for npm, Docker registry creds, `RENOVATE_HOST_RULES` for anything else) must be set on the MCP server process itself — via the `env` key in `claude_desktop_config.json` / `.mcp.json`, not your shell, since the MCP server runs as a child of Claude and does not inherit shell env. Alternatively, encode credentials as `hostRules` in the Renovate config, or pass them per-call via the `hostRules` input on this tool (written to a mode-0600 temp file that is cleaned up after the run; token/password values — including the platform `token` input — are scrubbed from `logTail` and `problems`). Per-call `hostRules` are appended to any the repo's own config already declares. If a lookup can't auth to a registry, Renovate often reports 0 updates without a loud error; when that happens this tool surfaces detected auth failures under `problems` in the output so callers can distinguish a genuine \"no updates\" from a silent registry-auth failure.",
155
+ description: "Run Renovate in dry-run mode to preview what it would do — no PRs opened, no git pushes. Returns a structured JSON report plus a top-level `ok` boolean (false when the CLI failed OR the report records a validation/error-level problem, even if the exit code was 0). RE2 native-module fallback noise and Renovate's `Unsupported node environment` notice are filtered out of `reportErrors` — the former flows into `warnings` (still actionable, still surfaced), the latter into a separate `environmentWarnings[]` since the run still produced a usable report.\n\nEffective platform = `platform` input → `RENOVATE_PLATFORM` env → `local`. The `platformSource` field on the result echoes which step won; preflight errors and the env-overrides-default advisory both reference it so callers don't have to read the source to find where a surprising `gitlab`/`github` came from.\n\nThe full structured report ships inline by default. For large repos that is bigger than most MCP clients' response-content cap (≈75 KB on Claude Desktop) and the middle of the JSON is silently truncated. Pass `reportOutputPath` to redirect the structured report to a file (mode 0600), in which case `summary.report` collapses to `{ reportPath, repoCount, updateCount }` and `dry_run_diff` can pick it up via `{ reportPath: … }`. Pair with `summaryOnly: true` to also strip per-repo upgrade arrays from the inline payload when you only need the path + counts. `warnings`, `problems`, `reportErrors`, and `environmentWarnings` always stay inline regardless of these flags — those are the actionable bits.\n\n**Custom base branches.** By default Renovate evaluates the repository's default branch. Pass `baseBranches` to evaluate other branches instead — this is how you dry-run a Renovate config change that lives on a feature branch before merging it. Entries are exact branch names; regex requires `/…/` wrapping (e.g. `/^renovate\\/.+/`, negate with `!/…/`) — bare `^foo` is matched literally, not as regex. `$default` expands to the default branch. With `readConfigFromBaseBranch` (default true) Renovate also reads its config FROM those branches (`useBaseBranchConfig=merge`), so the branch's edited config is what gets evaluated; set it false to scan the branches' manifests using the default branch's config. Base-branch selection only applies to remote-platform runs (`platform: 'github'`/`'gitlab'`) — it is ignored (with a warning) under `platform=local`.\n\n**Auth — prefer env vars.** Set `RENOVATE_TOKEN` (or `GITHUB_TOKEN` / `GITLAB_TOKEN`, auto-translated to `RENOVATE_TOKEN` for the spawned Renovate CLI) on the MCP server's env via `claude_desktop_config.json` / `.mcp.json`. This matches the precedence `resolve_config` uses, so a single `GITLAB_TOKEN` in `.mcp.json` works for both tools. The `token` input is retained as an ad-hoc / testing fallback — when supplied inline it is persisted in the MCP tool transcript that the client may share, replay, or feed back into the LLM, so an advisory entry is appended to the result `warnings` array steering callers toward env-var auth. For a remote-platform run, an actionable preflight error is returned before spawning Renovate when no token can be resolved at all.\n\nDefault mode runs `--platform=local` against the filesystem at `repoPath`. If your config extends `local>…` presets, pass `platform` (`github` or `gitlab`), `endpoint` (API base URL), `token`, and `repository` to run as a real platform client that can actually fetch those presets — Renovate still runs with `--dry-run`, so no PRs are opened. If you only need `gitlab>…` / `github>…` presets resolved against a self-hosted host (not a full remote run), pass just `endpoint` (and `token` if needed) while leaving `platform` unset — both flow through to Renovate in local mode too, which is enough to redirect those preset shortcuts away from the public defaults. The tool preflight-checks for `local>` presets under `--platform=local` (in `lookup` and `full` modes) and fails fast with remediation guidance rather than spawning a Renovate run that would fail opaquely with `config-validation`. The preflight is skipped for `dryRunMode=extract` so manifest-only extraction can be attempted regardless.\n\nCredentials for private registries (e.g. `COMPOSER_AUTH` for Packagist/Satis proxies, `NPM_TOKEN` / `.npmrc` for npm, Docker registry creds, `RENOVATE_HOST_RULES` for anything else) must be set on the MCP server process itself — via the `env` key in `claude_desktop_config.json` / `.mcp.json`, not your shell, since the MCP server runs as a child of Claude and does not inherit shell env. Alternatively, encode credentials as `hostRules` in the Renovate config, or pass them per-call via the `hostRules` input on this tool (written to a mode-0600 temp file that is cleaned up after the run; token/password values — including the platform `token` input — are scrubbed from `logTail` and `problems`). Per-call `hostRules` are appended to any the repo's own config already declares. If a lookup can't auth to a registry, Renovate often reports 0 updates without a loud error; when that happens this tool surfaces detected auth failures under `problems` in the output so callers can distinguish a genuine \"no updates\" from a silent registry-auth failure.",
156
156
  inputSchema: {
157
157
  repoPath: pathString("Absolute path to the repository root. Required for the default `platform=local` mode. When `platform` is overridden (e.g. `gitlab` / `github`), Renovate runs against the remote `repository` instead — `repoPath` is still used as the child's working directory but its manifest files are ignored."),
158
158
  dryRunMode: z
@@ -184,8 +184,17 @@ export function registerDryRun(server) {
184
184
  .boolean()
185
185
  .optional()
186
186
  .describe("Only meaningful in combination with `reportOutputPath`. When true, also strips per-repo `branches[]`/`packageFiles` arrays from the inline summary so the response is purely the path + counts + actionable lists. No effect when `reportOutputPath` is unset."),
187
+ baseBranches: z
188
+ .array(z.string().min(1).max(BRANCH_NAME_MAX_BYTES))
189
+ .max(BASE_BRANCHES_MAX_ITEMS)
190
+ .optional()
191
+ .describe("One or more base branches to evaluate instead of the repository's default branch (Renovate's `baseBranchPatterns`). Each entry is an EXACT branch name unless it is wrapped in slashes: only `/…/`-delimited entries are treated as regex (optionally `!/…/` to negate) — a bare `^release/.*` is matched literally as a branch named `^release/.*` and will never match. The magic value `$default` expands to the repository's default branch. This is what lets you dry-run a Renovate config change that lives on a non-default branch (e.g. a feature branch) before it is merged. Maps to the `RENOVATE_BASE_BRANCH_PATTERNS` env var — `baseBranchPatterns` is not a CLI flag. Only applies to remote-platform runs (`platform: 'github'`/`'gitlab'`); ignored under `platform=local`, which always inspects the working tree at `repoPath`. See also `readConfigFromBaseBranch`."),
192
+ readConfigFromBaseBranch: z
193
+ .boolean()
194
+ .optional()
195
+ .describe("Only meaningful together with `baseBranches`. When true (default), Renovate reads its config (renovate.json/.json5) FROM each base branch — `useBaseBranchConfig=merge` — so a config edit that only exists on that branch is actually evaluated. Set false to scan the base branches' manifests while still using the default branch's config."),
187
196
  },
188
- }, async ({ repoPath, dryRunMode, logLevel, timeoutMs, platform, endpoint, token, repository, hostRules, reportOutputPath, summaryOnly, }, extra) => {
197
+ }, async ({ repoPath, dryRunMode, logLevel, timeoutMs, platform, endpoint, token, repository, hostRules, reportOutputPath, summaryOnly, baseBranches, readConfigFromBaseBranch, }, extra) => {
189
198
  if (endpoint !== undefined) {
190
199
  try {
191
200
  validateEndpoint(endpoint);
@@ -376,6 +385,36 @@ export function registerDryRun(server) {
376
385
  // and passing it crashes the CLI with "unknown option".
377
386
  childEnv.RENOVATE_CONFIG_FILE = hostRulesConfigPath;
378
387
  }
388
+ // Base-branch selection. `baseBranchPatterns` (the option formerly
389
+ // known as `baseBranches`) is `cli:false` in Renovate, so it can only
390
+ // be supplied via env, not a flag. Renovate coerces the array option
391
+ // from a JSON5/JSON string (falling back to comma-split), so a JSON
392
+ // array is the unambiguous encoding even for branch names with commas.
393
+ // Base branches are a remote concept — under `--platform=local`
394
+ // Renovate inspects the working tree at `repoPath` and never resolves
395
+ // branches, so the input would silently do nothing; warn instead.
396
+ if (baseBranches !== undefined) {
397
+ if (baseBranches.length === 0) {
398
+ mcpWarnings.push("`baseBranches` was ignored: an empty array has no effect. Pass at least one exact branch name or a `/…/`-wrapped regex pattern.");
399
+ }
400
+ else if (isRemotePlatform) {
401
+ childEnv.RENOVATE_BASE_BRANCH_PATTERNS = JSON.stringify(baseBranches);
402
+ // Patterns alone only change WHICH branches are scanned for
403
+ // manifests; Renovate still reads its config from the default
404
+ // branch unless `useBaseBranchConfig=merge`. Enable it by default
405
+ // so a config change living on a non-default branch is actually
406
+ // evaluated — the headline use case for this input.
407
+ if (readConfigFromBaseBranch ?? true) {
408
+ childEnv.RENOVATE_USE_BASE_BRANCH_CONFIG = "merge";
409
+ }
410
+ }
411
+ else {
412
+ mcpWarnings.push("`baseBranches` was ignored: base-branch selection requires a remote-platform run (`platform: 'github'` / `'gitlab'`). Under `platform=local` Renovate only inspects the working tree at `repoPath`.");
413
+ }
414
+ }
415
+ else if (readConfigFromBaseBranch !== undefined) {
416
+ mcpWarnings.push("`readConfigFromBaseBranch` was ignored: it only has an effect together with `baseBranches`.");
417
+ }
379
418
  if (progressEnabled) {
380
419
  emit(`Starting Renovate dry-run (${dryRunMode})`);
381
420
  heartbeat = setInterval(() => emit(buildDryRunHeartbeatMessage(Date.now() - startedAt, lastLogMsg)), HEARTBEAT_MS);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "renovate-mcp",
3
- "version": "1.3.4",
3
+ "version": "1.4.1",
4
4
  "description": "MCP server for designing Renovate configurations interactively.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -64,7 +64,7 @@
64
64
  "json5": "^2.2.3",
65
65
  "jsonata": "2.2.1",
66
66
  "jsonc-parser": "^3.3.1",
67
- "renovate": "^43.259.2",
67
+ "renovate": "^43.270.1",
68
68
  "smol-toml": "^1.6.1",
69
69
  "yaml": "^2.9.0",
70
70
  "zod": "^4.0.0"