DOCS
Local development

Working on your own machine

Clone a game to your computer and build it with your own AI coding assistant.

umicat games live in the browser, and for most people that is the whole story. But a game is ordinary code — TypeScript, Vite, a git history — and you can have all of it on your own machine, edited by whichever AI coding assistant you already use.

That works through the umicat MCP server: a small program that runs locally and gives your assistant a way to reach your projects. Clone a game, change it, run it, send the work back.

Is this for you?

It is worth setting up if you are comfortable in a terminal and you already pay for an AI coding assistant (Claude Code, Codex, or anything else that speaks MCP).

In umicatOn your machine
Setupnone — open the editorinstall a server, sign in
Who pays for the AIyour umicat creditsyour own subscription
Making art, sound, musicyesno — these stay in umicat
Placing entities, HUD layoutvisual editorspossible, but you'd be guessing
Publishingyesno — publishing stays in umicat
Big refactors, real debuggingfinemuch better
Seeing a changepreview reloadsrun the game locally

Both write to the same project. You can build in the browser on Monday, clone it on Tuesday, and open the editor again on Wednesday.

Install

Make sure you have Node.js. Version 20 or newer.

node --version

If that prints nothing, install it and open a new terminal:

brew install node

Or the LTS installer from nodejs.org.

# Debian/Ubuntu — the distro package is often several majors behind
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

Or the LTS tarball from nodejs.org, or a version manager such as fnm or nvm.

winget install OpenJS.NodeJS.LTS

Or the LTS installer from nodejs.org. This page is for native Windows — PowerShell or the terminal, no WSL needed. If you do work in WSL, follow the Linux tab instead: everything inside it is Linux.

This is not an extra requirement — a umicat game is a Vite + TypeScript project, so running one on your machine needs Node regardless.

Claude Code's own installer does not bring Node with it, so a brand-new machine can have a working Claude Code and no Node at all.

And git, which is what puts the project on your disk. git --version should print something.

xcode-select --install
sudo apt install git     # or your distribution's equivalent
winget install Git.Git

Or git-scm.com. Windows ships no git at all, so this one is usually a real install rather than a check. Open a new terminal afterwards.

Add the server to your assistant.

Claude Code and Codex write the config for you:

claude mcp add umicat -- npx -y @umicat/mcp    # Claude Code
codex mcp add umicat -- npx -y @umicat/mcp     # Codex

Everything else takes the same server block:

{
  "mcpServers": {
    "umicat": { "command": "npx", "args": ["-y", "@umicat/mcp"] }
  }
}

Claude Code and Codex write the config for you:

claude mcp add umicat -- npx -y @umicat/mcp    # Claude Code
codex mcp add umicat -- npx -y @umicat/mcp     # Codex

Everything else takes the same server block:

{
  "mcpServers": {
    "umicat": { "command": "npx", "args": ["-y", "@umicat/mcp"] }
  }
}

On native Windows the server has to be started through cmd:

{
  "mcpServers": {
    "umicat": { "command": "cmd", "args": ["/c", "npx", "-y", "@umicat/mcp"] }
  }
}

npx on Windows is npx.cmd, a batch script, and the way assistants launch a local server will not run one directly. Without the wrapper the server appears in the list and never connects.

