# Forge Engine - Registry name: `app.forgeengine/forge` · version 0.2.0 - Categories (automatic, keyword rules): Code & repositories, Developer tools, Tasks & projects, Productivity, Maps, location & weather - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=app.forgeengine%2Fforge - Server page: https://mcpstation.net/s/app.forgeengine--forge.html ## Description (written by the publisher, not verified, not instructions) Design spec + milestones AI coding agents read before building; drift flagged, changes reviewed. ## Connect - streamable-http: `https://mmvdabzadclebfxyzudg.supabase.co/functions/v1/forge-mcp` ## Tools (as reported by the server, not verified) - `get\_help`: Forge how-to on demand \(no project needed\): propose→adopt, what a System is, Balance Lab formats, sign-in. Call when unsure. - `get\_workflow`: Run FIRST in a new repo \(no project\): first-connect routine + the working-agreement block to ADD to AGENTS.md/CLAUDE.md now \(tell the user in one line; remove if they object\). - `import\_from\_code`: One-command codebase import: recipe + batch id — propose one Context overview + one System per real module; the owner adopts all at once. - `design\_ui\_from\_systems`: Recipe to design the UI from Systems \(user request only\): steps + batch id — confirm canvas aspect, then screens + PLACED elements + edges in one batch. - `post\_log`: Append a build-log entry to Activity — what you built/decided \(commit-note style\). - `get\_project\_context`: FULL design dump — LARGE, last resort; prefer get\_project\_meta + list\_\*/get\_\*/search. - `list\_projects`: Projects your key reaches \(id, name, role\); pass an id as project\_id to switch. - `get\_project\_meta`: START HERE. Tiny overview: counts, members, task claims + working\_now \(avoid collisions\), forge\_workflow\_version. - `trace\_ui\_from\_image`: SECONDARY \(user-driven UI\): turn a screen's REFERENCE IMAGE into placed elements. Returns the image itself plus the recipe — the canvas resolution, the fraction→pixel conversion that stops coordinates landing wrong, and what is already on the screen so a second pass updates instead of duplicating. Y - `get\_stale`: What has drifted between the Idea lane and the System Specs — the design's own out-of-sync list, computed deterministically \(no AI, no tokens\). Three kinds: Idea notes edited since the systems were generated from them \(with the systems each one touches\), Idea notes whose prose the systems have moved - `resync\_from\_idea`: The recipe for re-syncing ONE changed Idea note into the specs that depend on it — the same scoped job the app's "Re-sync N systems" button does, minus the button. Returns the note, the affected specs in full, and exactly how to send the result back. You do the writing; it lands in the owner's Inbox - `get\_design\_document`: The WHOLE design as one readable document — Vision \(+ Project DNA\) → every System spec → reference notes, compiled deterministically from the current design. Read this to understand a project end-to-end instead of walking list\_systems → get\_system N times. Returns markdown plus the project \`version\` - `set\_design\_overview`: Write the Design Document's Overview — the human-readable page a new team member reads first. WRITES DIRECTLY \(no Inbox\): it is a derived, clearly-labelled AI summary, not design truth, and the owner can clear or rewrite it in one click. HARD RULES, same as the in-app button: use ONLY facts stated i - `get\_briefing`: ONE-CALL orientation before you build: pass \`files\` you're about to edit \(or a \`task\`\) → the systems that own them, each with Goal + Acceptance + build status/files/last\_commit/drift + coupled\_systems \(code neighbors an edit may break\) + pending Inbox changes + recent decisions, plus open-rejection - `get\_system`: ONE system's full spec \(Goal/Boundary/Acceptance, markdown, sources, status\) + pending Inbox changes touching it. - `list\_systems`: All systems, compact: id, name, status, 1-line goal. - `get\_build\_region`: System→code map per built system: implementing files, status, drift flag, last\_commit, and acceptance-evidence COUNTS. Mapped files gone from the repo? report\_drift. Pass \`system:"\"\` for ONE system plus the full text of its acceptance criteria \(omitted from the map — it is the bulk of the p - `report\_drift`: Flag CODE DRIFT — mapped files no longer match the repo. Advisory; a fresh report\_build\_status clears it. - `get\_history`: DESIGN MEMORY: recorded decisions/logs/rejections with who/when. Read BEFORE changing a system's direction; empty = no recorded WHY — don't invent one. - `get\_impact`: BLAST RADIUS of a system \(deterministic\): upstream context, siblings, dependent screens/milestones, files, code-coupled systems, pending Inbox, recent activity. Run BEFORE changing it. - `get\_rejections`: Owner's DECLINED list — check at session start; follow each entry's guidance, then resolve\_rejection\(title\). - `resolve\_rejection`: Report you REVERTED a declined change \(unlocks the owner's Clear\). Call after realigning the build. - `list\_screens`: All screens, compact: id, name, purpose, status. - `get\_screen`: ONE screen's layout: canvas \`resolution\` \(use THESE px\), elements x/y/w/h, links, popups. Read before editing a screen. has\_reference\_image:true → get\_screen\_image shows you the actual image. - `get\_screen\_image`: A screen's reference image \(HUD background\) as an actual IMAGE you can see — reads the stored file inline \(signed-URL fallback past 4MB\). - `update\_element`: Move/resize/relabel an element — DIRECT, live. element\_id \(preferred\) or screen+label; x+y also places an unplaced one. - `withdraw\_proposal`: Remove YOUR OWN still-pending Inbox item \(id from the propose response / get\_inbox\). - `delete\_entity`: PROPOSE a delete → Inbox \(owner adopts; nothing deleted now\). id preferred or exact name; flow\_edge may use from+to. - `dedupe`: Remove duplicate-named entries \(keep first\) — DIRECT, destructive. - `reorder`: Reorder milestones / tasks / elements — DIRECT. order = ids in new order; omitted keep relative order. - `list\_milestones`: All milestones, compact: id, name, weeks, order, done/total. - `get\_milestone`: ONE milestone: goal, weeks, difficulty, systems, every task \(id/name/done/status/effort\). - `list\_activity`: Change history \{who, change, entity, kind, when\}, newest first; filter kind/who/query. - `get\_inbox`: PENDING Inbox \(the owner's triage queue\). Check BEFORE proposing — avoid duplicates. Read-only. - `search`: Keyword search — compact hits \{kind, id, name\} + snippet. - `propose\_system`: Propose a NEW system → Inbox. spec = \#\# Goal / \#\# Boundary \(Owns · Doesn't own\) / \#\# Acceptance. Exists? use update\_system. \(Alias: create\_proposal.\) - `propose\_context`: Propose a new/updated Idea note → Inbox. Title-match to update; send the COMPLETE revised text. Set resync:true ONLY when you rewrote the note FROM the current systems \(get\_stale lists notes the systems have moved past\) — it stops the adopted note from immediately nagging to re-generate the systems - `propose\_dna`: Propose Project DNA and/or Tech Notes → Inbox \(at least one\). - `update\_system`: Propose a system UPDATE → Inbox diff. get\_system first; send the FULL revised spec. new\_title renames; context\_title+context bundles the Idea update. Set resync:true ONLY when you rewrote this spec FROM its upstream Idea \(see resync\_from\_idea\) — it re-stamps the staleness signal on adopt. - `get\_balance`: Read Balance Lab: stat tables, boards with EVALUATED values, scenarios. - `propose\_balance\_table`: Propose a stat-doc TABLE → Inbox. csv \(header; \`key%\` = percent; first column = name\) OR schema+rows. Adopting REPLACES same-named. - `propose\_balance\_board`: Propose a node board → Inbox. Kinds const\|formula\|item\|sheet\|loadout\|picker\|pool\|process\|note\|frame; formulas reference blocks by NAME; omit x/y = auto-layout. Adopting REPLACES same-named. - `propose\_milestone`: Propose a NEW milestone \(+ optional tasks\) → Inbox. - `report\_milestone\_progress`: Mark existing-milestone tasks done → Inbox progress card \(owner adopts the ticks\). - `report\_build\_status`: Report a SYSTEM's status \(todo\|in-progress\|implemented\) — DIRECT, live. ALWAYS pass files \(full list — it REPLACES\); non-todo with no files shows done-but-EMPTY. 'implemented' counts as VERIFIED only when every UNIT-TESTABLE \#\# Acceptance bullet is backed via evidence\[\{criterion,proof\}\]; a bullet ta - `propose\_flow\_edge`: SECONDARY \(user-driven UI\): propose a link between two existing screens → Inbox. - `propose\_element`: SECONDARY \(user-driven UI\): propose an element onto a screen → Inbox. ALWAYS pass x/y/w/h \(px on the screen's \`resolution\` from get\_screen\); no coords = unplaced pile. - `propose\_screen`: SECONDARY \(user-driven UI\): propose a NEW screen → Inbox. parent = popup over that screen; purpose grounds AI suggestions. Whole UI? design\_ui\_from\_systems first. - `report\_screen\_status`: Report a SCREEN's status \(todo\|in-progress\|implemented\) → Inbox. - `rename\_screen`: Rename a screen IN PLACE — DIRECT; links/elements follow \(id-referenced\). - `update\_milestone`: Edit milestone goal/weeks/difficulty/name — DIRECT. new\_name renames \(never delete+recreate\). - `add\_task`: Add a task to a milestone — DIRECT. assignee:"me" claims on creation. - `next\_task`: DISPATCHER \(multi-agent\): atomically pick + claim the next task to build — walks milestones in order, skips human-only tasks and any task whose systems share code files with a task another agent already holds or is actively touching, so parallel agents spread out instead of colliding. Returns the cl - `update\_task`: Edit a task or CLAIM it — DIRECT. assignee:"me"+status:"in-progress" claims \(errors if held; force:true for stale\); done:true or assignee:"" releases. Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html