This repository contains Model Context Protocol (MCP) server implementations for Polarion Application Lifecycle Management (ALM) integration.
MCP Tools are available for Polarion work items, including:
- get_text_for_workitems_by_id
- get_documents
- get_documents_by_space_names
- get_space_names
- PolarionRemoteMcpServer: SSE-based MCP server for server based installations
- PolarionMcpServer: Console-based MCP server for Polarion integration for local workstation installations
-
From your Linux server, create a directory for your configuration and logs:
mkdir -p /opt/polarion-mcp-server cd /opt/polarion-mcp-server
-
Pull the Docker image:
docker pull peakflames/polarion-remote-mcp-server
-
Create a tailored
/opt/polarion-mcp-server/appsettings.json
file to your Polarion configuration:{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "PolarionProjects": [ { "ProjectUrlAlias": "starlight", "Default": true, "SessionConfig": { "ServerUrl": "https://polarion.int.mycompany.com/", "Username": "shared_user_read_only", "Password": "linear-Vietnam-FLIP-212824", "ProjectId": "Starlight_Main", "TimeoutSeconds": 60 } }, { "ProjectUrlAlias": "octopus", "Default": false, "SessionConfig": { "ServerUrl": "https://polarion.int.mycompany.com/", "Username": "some_other_user", "Password": "linear-Vietnam-FLIP-212824", "ProjectId": "octopus_gov", "TimeoutSeconds": 60 } }, { "ProjectUrlAlias": "grogu", "Default": false, "SessionConfig": { "ServerUrl": "https://polarion-dev.int.mycompany.com/", "Username": "vader", "Password": "12345", "ProjectId": "grogu_boss", "TimeoutSeconds": 60 } } ] }
-
Run the Docker container:
docker run -d \ --name polarion-mcp-server \ -p 8080:8080 \ -v appsettings.json:/app/appsettings.json \ peakflames/polarion-remote-mcp-server
-
The server should now be running. MCP clients will connect using a URL specific to the desired project configuration alias:
http://{{your-server-ip}}:8080/{ProjectUrlAlias}/sse
. -
📢IMPORTANT - Do NOT run with replica instances of the server as the session connection will not be shared between replicas.
The server uses a PolarionProjects
array in appsettings.json
to define one or more Polarion instance configurations. Each object in the array represents a distinct configuration accessible via a unique URL alias.
Top-Level Setting | Description |
---|---|
PolarionProjects |
(Array) Contains one or more Polarion project configuration objects. |
Each Project Configuration Object:
Setting | Description | Required | Default |
---|---|---|---|
ProjectUrlAlias |
A unique string used in the connection URL (/{ProjectUrlAlias}/sse ) to identify this configuration. |
Yes | N/A |
Default |
(boolean) If true , this configuration is used if the client connects without specifying a ProjectUrlAlias . Only one entry can be true . |
No | false |
SessionConfig |
(Object) Contains the specific connection details for this Polarion instance. | Yes | N/A |
SessionConfig
Object Details:
Setting | Description | Required | Default |
---|---|---|---|
ServerUrl |
URL of the Polarion server (e.g., " |
Yes | N/A |
Username |
Polarion username with appropriate permissions. | Yes | N/A |
Password |
Password for the Polarion user. (Consider secure alternatives) | Yes | N/A |
ProjectId |
The actual ID of the Polarion project to interact with. | Yes | N/A |
TimeoutSeconds |
Connection timeout in seconds. | No | 60 |
Note: It is strongly recommended to use more secure methods for storing credentials (like User Secrets, Azure Key Vault, etc.) rather than placing plain text passwords in appsettings.json
.
To configure Cline:
- Open Cline's MCP settings UI
- Click the "Remote Servers" tab
- For each
ProjectUrlAlias
in yourappsettings.json
that the user wants to connect to:
{
"mcpServers": {
...
...
"Polarion Starling": {
"autoApprove": [],
"disabled": true,
"timeout": 60,
"url": "http://{{your-server-ip}}:8080/starlight/sse",
"transportType": "sse"
},
"Polarion Octopus": {
"autoApprove": [],
"disabled": true,
"timeout": 60,
"url": "http://{{your-server-ip}}:8080/octopus/sse",
"transportType": "sse"
}
...
...
}
- Repeat for each
ProjectUrlAlias
you want to connect to.
To configure Visual Studio Code:
Add the following configuration to your settings.json file:
"servers": {
"polarion-starlight": { // Use a descriptive key
"type": "sse",
"url": "http://{{your-server-ip}}:8080/starlight/sse", // Replace with your alias
"env": {}
},
"polarion-octopus": {
"type": "sse",
"url": "http://{{your-server-ip}}:8080/octopus/sse", // Replace with your alias
"env": {}
}
// Add entries for each ProjectUrlAlias
}
To Claude Desktop:
Claude Desktop currently doesn’t support SSE, but you can use a proxy with the following addition to the claude_desktop_config.json file:
{
"mcpServers": {
"polarion-remote": {
"command": "npx",
"args": [
"mcp-remote",
"http://{{your-server-ip}}:8080/{ProjectUrlAlias}/sse" // Replace {ProjectUrlAlias}
]
}
// Add entries for each ProjectUrlAlias, potentially using different keys like "polarion-starlight"
}
}
- .NET 9.0 SDK or later
- Docker (for container deployment)
To build the projects locally:
dotnet build PolarionMcpServers.sln
- Roll the version and image tag by setting the
Version
&ContainerImageTag
properties inPolarionRemoteMcpServer/PolarionRemoteMcpServer.csproj
- Build the project and image locally:
dotnet publish PolarionRemoteMcpServer/PolarionRemoteMcpServer.csproj /t:PublishContainer -r linux-x64
- Roll the version and image tag by setting the
Version
&ContainerImageTag
properties inPolarionRemoteMcpServer/PolarionRemoteMcpServer.csproj
- Build the project and image and publish to your Docker registry:
dotnet publish PolarionRemoteMcpServer/PolarionRemoteMcpServer.csproj /t:PublishContainer -r linux-x64
docker push peakflames/polarion-remote-mcp-server:{{VERSION}}