Assumptions
- Your AI model is configured, started, and reachable from the proxy-router host on a private endpoint (e.g.
http://my-model.example:8080). For testing, a localllama.cppserver withtinyllamaworks fine — adjustmodels-config.jsonif your local port differs. - You have a funded wallet on BASE (MOR + ETH) and the private key for
.env. - You have your own ETH node URL — Alchemy or Infura private API key for BASE works (
wss://base-mainnet.g.alchemy.com/v2/<key>or HTTPS). The proxy-router has a built-in round-robin of public RPC endpoints as a fallback, but it is rate-limited and unreliable in practice; running a real provider on it leads to silent missed events. SetETH_NODE_ADDRESSexplicitly. - Your proxy-router has a publicly accessible endpoint for the provider (
host:port, no protocol), e.g.mycoolmornode.example:3333.
Install & configure
1
Get the software
- Release binary
- From source
The proxy-router ships as a standalone binary (not a zip archive). Download the latest
*-morpheus-router-* asset for your platform from Releases. Mainnet builds have no suffix; testnet builds end in -test. Asset names look like (version will differ):2
Create a working directory
The proxy-router reads its config (
.env, models-config.json) and writes its state (./data/, .cookie, proxy.conf) relative to the directory it runs from, so give it a dedicated one and move the binary there (adjust the filename to the version you downloaded):- macOS
- Linux
- Windows
3
Create .env
In the working directory, create a
.env file. Start from the repo’s proxy-router/.env.example (.env.example.win on Windows) — the standalone binary does not ship one. Edit at minimum:WALLET_PRIVATE_KEY=— provider’s private key.ETH_NODE_ADDRESS=— required for any real deployment. The minimal example file does not set this; without it the node falls back to a built-in public RPC round-robin that is rate-limited and unreliable. Use your own Alchemy / Infura HTTPS or WSS URL. MatchETH_NODE_USE_SUBSCRIPTIONSaccordingly (truefor WSS,falsefor HTTPS — recommended HTTPS +false).- Choose mainnet (default) or testnet — uncomment the testnet block, comment mainnet, save.
4
(Optional) external / pass-through providers
To resell or front another LLM, create Full schema: models-config.json. Restart after edits.
models-config.json in the working directory, set MODELS_CONFIG_PATH=./models-config.json in .env, and add the entry:5
(Optional) provider weights & allowlist
Create Weights must sum to 1. Reference: rating-config.json.
rating-config.json in the working directory (and set RATING_CONFIG_PATH=./rating-config.json in .env) to bias selection or restrict to specific providers:Start
Run from the working directory (so the relative config and data paths resolve):- macOS / Linux
- Windows
Validate
http://localhost:8082/swagger/index.htmlshould render. Authenticated routes need Authorize with your.cookiecredentials (API auth)../data/directory contains logs.- The proxy-router log should include:
Next: register on chain
Once running:- Look up existing models on active.mor.org/status — prefer bidding on an existing
modelId. - Register via MyProvider if your admin API is reachable over HTTPS (or use the desktop/local app for HTTP
:8082); otherwise use Swagger. Full steps: Register on chain. - Run the self-checks in Verify your provider setup before declaring victory.
tee-tagged listing).
What can cost you MOR during setup
A few things will quietly draw down your MOR balance during initial configuration. None of them are slashing or forfeiture; they are normal protocol fees and stakes. Knowing them upfront prevents the “I lost ~2 MOR during setup, what happened?” support ticket.
The most common pattern: a new provider posts a bid, tweaks their setup, deletes and reposts the bid several times. Each repost charges
0.3 MOR. Six iterations is ~1.8 MOR gone before the node is even serving traffic.
Mitigation: finish your model and models-config.json setup, run verify-setup steps 1-4 before posting your first bid. Repost only when pricing actually needs to change.
For details on bid pricing and how to change a price, see Pricing.