Run an MCP Server Locally with Docker — One Command — Python MCP Server Boilerplate Docs

Run an MCP Server Locally with Docker — One Command — Python MCP Server Boilerplate Docs

By the end of this page the full product is running on your machine: API, MCP server, background worker, Postgres, and Redis. You will not install Python. Docker does everything.

Open a terminal in your code folder (in Windows Explorer: right click the folder → "Open in Terminal").

Windows (PowerShell):

The script creates your .env config file, generates real secret keys, builds the Docker images, starts 5 services, and waits until the app answers. First run builds everything and takes a few minutes. After that it's about a minute: our measured fresh-clone run was 58 seconds from clone to healthy.

When it finishes you get this, and the four addresses are the whole product:

Windows says 'running scripts is disabled'?

Run this once in the same terminal, then retry: Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

If the script fails with Bind for 0.0.0.0:8000 failed: port is already allocated , something else on your machine uses port 8000. Open .env , add a line WEB_PORT=8010 , and run the script again. Everything adapts automatically. ( docker ps shows you which container holds a port when nothing else seems to.)

When the script prints its green summary:

The site says {{APP_NAME}} everywhere. That placeholder is intentional. Renaming it is a 2-minute step in Make It Yours .

This creates two plans, a demo user, sample logs, and prints a demo API key exactly once . Copy that mcpsk_... key somewhere: the next pages use it.

That response travelled through the real production plumbing: request logging, rate limiting, the works.

Why 127.0.0.1 and not localhost?

In browsers, use either. In terminal commands we always write 127.0.0.1 because on some Windows machines localhost resolves in a way that hangs command-line tools. Same address, fewer surprises.

The product uses magic-link login. On the login page, enter [email protected] . In local mode the email isn't sent, it's printed to the app's log:

Find the line with the magic link, paste it into your browser, and you're in the demo user's dashboard.

The red 'credits running low' banner is expected

seed_demo gives the demo user sample traffic and a zero balance, so the low-credit warning is showing you a working feature rather than a broken setup. You grant yourself credits in Charge Credits For It .

Next: Open It in Claude Code .

Recommended articles