Coronium Mobile Proxies
Agent setup guide

Hermes Agent Mobile Proxy Setup

Add the Coronium MCP server to Hermes Agent with one YAML block, then let it check stock, read your lines and rotate an IP.

Nous Research builds Hermes Agent as a self-hosted, open-source assistant: it keeps memory between sessions and answers on Telegram, Discord, Slack, WhatsApp, Signal, email and the command line. It reads MCP servers from one YAML file, which is all the Coronium server needs.

Checked against the Hermes Agent documentation on 30 October 2026. Sources are listed at the end.

~/.hermes/config.yaml
# ~/.hermes/config.yaml
mcp_servers:
  coronium:
    command: "npx"
    args: ["-y", "coronium-proxy-mcp@2.3.0"]
    env:
      CORONIUM_API_TOKEN: "YOUR_CORONIUM_API_TOKEN"
      CORONIUM_TOOL_PROFILE: "directory"
    timeout: 200
    connect_timeout: 60

Before you start

  • Hermes Agent installed

    On Linux, macOS or WSL2, run the one-line install script from the Hermes installation page, then hermes to start. Its data, including config.yaml, lives in ~/.hermes/.

  • Node 20 or newer

    The Coronium server runs through npx, so the machine that runs Hermes needs Node 20 or later on its path.

  • A Coronium API token

    From dashboard.coronium.io, Account, API Access. Hermes passes a stdio server only the variables you list under env plus a safe baseline, so the token has to be in that block; an export in your shell does not reach the server.

What the agent gets

The Coronium MCP server is coronium-proxy-mcp on npm. The environment variable CORONIUM_TOOL_PROFILE decides which tools exist inside Hermes Agent. Counts below were read with tools/list on the current release.

directory
Tools: 21
Money tools: None
An agent that checks, tests and rotates lines you already rent. The hosted server runs this profile.
read-only
Tools: 31
Money tools: None
Reporting: balances, lines, usage, payments and tickets, with nothing that changes state.
buyer
Tools: 12, or 13 with CORONIUM_ENABLE_SPENDING=1
Money tools: Buy only, and only with spending on
An agent that quotes, buys and runs a few lines after you approve each total.
full
Tools: 59, plus 6 money tools with spending on
Money tools: Buy, renew, top up and cancel, only with spending on
Everything else: settings, webhooks, rotation timers and Node tools. The server default when the profile is unset.

Start with directory. Its tools include coronium_list_free_modems, coronium_list_tariffs, coronium_get_proxies, coronium_test_modem, coronium_rotate_modem, coronium_get_rotation_status, coronium_replace_modem and coronium_get_renewal_quote. Names can change between releases, so let the agent read them from tools/list rather than from this page.

Add the Coronium server to Hermes

Hermes reads MCP servers from the mcp_servers key of ~/.hermes/config.yaml and discovers their tools at startup.

  1. Add the entry under mcp_servers

    Paste the coronium block from the top of this page into ~/.hermes/config.yaml. It must sit under mcp_servers exactly; under another key Hermes will not see it.

    Checked against Hermes Agent: MCP Integration

  2. Put the token in the env block

    Replace YOUR_CORONIUM_API_TOKEN with your token. Keep CORONIUM_TOOL_PROFILE: "directory" for a first run: it has 21 tools and none of them spend.

    Checked against Hermes Agent: MCP Integration

  3. Set the timeouts

    timeout is the limit for one tool call and connect_timeout bounds the start-up handshake. A rotation waits for the carrier, so give tool calls 200 seconds.

    Checked against Hermes Agent: MCP Integration

  4. Reload and test

    In a running session, /reload-mcp reloads servers and refreshes the tool list. From the shell, hermes mcp test coronium reports what the server answered.

    Terminal
    hermes mcp test coronium

    Checked against Hermes Agent: MCP Integration

  5. Know the names Hermes gives the tools

    Hermes registers each MCP tool as mcp_<server>_<tool>, so coronium_rotate_modem shows up as mcp_coronium_coronium_rotate_modem. Look for that form in the agent's log when you check what it called.

    Checked against Hermes Agent: MCP Integration

  6. Or connect the hosted server

    For a remote server Hermes takes a url and auth: oauth; on first connect it prints an authorization link and stores tokens under ~/.hermes/mcp-tokens/. Point it at https://api.coronium.io/mcp and sign in with your Coronium account. That server runs the directory profile and never spends.

    ~/.hermes/config.yaml
    mcp_servers:
      coronium_remote:
        url: "https://api.coronium.io/mcp"
        auth: oauth

    Checked against Hermes Agent: MCP Integration

