EPICS-MCP-Server
Überblick
Der EPICS MCP Server ist ein Python-basierter Server, der für die Interaktion mit EPICS-Prozessvariablen (Experimental Physics and Industrial Control System) entwickelt wurde. Er bietet eine Reihe von Tools zum Abrufen und Festlegen von PV-Werten sowie zum Abrufen detaillierter Informationen zu PVs. Der Server basiert auf dem MCP-Framework und kommuniziert über stdio. Dadurch eignet er sich für die Integration in größere Steuerungssysteme oder Workflows.
Dieses Tool ist besonders in Umgebungen nützlich, in denen EPICS PVs zur Überwachung und Steuerung von Hardware- oder Softwareparametern verwendet werden.
Merkmale
Der EPICS MCP-Server bietet die folgenden Tools:
get_pv_value
Erstellen oder Aktualisieren einer einzelnen Datei in einem Repository
Eingänge:
pv_name(Zeichenfolge): Der Name der PV-Variable.
Gibt zurück: Ein JSON-Objekt, das den Status (
successodererror) und den abgerufenen Wert oder eine Fehlermeldung enthält.
setze_pv_value
Legen Sie einen neuen Wert für einen angegebenen PV fest.
Eingänge:
pv_name(Zeichenfolge): Der Name der PV-Variable.pv_value(Zeichenfolge): Der neue Wert, der für den PV festgelegt werden soll.
Gibt zurück: Ein JSON-Objekt, das den Status (
successodererror) und eine Bestätigungsnachricht oder eine Fehlermeldung enthält.
get_pv_info
Ruft detaillierte Informationen zu einem angegebenen PV ab.
Eingänge:
pv_name(Zeichenfolge): Der Name der PV-Variable.
Gibt zurück: Ein JSON-Objekt, das den Status (
successodererror) und die detaillierten Informationen zum PV oder eine Fehlermeldung enthält.
Verwendung mit Langchain
Um dies mit Langchain zu verwenden, müssen Sie die für das Projekt erforderlichen Abhängigkeiten installieren.
pip install -r requirements.txtLangchain
server_params = StdioServerParameters(
command="python",
# Make sure to update to the full absolute path to your math_server.py file
args=["/path/server.py"],
)EPICS
Bevor Sie den EPCIS-MCP-Server verwenden, müssen Sie EPCIS erfolgreich auf Ihrem lokalen Rechner installieren, sicherstellen, dass IOC normal startet und Funktionen wie
caget,caputundcainfoordnungsgemäß funktionieren. Detaillierte Installationsanweisungen finden Sie unter https://epics-controls.org/resources-and-support/base/ .
jiangyan@DESKTOP-84CO9VB:~$ softIoc -d ~/EPICS/DB/test.db
Starting iocInit
############################################################################
## EPICS R7.0.8
## Rev. 2025-02-13T14:29+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
epics>jiangyan@DESKTOP-84CO9VB:~$ caget temperature:water
temperature:water 88
jiangyan@DESKTOP-84CO9VB:~$ caput temperature:water 100
Old : temperature:water 88
New : temperature:water 100
jiangyan@DESKTOP-84CO9VB:~$ cainfo temperature:water
temperature:water
State: connected
Host: 127.0.0.1:5056
Access: read, write
Native data type: DBF_DOUBLE
Request type: DBR_DOUBLE
Element count: 1
Testergebnis
Mcp-Client:
async def run():
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools
tools = await load_mcp_tools(session)
# Create and run the agent
agent = create_react_agent(model, tools)
agent_response = await agent.ainvoke({"messages": "To query the value of a PV (Process Variable) named temperature:water"})
return agent_response
)Ergebnis:
================================[1m Human Message [0m=================================
To query the value of a PV (Process Variable) named temperature:water
==================================[1m Ai Message [0m==================================
Tool Calls:
get_pv_value (call_vvbXwi51CyYUxEM0hcyvCFCY)
Call ID: call_vvbXwi51CyYUxEM0hcyvCFCY
Args:
pv_name: temperature:water
=================================[1m Tool Message [0m=================================
Name: get_pv_value
{
"status": "success",
"value": 88.0
}
==================================[1m Ai Message [0m==================================
The current value of the PV named `temperature:water` is 88.0.