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
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: 60Before you start
Hermes Agent installed
On Linux, macOS or WSL2, run the one-line install script from the Hermes installation page, then
hermesto start. Its data, includingconfig.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
envplus 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.
| Profile | Tools | Money tools | Use it for |
|---|---|---|---|
| directory | 21 | None | An agent that checks, tests and rotates lines you already rent. The hosted server runs this profile. |
| read-only | 31 | None | Reporting: balances, lines, usage, payments and tickets, with nothing that changes state. |
| buyer | 12, or 13 with CORONIUM_ENABLE_SPENDING=1 | Buy only, and only with spending on | An agent that quotes, buys and runs a few lines after you approve each total. |
| full | 59, plus 6 money tools with spending on | 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. |
- 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.
Add the entry under mcp_servers
Paste the
coroniumblock from the top of this page into~/.hermes/config.yaml. It must sit undermcp_serversexactly; under another key Hermes will not see it.Checked against Hermes Agent: MCP Integration
Put the token in the env block
Replace
YOUR_CORONIUM_API_TOKENwith your token. KeepCORONIUM_TOOL_PROFILE: "directory"for a first run: it has 21 tools and none of them spend.Checked against Hermes Agent: MCP Integration
Set the timeouts
timeoutis the limit for one tool call andconnect_timeoutbounds the start-up handshake. A rotation waits for the carrier, so give tool calls 200 seconds.Checked against Hermes Agent: MCP Integration
Reload and test
In a running session,
/reload-mcpreloads servers and refreshes the tool list. From the shell,hermes mcp test coroniumreports what the server answered.Terminal hermes mcp test coroniumChecked against Hermes Agent: MCP Integration
Know the names Hermes gives the tools
Hermes registers each MCP tool as
mcp_<server>_<tool>, socoronium_rotate_modemshows up asmcp_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
Or connect the hosted server
For a remote server Hermes takes a
urlandauth: 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: oauthChecked 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.
โWhich countries have Coronium lines in stock right now, and what does 24 hours cost in each?โ
Calls
coronium_list_free_modemsthencoronium_list_tariffs. Reads live stock and plans. Nothing is bought.โ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.โRotate my line called <name> and tell me the new IP once the rotation has finished.โ
Calls
coronium_rotate_modemthencoronium_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=1is set in the host environment and the profile isbuyer(buy only) orfull. A.envfile 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 withprice_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.
{
"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_proxiescontains proxy passwords. Treat it, the Reset Link and any OpenVPN profile as secrets. coronium_replace_modemis 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.
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:
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.orgWhen it does not connect
| What you see | Likely cause | What to do |
|---|---|---|
| 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. |
- Hermes lists no Coronium tools
- The block is not under
mcp_servers, the YAML indentation is off, ornpxis not on the path. - Fix the key and indentation, then run
hermes mcp test coroniumto 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_TOKENunder the server'senvblock. - Rotation calls fail on a timeout
- The tool call timeout is shorter than the time the carrier takes.
- Set
timeout: 200on 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
--configpath 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.
- Hermes Agent: InstallationThe install script, the ~/.hermes data directory and hermes config commands.
- 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.
- Playwright MCP READMEThe --config option and browser.launchOptions in the config file.
- Playwright: browserType.launch proxy optionserver, bypass, username and password; the login applies to HTTP proxies.
- coronium-proxy-mcp on npmPackage and version; tool names read with tools/list on the current release on 30 October 2026.