Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

EPICS Channel Access

von K-Dense-AIVersion 0.1.2i★ –iLäuft auf deinem Computer
Name in der Registryio.github.K-Dense-AI/labmcp-epics

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

MCP server for EPICS Channel Access: read, monitor and guarded writes of process variables.

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft auf deinem Computer
  • Transport: stdio
  • Kategorie: Sonstiges

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf deinem Computer mit den Rechten deines Benutzerkontos (Dateien, Netzwerk, Apps).
  • Das trägst du selbst ein: LABMCP_ADDRESS, LABMCP_SIMULATE, LABMCP_READ_ONLY, LABMCP_LIMITS

Du brauchst

  • PyPIuv für Python installiert (für den Befehl uvx)

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein

{
  "mcpServers": {
    "labmcp-epics": {
      "command": "uvx",
      "args": [
        "labmcp-epics"
      ],
      "env": {
        "LABMCP_ADDRESS": "your-value",
        "LABMCP_SIMULATE": "your-value",
        "LABMCP_READ_ONLY": "your-value",
        "LABMCP_LIMITS": "your-value"
      }
    }
  }
}

Führe das in deinem Terminal aus

claude mcp add labmcp-epics --env LABMCP_ADDRESS=your-value --env LABMCP_SIMULATE=your-value --env LABMCP_READ_ONLY=your-value --env LABMCP_LIMITS=your-value -- uvx labmcp-epics

Trag die leeren Werte ein, bevor du ihn startest.

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "labmcp-epics": {
      "command": "uvx",
      "args": [
        "labmcp-epics"
      ],
      "env": {
        "LABMCP_ADDRESS": "your-value",
        "LABMCP_SIMULATE": "your-value",
        "LABMCP_READ_ONLY": "your-value",
        "LABMCP_LIMITS": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "labmcp-epics": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "labmcp-epics"
      ],
      "env": {
        "LABMCP_ADDRESS": "your-value",
        "LABMCP_SIMULATE": "your-value",
        "LABMCP_READ_ONLY": "your-value",
        "LABMCP_LIMITS": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Werte, die du selbst einträgst

  • LABMCP_ADDRESS env
    Instrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
  • LABMCP_SIMULATE env
    Set to 1 to use the built-in simulator (no hardware)
  • LABMCP_READ_ONLY env
    Set to 1 to disable all state-changing tools
  • LABMCP_LIMITS env
    Safety limit overrides, e.g. max_temperature_c=80

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 8. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde mit dem GitHub-Konto K-Dense-AI bestätigt, dem das Repo gehört

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • – Nicht zutreffend

    Endpunkt antwortet

    Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen

Im Vergleich mit anderen in Sonstigesi

  • Mehr Sterne als 0 % der anderen 18360 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 53 % der anderen 18360 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 18360 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist EPICS Channel Access sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.

Läuft er auf meinem Computer oder in der Cloud?

Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.2) kam vor 42 Tagen in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Tool Guardian

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Spec Driven Development

von formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Läuft auf deinem Computer★ 440MITAktualisiert vor 14 Monaten
Installieren

Remote Desktop Commander

von desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Läuft in der Cloud★ 211Aktualisiert vorgestern
Installieren

Tool Guardian

von LuminariSoftwares

Too many MCP servers eating your context? A router that loads each tool's schema only when needed.

Läuft auf deinem ComputerAktualisiert heute
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

EPICS Channel Access — MCP Server

Let an AI agent read, monitor and, when you allow it, carefully write EPICS process variables (PVs) over Channel Access. EPICS is the control system behind most particle accelerators, synchrotron and neutron beamlines, large telescopes, fusion experiments and many physics labs. The server uses caproto, a pure-Python CA implementation, so there is nothing to compile and no libca to install.

⚠️ Facility control systems are safety-critical. Writing a PV can move motors and sample stages, open shutters, ramp magnets or high voltage, and change cryogenic or vacuum systems. Follow your facility's rules. Get authorisation from the responsible scientist or control-room staff before enabling writes, and run with `--read-only` unless writes are explicitly authorised. This server is not an interlock or a personnel-protection system and never replaces them. Where possible, connect through the facility's CA gateway with its access-security rules, and limit writes with --option put_allowlist=.

Packagelabmcp-epics
InstrumentsAny EPICS IOC serving Channel Access: EPICS Base 3.14–7.x soft/hard IOCs, areaDetector, motor, asyn, StreamDevice, caproto/pythonSoftIOC IOCs, CA gateways
InterfacesEthernet: CA search on UDP 5064, circuits on TCP 5064, repeater on UDP 5065
ProtocolEPICS Channel Access v4.13 (protocol specification, ao record: DRVH/DRVL, caproto threading client)
Status🧪 simulated: tested against an in-process caproto IOC (real CA over localhost), not yet verified at a facility. Report a hardware test

Try it without hardware

uvx labmcp-epics --simulate --check

The simulator is a real Channel Access server running in-process. It is bound to 127.0.0.1 on random free ports, and the client is pointed only at that address (auto address list off), so it neither broadcasts on nor answers your network. It serves SIM:TEMP (°C, with alarm limits, following SIM:TEMP:SP while SIM:HEATER is On), SIM:MTR (a motor whose put-callback completes only when the move is done, with SIM:MTR:RBV, :DMOV, :STOP and :VELO), SIM:DET:FRAMES, SIM:SAMPLE (string), SIM:SPECTRUM (a 512-point waveform), SIM:BEAM:CURRENT and SIM:STATUS.

Connect to your control system

  1. Network: your computer must reach the IOCs, or the facility's CA gateway: UDP 5064/5065 and TCP 5064 through any firewall. Most facilities put control networks behind a gateway, so ask your controls group for its address.
  2. Address list: Channel Access finds PVs by UDP search. Either use your usual EPICS environment (EPICS_CA_ADDR_LIST, EPICS_CA_AUTO_ADDR_LIST), or pass it explicitly:
   uvx labmcp-epics --read-only --address 10.0.1.20 --option check_pv=SR:CURRENT --check   # one IOC / gateway

uvx labmcp-epics --read-only --option ca_addr_list="gw1.facility.org 10.0.1.21:5064" --option check_pv=BL7:RING:I --check uvx labmcp-epics --read-only --option check_pv=BL7:RING:I --check # use the environment as-is

   Passing an address list switches the automatic (broadcast) list off unless you add `--option auto_addr_list=yes`. With `--option check_pv=<a PV you know exists>`, `--check` reads that PV and prints its value, or the reason it can't be reached. Without it, `--check` only confirms that the CA client starts.

Add to your MCP client

Claude Code (read-only, recommended)

claude mcp add epics -- uvx labmcp-epics --read-only --address gw1.facility.org

Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)

