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. Download the latest one for your platform from Releases. Mainnet builds have no suffix; testnet builds end in
-test. Asset names look like (version will differ):| Platform | File |
|---|---|
| Linux (x64) | linux-x86_64-morpheus-router-<version> |
| Linux (ARM64/Raspberry Pi) | linux-arm64-morpheus-router-<version> |
| macOS (Apple Silicon) | mac-arm64-morpheus-router-<version> |
| macOS (Intel) | mac-x64-morpheus-router-<version> |
| Windows (x64) | win-x64-morpheus-router-<version>.exe |
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../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.| Event | Cost | Refundable? |
|---|---|---|
Register provider (providerRegister) | 0.2 MOR (or 10000 MOR for subnet) | Yes, on providerDeregister (after deregistration cooldown opens) |
Register model (modelRegister) | 0.1 MOR | Yes, on modelDeregister (model must have no active bids) |
Post a bid (postModelBid) | 0.3 MOR non-refundable marketplaceBidFee | No — every bid post charges this fee |
| BASE gas | a few cents in ETH-on-BASE per tx | No (standard gas) |
| Sessions consumed before your node was actually serving | Possibly small — see “Disputed early closes” in Sessions: stake, close, claim | n/a |
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.