fact_sim MCP服务器(独立仓库)
fact_sim_mcp 是一个独立的MCP服务器,用于控制 fact_sim 来自单独存储库的web应用程序。
工具
load_example(example: string)start_simulation()stop_simulation()run_benchmark(wallMs?: number)export_timeline_csv()build_share_url()get_simulation_status()get_kpi_summary()run_scenario_matrix(examples: string[], wallMs?: number)list_examples()set_simulation_mode(mode: "dt" | "event")set_playback_speed(speed?: number, fastest?: boolean)reset_simulation_clock()capture_snapshot_png(fileName?: string)export_graph_json(pretty?: boolean)import_graph_json(graphJson: string)set_simulation_time(simTimeMs: number)get_graph_overview(includeNodes?: boolean, maxNodes?: number)export_embedded_html(fileName?: string)save_timeline_csv(fileName?: string)save_graph_json(fileName?: string, pretty?: boolean)load_graph_json_file(filePath: string)run_matrix_and_save_report(examples: string[], wallMs?: number, fileName?: string)validate_graph_json(graphJson: string)save_kpi_summary_json(fileName?: string, pretty?: boolean)save_graph_overview_json(fileName?: string, includeNodes?: boolean, maxNodes?: number, pretty?: boolean)evaluate_candidate_graph(graphJson: string, wallMs?: number, objective?: "throughput" | "throughput_per_node" | "balanced")rank_candidate_graphs(candidates: string[], wallMs?: number, objective?: "throughput" | "throughput_per_node" | "balanced", topK?: number)suggest_topology_improvements(graphJson: string, maxSuggestions?: number)list_node_types()add_node(nodeType: string, title?: string, x?: number, y?: number, properties?: Record)get_node_ports(nodeId: string | number)get_node_ports_by_kind(nodeId: string | number, portKind: "work" | "signal" | "carrier" | "pallet")connect_nodes_by_port_kind(fromNodeId: string | number, toNodeId: string | number, portKind: "work" | "signal" | "carrier" | "pallet", fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)connect_work_ports(fromNodeId: string | number, toNodeId: string | number, fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)connect_signal_ports(fromNodeId: string | number, toNodeId: string | number, fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)connect_carrier_ports(fromNodeId: string | number, toNodeId: string | number, fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)connect_pallet_ports(fromNodeId: string | number, toNodeId: string | number, fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)update_node(nodeId: string | number, title?: string, properties?: Record, mergeProperties?: boolean)connect_nodes(fromNodeId: string | number, toNodeId: string | number, fromSlot?: number, toSlot?: number, allowDuplicate?: boolean)disconnect_nodes(linkId?: number, fromNodeId?: string | number, toNodeId?: string | number, fromSlot?: number, toSlot?: number, removeAllMatches?: boolean)remove_node(nodeId: string | number)clear_graph()repair_graph_links()run_simulation_for(wallMs: number, mode?: "dt" | "event", fastest?: boolean, includeBenchmark?: boolean, benchmarkWallMs?: number)get_bottleneck_report(topN?: number, minSampleSec?: number)describe_node_type(nodeType: string)build_graph_from_blueprint(nodes: BlueprintNodeInput[], edges?: BlueprintEdgeInput[], clearExisting?: boolean, originX?: number, originY?: number, xPitch?: number, yPitch?: number)optimize_line_by_bottleneck(iterations?: number, runWallMs?: number, bottleneckTopN?: number, minSampleSec?: number, maxNodesPerIteration?: number, processReductionRatio?: number, downReductionRatio?: number, minProcessTime?: number, minDownTime?: number)set_takt_target_and_objective(taktSec: number, objectiveWeights?: { throughput?: number; taktGap?: number; cycleTime?: number; nodeCount?: number; linkCount?: number; completion?: number })validate_layout_rules(minDistance?: number, forbiddenAdjacency?: string[])run_design_of_experiments(paramGrid: DoeParamGridInput, wallMs?: number)set_random_seed(seed: number)get_random_seed()
特性
- Node.js+TypeScript
- 本地stdio传输(用于VSCode/Cox)
- 异常处理(工具级、启动级、流程级)
- 带有请求ID的Stderr日志记录(
req:) - 最小依赖性(
@modelcontextprotocol/sdk,playwright,zod)
目录布局
fact_sim_mcp/
src/
index.ts
fact-sim-runtime.ts
dist/ # generated by npm run build
.vscode/
mcp.json # VSCode local server definition
package.json
tsconfig.json
mcp.config.example.json # generic MCP client example
README.md需求
- Node.js 18+
fact_sim存储库index.html可用的- 铬为剧作家
安装和构建
npm install
npx playwright install chromium
npm run build跑
npm start服务器目标 fact_sim 根按以下顺序排列:
FACT_SIM_ROOT环境变量- 兄弟路径
../fact_sim相对于此存储库
如果两者都不解析为包含以下内容的目录 index.html,启动失败,出现显式错误。
VSCode/Cox配置
地方 fact_sim 和 fact_sim_mcp 在同一父目录下。则不需要环境变量。
.vscode/mcp.json (推荐)
{
"servers": {
"fact-sim-mcp": {
"command": "node",
"args": ["dist/index.js"]
}
}
}通用的 mcp.config.example.json
{
"mcpServers": {
"fact-sim-mcp": {
"command": "node",
"args": ["G:/マイドライブ/プログラミング/github/fact_sim_mcp/dist/index.js"]
}
}
}如果存储库不是兄弟库,请设置 FACT_SIM_ROOT 在MCP客户端配置中明确显示。
故障排除
- Playwright启动错误:运行
npx playwright install chromium fact_sim root not found:setFACT_SIM_ROOT到包含以下内容的文件夹index.html- 端口
8123使用中:服务器自动回退到打开的本地端口
