ELM MCP

ELM MCP

Enables AI assistants to interact with IBM Engineering Lifecycle Management (ELM), including DOORS Next Generation, EWM, and ETM, for managing requirements, work items, tests, and project builds through natural language.

Category
Visit Server

README

ELM MCP — talk to IBM ELM from Bob

Stop clicking around DOORS Next. Just tell Bob what you want.

"Bob, build me a tracking service end-to-end with requirements, tasks, and tests in ELM." "Bob, import this Jira epic PDF into DNG." "Bob, what's the team been doing this week?"

āš ļø Personal passion project. NOT an official IBM tool. Use at your own risk. IBM, DOORS Next, ELM, EWM, ETM are trademarks of IBM Corp.


Set up Bob in 3 steps (30 seconds)

You need: macOS, Linux, or Windows; Python 3.10+ (the MCP SDK needs it — note macOS often ships an old 3.9); and an ELM account.

šŸ›‘ Prerequisite: DNG configuration management (CM) must be enabled on your projects

ELM MCP is built around the full DNG flow — modules, baselines, streams, traceability — which all require IBM's configuration management (CM) feature on the DNG project. Without CM:

  • You can still create requirements (in folders)
  • You cannot bind requirements into modules programmatically — there is no DNG API path for this on non-CM projects (verified against IBM's own ELM-Python-Client)
  • You cannot baseline requirements at Phase 5 of /build-new-project
  • You cannot use streams for parallel requirements work

If your DNG project doesn't have CM enabled: ask your DNG admin to enable it (one project-level toggle in DNG admin; doesn't break existing data). Most enterprise ELM customers have CM on by default.

If you don't know whether CM is enabled: ask Bob to connect and try /build-new-project — the flow tells you immediately if CM is missing on the target project.

Step 1 — install

Two separate paths — use the one for your computer. Mac is one command; Windows is download-and-paste (no terminal).


šŸŽ Mac / Linux

Open Terminal, paste this, press Enter:

curl -fsSL https://raw.githubusercontent.com/brettscharm/elm-mcp/main/install.sh | bash

That's the whole install. It downloads ELM MCP, asks for your ELM URL / username / password, writes Bob's config, and installs the 5 custom modes. When it finishes, go to Step 2.


🪟 Windows

No terminal commands needed — just download, extract, and paste one block into Bob.

  1. Download — go to github.com/brettscharm/elm-mcp → green Code button → Download ZIP.
  2. Extract — right-click the downloaded ZIP → Extract All. Note the folder it creates, e.g. C:\Users\YOU\Downloads\elm-mcp-main. Keep it — Bob runs the server from here.
  3. Paste into Bob — open Bob → settings/gear icon → MCP tab → Edit Global MCP. Paste the block below, then edit two things: the path on the args line (so it matches your folder from step 2), and your ELM details at the bottom.
    {
      "mcpServers": {
        "elm-mcp": {
          "command": "py",
          "args": ["C:/Users/YOU/Downloads/elm-mcp-main/doors_mcp_server.py"],
          "env": {
            "ELM_URL": "https://yourco.elm.ibmcloud.com",
            "ELM_USERNAME": "your-username",
            "ELM_PASSWORD": "your-password"
          }
        }
      }
    }
    
    Save the file. (Use forward slashes / in the path — Windows accepts them and it avoids backslash headaches.) Then go to Step 2.

Windows needs Python 3.10+. Check with py --version; if it's missing or older, install it from python.org and tick "Add python.exe to PATH". The server installs its own dependencies the first time Bob launches it (~30s) — there's nothing else to set up.

Want the 5 custom modes auto-installed too? From the extracted folder, run py setup.py once — it writes Bob's config for you and adds the modes (🧭 Concierge, šŸ“ Plan, šŸ“¤ Push, šŸŽÆ Impact Analyst, šŸ“œ Compliance Auditor). Otherwise the paste above already gives you every tool, just not the mode presets.

