EPICS-MCP-서버
개요
- EPICS MCP 서버는 EPICS(실험 물리학 및 산업 제어 시스템) 프로세스 변수(PV)와 상호 작용하도록 설계된 Python 기반 서버입니다. PV 값을 검색하고, 설정하고, PV에 대한 자세한 정보를 가져오는 도구 세트를 제공합니다. 이 서버는 mcp 프레임워크를 사용하여 구축되었으며 stdio를 통해 통신하므로 대규모 제어 시스템이나 워크플로에 통합하는 데 적합합니다.
- 이 도구는 EPICS PV를 사용하여 하드웨어나 소프트웨어 매개변수를 모니터링하고 제어하는 환경에서 특히 유용합니다.
특징
- EPICS MCP 서버는 다음과 같은 도구를 제공합니다.
- get_pv_value
- 저장소에서 단일 파일을 생성하거나 업데이트합니다.
- 입력:
pv_name
(문자열): PV 변수의 이름입니다.
- 반환: 상태(
success
또는 error
)와 검색된 값 또는 오류 메시지를 포함하는 JSON 객체입니다.
- 설정_pv_값
- 지정된 PV에 대한 새 값을 설정합니다.
- 입력:
pv_name
(문자열): PV 변수의 이름입니다.pv_value
(문자열): PV에 설정할 새 값입니다.
- 반환: 상태(
success
또는 error
)와 확인 메시지 또는 오류 메시지가 포함된 JSON 객체입니다.
- get_pv_info
- 지정된 PV에 대한 자세한 정보를 가져옵니다.
- 입력:
pv_name
(문자열): PV 변수의 이름입니다.
- 반환: PV에 대한 상태(
success
또는 error
)와 자세한 정보 또는 오류 메시지가 포함된 JSON 객체입니다.
Langchain과 함께 사용
- Langchain과 함께 사용하려면 프로젝트에 필요한 종속성을 설치해야 합니다.
지엑스피1
server_params = StdioServerParameters(
command="python",
# Make sure to update to the full absolute path to your math_server.py file
args=["/path/server.py"],
)
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
테스트 결과
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.