← Discover MCPs and Agents
e
MCPAI & MLGitHub

eplan-rag-mcp

EPLAN Electric P8 2026 2027 + AI: MCP servers, docs RAG, and a Claude Code skill for EPLAN scripting/API development. EEC PRO RAG

Links

README

From the repo.

EPLAN AI Automation Toolkit

English · Español · 한국어 · Deutsch · 中文 · Русский

Ask DeepWiki MCP Badge

AI-assisted automation for EPLAN Electric P8 and EPLAN EEC Pro 2026, built on the Model Context Protocol (MCP).

This repository contains the local MCP server that drives a running EPLAN instance. The three remote documentation RAGs live in the separate eplan-cloudflare-rags repository.

Working with an LLM here? Read llm.md — it describes, in LLM-facing terms, everything the toolkit can do and configure.

Repository layout

.
└── eplan-p8-mcp-server/          # LOCAL: MCP server that controls EPLAN P8
ComponentTypePurposeEPLAN product
eplan-p8-mcp-server/Local Python MCPDrive a running EPLAN instance from Claude: open/close projects, exports, reports, scriptsEPLAN Electric P8
eplan-cloudflare-ragsRemote Cloudflare Workers, separate repositoryServe the P8 2026, P8 2027 and EEC Pro documentation over MCP and RESTEPLAN Electric P8 and EEC Pro
eplan-development-skillClaude Code skill, separate repositoryTeach Claude to write correct EPLAN scripts, API code and Remote Client appsEPLAN Electric P8

Each repository carries its own README with installation and usage details.

What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants interact with external tools and services. Rather than only generating code, Claude can execute actions inside EPLAN in real time and consult the documentation through search.

Quick start

Local EPLAN automation (P8)

pip install pythonnet mcp
claude mcp add eplan -- python YOURPATH/eplan-p8-mcp-server/mcp_server/server.py
claude mcp list   # should list "eplan"

Then start EPLAN, open Claude Code, and say connect to eplan. The full guide is in eplan-p8-mcp-server/mcp_server/README.md.

Claude CLI configured

Prerequisite

Remoting must be enabled in EPLAN before the server can connect: turn on Allow remote access via Remote Client under File → Settings… → Workstation → Interfaces → Remote access.

Allow remote access via Remote Client

What the server exposes

In its default full mode the server publishes 199 tools:

GroupCountWhat it covers
Connection / utility8Connect, version selection, status, extension listing
Typed EPLAN actions (eplan_*)183One tool per documented or verified action, each executed silently inside a C# script under QuietMode, so no EPLAN dialog can block an unattended run
Action catalog (eplan_action_catalog / _describe / _run / _ribbon_catalog)4Reaches a further ~1,050 actions that exist only as GUI buttons, mined from the install's MFTools.xml rather than the official docs
Asset Administration Shell (aas_*)4AAS/AASX digital-twin export and import

The ~1,050 catalog actions are deliberately not given one wrapper tool each: that would have tripled the tool count and degraded tool selection for everything else.

Among the 183 typed tools are four live-DataModel tools — eplan_live_query_functions, eplan_live_query_pages, eplan_live_set_function_text and eplan_live_set_connection_designations — which read and edit the open project's object model through runtime reflection, working around the script engine's limitation on static using directives.

Beyond individual actions, the toolset covers the building blocks of a fully unattended develop → deploy → test loop:

  • Application lifecycle — eplan_app_launch / eplan_app_shutdown / eplan_app_restart: exit EPLAN, swap add-in DLLs, relaunch, reconnect, reopen the project.
  • Disposable fixtures — eplan_scratch_project_*: scratch projects cloned from a template.
  • Diagnostics — eplan_get_system_messages: read EPLAN's message tree and see the same errors and warnings the user sees in the GUI.
  • Private extension modules — see below.

A tool-by-tool reference lives in the project wiki.

Discovery mode

EPLAN_MCP_MODE=discovery publishes 13 tools instead of 199, trading a token-heavy tool list for one extra search round-trip per task. It is worth it for MCP clients that send every tool's full schema on every request.

Skip it in Claude Code. Claude Code already defers tool schemas itself — a name list up front, a schema fetched on demand — so the full 199-tool list already costs it about as little as discovery's 13 would, and layering discovery's search → describe → call indirection on top only adds a round-trip. The tradeoff and the measurements are in eplan-p8-mcp-server/mcp_server/README.md.

Remote documentation RAGs (P8, EEC Pro, 2027)