{

"mcpServers": { "epics": { "command": "uvx", "args": ["labmcp-epics", "--read-only", "--address", "gw1.facility.org"] } } }

Authorised writes (example: a beamline scientist lets the agent move only the sample stage and the filter wheel, and configures an emergency safe state):

uvx labmcp-epics --address 10.0.7.10 \

--option put_allowlist='BL7:(SAMPLE:(X|Y)|FILTER:POS)' \ --option require_ctrl_limits=true \ --option safe_state='BL7:SAMPLE:X.STOP=1;BL7:SAMPLE:Y.STOP=1;BL7:SHUTTER:CMD=Close'

Tools

ToolKindDescription
apply_safe_state🛑 safetyEmergency action: write the scientist-configured safe-state PVs (--option safe_state, e.g. motor STOP fields, shutter close, HV off), all of them even if one fails. Available in read-only mode. It does not replace the facility's own interlocks and stop buttons.
get_command_log👁 readReturn the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done.
get_connection_info👁 readReport which instrument is connected (identity, address, simulated or real), whether the server is read-only, and the active safety limits. Call this first.
get_pv👁 readRead one PV with its metadata: value, units, precision, alarm severity/status, IOC timestamp and age, display/alarm/warning/control limits and enum state names. Waveforms come back downsampled with min/max/mean statistics.
get_pvs👁 readRead many PVs at once (e.g. all motors or vacuum gauges of a beamline). PVs that cannot be reached are listed in errors instead of failing the whole call.
monitor_pv👁 readSubscribe to a PV and collect every value change for duration_s seconds (or until max_updates), then return statistics (min/max/mean/std, drift rate) and the updates.
put_pv⚠️ hazardWrite a PV. This can move motors, open shutters, change magnet or high-voltage setpoints and heat or cool samples: tell the user exactly what will change first. The write is refused unless the PV matches the put allow-list, the IOC grants write access, and the value has the right type and lies within the PV's control limits (DRVL/DRVH). Returns the read-back value.
put_pvs⚠️ hazardWrite several PVs in order (e.g. set both slit blades). Every write is validated first (allow- list, access rights, type, control limits); if any is invalid nothing is written. Writing stops at the first failure and the rest are reported as not written. The whole batch must finish within an hour: writes that would start later are not sent.
pv_info👁 readConnection details of a PV: serving IOC host:port, native type, element count, and whether this client has read/write access (EPICS access security) and passes the put allow-list.
reconnect🛑 safetyClose and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged).