First tasks to try

Ask in plain words. The agent picks the tools; the names below are what it should call, so you can tell from its log whether it did.

  1. โ€œWhich countries have Coronium lines in stock right now, and what does 24 hours cost in each?โ€

    Calls coronium_list_free_modems then coronium_list_tariffs. Reads live stock and plans. Nothing is bought.

  2. โ€œShow my Coronium lines with their country, carrier, expiry and SOCKS5 URL.โ€

    Calls coronium_get_proxies. Returns credentials. Treat the answer as a secret and keep it out of shared chats.

  3. โ€œRotate my line called <name> and tell me the new IP once the rotation has finished.โ€

    Calls coronium_rotate_modem then coronium_get_rotation_status. A rotation answers done, rotating (poll the status, do not resubmit) or unchanged (the carrier kept the IP; wait about 60 seconds).

Rotation from Hermes

Ask for a rotation by line name and Hermes calls the rotate tool, then the status tool until the rotation is done. A rotating answer means wait and poll; a new rotate call inside the interval only gets refused.

Hermes keeps memory across sessions and writes its own skills. If you teach it a routine such as "rotate the German line before each scrape", include the minimum interval in that instruction, so the skill it writes does not rotate faster than the line allows.

The chat-app rule from every agent applies here too: keep Reset Links out of Telegram, Discord, Slack and the rest, because their link previews count as requests.

Money tools stay off until you say

Hermes can filter what a server exposes. With the directory profile there is nothing to filter for money, but if you later switch to buyer with CORONIUM_ENABLE_SPENDING=1, a Hermes tools.include list is a second fence: list the tools you want and nothing else appears.

On the hosted side, https://api.coronium.io/mcp/buyer offers the buyer tools with purchases off for each new connection. They switch on only after you enable purchases for that connection, with your password, at Connected AI apps.

  • Money tools appear only when CORONIUM_ENABLE_SPENDING=1 is set in the host environment and the profile is buyer (buy only) or full. A .env file in the working directory cannot turn it on.
  • Every money call needs confirm: true, a new idempotency key for each approved order, an explicit funding source and the exact approved total; any other live total is refused with price_changed.
  • The server spends money already on the account. It has no way to add funds; a person does that in the dashboard.

Give Hermes a browser on the line

Hermes documents no proxy setting for a browser on your own machine. The clean route is a second MCP server: Playwright MCP accepts a config file, and Playwright's proxy option takes a username and password for HTTP proxies. Save the file below with your line's values, then add the server to mcp_servers.

The isolated flag keeps the browser profile in memory, so cookies from one task do not carry into the next. Drop it if the agent should stay signed in somewhere between runs.

~/.hermes/playwright-line.json, then the entry in config.yaml
{
  "browser": {
    "browserName": "chromium",
    "isolated": true,
    "launchOptions": {
      "proxy": {
        "server": "http://CONNECTION_IP:HTTP_PORT",
        "username": "USERNAME",
        "password": "PASSWORD"
      }
    }
  }
}

# ~/.hermes/config.yaml
mcp_servers:
  playwright:
    command: "npx"
    args: ["@playwright/mcp@latest", "--config", "/home/YOU/.hermes/playwright-line.json"]

Hardening the setup

Hermes supports tools.exclude per server, with glob patterns. Excluding coronium_replace_modem lets the agent test and rotate but never swap a line for a new device.

  • Create the API token in dashboard.coronium.io, Account, API Access and keep it in the host's config, never in a chat or a repository. Regenerating it in the dashboard revokes the old one.
  • Give each agent its own line. Two agents on one line rotate each other's IP in the middle of a task.
  • The answer to coronium_get_proxies contains proxy passwords. Treat it, the Reset Link and any OpenVPN profile as secrets.
  • coronium_replace_modem is irreversible: the line gets a new device, new credentials and possibly a new carrier. Filter it out if the agent should never do that on its own.
Inside the coronium entry
    tools:
      exclude: [coronium_replace_modem]

Check it worked