Already deployed and ready to use — no local data required:

# EPLAN Electric P8 documentation (2026, semantic search)
claude mcp add eplan-rag -- cmd /c npx mcp-remote https://rag2026.covaga.xyz/mcp

# EPLAN EEC Pro 2026 documentation
claude mcp add eecpro-rag -- cmd /c npx mcp-remote https://rageecpro.covaga.xyz/mcp

# EPLAN Electric P8 documentation (2027, keyword/full-text search)
claude mcp add eplan-wiki-2027 -- cmd /c npx mcp-remote https://rag2027.covaga.xyz/mcp

eplan-wiki-2027 is deliberately a separate server rather than a 2026 → 2027 upgrade of eplan-rag: it indexes a different doc version and uses a different search mode (SQLite FTS5/bm25 keyword matching over cloudflare-rag-eplan-2027/'s bundled wiki, versus Vectorize + bge semantic search). Measured head-to-head on real queries they fail differently: FTS5 wins exact-name lookups ("what is the signature of X"), semantic search wins when the query shares no vocabulary with the docs at all. Install both.

Both also expose a plain REST API, which is convenient for verifying EPLAN action names and parameters while developing:

curl -X POST https://rag2026.covaga.xyz/search -H "Content-Type: application/json" \
     -d '{"query": "export project pdf", "topK": 3}'

curl -X POST https://rag2027.covaga.xyz/search -H "Content-Type: application/json" \
     -d '{"query": "FindAction", "topK": 3}'

See cloudflare-rag-eplan-p8/README.md and cloudflare-rag-eecpro/README.md for the tools, REST endpoints and architecture.

Visual symbol RAG (new)

Identify EPLAN electrical symbols from images — a cropped glyph from a PDF, schematic or screenshot in, the real short_name out:

  • Index: 33,502 EPLAN symbol images (IEC/NFPA) embedded with CLIP ViT-B/32 (512-dim, cosine) into Cloudflare Vectorize, from covaga/electrical-symbols-dataset.
  • Public endpoint https://symbols.covaga.xyz (same open pattern as the other RAGs — no credentials):
# vector = CLIP ViT-B/32 L2-normalized embedding of the symbol image
curl -X POST https://symbols.covaga.xyz/query -H "Content-Type: application/json" \
     -d '{"vector": [0.01, -0.02, "...512 floats..."], "topK": 5}'

Each match carries short_name, catalog number, description and variant_id, plus a cosine score — the short_name is the identifier EPLAN API calls expect. Re-indexing and redeploy run through GitHub Actions in cloudflare-rag-symbols/.

Using it from this MCP server

A ready-made extension ships in eplan-p8-mcp-server/extensions/symbol_search.py. Enable it and the agent gets an eplan_symbol_search tool:

pip install sentence-transformers pillow requests
set EPLAN_MCP_EXTENSIONS=<repo>\eplan-p8-mcp-server\extensions

Then, pointed at a cropped symbol image, Claude calls eplan_symbol_search(image_path="C:\\...\\crop.png") → the image is embedded locally with CLIP → symbols.covaga.xyz returns candidates like F1 (no. 50, variant B) — Fuse, single-pole → use the top short_name in EPLAN API calls. No Cloudflare token needed: the Worker holds the index binding.

Claude Code skill for EPLAN development

The MCP servers let Claude act on EPLAN. The eplan-development skill teaches it to write correct EPLAN code: scripting entry points, verified action parameters, parts-database access, Remote Client automation (dynamic ports, headless EPLAN, Cogineer), and the production pitfalls — pseudo-asynchronous command blocking, the message-loop monitor thread, dispose discipline, the EPLAN 2025 remoting changes.

The skill lives in its own repository and is deliberately host-agnostic: it assumes no MCP server, no particular script runner and no particular documentation index, so it is useful on its own whether or not you run anything else from here.

/plugin marketplace add covagashi/eplan-development-skill
/plugin install eplan-development@eplan-skills

This repository is also a plugin marketplace whose entry points to the same skill repository:

/plugin marketplace add covagashi/eplan-rag-mcp
/plugin install eplan-development@eplan-tools

Manual installation and details: the skill's own README.

Adding new EPLAN actions

The local MCP server registers tools dynamically from each actions package's __all__ list, so adding an action takes two steps and no per-tool boilerplate.

1. Implement the action

In eplan-p8-mcp-server/mcp_server/api/actions/<your_module>.py:

def open_project(project_path: str, open_mode: str = None) -> dict:
    """Open a project in EPLAN.

    Args:
        project_path: Full path to the .elk project file.
        open_mode: "Standard", "ReadOnly", or "Exclusive" (optional).
    """
    manager, error = _get_connected_manager()
    if error:
        return error
    action = _build_action("ProjectOpen", Project=project_path, OpenMode=open_mode)
    return manager.execute_action(action)

2. Export it

Add the function to the imports and to __all__ in eplan-p8-mcp-server/mcp_server/api/actions/__init__.py. It is then auto-registered as eplan_open_project.

3. Restart the MCP server

The new tool becomes available once Claude / the server restarts.

4. Validate against the official docs (optional)

eplan-p8-mcp-server/tools/validate_actions.py cross-checks every action name and parameter declared in the wrappers against the official EPLAN docs RAG and writes a markdown report:

python eplan-p8-mcp-server/tools/validate_actions.py

EPLAN test

Tips

  1. Verify against the docs. Use the remote P8 RAG (https://rag2026.covaga.xyz) to confirm the exact EPLAN action name and its parameters.
  2. Write meaningful docstrings and type hints. They become the tool description and input schema the LLM sees and relies on.
  3. Handle paths carefully. Windows paths need escaping (\\) or forward slashes (/).

Private extension modules (EPLAN_MCP_EXTENSIONS)

The server can load extra tool modules from outside this repository — company-specific or private tooling (custom add-in test harnesses, internal workflows) that must not live in a public repo.

Point the EPLAN_MCP_EXTENSIONS environment variable at one or more directories (separated by ; on Windows). Every top-level *.py file there that does not start with _ is imported at startup, and its __all__ functions are registered as MCP tools exactly like the built-in actions:

# my_company_tools.py  (in a private repo, NOT in eplan-rag-mcp)
TOOL_PREFIX = "acme_"          # optional, default "eplan_"
__all__ = ["run_smoke_test"]

import actions                  # the server's api/ folder is on sys.path
from actions._base import _get_connected_manager

def run_smoke_test(project_path: str) -> dict:
    """Docstring becomes the tool description the LLM sees."""
    clone = actions.scratch_project_create(project_path)
    ...
    return {"success": True}

Rules and behaviour:

  • TOOL_PREFIX namespaces the tools (acme_run_smoke_test above).
  • Extensions may import everything the built-in actions use: actions, actions._base, actions.scripted._execute_script (run C# inside EPLAN), eplan_connection.
  • A broken extension is reported on stderr and skipped; it never prevents the server from starting.
  • eplan_list_extensions shows what was loaded.

Combined with the lifecycle and scratch-fixture tools, this enables a fully unattended loop for developing private EPLAN add-ins: build the DLL → deploy → eplan_app_restart → verify the add-in's actions registered (for example via a FindAction script) → run them against a disposable scratch project → eplan_get_system_messages to catch anything EPLAN complained about.

EPLAN version selection (automatic)

There is nothing to configure. On startup the server scans C:\Program Files\EPLAN\Platform for installed versions and:

  • Auto mode (default): eplan_connect targets the newest installed version and picks the matching .NET runtime automatically — coreclr for EPLAN 2027+, .NET Framework for 2026 and older.
  • Explicit mode: the LLM can call eplan_versions to list what is installed and then connect to a specific one with eplan_connect(version="2026") — e.g. "connect to eplan 2026".

Notes:

  • EPLAN installed somewhere non-standard? Set EPLAN_PLATFORM_ROOT to its Platform folder.
  • Once one version's DLLs are loaded into the process, switching versions requires restarting the MCP server — a .NET runtime cannot be swapped at runtime.
  • eplan_connect also accepts a host (and "host:port") to reach an EPLAN instance on another machine; port auto-detection only works on localhost.

Related repositories

RepositoryWhat it is
eplan-development-skillThe Claude Code skill above, standalone and host-agnostic. Install with /plugin marketplace add covagashi/eplan-development-skill.
eplan-ctxmenu-kitAdd your own entries to EPLAN's right-click menus, and read the row the user clicked. A discovery tool plus a worked example.

Resources

License

MIT — see license.

Collected info

  • ★ 104 stars
  • ⎇ 26 forks
  • Language: Python
  • Source updated: 9/26/2026

Config for your environment

Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.

Tool

OS

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-server": {
      "url": "{MCP_ENDPOINT_URL}"
    }
  }
}

Paste into mcpServers in the config file. Restart Cursor after saving.

If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.