Safety limits

LimitDefaultMeaning
max_monitor_duration_s60 sLongest monitor_pv collection
max_put_batch10 PVsMost PVs one put_pvs call may write
max_put_wait_s60 sLongest wait for one put-callback (completion)

Override at launch, e.g. --limit max_put_batch=4. The main write guards are options, not numeric limits:

GuardHow
Read-only mode--read-only hides put_pv and put_pvs entirely
Allow-list--option put_allowlist= : a PV name must fully match it to be written. Prefer patterns that exclude record fields (BL7:SAMPLE:[^.]* rather than BL7:SAMPLE:.*)
Limit fieldswrites to the fields that set the limits (.DRVH, .DRVL, .HOPR, .LOPR, and the motor record's .HLM, .LLM, .DHLM, .DLLM) are refused, so a write can't raise a limit and then pass it. --option allow_limit_field_writes=true permits them
EPICS access securitywrites are refused up front if the IOC or gateway grants this client read-only access
Control limitsnumeric writes outside the PV's control limits are refused. For output records these are DRVL/DRVH, which the IOC would otherwise silently clip to. A NaN limit means no limit on that side
No limits configuredallowed with a warning, or refused with --option require_ctrl_limits=true
Type checksenum states must be valid names or indices, integers must be integral and in range, 32-bit FLOAT values must fit, strings are at most 39 latin-1 characters, arrays must fit the element count
PV namesno whitespace or quotes, and record names of at most 59 characters (EPICS 3.14+); anything else is refused before a search is sent
Batchesput_pvs validates every write before sending any, stops at the first failure, and sends no write once its one-hour budget (inside the tool timeout) is used up
Put-completionput_pv waits for the IOC's put-callback. On timeout it says the IOC may still be processing and not to repeat blindly
Safe stateapply_safe_state (SAFETY, available even in read-only mode) writes only the PVs the scientist configured with --option safe_state

Example prompts

  • "What is the storage-ring current, and are any of the BL7 vacuum gauges in alarm?"
  • "Read BL7:MONO:ENERGY and its readback, and tell me the units and control limits."
  • "Monitor the sample temperature for 30 s and tell me whether it is still drifting."
  • "Move the sample stage X to 12.5 mm and confirm the readback when the move is done."
  • "Record the detector spectrum waveform and tell me where the peak is."
  • "Stop everything: apply the safe state."

Notes

  • Setpoint versus readback: for motor records, NAME (VAL) is the target and NAME.RBV is the actual position. put_pv returns the value read back from the PV you wrote, so read the readback PV separately to confirm physical motion.
  • Control limits come from the CA DBR_CTRL response. EPICS convention treats equal low and high limits (normally 0/0) as "not configured", and those PVs are only type-checked.
  • NaN and infinity: JSON has neither. A NaN or infinite scalar value comes back as the text "nan", "inf" or "-inf", array elements as null, a limit that is NaN (EPICS 3.16+ reports unset alarm limits that way) as null, and waveform and monitor statistics leave such values out and count them (non_finite, non_finite_updates).
  • Alarms: every reading includes severity (NO_ALARM, MINOR_ALARM, MAJOR_ALARM, INVALID_ALARM), status (HIHI, LOLO, UDF, COMM, …) and age_s, the time since the IOC timestamp, so stale values stand out.
  • Waveforms are downsampled by block averaging to max_elements, with min/max/mean/argmax statistics. CHAR waveforms are also decoded to text (as_string), the usual EPICS long-string convention. When writing, a text value is accepted for CHAR waveforms.
  • pvAccess: only Channel Access is supported. caproto 1.x implements CA only, and pvAccess would need p4p, a compiled EPICS Base binding that is deliberately not a dependency. EPICS 7 IOCs serve their records over both CA and PVA, so this covers normal records. PVA-only data (for example NTNDArray images from areaDetector's PVA plugin, or QSRV group PVs) can't be read.
  • The CA client is configured through EPICS_CA_* environment variables, as in EPICS Base. The server sets them for its own process from --address/--option and restores them on disconnect. If put_allowlist holds a comma, pass it on the command line or give LABMCP_OPTIONS in its JSON form ({"put_allowlist": "BL7:(A|B){1,2}"}), because the a=1,b=2 form splits on commas.
  • get_command_log records every write (caput -c NAME value) and its read-back.

Hardware verif

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen