✨ Features
- Service pages now say which actions a connection cannot run.
- The OAuth scope field now shows the whole set, not just your additions.
- The permission warning moved to the moment it matters.
- Admins can now see which connected users hold an out-of-date OAuth grant.
- Saving a service now warns when its actions need OAuth permissions the installation does not request.
- Extra OAuth scopes are now the operator's to configure.
- Actions now record the OAuth scopes they need.
🔧 Improvements
- Service definitions are read once per test process instead of repeatedly.
- An automatically filed bug report now says when it is one of several from the same failure.
- Test collection no longer waits on a Redis that is not there.
- Test collection parses service definitions with the fast YAML reader.
- Test runs report how much parallel capacity they were given.
- Release numbering no longer needs a hand-picked version.
- Merge validation checks the specifications this repository ships.
- Admin pages are verified to parse in a browser before release.
- The OpenAPI import checks parse their catalogue once instead of four times.
- The dependency audit runs when dependencies change, and nightly.
- Page-output verification runs alongside the rest of the suite again.
- The permission-surface checks build their catalogue once instead of per assertion.
- Page-output verification runs when a page can have changed, not on every commit.
- Test runs report the machine they got at both ends, not just the start.
- Startup stops resolving a Redis hostname it cannot reach.
- Startup no longer waits out a full retry budget it has already spent.
- Continuous-integration runs record the CPU they were given.
- Page-level verification reaches the parameterised admin pages.
- The admin surface begins splitting into per-section modules.
- The log viewer inherits the shared admin layout.
- Admin page output is pinned at the HTTP-response level.
- Setup page rendering is pinned against silent drift.
🐛 Fixes
- Configuration saves inside one container stay strictly ordered.
- Switching read-only mode now tells you whether it actually took effect everywhere.
- Importing a spec through the admin interface now routes each API family correctly.
- Log searches survive more regular-expression shapes, and a self-healing change parked for review is now reported.
- A parameter alias can no longer shadow another parameter.
- A guessed action name can no longer run a different operation.
- The service configuration page recovers its interactive controls.
- An expired connection is reported as a reconnect prompt, not as a gateway fault.
- Credential and permission fields are no longer spell-checked.
- Signing in with Google works again on every entry point.
- Saved-question and dashboard reads keep their timeout retries.
- Connector connect links no longer advertise a narrower scope than they grant.
- Configuration saves report what the gateway actually observed.
- Two follow-ups from an external review of the same batch.
- A long-running statement that can modify data is no longer retried after a timeout.
- A wrong-typed action parameter now gets an actionable answer instead of an internal error.
- Every operation in an imported specification now reaches the action catalogue.
- Tightens what a governance Save confirms.
- The gateway's public URL is configuration, not something a request can set.
- A contact write is refused when an identifying field still holds an unresolved placeholder.
- Same-origin check now derives the gateway's own origin from the request the browser addressed.
- Governance saves report what actually happened, on every route.
- Contact notes sent as HTML are allow-listed before they leave the gateway.
- Connector scope sets are chosen by the gateway, not by the caller.
- Confirmation now covers writes that destroy content or lower a security control, not only deletes.
- Governance saves report a truthful, ordered outcome.
- Stricter same-origin checks on state-changing admin endpoints.
- Bulk action-governance saves now confirm success only when the save is complete.
- Tightens the everyday/on-demand and high-risk approval toggles to real booleans.
- Self-healing reports why a commit was refused, and stops repeating a refusal it cannot clear.
- Multi-action saves on a service page apply in one request.
- The per-service tool-search switch can no longer be routed around.
- Sharper permission diagnostics and honest permission reporting.
- The per-service tool-search switch now bounds what runs, not just what is found.
- 403 responses now say which side has to grant the permission.
- Curated action lists now only advertise actions a stock install can call.
- The additional-scopes field is checked against the page an operator actually sees.
- The admin page-rendering gate no longer expires overnight.
- Confluence installs can now request scopes beyond the connector default.
- Imported API specifications are validated more strictly.
- Scope metadata reads an API spec's "no scope required" marker correctly.
- Permission advice no longer points at site administration, and 17 dead Jira actions are gone.
- Confluence's searchable action catalogue is reachable.
- A missing-permission error now names the permission.
- Actions that take a list accept a single value.
- Jira board actions are now opt-in, so upgrading never blocks a connection.
Full changelog: https://mcpgate.de/changelog/
Docker: docker pull mcpgate/mcpgate:2.0.1936