Servidor EPICS-MCP
Descripción general
- El servidor EPICS MCP es un servidor basado en Python, diseñado para interactuar con las variables de proceso (VP) de EPICS (Sistema de Control Industrial y Física Experimental). Proporciona un conjunto de herramientas para recuperar valores de VP, establecerlos y obtener información detallada sobre las VP. El servidor está desarrollado con el framework mcp y se comunica a través de stdio, lo que lo hace ideal para su integración en sistemas de control o flujos de trabajo más amplios.
- Esta herramienta es particularmente útil en entornos donde se utilizan EPICS PV para monitorear y controlar parámetros de hardware o software.
Características
- El servidor EPICS MCP proporciona las siguientes herramientas:
- obtener_valor_pv
- Crear o actualizar un solo archivo en un repositorio
- Entradas:
pv_name
(cadena): el nombre de la variable PV.
- Devuelve: un objeto JSON que contiene el estado (
success
o error
) y el valor recuperado o un mensaje de error.
- establecer_valor_pv
- Establecer un nuevo valor para un PV específico.
- Entradas:
pv_name
(cadena): el nombre de la variable PV.pv_value
(cadena): el nuevo valor que se establecerá para el PV.
- Devuelve: un objeto JSON que contiene el estado (
success
o error
) y un mensaje de confirmación o un mensaje de error.
- obtener_información_pv
- Obtiene información detallada sobre un PV específico.
- Entradas:
pv_name
(cadena): el nombre de la variable PV.
- Devuelve: un objeto JSON que contiene el estado (
success
o error
) y la información detallada sobre el PV o un mensaje de error.
Uso con Langchain
- Para usar esto con Langchain, debe instalar las dependencias necesarias para el proyecto.
pip install -r requirements.txt
server_params = StdioServerParameters(
command="python",
# Make sure to update to the full absolute path to your math_server.py file
args=["/path/server.py"],
)
ÉPICOS
- Antes de usar el servidor EPCIS mcp, debe instalar EPCIS correctamente en su equipo local, asegurarse de que IOC se inicie correctamente y verificar que funciones como
caget
, caput
y cainfo
funcionen correctamente. Para obtener instrucciones detalladas de instalación, consulte 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
Resultado de la prueba
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
)
================================[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.