Help us improve
Share bugs, ideas, or general feedback.
From midnight-tooling
This skill should be used when the user asks about the Midnight proof server in any context — local, testnet, or mainnet. Includes "start the proof server", "restart the proof server", "stop the proof server", "proof server not working", "proof server logs", "check if proof server is running", "proof server port 6300", "proof server version", "proof server image tag", "proof server health check", "proof server API endpoints", "Docker container for proofs", "set up Docker for the proof server", or "proof server endpoint". Covers proof server concepts, version selection, API endpoints, standalone Docker usage, and troubleshooting. For local development setup, see the devnet skill.
npx claudepluginhub devrelaicom/midnight-expert --plugin midnight-toolingHow this skill is triggered — by the user, by Claude, or both
Slash command
/midnight-tooling:proof-serverThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The Midnight proof server generates zero-knowledge proofs for Midnight transactions. It can run locally as a Docker container or be accessed as a remote service on testnet/mainnet. The server exposes an HTTP API (default port 6300) that DApps use to request proof generation at runtime.
This skill should be used when the user asks about the Midnight local development network, including "start the devnet", "stop the devnet", "restart the network", "local development network", "midnight node", "midnight indexer", "network status", "network health", "devnet config", "network endpoints", "port 9944", "port 8088", "port 6300", "Docker Compose", "devnet not starting", "local blockchain", "devnet logs", "network ID", "generate devnet", "devnet versions", "update devnet", "devnet stale", "proof server", "devnet volumes", "clean slate", "docker containers", "devnet compose file", "devnet endpoints"
This skill should be used when the user asks about the Midnight.js SDK, midnight-js packages, @midnight-ntwrk npm packages, setting up SDK providers, deploying or finding contracts with deployContract or findDeployedContract, calling circuits with callTx or submitCallTx, the transaction lifecycle, SDK provider types (WalletProvider, MidnightProvider, PublicDataProvider, ProofProvider, ZkConfigProvider, PrivateStateProvider), testkit-js testing, observable state subscriptions, contract maintenance and verifier keys, or connecting to the indexer or proof server.
Documents Docker 2025 features like image type mounts for read-only data sharing, versioned debug endpoints, AI Assistant, Enhanced Container Isolation, and Moby 25. Useful for leveraging latest Docker Engine 28 capabilities.
Share bugs, ideas, or general feedback.
The Midnight proof server generates zero-knowledge proofs for Midnight transactions. It can run locally as a Docker container or be accessed as a remote service on testnet/mainnet. The server exposes an HTTP API (default port 6300) that DApps use to request proof generation at runtime.
For local development, use the devnet which manages a proof server alongside a node and indexer. Run /midnight-tooling:devnet start to start the full local network. See the devnet skill for details.
The rest of this skill covers working with proof servers directly — useful when connecting to testnet/mainnet or running a standalone instance.
Current proof server addresses for testnet and mainnet are published in the Midnight documentation. To look up the latest endpoints:
Use the Midnight MCP server's documentation search tools to search for the relnotes/overview page in the midnightntwrk/midnight-docs repository:
githubGetFileContent(
owner: "midnightntwrk",
repo: "midnight-docs",
path: "docs/relnotes/overview.mdx",
fullContent: true
)
This page contains the current network environment details including proof server URLs, node endpoints, and indexer endpoints for all active environments.
| Term | What It Is | How It Runs |
|---|---|---|
| Proof server | A service that generates zero-knowledge proofs for Midnight transactions | Docker container (midnightntwrk/proof-server) listening on port 6300 |
| Docker Desktop | The container runtime required to run the proof server | System application, must be running before starting the proof server |
The proof server is not the same as the Compact compiler. The compiler produces ZK circuits from Compact source code; the proof server uses those circuits to generate proofs at runtime. See the compact-cli skill for compiler installation, compilation commands, and output file details.
Docker Desktop must be installed and running before the proof server can start.
| Check | Command | Expected |
|---|---|---|
| Docker installed | docker --version | Version string |
| Docker daemon running | docker info | System info (no connection errors) |
If Docker is not installed, download it from https://www.docker.com/products/docker-desktop/.
If Docker is installed but not running, start Docker Desktop and wait for it to be ready before proceeding.
The proof server image is published to Docker Hub as midnightntwrk/proof-server with semver-based tags.
| Tag Pattern | Example | Type |
|---|---|---|
X.Y.Z | 7.0.2 | Stable release |
X.Y.Z-rc.N | 8.0.0-rc.4 | Release candidate (prerelease) |
X.Y.Z-<suffix> | 8.0.0-performance.1 | Other prerelease |
X.Y.Z-arm64 / X.Y.Z-amd64 | 7.0.2-arm64 | Architecture-specific (ignore — Docker selects automatically) |
latest | latest | Points to the most recent push (may be a prerelease) |
Fetch available tags from the Docker Hub registry API:
curl -s "https://registry.hub.docker.com/v2/repositories/midnightntwrk/proof-server/tags/?page_size=100&ordering=last_updated" \
| grep -o '"name": *"[^"]*"' \
| sed 's/"name": *"//;s/"$//'
Filter to tags matching strict semver (X.Y.Z only — no prerelease suffixes, no architecture suffixes), sort numerically, and select the highest:
curl -s "https://registry.hub.docker.com/v2/repositories/midnightntwrk/proof-server/tags/?page_size=100&ordering=last_updated" \
| grep -o '"name": *"[^"]*"' \
| sed 's/"name": *"//;s/"$//' \
| grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \
| sort -t. -k1,1n -k2,2n -k3,3n \
| tail -1
The grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' pattern excludes:
8.0.0-rc.4, 8.0.0-performance.1)7.0.2-arm64, 7.0.2-amd64)latest)| Scenario | Tag Used |
|---|---|
User specifies --version 8.0.0-rc.4 | 8.0.0-rc.4 (exact) |
User specifies --version latest | latest |
| No version specified | Latest stable (X.Y.Z without prerelease suffix) |
| No stable versions found | Fall back to latest with a warning |
| Docker Hub API unreachable | Fall back to latest with a warning |
The proof server is memory-intensive. Ensure Docker has at least 4 GB RAM allocated. See references/docker-setup.md for resource configuration.
Start the proof server in detached mode so it runs in the background (replace <tag> with the resolved version):
docker run -d --name midnight-proof-server -p 6300:6300 midnightntwrk/proof-server:<tag> -- midnight-proof-server -v
For example, with version 7.0.0:
docker run -d --name midnight-proof-server -p 6300:6300 midnightntwrk/proof-server:7.0.0 -- midnight-proof-server -v
| Flag / Argument | Purpose |
|---|---|
-d | Run in detached (background) mode |
--name midnight-proof-server | Assign a predictable container name for management |
-p 6300:6300 | Map host port 6300 to container port 6300 |
-- | Separates Docker options from the container command |
midnight-proof-server | The binary to run inside the container |
-v | Enable verbose logging inside the proof server |
After starting, verify the server is healthy:
# Check container is running
docker ps --filter "name=midnight-proof-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Health check — returns {"status":"ok","timestamp":"..."}
curl -sf http://localhost:6300/health
# Check server version
curl -sf http://localhost:6300/version
# Readiness check — returns {"status":"ok","jobsProcessing":N,"jobsPending":N,"jobCapacity":N,...}
curl -sf http://localhost:6300/ready
# View recent logs
docker logs --tail 20 midnight-proof-server
The server is ready when /health returns {"status":"ok",...} and /ready returns status "ok" with HTTP 200. If /ready returns HTTP 503 with status "busy", the server is running but its job queue is full.
docker stop midnight-proof-server
To remove the stopped container (required before starting a new one with the same name):
docker rm midnight-proof-server
If a container named midnight-proof-server already exists (running or stopped), remove it before starting a new one:
docker rm -f midnight-proof-server 2>/dev/null
docker run -d --name midnight-proof-server -p 6300:6300 midnightntwrk/proof-server:<tag> -- midnight-proof-server -v
| Symptom | Cause | Fix |
|---|---|---|
docker: command not found | Docker not installed | Install Docker Desktop |
Cannot connect to the Docker daemon | Docker Desktop not running | Start Docker Desktop, wait for it to be ready |
port is already allocated on 6300 | Another process using port 6300 | Stop the conflicting process or use a different port mapping (e.g., -p 6301:6300) |
Conflict. The container name "/midnight-proof-server" is already in use | Stopped container with same name exists | Run docker rm midnight-proof-server then retry |
| Container starts but exits immediately | Image issue or resource constraints | Check logs with docker logs midnight-proof-server |
curl: (7) Failed to connect to localhost port 6300 | Server not ready or not running | Wait a few seconds for startup; check docker ps for container status |
The proof server exposes the following HTTP endpoints on port 6300:
| Endpoint | Method | Purpose | Response |
|---|---|---|---|
/ | GET | Health check (alias for /health) | {"status":"ok","timestamp":"..."} |
/health | GET | Health check | {"status":"ok","timestamp":"..."} |
/version | GET | Server version | Plain text, e.g. 8.0.0-rc.4 |
/ready | GET | Readiness and worker pool utilization | {"status":"ok","jobsProcessing":N,"jobsPending":N,"jobCapacity":N,"timestamp":"..."} |
/proof-versions | GET | Supported proof versions | Plain text, e.g. ["V2"] |
The /ready endpoint returns HTTP 200 when ready and HTTP 503 when the job queue is full (status "busy").
| Reference | Content | When to Read |
|---|---|---|
references/docker-setup.md | Standalone Docker proof server setup; cross-references the devnet skill's Docker guide for installation and troubleshooting | Running a proof server outside the devnet (e.g., testnet/mainnet) |
For local development Docker setup (node, indexer, and proof server together), see the devnet skill and its references/docker-setup.md.