Skip to main content

MCP server for IBM Engineering Lifecycle Management (ELM) via OSLC REST API

Project description

elm-alm-py

MCP server for IBM Engineering Lifecycle Management (ELM) — read and write access to DOORS Next (RM), RTC/EWM (CCM), and ETM (QM) via OSLC REST APIs.

Tested against ELM 7.0.3 (alm.dataprev.gov.br).

Install

uv pip install -e .

Configuration

Option 1: Credentials file (recommended)

elm-alm-py login

Saves to ~/.elm_creds.json:

{"url": "https://your-elm-server.example.com", "username": "user", "password": "base64encoded"}

Option 2: Environment variables

export ELM_URL=https://your-elm-server.example.com
export ELM_USER=your_username
export ELM_PASSWORD=secret

Usage

# As MCP server (stdio)
elm-alm-py

MCP client configuration

{
  "mcpServers": {
    "elm-alm": {
      "command": "/path/to/.venv/bin/elm-alm-py"
    }
  }
}

Tools

Read Operations

Tool Description
list_projects(domain) List projects for RM/CCM/QM
search_requirements(project, query?) OSLC query on RM requirements
get_requirement(uri) Get single requirement by URI
list_workitems(project, query?) OSLC query on CCM work items
get_workitem(id) Get single work item by ID
search_testcases(project, query?) OSLC query on QM test cases

Write Operations

Tool Description
create_workitem(project, title, type?, ...) Create a work item (task/story/defect)
update_workitem(id, title?, description?) Update work item fields (ETag-based)
add_child_workitem(parent_id, title, ...) Create a child work item

create_workitem parameters

Parameter Required Description
project Project name (e.g., "MEU IMOVEL RURAL (MIR)")
title Work item title
type "task" (default), "story", or "defect"
description HTML description
parent_id Parent work item ID (creates child link)
owner Username (e.g., "claudio.filho")
filed_against Category URI. Auto-discovered if not provided
custom_fields Dict of extra RDF fields (see below)

custom_fields for project-specific attributes

Some RTC projects require custom fields. Pass them as a dict:

custom_fields={
    "rtc_ext:com.dataprev.team.workitem.attribute.categoriatarefa": {
        "rdf:resource": "https://server/ccm/oslc/enumerations/{projectAreaId}/..."
    }
}

Values can be:

  • {"rdf:resource": "uri"} — for URI/enumeration fields
  • "text" — for literal text fields

OSLC API Details

Work Item Types (CCM)

Type RTC type ID calm:id in services.xml
task task requirementChangeRequest
story com.ibm.team.apt.workItemType.story planItem
defect defect defect

Key Fields

Field Namespace Format
Title dcterms:title Text
Type rtc_cm:type rdf:resource URI
Category rtc_cm:filedAgainst rdf:resource (itemOid format)
Iteration rtc_cm:plannedFor rdf:resource URI
Owner dcterms:contributor rdf:resource /jts/users/{login}
Estimate rtc_cm:estimate Integer (milliseconds)
State rtc_cm:state rdf:resource URI

Content Types

  • Create (POST): application/rdf+xml
  • Read (GET): application/json (Accept header)
  • Update (PUT): application/json with If-Match: {ETag}

Development

uv sync --group dev
uv run pytest tests/ -v --cov=elm_alm_py
uv run ruff check src/ tests/

Known Limitations

  • _find_default_category returns first category from list (may not be correct for your project). Use filed_against parameter explicitly.
  • update_workitem supports title, description, owner, estimate_hours, planned_for, and custom_fields.
  • OSLC CM 1.0 services.xml parsing is bypassed — creation URL is constructed directly.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elm_alm_py-0.3.0.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

elm_alm_py-0.3.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file elm_alm_py-0.3.0.tar.gz.

File metadata

  • Download URL: elm_alm_py-0.3.0.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for elm_alm_py-0.3.0.tar.gz
Algorithm Hash digest
SHA256 1a410c08d406e3d57cda1090bcefa6a6c1347f8ed57a9a90473f9a2295cf8f31
MD5 8b7c2ae0a7c522bbf12a96b2c159ce6d
BLAKE2b-256 042040c79e8efdbd5a2bdcb487db20980d187a24db28b3e7ef7400712501ba5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for elm_alm_py-0.3.0.tar.gz:

Publisher: publish.yml on filhocf/elm-alm-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elm_alm_py-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: elm_alm_py-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for elm_alm_py-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b8404112b21c67b8da4f52593f37fdb28ef3a1f4ca6f6279089d22a57005696
MD5 e0470346064cf8e34d9da0d6b9aa810c
BLAKE2b-256 ffd1ef2c86ea903a31816dda25f3de28962d8c987bb38088e6841fdde5a42119

See more details on using hashes here.

Provenance

The following attestation bundles were made for elm_alm_py-0.3.0-py3-none-any.whl:

Publisher: publish.yml on filhocf/elm-alm-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page