{"id":46524688,"url":"https://github.com/quangdang46/verse-mcp","last_synced_at":"2026-04-05T17:04:58.034Z","repository":{"id":342059420,"uuid":"1172621910","full_name":"quangdang46/verse-mcp","owner":"quangdang46","description":"MCP server for Fortnite UEFN \u0026 Verse development - scan devices ,document the Fortnite API","archived":false,"fork":false,"pushed_at":"2026-04-01T08:10:20.000Z","size":6444,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-01T08:59:05.936Z","etag":null,"topics":["ai-assistant","claude","cursor","fortnite","game-development","mcp","mcp-server","rust","ufn","unreal-engine","unreal-engine-5","unreal-fortnite","verse"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quangdang46.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-04T14:15:03.000Z","updated_at":"2026-04-01T08:10:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/quangdang46/verse-mcp","commit_stats":null,"previous_names":["quangdang46/verse-mcp"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/quangdang46/verse-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Fverse-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Fverse-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Fverse-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Fverse-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quangdang46","download_url":"https://codeload.github.com/quangdang46/verse-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Fverse-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31442926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assistant","claude","cursor","fortnite","game-development","mcp","mcp-server","rust","ufn","unreal-engine","unreal-engine-5","unreal-fortnite","verse"],"created_at":"2026-03-06T20:10:51.709Z","updated_at":"2026-04-05T17:04:58.029Z","avatar_url":"https://github.com/quangdang46.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Verse UEFN MCP Server\n\n\u003e MCP server for Fortnite UEFN that scans placed devices from `.uasset` files.\n\n[UEFN](https://dev.epicgames.com/community/fortnite/getting-started) | [Verse](https://dev.epicgames.com/documentation/en-us/fortnite/verse-language-quick-reference) | [MCP](https://modelcontextprotocol.io/) | [Rust](https://www.rust-lang.org/)\n\n---\n\n## Why This Exists\n\nI'm transitioning from **web developer → game developer** and hit the same wall most Verse beginners hit: the syntax is fine, but integrating Verse with UEFN is where things get painful.\n\nThe specific friction points:\n\n- **Properties and settings** live in the UEFN Details panel — not in code, not in docs\n- **Device options** aren't always controllable from Verse, and it's not obvious which ones are\n- **Game UI** — configuring it, wiring it to players, updating it correctly in multiplayer — is easy to get wrong in subtle ways\n- **AI assistants hallucinate** Verse API names constantly, because training data for Verse is sparse\n\nI looked for existing solutions — something like a \"Verse MCP for UEFN\" — and found nothing that was:\n\n- **Project-aware** (able to read your actual code and digest files)\n- **Digest-grounded** (using the managed Verse digest set as a source of truth)\n- **Focused on the hard parts**: UI wiring, `@editable` properties, multiplayer patterns\n\nSo I built this.\n\n---\n\n## What It Solves\n\n### 1. \"Does this API actually exist?\"\n\nThe MCP lets the AI or user guess naturally, then grounds that guess against your **managed digest files** and:\n\n- Confirms whether a symbol is real\n- Returns its actual signature\n- Suggests likely matches for partial, approximate, or natural-language queries\n- Prevents hallucinated method names before they reach your code\n\n### 2. \"What `@editable` fields do I have, and where do I set them in UEFN?\"\n\nThe MCP parses your `.verse` source files and:\n\n- Lists all `@editable` fields in your project\n- Generates a wiring checklist (Details panel → reference/value assignment)\n- Flags common mistakes: unused editables, unchecked optionals, missing null guards\n\n### 3. \"How do I write UI correctly — especially for multiplayer?\"\n\nThe MCP provides UI scaffolding based on proven Verse patterns:\n\n- Canvas and widget boilerplate (pure Verse UI, no UMG)\n- Per-player widget storage patterns (prevents UI overlap and state bleed between players)\n- Clean update/remove templates with correct lifecycle handling\n\n### 4. \"What is this device called in Verse?\"\n\nIf I want to use the TRACK DUMMY device, I need to know its device name in Verse, but in Verse, the device name isn't the same as \"TRACK DUMMY.\"\nSo, how can I find the name that's used for this device in Verse?\n\n---\n\n## What it does\n\nThis project reads UEFN map assets directly from:\n\n- `Content/__ExternalActors__/**/*.uasset`\n- `Content/__ExternalObjects__/**/*.uasset`\n\nIt extracts placed-device information such as:\n\n- device type\n- label\n- triggers\n- receivers\n- configured settings\n\n---\n\n## MCP Tools\n\n| Tool | Input | Output |\n|---|---|---|\n| `scan_map_devices` | `project_path`, `force_refresh` (optional) | Full placed-device scan output grouped by type |\n| `query-docs` | `query`, `limit` (optional), `offset` (optional), `fetch_source_urls` (optional), `max_fetches` (optional) | Ranked Verse docs with full indexed content by default, plus optional fetched source page content |\n| `fetch-doc-source` | `url` | Fetch and normalize one returned documentation URL into agent-friendly text and JSON metadata |\n| `reload-project-metadata` | `project_path` | Drops cached project scan metadata so the next scan rebuilds without restarting the MCP server |\n| `list-agent-workflows` | none | Lists the markdown-defined Verse troubleshooting workflows bundled with the server |\n| `get-agent-workflow` | `name` | Loads one workflow body and metadata so an agent can follow it directly |\n\n### `query-docs` implementation notes\n\nRetrieves ranked Verse documentation matches from the packaged SQLite index.\n\nOutput:\n- full indexed content for each returned match by default\n- snippet preview and ranking metadata\n- pagination metadata (`limit`, `offset`, `has_more`, `next_offset`)\n- optional fetched `source_url` page content when requested\n\nUse `fetch-doc-source` when you want a second-step fetch of one returned `source_url` without increasing the default `query-docs` payload.\n\nThis tool is Verse-only for this project, so the `query` should focus on Verse or Fortnite UEFN topics.\n\nImportant constraints:\n- Do not call this tool more than 3 times per question. If you cannot find what you need after 3 calls, use the best information you have.\n- `query` should be specific and include relevant details.\n- Do not include sensitive or confidential information in the query, including API keys, passwords, credentials, personal data, or proprietary code.\n\nExamples of good queries for this project:\n- `Find the latest Verse language documentation for editable properties and show examples of @editable usage.`\n- `Find Fortnite UEFN documentation about device events and listenable patterns with current code examples.`\n\nExamples of bad queries:\n- `verse`\n- `uefn docs`\n\n### `scan_map_devices` policy notes\n\n`scan_map_devices` now reports the scan-policy decision in structured output. The\npolicy layer explicitly explains whether the server reused cached scan metadata,\nforced a fresh scan, refreshed because `.uasset` mtimes changed, or denied the\nrequest because the provided path is not a scanable UEFN project root.\n\nIf you need to invalidate a project's cached scan state without restarting `vm`,\ncall `reload-project-metadata` first and then run `scan_map_devices` again.\n\n### Agent workflows\n\n`verse-mcp` now ships markdown-defined workflows under `workflows/` for common\nagent tasks such as UI wiring, editable-property auditing, digest-grounded\nsymbol lookup, and device setup diagnosis.\n\nAgent flow:\n- call `list-agent-workflows`\n- pick a workflow name\n- call `get-agent-workflow` to load the full instructions and follow them\n\n---\n\n## Tech Stack\n\n- **Rust** — MCP server + `.uasset` binary parser\n- **rmcp** — MCP protocol implementation with stdio and streamable HTTP transport\n- **rayon** — parallel scanning\n- **tokio / tokio-util** — async runtime and cancellation handling\n- **unreal_asset** — UE asset parsing support\n\n---\n\n## Installation\n\n```bash\ncurl -fsSL \"https://raw.githubusercontent.com/quangdang46/verse-mcp/main/install.sh?$(date +%s)\" | bash\n```\n\n- Default install dir: `$HOME/.local/bin`\n- If `vm` is not on PATH:\n\n```bash\necho 'export PATH=\"$HOME/.local/bin:$PATH\"' \u003e\u003e ~/.bashrc \u0026\u0026 source ~/.bashrc\n```\n\n### Verify installation\n\n```bash\nvm --version\n```\n\n---\n\n## Usage\n\n### CLI options\n\n```bash\n# Show help\nvm --help\n\n# Run with stdio (default)\nvm\n\n# Run with HTTP transport\nvm --transport http --host 127.0.0.1 --port 2003\n\n# Use custom port\nvm --transport http --port 8080\n```\n\n`query-docs` works out of the box after installing `vm`. The docs index is built into the binary, and `vm` creates a private cached copy automatically on first docs query.\n\nWhen you use `--transport http`, `vm` exposes a streamable HTTP MCP endpoint at `http://127.0.0.1:2003/mcp`.\n\n### MCP config\n\n```json\n{\n  \"mcpServers\": {\n    \"verse-mcp\": {\n      \"command\": \"vm\"\n    }\n  }\n}\n```\n\n### HTTP MCP config\n\n```json\n{\n  \"mcpServers\": {\n    \"verse-mcp-http\": {\n      \"url\": \"http://127.0.0.1:2003/mcp\"\n    }\n  }\n}\n```\n\n---\n\n## AI usage examples\n\n### Scan a map\n\n```\nUser: What devices are in my map?\nAI: [Uses scan_map_devices]\nI found 47 devices across 15 types.\n```\n\n---\n\n## Project status\n\n### Current shipped features\n- [x] `.uasset` parser for placed devices\n- [x] scans both `__ExternalActors__` and `__ExternalObjects__`\n- [x] parallel scanning with rayon\n- [x] MCP server with stdio and streamable HTTP transport\n- [x] `scan_map_devices` with cache invalidation\n- [x] `query-docs` runtime retrieval from a built-in SQLite docs index\n\n### Current focus\n- improve scan summaries for large maps\n- improve semantic retrieval on top of scanned assets and documentation\n- add higher-level map analysis without bringing back exact-match digest tooling\n\n---\n\n## Background: the `.uasset` discovery\n\nUEFN stores placed actor state in binary `.uasset` files under `Content/__ExternalActors__` and `Content/__ExternalObjects__`. Those files contain the actual map configuration, which makes them more useful than static API docs for map-aware tooling.\n\nThe parser reads the UE5 asset binary format directly, extracts names and property data, and classifies them into device types, triggers, receivers, and settings.\n\n---\n\n## Contributing\n\nIf you're building UEFN tooling and want to improve scan quality or map-aware analysis, issues and PRs are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquangdang46%2Fverse-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquangdang46%2Fverse-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquangdang46%2Fverse-mcp/lists"}