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.
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.
- Download — go to github.com/brettscharm/elm-mcp → green Code button → Download ZIP.
- 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. - 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
argsline (so it matches your folder from step 2), and your ELM details at the bottom.Save the file. (Use forward slashes{ "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" } } } }/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.pyonce — 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, thencd ~/.elm-mcpandpython3 setup.py(usepy setup.pyon Windows).setup.pyis 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_capabilitiesand 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:
- Did you fully quit Bob (Cmd+Q) and reopen?
- 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:
- Quit + reopen Bob (so it picks up the new tools).
- Run
jira_healthin chat to confirm auth works. - Try it: "
/import-jira issue_key=PROJ-123" — Bob fetches the issue, interviews you, creates DNG requirements withSource: 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:
- You give Bob a one-line idea
- Bob interviews you (5 min)
- Bob proposes requirements; you approve
- Bob proposes tasks; you approve
- Bob proposes test cases; you approve
- STOP — you review everything in DNG/EWM/ETM
- Bob re-pulls current state, writes the actual app code with
# Implements: REQ-005headers tying every file to the requirement - Bob marks tasks resolved, records test results in ETM as it goes
- 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/.envon 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
.envand re-runningsetup.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 | bashRestart 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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。