返回 MCP 目录
public公开dns本地运行

epics-mcp-server

EPICS MCP服务器是一个基于Python的工具,用于与EPICS系统交互,提供获取、设置PV值和查询PV信息的功能。

article

README

🚀 EPICS-MCP-Server

EPICS-MCP-Server 是一个基于 Python 的服务器,旨在与 EPICS(实验物理和工业控制系统)过程变量(PV)进行交互。它提供了一组工具,用于检索 PV 值、设置 PV 值以及获取 PV 的详细信息。该服务器使用 mcp 框架构建,并通过标准输入输出进行通信,适合集成到更大的控制系统或工作流程中。

🚀 快速开始

依赖安装

若要将此服务器与 Langchain 结合使用,你需要安装项目所需的依赖项:

pip install -r requirements.txt

Langchain 配置

server_params = StdioServerParameters(
    command="python",
    # 请确保更新为你的 math_server.py 文件的完整绝对路径
    args=["/path/server.py"],
)

EPICS 安装与验证

在使用 EPCIS mcp 服务器之前,你必须在本地机器上成功安装 EPCIS,确保 IOC 能够正常启动,并验证 cagetcaputcainfo 等功能是否正常工作。详细的安装说明请参考 https://epics-controls.org/resources-and-support/base/

以下是启动 IOC 并验证功能的示例:

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

✨ 主要特性

EPICS MCP 服务器提供了以下工具:

  1. get_pv_value

    • 功能:获取指定 PV 的值。
    • 输入:
      • pv_name(字符串):PV 变量的名称。
    • 返回:一个 JSON 对象,包含状态(successerror)以及检索到的值或错误消息。
  2. set_pv_value

    • 功能:为指定的 PV 设置新值。
    • 输入:
      • pv_name(字符串):PV 变量的名称。
      • pv_value(字符串):要为 PV 设置的新值。
    • 返回:一个 JSON 对象,包含状态(successerror)以及确认消息或错误消息。
  3. get_pv_info

    • 功能:获取指定 PV 的详细信息。
    • 输入:
      • pv_name(字符串):PV 变量的名称。
    • 返回:一个 JSON 对象,包含状态(successerror)以及 PV 的详细信息或错误消息。

💻 使用示例

基础用法

以下是使用 Mcp 客户端的示例:

async def run():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # 初始化连接
            await session.initialize()

            # 获取工具
            tools = await load_mcp_tools(session)

            # 创建并运行代理
            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
)

测试结果

================================ Human Message =================================

To query the value of a PV (Process Variable) named temperature:water
================================== Ai Message ==================================
Tool Calls:
  get_pv_value (call_vvbXwi51CyYUxEM0hcyvCFCY)
 Call ID: call_vvbXwi51CyYUxEM0hcyvCFCY
  Args:
    pv_name: temperature:water
================================= Tool Message =================================
Name: get_pv_value

{
  "status": "success",
  "value": 88.0
}
================================== Ai Message ==================================

The current value of the PV named `temperature:water` is 88.0.
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端