After the browser server is in place, ask Hermes to open What Is My IP and read the result back. The IP should be the line's, and a request 60 or more seconds after a rotation should show a new one.

The IP and the carrier
Open What Is My IP through the line. The country should be the line's country and the network should be the mobile carrier, not a hosting company.
WebRTC
Run the WebRTC leak test. The only public address it should report is the line's. Your own address showing up means the browser is leaking around the proxy.
Timezone against the IP
The IP and timezone check compares the clock the browser reports with the timezone of the IP. A mismatch is one of the first things anti-fraud systems look at.

From a terminal the agent can use, the same check is one request. Export the line's details once, then ask an IP echo service which address it sees:

Terminal
export CORONIUM_PROXY_HOST="CONNECTION_IP"
export CORONIUM_HTTP_PORT="HTTP_PORT"
export CORONIUM_SOCKS_PORT="SOCKS5_PORT"
export CORONIUM_PROXY_USER="USERNAME"
export CORONIUM_PROXY_PASS="PASSWORD"

curl -x "http://$CORONIUM_PROXY_USER:$CORONIUM_PROXY_PASS@$CORONIUM_PROXY_HOST:$CORONIUM_HTTP_PORT" https://api.ipify.org

When it does not connect

Hermes lists no Coronium tools
The block is not under mcp_servers, the YAML indentation is off, or npx is not on the path.
Fix the key and indentation, then run hermes mcp test coronium to see what the server answered.
The server starts but says it has no token
The token was exported in the shell, which Hermes does not pass to stdio servers.
Put CORONIUM_API_TOKEN under the server's env block.
Rotation calls fail on a timeout
The tool call timeout is shorter than the time the carrier takes.
Set timeout: 200 on the coronium entry and /reload-mcp.
The hosted server never connects
The authorization link was not opened, or it was opened on a machine without a browser session.
Open the link Hermes prints from a machine where you can sign in to the Coronium dashboard, then approve the connection.
The browser shows the server's own IP
The agent used a browser other than the Playwright server, or the config path is wrong.
Check the --config path is absolute and the file has the line's HTTP Port, username and password.

Questions

Where does Hermes Agent read MCP servers from?

From ~/.hermes/config.yaml, under the mcp_servers key. Stdio servers take command, args and env; remote servers take url and either headers or auth: oauth. /reload-mcp picks up changes in a running session.

Why does Hermes not see my CORONIUM_API_TOKEN?

Hermes gives a stdio server only the variables in its env block plus a safe baseline, not your whole shell environment. Put the token in the env block of the coronium entry.

Can Hermes buy lines?

Only if you switch the entry to the buyer profile and set CORONIUM_ENABLE_SPENDING=1, or connect the hosted buyer URL and turn purchases on for that connection. Every purchase needs the exact approved total, and the money comes from the account balance; the server cannot add funds.

What are the Coronium tools called inside Hermes?

Hermes prefixes MCP tools with mcp_ and the server name, so a server named coronium exposes mcp_coronium_coronium_get_proxies, mcp_coronium_coronium_rotate_modem and so on. The part after the server name is the name tools/list returns.

Can Hermes rotate a line on a schedule?

It can call the rotate tool whenever its instructions say so, with at least 60 seconds between rotations of one line. For a fixed rhythm the line's own timer is simpler, set in the dashboard from 60 seconds up.

How we checked

Every Hermes Agent config key, command and flag on this page was read from the pages below on 30 October 2026. The Coronium side comes from the dashboard and the live API. There are no screenshots: we quote the names instead of showing an account we do not run. If a label in Hermes Agent has moved since, the tool's own page is the one to trust.

  1. Hermes Agent: InstallationThe install script, the ~/.hermes data directory and hermes config commands.
  2. Hermes Agent: MCP Integrationmcp_servers in config.yaml, stdio env handling, url, headers and auth: oauth, mcp-tokens, timeout and connect_timeout, tools include and exclude, enabled, /reload-mcp, hermes mcp test and the mcp_<server>_<tool> naming.
  3. Playwright MCP READMEThe --config option and browser.launchOptions in the config file.
  4. Playwright: browserType.launch proxy optionserver, bypass, username and password; the login applies to HTTP proxies.
  5. coronium-proxy-mcp on npmPackage and version; tool names read with tools/list on the current release on 30 October 2026.