fmodel-mcp
by 5coinin1
README.md
# fmodel-mcp
MCP server điều khiển [FModel](https://fmodel.app) (trình duyệt asset Unreal Engine) qua Windows UI Automation — không cần chạm chuột vật lý.
## Kiến trúc
```
opencode ── MCP (stdio) ──> src/index.ts ──> src/bridge.ts ──> bridge/uia.ps1 (-Server) ──> FModel (UI Automation)
```
- `src/index.ts` — MCP server, 19 tools.
- `src/bridge.ts` — wrapper daemon: giữ 1 tiến trình `pwsh` sống, tuần tự hoá request qua promise queue, tự respawn khi lỗi/timeout.
- `bridge/uia.ps1` — PowerShell bridge: nhận 1 JSON/line từ stdin, trả 1 JSON/line ra stdout. Kích hoạt bằng UIA pattern (`Invoke`/`Select`/`SetFocus` + `{ENTER}`/`Shift+F10`), không dùng `SetCursorPos`/`mouse_event`.
## Cài đặt
```powershell
npm install
npm run build
```
Yêu cầu: Windows + PowerShell 7 (`pwsh`), FModel đang chạy.
## Đăng ký vào opencode
Thêm vào `~/.config/opencode/opencode.jsonc`:
```jsonc
{
"mcp": {
"fmodel": {
"type": "local",
"command": ["node", "C:/Users/<bạn>/Desktop/temp/fmodel_mcp/dist/index.js"],
"enabled": true
}
}
}
```
## Tools chính
| Tool | Chức năng |
| --- | --- |
| `list_processes` / `list_windows` | Liệt kê tiến trình & cửa sổ FModel |
| `show_window` / `get_window_title` | Đưa cửa sổ lên trước, đọc tiêu đề |
| `dump_ui` / `find_element` / `get_all_text` | Khảo sát cây UI Automation |
| `tree_nodes` / `expand_node` / `click_node` | Duyệt cây thư mục (AssetsFolderName) |
| `list_files` / `list_children` | Đọc danh sách asset hiện tại trong AssetsExplorer |
| `click_element` / `dblclick_element` | Click trái/phải/kép (mở context menu, điều hướng) |
| `get_value` / `set_value` | Đọc/ghi ô nhập liệu (VD: ô tìm kiếm) |
| `send_keys` | Gửi phím tắt (VD: `^f` mở search) |
| `export_asset` | Export asset: right-click → Export → format → (tuỳ chọn) Export Session |
## Quy trình tìm kiếm asset
1. `send_keys` `^f` để mở cửa sổ **Search For Packages**.
2. `set_value` vào `SearchTextBox` với chuỗi cần tìm.
3. `click_element` vào chính `SearchTextBox` (fallback thành `{ENTER}` → kích hoạt `RefreshFilter` của cửa sổ Search).
4. `list_files` (với `window: "Search For Packages"`) để đọc kết quả.
Lưu ý: tìm kiếm là substring-match trên FullPath, kết quả bị ảo hoá (~24 dòng hiển thị).
## Dev
```powershell
npm run dev # chạy bằng tsx
npm run build # biên dịch TypeScript
```
Test nhanh bridge không qua MCP:
```powershell
pwsh -NoProfile -File bridge/uia.ps1 -Action processes
```
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues