This page covers a non-TEE provider running on your own infrastructure. For TEE-hardened deployment on SecretVM, see SecretVM quickstart. Hosted alternatives: Docker, Railway (video), AWS EC2, or Akash.

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 local llama.cpp server with tinyllama works fine — adjust models-config.json if 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. Set ETH_NODE_ADDRESS explicitly.
  • 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

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):
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. Match ETH_NODE_USE_SUBSCRIPTIONS accordingly (true for WSS, false for HTTPS — recommended HTTPS + false).
  • Choose mainnet (default) or testnet — uncomment the testnet block, comment mainnet, save.
Full reference: Env: proxy-router (see “Conflicting / overlapping variables” up top).
4

(Optional) external / pass-through providers

To resell or front another LLM, create models-config.json in the working directory, set MODELS_CONFIG_PATH=./models-config.json in .env, and add the entry:
Full schema: models-config.json. Restart after edits.
5

(Optional) provider weights & allowlist

Create 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:
Weights must sum to 1. Reference: rating-config.json.

Start

Run from the working directory (so the relative config and data paths resolve):

Validate

  • http://localhost:8082/swagger/index.html should render. Authenticated routes need Authorize with your .cookie credentials (API auth).
  • ./data/ directory contains logs.
  • The proxy-router log should include:

Next: register on chain

Once running:
  1. Look up existing models on active.mor.org/status — prefer bidding on an existing modelId.
  2. 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.
  3. Run the self-checks in Verify your provider setup before declaring victory.
Mint a new model only when nothing suitable exists (or you need a new 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.