FactVerse MCP — 任意の AI Agent 向け Physical AI ツール
Model Context Protocol (MCP) 経由で、任意の AI Agent から FactVerse の物理世界ツールを呼び出せます。
MCP とは?
Model Context Protocol は、AI アプリケーション(Claude Desktop、Cursor、自作 Agent など)が外部ツールやデータソースを安全に呼び出せるようにするオープン標準です。
FactVerse はプラットフォームのツールを 基盤 / モジュール(base / module) の区分で並列のガバナンス切片に分割しています。各切片は独立したエンドポイントで、per-customer API key から テナント + scope を解決して認証します。
| 切片 | 用途 | 代表ツール |
|---|---|---|
| base(基盤) | 汎用読み取り + 汎用計算 + 横断的な実行 | 設備状態、ナレッジ照会、シミュレーション、最適化、予測、作業票作成 |
| trafficops(モジュール) | 人流/車流オペレーション | 交通予測、検問レーン、巡回スケジュール、サージ検知 |
| pdm(モジュール) | 予知保全 | 設備健全性、予知保全 サマリ/異常、フィルタインテリジェンス |
| telcoops(モジュール) | 通信ネットワーク運用 | ネットワーク健全性、インシデント解説、容量予測 |
| semiops(モジュール) | 半導体 / クリーンルーム / Fab / SMT | クリーンルーム状態、パーティクル/差圧、HEPA フィルタ寿命、ISO 14644 適合、Fab PUE、SMT OEE |
その他の顧客専用切片は、契約された導入範囲に応じて個別に有効化できます。
クイックスタート
以下は base 切片(汎用読み取り + 汎用計算)の例です。モジュールを使う場合は URL の
base を trafficops / pdm / telcoops / semiops に置き換え、対応する scope を持つ key を使います。
Claude Desktop
claude_desktop_config.json に追加:
{
"mcpServers": {
"factverse-base": {
"url": "https://your-factverse-server/mcp/base/",
"headers": {
"X-API-Key": "fvk_your_scoped_key"
}
}
}
}
Cursor IDE
.cursor/mcp.json に:
{
"mcpServers": {
"factverse-base": {
"url": "https://your-factverse-server/mcp/base/",
"headers": {
"X-API-Key": "fvk_your_scoped_key"
}
}
}
}
Python クライアント
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
async with streamablehttp_client(
"https://your-factverse-server/mcp/base/",
headers={"X-API-Key": "fvk_your_scoped_key"}
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# この key で見えるツールを列挙
tools = await session.list_tools()
for tool in tools.tools:
print(f"{tool.name}: {tool.description[:60]}...")
# ツール呼び出し:設備状態を照会(base.read)
result = await session.call_tool(
"get_equipment_status",
{"equipment_id": "EQ-001"}
)
print(result)
# シミュレーション実行(base.compute.run)
result = await session.call_tool(
"run_simulation",
{
"scene_type": "trafficops",
"scene_id": "rts-main-hall",
"simulation_time": 480
}
)
print(result)
ツール分類(切片ごと)
base — 汎用読み取り · scope base.read
| ツール名 | 説明 |
|---|---|
get_equipment_status | 設備のリアルタイム状態とセンサー値を取得 |
query_knowledge | ナレッジグラフ照会(設備/故障/関連) |
search_documents | 文書検索 |
get_equipment_documents | 設備関連文書 |
list_connectors | データコネクタ一覧 |
check_data_quality | データ品質チェック |
get_pending_tasks | 承認待ちタスク取得(読み取り専用) |
base — 汎用計算(シミュレーション/最適化/予測/分析/空間) · scope base.compute.run
| ツール名 | 説明 |
|---|---|
run_simulation | DES シミュレーション実行(交通/空調/設備) |
run_doe | 実験計画法を実行(主要因子の特定) |
run_dag_simulation | DAG 検問シミュレーション + Sankey 分析 |
run_what_if_comparison | A/B シナリオの What-If 比較 |
run_optimization | NSGA-II 多目的最適化 |
optimize_layout | 施設の空間レイアウト最適化 |
get_optimization_recommendation | 予算制約下の最適人員配置 |
base — 実行(書き込み) · scope base.action.write(既定では付与しない)
| ツール名 | 説明 |
|---|---|
create_work_order | AI の提案から作業票を作成 |
pdm — 予知保全 · scope pdm.read
| ツール名 | 説明 |
|---|---|
get_equipment_health | 設備健全性スコア |
get_pdm_summary | 予知保全 サマリ |
list_pdm_anomalies | 予知保全 異常一覧 |
semiops — 半導体 / クリーンルーム / Fab / SMT · scope semiops.read
| ツール名 | 説明 |
|---|---|
get_cleanroom_status | クリーンルーム環境状態 |
get_particle_trend | パーティクル傾向 |
get_pressure_gradient | 差圧勾配 |
get_fab_pue | Fab PUE 値 |
get_filter_life | HEPA フィルタ寿命 |
get_iso_compliance | ISO 14644 適合状態 |
get_smt_oee | SMT ライン OEE |
get_utility_status | ユーティリティ(CDA/N2/電力/水)状態 |
analyze_env_correlation | 環境パラメータ相関分析 |
monitor_particles | パーティクルのリアルタイム監視 |
predict_env_trend | 環境傾向予測 |
simulate_smt_bottleneck | SMT ラインのボトルネックシミュレーション |
forecast_fab_load | Fab 負荷予測 |
optimize_chiller_cop | 冷凍機 COP 最適化 |
trafficops / telcoops のツール一覧は各切片の
tools/listで確認できます。
認証・認可(key → テナント + scope)
各 /mcp/<切片> はガバナンス対象のエンドポイントです。各リクエストは per-customer API key で認証し、サーバ側が key からテナントと権限 scope を解決します(クライアントはテナントを渡さず、共有キーも使えません)。
- Header:
X-API-Key: fvk_…(Authorization: Bearerではない) - key は管理者がテナント単位で発行(ハッシュ保存・一度だけ表示)。自己発行不可。
- key なし → ゲートウェイで 403、無効/失効 key → 401。
Scope(その key が呼べるツール)
| scope | 切片 | ツール |
|---|---|---|
base.read | base | 汎用読み取り(設備状態、ナレッジ照会、文書、コネクタ、データ品質、承認待ち) |
base.compute.run | base | 汎用計算(シミュレーション、最適化、予測、分析、空間。テナント非依存) |
base.action.write | base | 実行系(作業票作成など。既定では付与しない) |
trafficops.read | trafficops | TrafficOps モジュールのツール(交通予測、検問レーン、巡回スケジュールなど) |
pdm.read | pdm | 予知保全 モジュールのツール(設備健全性、予知保全 サマリ/異常、フィルタインテリジェンスなど) |
telcoops.read | telcoops | TelcoOps モジュールのツール(ネットワーク健全性、インシデント解説、容量予測) |
semiops.read | semiops | 半導体/クリーンルームのツール(クリーンルーム、パーティクル/差圧、HEPA フィルタ、ISO 14644、Fab PUE、ユーティリティ、SMT OEE/欠陥分類) |
モジュールは相互に分離されています。trafficops の key は pdm/telcoops/semiops のツールも base のツールも呼べません。横断アクセスが必要なら 1 つの key に複数 scope を付与します。
key が必要な scope を持たない tools/call はフェイルクローズで拒否され、missing required scope '…' を返します。1 つの key は複数の scope を保持できます。
使用シナリオ
1. Claude が施設を直接操作
ユーザー: 「7号冷凍機の最近の運転は? 周波数を 42Hz に下げたらどうなる?」
Claude の呼び出し:
→ get_equipment_status(equipment_id="CHILLER-007") # base.read
→ run_simulation(scene_type="fms", config_overrides={"frequency": 42}) # base.compute.run
→ 統合分析して回答
2. 自作 Agent による運用自動化
# 毎時 設備健全性をチェック(pdm.read)、低スコアなら作業票を自動作成(base.action.write)
health = await pdm_session.call_tool("get_equipment_health", {"equipment_name": "critical pump"})
for equipment in health.data["equipment"]:
if equipment["health_score"] < 60:
await base_session.call_tool("create_work_order", {
"equipment_id": equipment["id"],
"priority": "HIGH",
"title": "低い健全性スコアの確認",
"description": f"AI が健全性スコア 60 未満を検出: {equipment['health_score']}"
})
3. Cursor で生産データを照会
Cursor IDE で semiops 切片に接続し、「クリーンルーム CR-001 のパーティクル傾向は?」と質問 → Cursor が MCP 経由で get_particle_trend を呼び出します。
公開デプロイ要件
FactVerse MCP は /mcp/base/、/mcp/trafficops/、/mcp/pdm/、/mcp/telcoops/、/mcp/semiops/ などの管理された HTTPS エンドポイントとして公開されます。実際に有効なエンドポイントは、顧客環境で有効化されたモジュールに依存します。
本番クライアントは HTTPS を使用し、各リクエストで X-API-Key を送信し、利用可能なツールは MCP の実行時ディスカバリで確認してください。末尾スラッシュ付きの /mcp/<切片>/ が標準のエンドポイント形式です。
クライアントはテナント識別子を渡すべきではありません。プラットフォームは発行済み key からテナントと scope を解決し、key が必要な scope を持たないツール呼び出しを拒否します。