Skip to content

Releases: phillipboesger/polarion-mcp

v1.4.4

Choose a tag to compare

@github-actions github-actions released this 28 Oct 04:26
353d6a1

What's Changed

Full Changelog: v1.4.3...v1.4.4

v1.4.3

Choose a tag to compare

@github-actions github-actions released this 27 Oct 12:43
de7d324

What's Changed

Full Changelog: v1.4.2...v1.4.3

v1.4.2

Choose a tag to compare

@github-actions github-actions released this 26 Oct 13:59
ba35087

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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 00:33
6a47bbb

What's Changed

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 09:13
966b72c

What's Changed

Full Changelog: v1.3.1...v1.4.0

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 01:24
b145d3e

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-redirects 1.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=high is clean again. This matters if your update process gates on that audit.
  • OAuth registration without a callback. A client registering with an empty redirect_uris list was accepted. It could not complete a login, but it is now refused with 400, with or without MCP_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

Choose a tag to compare

@github-actions github-actions released this 21 Oct 00:32
2a6de5b

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. getWorkItems with pageSize used 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_TOKEN for 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 missing BEARER_TOKEN or API_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) accept 1/true/yes/on and 0/false/no/off. Anything else stops the start; before, a typo silently left the restriction off. An MCP_TOOLS that 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_URL may 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_SCHEMA cuts tools/list from 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 as loopback; true is refused on purpose.
  • PUBLIC_URL: the REST wrapper's OpenAPI servers URL (Custom GPT) no longer trusts the Host header.
  • 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 null clears 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 initialize and 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_ and page_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 and 1 now preview; an unreadable value is refused.
  • Output schemas no longer break successful calls. A null or 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-After on a 429 is honoured up to 60 s.
  • OAuth: Bearer is matched case-insensitively, a request without scope gets polarion, a wrong PKCE verifier burns the authorization code, login pages cannot be framed, and /health no longer shows the internal Polarion URL.
  • Release and build: the polarion-mcp bin starts (it lacked a shebang), the server reports its real version, npm ci --omit=dev works from the release ZIP, npm start no longer rebuilds and prints banners into the stdio stream, and server.json matches 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

Choose a tag to compare

@github-actions github-actions released this 24 Sep 06:04

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

Choose a tag to compare

@github-actions github-actions released this 23 Sep 14:37

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

Choose a tag to compare

@github-actions github-actions released this 16 Sep 09:55

What's Changed

New Contributors

Full Changelog: v1.1.0...v1.2.0