openemr-wiki-mcp
# openemr-wiki-mcp
A quick local-first MCP server for OpenEMR documentation.
I made this as a small practical implementation so I could get fast local access to OpenEMR wiki pages, the Users Guide, and selected API docs inside desktop AI apps, coding agents, and other MCP-capable tools.
This repository is intentionally focused on local usage. It does not try to be a full hosted platform or production-ready remote service.
## Tools
| Tool | Description | Key Parameters |
|------|-------------|----------------|
| `search_openemr_wiki` | Search the OpenEMR wiki for any topic. Returns titles, summaries, and URLs. | `query` (string), `limit` (1–10, default 5) |
| `get_openemr_wiki_page` | Fetch the plain-text content of a specific wiki page by title, optionally narrowed to a section. | `title` (string), `section` (optional string) |
| `get_users_guide_toc` | Fetch the table of contents from the OpenEMR 8.0.0 Users Guide. | _(none)_ |
| `get_openemr_api_docs` | Fetch selected OpenEMR API documentation from the OpenEMR GitHub repository. | `doc` (`fhir`, `standard`, `smart_on_fhir`) |
| `list_wiki_pages_by_category` | List wiki pages in a given MediaWiki category. | `category` (string) |
## Requirements
- Node 18+
- npm
## Quick Start
This is a local stdio MCP server. That is the supported usage mode in this repo today.
### Install And Build
```bash
git clone https://github.com/rucister/openemr-wiki-mcp.git
cd openemr-wiki-mcp
npm install
npm run build
npm install -g .
```
Verify the global binary if you want to use the npm-installed command directly:
```bash
which openemr-wiki-mcp
```
### Install Inside WSL On A Local Windows Computer
If you want the MCP server to run inside WSL, do the install from your WSL shell, not from Windows PowerShell:
```bash
cd /path/to/openemr-wiki-mcp
npm install
npm run build
npm install -g .
which openemr-wiki-mcp
```
The last command should print a Linux path inside WSL, for example:
```bash
/home/ubuntu/.nvm/versions/node/v22.16.0/bin/openemr-wiki-mcp
```
## Use It Locally
### VS Code
Open the Command Palette and run MCP: Open User Configuration, then add:
```json
{
"servers": {
"openemr-wiki": {
"type": "stdio",
"command": "openemr-wiki-mcp"
}
}
}
```
If VS Code cannot find the global binary, replace `openemr-wiki-mcp` with the absolute Linux or macOS path returned by `which openemr-wiki-mcp`.
### Claude Code
Register the local stdio server:
```bash
claude mcp add --scope user --transport stdio openemr-wiki openemr-wiki-mcp
```
Verify:
```bash
claude mcp list
```
If the command is not found because the client does not load your shell profile, register the absolute binary path instead of `openemr-wiki-mcp`.
### Claude Desktop
Config file:
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux/WSL: `~/.config/Claude/claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
If Claude Desktop and the MCP server run in the same Linux or macOS environment, use this local stdio configuration:
```json
{
"mcpServers": {
"openemr-wiki": {
"command": "openemr-wiki-mcp"
}
}
}
```
If Claude Desktop is running on Windows and the MCP server is installed inside WSL, use `wsl.exe` and the exact distro name:
```json
{
"mcpServers": {
"openemr-wiki": {
"command": "wsl.exe",
"args": [
"-d",
"Ubuntu-22.04",
"-e",
"/home/your-user/.nvm/versions/node/v22.16.0/bin/node",
"/home/your-user/path/to/openemr-wiki-mcp/dist/index.js"
]
}
}
}
```
Notes:
- Replace `Ubuntu-22.04` with the exact output of `wsl -l -q` from Windows.
- Using the built `dist/index.js` path is more reliable than depending on the global shim.
- Restart Claude Desktop after saving the config.
## If You Want To Host It
This repository does not include a remote HTTP MCP transport or deployment setup.
If you want to put this online, use this project as a starting point and add the pieces that a public or shared deployment needs:
- remote MCP transport
- authentication and access control
- rate limiting
- caching
- deployment and monitoring
If someone wants to take this local-first implementation and evolve it into a hosted version, that is a good next step for a fork or contribution.
## Update
```bash
git pull && npm run build && npm install -g .
```
## Common Gotchas
- If `openemr-wiki-mcp` is not found after `npm install -g .`, your npm global bin directory is probably not in `PATH`.
- If Claude Code or Claude Desktop does not pick up your shell profile, use the absolute path from `which openemr-wiki-mcp` instead of the bare command name.
- If Claude Desktop on Windows launches the server through WSL, the distro name after `-d` must exactly match the output of `wsl -l -q`, for example `Ubuntu-22.04`.
- This is a stdio MCP server, so do not use `console.log()` for debugging. Write diagnostics to stderr with `console.error()`.
## License
MIT. See `LICENSE`.
TDQS
Scored across 5 tools
Each tool has a distinct role: search (discovery), get_page (content retrieval), get_toc (orientation), get_api_docs (developer reference), and list_by_category (browse fallback). There is mild overlap between search_openemr_wiki and list_wiki_pages_by_category as discovery mechanisms, but descriptions clearly explain when to prefer each.
All tools follow a consistent snake_case verb_noun pattern (search_, get_, get_, get_, list_). The naming is predictable and readable throughout, with no mixing of conventions.
Five tools is well-scoped for a read-only documentation retrieval server, with each tool earning its place (search, fetch, TOC, API docs, browse). No redundant or filler tools.
The surface covers discovery, content fetching, section-level fetching, API docs, and category browsing, which is solid for a documentation server. A minor gap is the lack of a generic way to list a single page's section headings, though the Users Guide TOC partially mitigates this.