EPICS-MCP-サーバー
概要
- EPICS MCPサーバーは、EPICS(実験物理学および産業用制御システム)のプロセス変数(PV)と連携するために設計されたPythonベースのサーバーです。PV値の取得、PV値の設定、PVに関する詳細情報の取得を行うためのツールセットを提供します。このサーバーはmcpフレームワークを使用して構築されており、stdio経由で通信するため、大規模な制御システムやワークフローへの統合に適しています。
- このツールは、ハードウェアまたはソフトウェア パラメータの監視と制御に EPICS PV が使用される環境で特に役立ちます。
特徴
- EPICS MCP サーバーは次のツールを提供します。
- get_pv_value
- リポジトリ内の単一のファイルを作成または更新する
- 入力:
- 戻り値: ステータス (
success
またはerror
) と取得された値またはエラー メッセージを含む JSON オブジェクト。
- PV値の設定
- 指定された PV に新しい値を設定します。
- 入力:
pv_name
(文字列): PV 変数の名前。pv_value
(文字列): PV に設定する新しい値。
- 戻り値: ステータス (
success
またはerror
) と確認メッセージまたはエラー メッセージを含む JSON オブジェクト。
- 取得PV情報
- 指定された PV に関する詳細情報を取得します。
- 入力:
- 戻り値: ステータス (
success
またはerror
) と PV に関する詳細情報またはエラー メッセージを含む JSON オブジェクト。
Langchainでの使用
- これを Langchain で使用するには、プロジェクトに必要な依存関係をインストールする必要があります。
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"],
)
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.