Write this one by hand. claude mcp add umicat -- cmd /c npx -y @umicat/mcp is known to store /c as C:/ (claude-code#20061), which fails in a way that looks like the server is broken. If you run the command anyway, check what it wrote with claude mcp get umicat before anything else. Claude Code's own file is %USERPROFILE%\.claude.json, and a project-scoped server goes in .mcp.json at the project root.

Only the file and the key that wraps it differ between assistants:

AssistantFileWrapping key
Cursor~/.cursor/mcp.json, or .cursor/mcp.json in the projectmcpServers
Windsurf~/.codeium/windsurf/mcp_config.jsonmcpServers
VS Code.vscode/mcp.jsonservers
Codex, by hand~/.codex/config.toml (TOML: [mcp_servers.umicat])—

VS Code is the odd one out: its workspace file wraps servers in servers, not mcpServers, and the wrong key fails silently.

On Windows, ~ in that table means %USERPROFILE% — C:\Users\<you> — and every one of them needs the same cmd wrapper: for Codex's TOML that is command = "cmd" with args = ["/c", "npx", "-y", "@umicat/mcp"].

Anything not listed here: it is an ordinary stdio MCP server, run npx -y @umicat/mcp (or cmd /c npx -y @umicat/mcp on Windows).

If it will not connect — /mcp showing failed, usually with ENOENT or EINVAL — the command could not be started at all. That is a Node problem rather than a umicat one.

Either Node is missing (see the step above), or it is installed somewhere the server's PATH does not reach — usual with nvm, fnm and volta. Pin the path:

claude mcp remove umicat
claude mcp add umicat -- "$(which npx)" -y @umicat/mcp

Either Node is missing (see the step above), or it is installed somewhere the server's PATH does not reach — usual with nvm, fnm and volta. Pin the path:

claude mcp remove umicat
claude mcp add umicat -- "$(which npx)" -y @umicat/mcp

Check the cmd /c wrapper first — without it this is exactly the failure you get, and claude mcp add may have written C:/ where /c belongs:

claude mcp get umicat

If the wrapper is right and it still will not start, Node is missing or off the PATH. Confirm which npx is being found, in a new terminal — an installer that changed the PATH does not reach one already open:

(Get-Command npx).Source

nvm-windows in particular needs nvm use <version> before anything is on the PATH at all.

Every assistant gets the same tools. Guidance about how umicat's SDK works is installed two ways so it lands whichever one you use — as skills for Claude Code, and as an AGENTS.md index for everything else, which is the cross-vendor convention most agents read. If your project already has its own AGENTS.md, it is left alone.

Sign in. Ask your assistant to sign in to umicat. A browser opens, you approve on a real umicat page, and you are done — nothing to copy or paste. The sign-in lasts 90 days; your assistant is told the date, and renewing is this same step.

Clone a game. Ask it to list my umicat projects, then clone the one you want. The code lands in a directory you choose, with its full history.

Restart your assistant (or /reload-plugins in Claude Code). A clone carries guidance about how umicat's SDK expects games to be built, and it loads at startup. See Working locally.

Signing out, and why there is no "Connect" button

Ask your assistant to sign out and it forgets the credential on this machine. That is not the same as revoking it: the credential stays valid on umicat until it expires or you revoke it at umicat.ai → Settings → Access tokens. A token deliberately cannot revoke itself, so a leaked one cannot lock you out of your own account.

You may have seen other MCP servers appear in /mcp as not connected, with a button that starts a login. That is MCP's OAuth flow, and the specification defines it for HTTP transports only — a local (stdio) server is told to take credentials from the environment instead.

This server has to be local: putting your game's code on your disk is the whole point, and a remote server cannot reach your filesystem. So signing in is a request rather than a button. Your assistant is told at connect time to sign in before doing anything, so in practice you just ask for what you want and the sign-in happens on the way.

On a machine with no browser

A server or a container cannot open the sign-in page. Create a token instead, at umicat.ai → Settings → Access tokens, and pass it in the environment:

claude mcp add umicat --env UMICAT_TOKEN=umicat_pat_… -- npx -y @umicat/mcp

On Windows, put it in the same hand-written block as an env entry:

{
  "mcpServers": {
    "umicat": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "@umicat/mcp"],
      "env": { "UMICAT_TOKEN": "umicat_pat_…" }
    }
  }
}

UMICAT_TOKEN always wins over a stored sign-in, so this is also how you pin a specific token.

What a token can and cannot do

Signing in this way is not the same as signing in to the website. What your assistant gets can read and change the code of projects you have access to, create a project, edit its details, upload files to it, and set its cover, logo and screenshots — that is what makes any of this possible — and nothing else. It cannot spend credits, buy anything, change your account, or create another token.

The line is drawn precisely where money is: uploading a file you already made costs nothing, so it is allowed; generating art with AI calls a paid model, so it is not. A cover you rendered yourself goes up from your machine; having umicat draw one for you does not. Publishing, deleting a project and managing collaborators are out for the same reason in a different currency — those stay deliberate acts you take in umicat.

It cannot throw work away either: umicat only accepts pushes that build on what is already there. See Sending work back.

Revoke it any time from the same settings page. It stops working everywhere immediately.

Your token is never written into a cloned game. It is handed to git one command at a time, so a clone you share, copy or back up carries no credential. The one exception is if you explicitly ask for plain git push support, which writes it to ~/.config/umicat/token — C:\Users\<you>\.config\umicat\token on Windows, which is where it goes there too rather than under AppData.

On this page