Repository navigation
Releases: phillipboesger/polarion-mcp
Release list
v1.4.4
What's Changed
- chore: publish only the MCPB bundle as release asset by @phillipboesger in #96
- docs: structure setup prerequisites as short lists by @phillipboesger in #97
- feat(docs): site entry points and repo guides (local/server) by @phillipboesger in #98
- docs: guides for local and server paths written from zero by @phillipboesger in #99
- feat(docs): Integration Galaxy client chooser by @phillipboesger in #100
- fix(docs): galaxy layout, path intro, security alerts by @phillipboesger in #101
- fix(docs): galaxy side panel only when a tool is open by @phillipboesger in #102
- docs: improve Glama tool guidance and routing by @phillipboesger in #103
- chore: release 1.4.4 by @phillipboesger in #104
Full Changelog: v1.4.3...v1.4.4
v1.4.3
What's Changed
- docs: remove internal records from product documentation by @phillipboesger in #92
- fix: clarify setup connectivity and token diagnostics by @phillipboesger in #93
- fix: log Polarion's message for failed token probes and tighten claude.ai setup docs by @phillipboesger in #94
- chore: release 1.4.3 by @phillipboesger in #95
Full Changelog: v1.4.2...v1.4.3
v1.4.2
Fixes HTTP MCP connection failures for project-only Polarion users. PAT validation now uses GET /metadata, which does not require global REST GET permission, instead of listing projects. Initialization, OAuth login and token refresh share this check. Invalid or denied tokens remain rejected, and Polarion still enforces permissions on every tool call.
Compatibility: HTTP/OAuth connections require Polarion 2512 or newer. On Polarion 2506 and older, use stdio mode with your own PAT or upgrade Polarion. No automatic endpoint fallback is used. The README, website and troubleshooting Q&A explain this limitation.
Includes updated package/Desktop manifests, setup examples and release smoke tests. Verified with 549 tests, package and conformance checks, live Polarion 2506/2606 CI, and a local 2512 project-only access test.
Changes: #91
v1.4.1
What's Changed
- test: end the flaky HTTP tests (bind test servers to 127.0.0.1) by @phillipboesger in #75
- docs: grouped client setup, original background, benefits first by @phillipboesger in #76
- docs: pass 3 (setup clarity, visual capabilities, daily use, community) by @phillipboesger in #77
- docs: SVG icons for the tool-domain grid by @phillipboesger in #78
- docs: pass 4 (providers, Gemini Enterprise, coverage carousel, side-by-side setup) by @phillipboesger in #79
- docs: pass 5 (works-with hero row, one custom card, README visuals) by @phillipboesger in #80
- docs: clients around the hero ring, cache-busted assets by @phillipboesger in #81
- docs: pass 7, complete idiot-proof setup per client by @phillipboesger in #82
- docs: pass 8 (drop broken supply-chain link, show GitHub release and stars) by @phillipboesger in #83
- docs: pass 9 (condense setup guides, short FAQ) by @phillipboesger in #84
- docs: remove website credit and prune obsolete documentation by @phillipboesger in #85
- chore: organize repository root by @phillipboesger in #86
- docs: use Bösger Digital website attribution and link imprint by @phillipboesger in #87
- Add legal links and remove automatic third-party requests by @phillipboesger in #88
- fix: verified audit fixes for composites, paging, limits and auth by @phillipboesger in #89
- chore: release 1.4.1 by @phillipboesger in #90
Full Changelog: v1.4.0...v1.4.1
v1.4.0
What's Changed
- docs: connection and login Q&A in troubleshooting by @phillipboesger in #33
- chore: quality gate (lint, coverage, mutation, docs check, security scans, Sonar) by @phillipboesger in #34
- fix: REST wrapper, tool descriptions, guards, response cap, multipart/HTML handling (B-06..B-10) by @phillipboesger in #35
- fix(auth): hardening, rate limits, refresh rotation, audience binding, protocol hygiene, origin allowlist (B-01..B-05) by @phillipboesger in #36
- feat: Phase 5 open-source features (search, composites, safety, discovery) by @phillipboesger in #39
- feat: universal MCP client support (Phase 3) by @phillipboesger in #37
- docs: single-source documentation overhaul (Phase 4) by @phillipboesger in #38
- ci: build before testing in the Docker publish workflow by @phillipboesger in #50
- ci(release): fix SBOM step and cosign registry login by @phillipboesger in #51
- fix: resolve CodeQL findings by @phillipboesger in #52
- chore(deps): consolidated dependency and action updates by @phillipboesger in #53
- chore(deps): remaining action and npm updates by @phillipboesger in #60
- chore(deps): ignore TypeScript major in Dependabot by @phillipboesger in #62
- fix(security): recognised log-injection sanitizer by @phillipboesger in #65
- chore(deps): ipaddr.js 2 and Docker/attest action majors by @phillipboesger in #69
- fix(security): CodeQL-modelled log sanitizer (round 2) by @phillipboesger in #70
- fix(security): log sanitizer CodeQL accepts (round 3) by @phillipboesger in #72
- docs: restore a public, scannable README and landing page by @phillipboesger in #73
- ci(release): SBOM from production dependencies only by @phillipboesger in #74
Full Changelog: v1.3.1...v1.4.0
v1.3.1
polarion-mcp 1.3.1
A small follow-up to 1.3.0, found while checking the 1.3.0 behaviour against the deployment patches of the first production user.
Fixed
- Dependency advisory.
follow-redirects1.16.0 (pulled in by axios) has two high advisories (GHSA-q3jh-wrc6-jgq8, GHSA-8r9p-f939-6h3c). Lockfile-only update to 1.16.1;npm audit --omit=dev --audit-level=highis clean again. This matters if your update process gates on that audit. - OAuth registration without a callback. A client registering with an empty
redirect_urislist was accepted. It could not complete a login, but it is now refused with 400, with or withoutMCP_ALLOWED_REDIRECT_PREFIXES.
Upgrading from 1.2.2 with local patches
If you applied the deployment patches (tool filter, redirect allowlist, session 404, TRUST_PROXY, login diagnostics, paging) to 1.2.2, remove them before updating. 1.3.x contains all six, so they no longer apply cleanly. The setting names are unchanged; see the 1.3.0 notes for the few behaviours that became stricter.
Full changelog: v1.3.0...v1.3.1
v1.3.0
polarion-mcp 1.3.0
This release combines what the first production deployment (MDKU, Polarion 2506 behind Apache, Claude.ai over OAuth) needed with the results of a full audit of the tool executor, both HTTP transports and the build. It also adds the first tests that run against a real Polarion.
It is a minor release, not a patch release: there are new settings, and a few calls that used to be accepted silently are now refused. Read "Upgrading" before you roll it out.
Upgrading from 1.2.x
Nothing has to be renamed. Settings already in use (MCP_ALLOWED_REDIRECT_PREFIXES, TRUST_PROXY, MCP_TOOLS, MCP_READ_ONLY, MCP_OMIT_OUTPUT_SCHEMA) keep their names. These behaviours changed:
- Unknown arguments are refused.
getWorkItemswithpageSizeused to return the first page and drop the argument. It now fails with the list of valid names. - A call without a token is refused with a message that says what to set (
BEARER_TOKENfor stdio and the REST wrapper,Authorization: Bearer <token>for Streamable HTTP). The server still starts and still lists its tools, and it warns at startup about a missingBEARER_TOKENorAPI_BASE_URL. - A Polarion token sent directly to the Streamable HTTP server is checked with Polarion before a session opens (remembered for one minute). Failed checks are rate limited per client address. Before, any string opened a session.
- Flag values are strict.
MCP_READ_ONLY(and the other on/off settings) accept1/true/yes/onand0/false/no/off. Anything else stops the start; before, a typo silently left the restriction off. AnMCP_TOOLSthat leaves no tool also stops the start. - POST and PATCH are no longer resent on a 5xx. A proxy can answer 502 after Polarion created the item, and the retry duplicated it. 429 is still retried for every method.
- Node 22 is the minimum (Node 20 is end of life). The MCP SDK minimum is 1.28.
API_BASE_URLmay end in a slash..and..as a path value, and an empty path value, are refused.
New
MCP_TOOLS,MCP_READ_ONLY,MCP_OMIT_OUTPUT_SCHEMA: a server-side tool filter. A filtered tool is neither listed nor callable, over MCP and over the REST wrapper, so the allowlist is a real boundary.MCP_OMIT_OUTPUT_SCHEMAcutstools/listfrom about 980 KB to about 530 KB.MCP_ALLOWED_REDIRECT_PREFIXES: only listed OAuth callbacks may register. Loopback callbacks match on any port, and../cannot escape a prefix. The login page now names the host the authorization code goes to.TRUST_PROXY: login, token and registration rate limits count per client behind a reverse proxy instead of per proxy. A hop count or an address list such asloopback;trueis refused on purpose.PUBLIC_URL: the REST wrapper's OpenAPIserversURL (Custom GPT) no longer trusts theHostheader.MCP_SESSION_IDLE_MINUTES,MCP_MAX_SESSIONS: sessions expire when idle, are capped, and belong to the token that created them. One token holds at most 20.- Setting
nullclears a field.{"attributes": {"dueDate": null}}now reaches Polarion, which empties the field. Path and query arguments still must not be null. - The server sends instructions on
initializeand offers three offline guides (query syntax, write bodies, paging and fields). Prompts use real tools. - A live test suite against Polarion 2506 and 2606, run by CI (see Tests).
Fixed: what real use exposed
- Paging never worked.
page_size_andpage_number_were dropped on every list tool, so every call returned Polarion's default first page. Found by the audit, confirmed against Polarion 2606. - File downloads failed with 406 and, once past that, arrived with every byte above 0x7F destroyed. Attachments, avatars and job results now come back intact (image, text or base64 resource, 20 MB cap).
- Unknown session ids answer 404, as the MCP spec requires, so Claude.ai starts a new session after a server restart instead of staying stuck until the connector is reconnected.
- Login errors say what is wrong. A valid token without REST permission (403) is told apart from a bad token, and every failed check logs Polarion's status and error detail (never the token). Whitespace inside a pasted token is removed; a line break made Apache answer 400.
- Duplicate creates, hung uploads, missing timeouts. Retried uploads no longer hang, every request has a 120 s timeout, and request pacing really limits concurrent calls.
- Writes are checked before they are sent: relationship-only updates go through the user check (a nonexistent assignee was stored), dry runs run the same checks as the real call, enum options are read from every page, and the eight relationship tools validate their body.
dry_run: "true"performed the real write. Strings and1now preview; an unreadable value is refused.- Output schemas no longer break successful calls. A
nullor a number where a string was advertised made the client reject a result Polarion had returned. - Tool annotations are correct. Workflow transitions are not idempotent, replacing a relationship set is destructive, and merge, overwrite and license tools are no longer marked harmless.
- Markdown view of rich text keeps cross-reference ids and tables, and a very deep or very large field no longer blocks the server for seconds.
- Numeric values such as
page_size_: "5"or a numeric id are accepted when the conversion is unambiguous.Retry-Afteron a 429 is honoured up to 60 s. - OAuth:
Beareris matched case-insensitively, a request without scope getspolarion, a wrong PKCE verifier burns the authorization code, login pages cannot be framed, and/healthno longer shows the internal Polarion URL. - Release and build: the
polarion-mcpbin starts (it lacked a shebang), the server reports its real version,npm ci --omit=devworks from the release ZIP,npm startno longer rebuilds and prints banners into the stdio stream, andserver.jsonmatches the image. - The OAuth client credential variables are read as
OAUTH_CLIENT_ID_<SCHEME>. Dependencies updated (npm audit fix).
Security
Two issues are worth naming for operators of the Streamable HTTP server: anyone with any Bearer string could open sessions until memory ran out or real users were evicted (fixed above), and an open dynamic registration let a stranger register their own callback. If the server is reachable from the internet, set MCP_ALLOWED_REDIRECT_PREFIXES and TRUST_PROXY. .env.example no longer ships with TLS verification switched off.
Tests
The unit tests grew to 295, with 16 tests added after mutation testing showed gaps, and several tests repaired that passed for the wrong reason. New: npm run test:live runs 11 tests against a real Polarion (read tools through the MCP client, paging, 204 writes, null clearing, the HTTP server with the full OAuth/PKCE flow). CI starts a throwaway Polarion container for 2506 and 2606, creates a token and runs them. Against 1.2.2 the suite fails for paging, unknown arguments, null clearing and the missing-token refusal. See docs/live-tests.md.
Documentation
New or corrected: configuration reference for all settings, deployment behind an own subdomain, security notes (the HTTP_API_KEY guards the REST wrapper only), troubleshooting for "No Polarion token is configured", guides corrected against live behaviour, a new project page with an animated demo.
Thanks
To Lukas at MDKU, whose deployment feedback drove the session, proxy, redirect and tool-filter work.
Full changelog: v1.2.2...v1.3.0
v1.2.2
What's Changed
- feat: curated tool descriptions to lift Glama B/C tools to A (v1.2.2) by @phillipboesger in #16
Full Changelog: v1.2.1...v1.2.2
v1.2.1
What's Changed
- fix(oauth): keep logins across restarts and make ChatGPT OAuth work by @phillipboesger in #15
Full Changelog: v1.2.0...v1.2.1
v1.2.0
What's Changed
- Implement per-request authentication and OAuth login for MCP by @Jonasdero in #13
- docs+ci: remove stale MCP_HTTP_TOKEN references left by #13 by @phillipboesger in #14
New Contributors
- @Jonasdero made their first contribution in #13
Full Changelog: v1.1.0...v1.2.0