Dependencies just work. Even if Bob launches the server with a different Python than the installer used (the #1 cause of "missing dependency" failures), the server self-heals on first start — it installs its own dependencies into whatever interpreter Bob uses, then restarts. No guessing, no manual pip install.

No internet one-liner / corporate-locked machine? Works on every OS: git clone https://github.com/brettscharm/elm-mcp.git ~/.elm-mcp, then cd ~/.elm-mcp and python3 setup.py (use py setup.py on Windows). setup.py is the cross-platform workhorse — the one-liners above just wrap it.

Don't want the modes? add --no-modes. Re-install just the modes after editing them? setup.py --modes-only.

Step 2 — fully quit + reopen Bob

Bob only loads MCP servers at startup; you have to actually quit, not just close the window. macOS: Cmd + Q. Windows: right-click the tray/taskbar icon → Quit (or Alt+F4). Then reopen.

Step 3 — say hi

In any Bob chat, type:

"Connect to ELM and list my projects."

Bob should respond with your DNG projects. You're done. Try one of these next:

  • "Build me a temperature converter web app end-to-end."
  • "Show me what's in the [Module Name] module."
  • "What can you do?" (Bob calls list_capabilities and shows you the menu)

Common things you'll ask Bob

You say What Bob does
"build me a [thing]" Full agentic flow: requirements → tasks → tests → review pause → code
"import this Jira epic [paste text or PDF path]" Parses the epic into ELM artifacts (epic + reqs + tests + cross-links)
"import JIRA-1234" / "/import-jira" Live Jira pull via elm-mcp's native Jira tools — fetches the issue, interviews you, creates DNG requirements with Source: JIRA-XXX stamp, posts a back-link comment on the Jira issue. Talks to Jira REST directly (API token, no OAuth). Requires --with-jira setup (see below).
"show me the reqs in [module]" Reads the module from DNG, summarizes
"what's the team doing?" Reads the BOB Team Actions module, summarizes who did what
"resume my last build" Picks up an in-progress build run from where you left off
"I'm done for today" Wraps up your session with a final entry teammates can read
"update yourself" Pulls the latest version of ELM MCP from GitHub
"are you connected? what version?" Self-diagnoses connection state, version, active runs

You don't have to memorize these. Bob figures it out from natural language. If you're not sure what to do, just type /getting-started and Bob asks one question to point you at the right starting point.


When something goes wrong

Bob can't see ELM MCP after install:

  1. Did you fully quit Bob (Cmd+Q) and reopen?
  2. Run python3 ~/.elm-mcp/setup.py --diagnose — it tells you what's wrong in plain English

Bob asks for approval on every single action:

  • Re-run python3 ~/.elm-mcp/setup.py — refreshes Bob's allow-list with the current set of safe-to-auto-approve tools
  • Quit + reopen Bob

Module binding fails ("requirements created but not in module"):

  • Your DNG project doesn't have configuration management enabled
  • Either ask your DNG admin to enable it, or open the module in DNG and drag the requirements in manually
  • Then tell Bob "continue" and the build flow picks back up

Anything else:

  • Tell Bob "run elm_mcp_health" — it'll dump connection state, version, last update check, etc.
  • Or open an issue: https://github.com/brettscharm/elm-mcp/issues

To update

The simplest way: say "update yourself" in any Bob chat. That's a single tool call — Bob pulls the latest from GitHub and tells you to restart.

Or in terminal:

curl -fsSL https://raw.githubusercontent.com/brettscharm/elm-mcp/main/install.sh | bash

(Same command as install — re-running it just updates.)


Optional: live Jira integration (/import-jira)

If you want Bob to pull live Jira issues into DNG and post back-link comments to Jira (round-trip traceability), add Jira credentials to your .env:

# If you already have elm-mcp installed:
python3 ~/.elm-mcp/setup.py --with-jira

# Or edit ~/.elm-mcp/.env directly and add:
#   JIRA_BASE_URL=https://yourorg.atlassian.net
#   JIRA_EMAIL=your-atlassian-email@example.com
#   JIRA_API_TOKEN=ATATT...
# Token: https://id.atlassian.com/manage-profile/security/api-tokens

How it works: elm-mcp talks to Jira's REST API directly using your email + API token (HTTP Basic auth). No Atlassian MCP server, no mcp-remote bridge, no OAuth, no Node.js. Five tools are added: get_jira_issue, search_jira_issues, add_jira_comment, add_jira_remote_link, jira_health.

Why this instead of Atlassian's official MCP? Atlassian's hosted MCP at mcp.atlassian.com/v1/mcp uses OAuth 2.1 and the OAuth flow doesn't complete reliably inside IBM Bob's embedded webview — verified in the field. Going direct-REST sidesteps the problem.

After credentials are in .env:

  1. Quit + reopen Bob (so it picks up the new tools).
  2. Run jira_health in chat to confirm auth works.
  3. Try it: "/import-jira issue_key=PROJ-123" — Bob fetches the issue, interviews you, creates DNG requirements with Source: PROJ-123 — <jira-url> stamped on each, then posts a comment back to Jira listing all the created DNG URLs.

See BOB.md Step 3l for the full workflow.


What it actually does (for the curious)

ELM MCP is a Model Context Protocol server. It exposes IBM Engineering Lifecycle Management — DNG (requirements), EWM (work items / tasks / defects), ETM (test management), GCM (global config), and SCM/code-review — as 84 tools and 15 prompts that any MCP-speaking AI assistant can call. Bob is one such assistant; Claude Code, Cursor, Windsurf are others.

The MCP itself does zero AI generation. Every tool is a deterministic API call against ELM. The intelligence — writing requirements, parsing PDFs, picking the right module — comes from whichever AI you connect.

The headline workflow is /build-new-project:

  1. You give Bob a one-line idea
  2. Bob interviews you (5 min)
  3. Bob proposes requirements; you approve
  4. Bob proposes tasks; you approve
  5. Bob proposes test cases; you approve
  6. STOP — you review everything in DNG/EWM/ETM
  7. Bob re-pulls current state, writes the actual app code with # Implements: REQ-005 headers tying every file to the requirement
  8. Bob marks tasks resolved, records test results in ETM as it goes
  9. Final summary: traceability matrix, all URLs clickable

Every phase has an explicit user-approval gate. Bob can't blast through to writing code without your sign-off at each step.


Bring your own AI assistant

Same server works against any MCP-speaking host. install.sh writes the right config for every host it detects:

AI Assistant Config file written
IBM Bob ~/.bob/mcp_settings.json (global) + <project>/.bob/mcp.json (project-local)
Claude Code ~/.claude.json (global) + .mcp.json (project)
VS Code Copilot .vscode/mcp.json
Cursor ~/.cursor/mcp.json
Windsurf ~/.codeium/windsurf/mcp_config.json

Manual install (only if curl | bash doesn't fit your security policy)

git clone https://github.com/brettscharm/elm-mcp.git ~/.elm-mcp
cd ~/.elm-mcp
python3 setup.py

Same outcome, just two more steps.

For air-gapped / locked-down environments where automatic config-write doesn't work, run python3 ~/.elm-mcp/setup.py --print-config. It outputs the JSON ready to paste manually into Bob's ~/.bob/mcp_settings.json with absolute paths pre-filled for your machine.


Privacy + credentials

  • ELM password lives ONLY in ~/.elm-mcp/.env on your machine
  • That file is gitignored; it's never committed
  • The MCP authenticates directly with your ELM server using your account; no third-party services involved
  • Re-enter credentials anytime by deleting .env and re-running setup.py

File layout (if you want to inspect the code)

~/.elm-mcp/
ā”œā”€ā”€ setup.py                  # Installer (this is what install.sh runs)
ā”œā”€ā”€ doors_mcp_server.py       # The MCP server itself (84 tools)
ā”œā”€ā”€ doors_client.py           # ELM REST client (DNG + EWM + ETM + GCM + SCM)
ā”œā”€ā”€ BOB.md                    # Instructions Bob reads automatically
ā”œā”€ā”€ README.md                 # This file
ā”œā”€ā”€ .env                      # YOUR credentials (gitignored, local only)
└── probe/                    # Live-server probes + research notes

Help / issues / contributing

  • Issues: https://github.com/brettscharm/elm-mcp/issues
  • Email: brett.scharmett@ibm.com (personal capacity, not IBM support)

PRs welcome. The probes in probe/ document the live ELM API surface; new tools should follow the patterns in doors_client.py (GET-with-ETag → modify → PUT-with-If-Match for updates; service-provider-discovery → POST to creation factory for creates).


Share with your team

Copy-paste-ready blurb:

šŸ¤– ELM MCP — drive IBM DOORS Next, EWM, and ETM from Bob (or any AI assistant) instead of clicking around the web UI.

Install in 30 seconds:

curl -fsSL https://raw.githubusercontent.com/brettscharm/elm-mcp/main/install.sh | bash

Restart Bob. Say "connect to ELM and list my projects."

84 tools, 15 prompts. Read/write requirements (rich text + tables + images), build full projects end-to-end with traceable code, import Jira epics, see what your team's been up to. Full details: https://github.com/brettscharm/elm-mcp

āš ļø Personal passion project — NOT an official IBM tool.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured