The read side is unusually considerate — a whole document rendered as Markdown, its structural parts listed in order, and recipes for the SQL and HTML Polarion will accept instead of leaving a model to invent them. The write side is bulk-oriented, up to 50 items or links per request, and every write tool takes dry_run so the exact payload can be reviewed before it lands. Enum options are resolvable before use, which is where writes into an ALM tool usually fail.
A Python server for Polarion ALM with 46 tools spanning read and write: documents, work items, test runs and records, traceability links, comments and attachments. Every write supports dry_run, guards validate fields, enum values and link targets before anything is committed, and requests are paced to a rate cap you set for your instance.
- read_document renders a document end to end as flowing Markdown, and read_document_parts lists its structural parts in order with the work items embedded in them
- Work items searched with Lucene or SQL through list_work_items, then read as raw HTML with get_work_item or as Markdown with read_work_item; get_sql_query_recipes and get_html_recipes supply the query forms and HTML templates Polarion actually accepts
- Bulk writes throughout — create_work_items and update_work_items take up to 50 items in one request, as do create_test_runs, update_test_runs, create_test_records and update_test_records
- Traceability: list_work_item_links reads one direction per call, create_work_item_links makes up to 50 outgoing links atomically, and update_work_item_link sets suspect or revision on an existing one
- Document structure changed rather than merely described — create_document, copy_document duplicating structure, body and contained work items, move_work_item_to_document at a chosen position, and move_work_item_from_document as the only detach path
- Test execution: list_test_runs and get_test_run, list_test_records giving one row per test-case iteration, get_test_record for the execution detail, and update_test_records to set result, comment and defect link
- Comments listed flat with thread relationships reconstructable from the parent, created in bulk, and resolved or reopened at the root
- Attachments listed for documents, work items and test records, image content fetched for viewing, and one to ten local files uploaded in a single request
- list_work_item_enum_options and list_document_enum_options resolve the valid enum ids for a field before a write tries to use one
Python 3.13 or newer, published on PyPI as mcp-server-polarion and launched over stdio with uvx, against Polarion 2506 or newer. POLARION_URL and POLARION_TOKEN — a personal access token — are both required. POLARION_MAX_REQUESTS_PER_SECOND caps the client-side rate to match your deployment's throttle and defaults to 1, with 0 disabling pacing; requests are serialised, and 429 and 5xx responses are retried automatically.
One command plus a key — uvx mcp-server-polarion, then supply credentials
