mcp-alm
Servidor MCP para o IBM ELM via OSLC: rm (DOORS Next), ccm (EWM) e qm (ETM). Ele fornece as capacidades que as skills vão consumir. As tools seguem os nomes e parâmetros do IBM Engineering AI Hub MCP 1.3.0.
Credenciais
| SO | Arquivo |
|---|---|
| Linux/Mac | ~/.config/mcp-alm/alm.properties |
| Windows | %APPDATA%\mcp-alm\alm.properties |
Para usar outro caminho, defina a variável de ambiente MCP_ALM_CONFIG.
[DEFAULT]
server = https://alm.SEU-SERVIDOR
user = SEU_USUARIO
password = SUA_SENHA
Certificado com CA próprio: export REQUESTS_CA_BUNDLE=/caminho/ca.pem.
A autenticação usa o form Jazz (j_security_check). Se o servidor responder 401 pedindo Basic, o Basic é usado automaticamente.
Instalação
uv sync
claude mcp add alm -- uv run --directory /caminho/para/mcp-alm mcp-alm
# depuração com o MCP Inspector
uv run mcp dev mcp_alm/server.py
Contrato de saída
- Recursos OSLC:
{url, id, title, types, properties{}, links{}}, com chaves em qname (dcterms:title). Cada link é{url, title?}.get_workitemesearch_workitemstrazem otitledos recursos ligados (estado, prioridade, iteração...) na mesma requisição (oslc.properties/oslc.selectcom{dcterms:title}) e completam o nome dos usuários do JTS pela lista em cache do Reportable REST. - Dados da API de processo e do Reportable REST usam os nomes de campo da doc IBM
(
get_user→userUUID, userId, name, emailAddress, archived;get_project_area→name, project_area_uuid, summary, description, cm_enabled, team_areas, timelines, associations). - Entradas por UUID/URL, como na doc IBM. Descubra-os com
list_project_areas,get_project_area,get_project_components(rm) eget_qm_component(qm). configuration/configuration_url/global_configuration_url/gc_uri/gc_contextvão no headerConfiguration-Context. No DOORS Next, sem configuração, é usada a primeira stream do componente.
Tools (IBM Engineering AI Hub 1.3.0)
| Conjunto | Tools |
|---|---|
| Common | get_user, get_project_area, get_global_configuration, search_global_configuration, list_project_areas, list_linked_requirements, list_linked_workitems, list_linked_testartifacts, link_workitem_and_requirement, link_workitem_and_testartifact, link_testartifact_and_requirement |
| Requirements | get_project_components, get_rm_component_types, list_rm_component_folders, get_rm_component_configuration, get_requirement, search_requirement, create_requirement |
| Work Items | create_workitem, get_workitem, get_workitem_schema, list_workitem_categories, list_workitem_releases, search_workitems, add_comment_to_workitem |
| Test | get_testartifact, get_testartifact_schema, search_testartifact, get_qm_component, get_qm_component_configuration |
Aliases da doc (get_rm_component, get_project_component_types...) não são registrados: vale o primeiro nome.
Skills
As skills ficam em skills/ e documentam, para a IA, as tools, suas entradas e saídas, os fluxos e os erros, para
evitar consultas desnecessárias ao servidor.
| Skill | Assunto |
|---|---|
| alm-setup | Cria/atualiza a configuração do projeto em alm/pa_<project area em snake_case>.json (um arquivo por project area do CCM) |
| alm-ccm | Work items: item de trabalho (WI), tarefa, defeito, item de backlog (IB)... |
| alm-rm | Requisitos: RF, RNF, HU, UC, regra, mensagem, especificação... |
| alm-qm | Testes (só leitura): caso de teste (CT), plano (PT), execução (TER)... |
| alm-gc | Comum: usuários, project areas, associações, configuração global e links de rastreabilidade |
Instalação por projeto (links relativos, sem cópia):
mkdir -p .claude/skills .kiro/skills
for s in alm-setup alm-ccm alm-rm alm-qm alm-gc; do
ln -sfn ../../skills/$s .claude/skills/$s # Claude Code
ln -sfn ../../skills/$s .kiro/skills/$s # Kiro
done
Tools das skills
Saída com as chaves do alm.json (alm/pa_*.json; a skill grava o arquivo, o MCP não o lê). Listas voltam como
[{name, identifier, ...}] e a skill grava o mapa {name: identifier}.
| Skill | Tools |
|---|---|
| alm-setup (ccm) | whoami, list_project_areas("CCM"), ccm_list_team_areas, ccm_list_members, ccm_list_workitem_types, ccm_list_workitem_fields, ccm_list_iterations, ccm_list_iteration_plans, ccm_create_iteration, ccm_create_iteration_plan |
| alm-setup (rm) | list_project_areas("RM"), get_project_area(include_associations), rm_get_configuration, rm_list_members, rm_list_folders, rm_list_requirement_types |
| alm-ccm | ccm_list_workitems, ccm_list_field_values, ccm_create_workitem, ccm_update_workitem, ccm_list_workitem_states (+ get_workitem, add_comment_to_workitem, link_*) |
| alm-rm | rm_search_requirements, rm_get_requirement, rm_create_requirement, rm_update_requirement (+ link_workitem_and_requirement) |
| alm-qm | search_testartifact, get_testartifact, get_testartifact_schema, get_qm_component, get_qm_component_configuration |
| alm-gc | whoami, get_user, list_project_areas, get_project_area, get_global_configuration, search_global_configuration, list_linked_, link_ |
Um plano do alm.json vira filtro de ccm_list_workitems com iteration=plans[nome].iteration e
team_areas=[plans[nome].owner].
Limites em relação à doc IBM
-
ccm_create_iterationeccm_create_iteration_planusam os serviços internos da UI web (IPlanProcessRestService/createIterationeIPlanRestService/putItems), pois o EWM não tem API pública para criá-los. Exigem as permissões de processo correspondentes (ex.: "Modify structures of iterations"). -
Fora do escopo: Models e Source control;
create_requirement_change_setedeliver_requirement_change_set(removidos a pedido);add_comment_to_testartifact(o ETM não expõe comentários de revisão formal numa API pública). -
search_workitems:filtersó com AND (OR com uma expressão; outras chaves ou lista vazia dão erro), operadores is/equals, is not, in, before/after e contains (summary/description).termExpressions/similarityExpressionsnão são suportados. Estado e tipo são filtrados pelo id (com.ibm.team.workitem.taskWorkflow.state.s2,task). -
get_workitem_schema:include=approvalsnão é suportado. -
search_testartifact:customAttributeFilters,categoryFilterselinkFiltersnão são suportados. -
rm_search_requirements: exige ao menos um filtro (text,folderourequirement_type). O DOORS Next responde HTTP 400 quandotextvem junto comfolder/requirement_type: busque só pelo texto e filtre o resultado pelotype/folder. -
get_rm_component_types:filter_text_onlyé redundante.list_rm_component_folders:include_privateé ignorado. -
get_qm_component/get_qm_component_configuration: dependem da query de componentes do provider de configuração do ETM, que pode exigir permissão de administrador (403) e só faz sentido em project areas opt-in.
Arquitetura
mcp_alm/
server.py instância MCP + @tool (erros esperados viram ToolError com a mensagem)
infra/ config, auth (login Jazz), http (sessão, XML, Reportable), oslc (RDF, query, descoberta)
ibm/ um módulo por conjunto de tools da doc: common, requirements, workitems, test
ccm.py rm.py qm.py tools das skills (prefixos ccm_/rm_); compõem ibm/ e infra/
skills/ SKILL.md de alm-setup, alm-ccm, alm-rm, alm-qm e alm-gc
alm/ configuração do projeto (pa_<project area>.json), gravada pela alm-setup
Testes: uv run pytest (servidor Jazz falso em tests/conftest.py).
Release files for mcp-alm 1.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_alm-1.0.8.tar.gz | 55.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_alm-1.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 100.9 kB
Release files / mcp_alm-1.0.8.tar.gz
| Download URL | mcp_alm-1.0.8.tar.gz |
|---|---|
| Size | 55.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f5a128b47785321d03aaf95da1eaf093462b1a84db84201470f3af6549bea409
|
|
BLAKE2b-256 checksum How to use checksums |
1d013bc7956fb0cef8fe4fee796224caaf0ab87fb6e61eafa0c8e1f527ace43e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.22
|
Release files / mcp_alm-1.0.8-py3-none-any.whl
| Download URL | mcp_alm-1.0.8-py3-none-any.whl |
|---|---|
| Size | 45.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cbe10a16de473faec99da2521e8e61587ca2a32f63f6fb2611761977579dbe6a
|
|
BLAKE2b-256 checksum How to use checksums |
7e8bef8f18f7bea26317bd7e80c2f640927f72a5772630842559655836799cf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.22
|