Hermes Agent

Connect Hermes Agent to WordPress

Hermes reads its MCP servers from ~/.hermes/config.yaml. Add Respira there and the agent can read and edit a live WordPress site across 17 page builders. One click from the dashboard, or one block of YAML.

Hermes Agent is MIT licensed and runs on your machine. Respira runs on your hosting. 320+ tools, snapshots on every write path.

What Hermes Agent is

Hermes Agent is an open-source CLI and desktop agent from Nous Research, MIT licensed, with its source at NousResearch/hermes-agent and documentation at hermes-agent.nousresearch.com. It speaks the Model Context Protocol, which is the part that matters here: any MCP server you list in its config becomes a set of tools it can call. Respira is one of those servers, and the site it acts on is your own WordPress install.

Support landed in August 2026, after two customers connected Hermes to their sites before it was official. The story is in the support announcement.

The one-click path

  1. Open the setup page and pick Hermes Agent.

    The page reads the sites on your account and builds the install link and the config block for them. If you have not connected a WordPress site yet, start there instead.

  2. Choose Add to Hermes.

    The button is a hermes://mcp/install link carrying the server name and a base64url config. The desktop app opens a confirmation dialog first and shows what it is about to write, so nothing lands in your config until you accept it.

  3. Or sign in through the browser instead.

    The same page offers a per-site connection with no key stored on disk. Hermes runs the whole OAuth 2.1 handshake itself: discovery, dynamic client registration as Hermes Agent, PKCE and refresh. You sign in to Respira in the window it opens and choose Approve.

  4. Check it worked.

    Ask Hermes: list the pages on my site and tell me which page builder it runs. Titles coming back is the test. A tool list that looks right but returns nothing is usually an access level set to read-only when you wanted content.

Two routes, and the honest difference

Respira's hosted endpoint lives on each WordPress site, at https://your-site.com/wp-json/respira/v1/mcp. That is why the two routes differ in how they scale, and it is worth picking on purpose rather than by accident.

Browser sign-in, one site per entry

Hermes signs in to that one site and keeps the connection refreshed. Nothing sensitive is written into your config file. Because the endpoint belongs to the site, five sites means five entries and five sign-ins.

Best when you work on one or two sites, or you would rather keep no key on disk.

Local bridge, every site at once

One server entry, one RESPIRA_CONFIG_B64 value holding the whole account. Hermes connects on restart with no sign-in, and you move between sites by naming the one you mean in chat.

Best when you run a fleet. The value is a credential, so treat the file like a password.

There is a ceiling on the one-click route: Hermes refuses an install payload over 32KB, and protocol links get unreliable well before that. Past a certain number of sites the dashboard stops offering the link and hands you the config file instead, which carries the same sites without the size limit.

The config, if you would rather write it yourself

Both blocks go under mcp_servers in ~/.hermes/config.yaml. Merge them in. Do not replace the file: your models, tools and prompt settings live in it too.

Every site, through the local bridge

This is what the dashboard downloads as respira-hermes.config.yaml. Replace the placeholder with the base64 value from your dashboard, then restart Hermes.

~/.hermes/config.yaml
# Respira for WordPress, for Hermes Agent.
# Merge this into ~/.hermes/config.yaml and keep any mcp_servers you already have.
mcp_servers:
  respira-wordpress:
    command: "npx"
    args:
      - "-y"
      - "@respira/wordpress-mcp-server"
    env:
      RESPIRA_CONFIG_B64: "<paste from your dashboard>"
      RESPIRA_CONNECTION_SOURCE: "dashboard_export"

One site, over OAuth

Point url at your own site and set auth: oauth. Hermes does the rest of the handshake. The entry name is yours to choose, and it is the name you pass to hermes mcp login. The dashboard's downloaded block names each remote entry after its site id, so check the name in the file if you did not write it by hand.

~/.hermes/config.yaml
mcp_servers:
  respira:
    url: "https://your-site.com/wp-json/respira/v1/mcp"
    auth: oauth

Then, from a fresh terminal:

terminal
hermes mcp login respira

A fresh terminal matters. Hermes watches the config file and reloads it, but that reload has a 30 second timeout, so a login fired from a shell that was already open when you saved the file can race it. Opening a new terminal and running the command there is the reliable path.

Already set up in Claude Code

Hermes can lift the whole thing across instead. This reads the mcpServers block out of ~/.claude.json and brings Respira over as it is, keys included.

terminal
hermes import-agent claude-code

What the agent can actually do

  • list my pages and tell me which page builder this site runs
  • open the pricing page and show me every heading with its styling
  • duplicate the about page, rewrite the hero, and hold it for my approval
  • find every page that still says 2025 and change it to 2026
  • build a landing page in Bricks using the homepage as the design reference
  • run the accessibility scan on the homepage and list the WCAG failures
  • show me the last five snapshots on this page and restore the one from Tuesday

320+ tools across posts, pages, menus, media, taxonomies, users, plugins, ACF, the WooCommerce catalog and every supported builder. Page and element writes take a snapshot first, and structural page work is built on a duplicate, so the live page is untouched until you approve it in the Approvals and Undo screen in wp-admin.

Limits worth knowing before you start

The hosted endpoint is per site.
An OAuth connection covers one site. There is no single sign-in that reaches your whole account over the hosted route.
The tool list is filtered per site.
Builder tools for a builder the site does not run are hidden, so a block-theme site shows fewer tools than the catalog total. That is on purpose, not a broken install.
A remote connection needs a reachable site.
HTTPS, and /wp-json/ not blocked by a host or firewall. A local site on your own machine cannot be reached over the hosted route, though the local bridge can still talk to it.

When it does not connect

Clicking Add to Hermes did nothing.
  • The hermes:// handler comes from the desktop app. Without it installed, the browser has nothing to hand the link to.
  • Some browsers block a custom protocol the first time. Approve the permission prompt, then click again.
  • If the dialog was dismissed by accident, click the button again. The dashboard mints a fresh link every time.
  • Still nothing: use the YAML block above. It carries the same sites.
hermes mcp login hangs or times out.
  • Run it from a terminal opened after you saved the config. The config auto-reload has a 30 second timeout, and a stale shell can beat it to the punch.
  • The command opens a browser window. On a headless or remote box there is nothing to open, so run the login on the machine with the browser.
  • Check the entry name matches the key in mcp_servers. hermes mcp login respira only works if the entry is called respira.
  • Confirm the URL is right by opening it in a private window. It should answer, not 404.
It connected once, and now it asks me to sign in again.
  • Tokens live in ~/.hermes/mcp-tokens/. Hermes refreshes them on its own, so repeated prompts usually mean the token file was deleted, moved, or is owned by another user.
  • Rotating a site token in the Respira dashboard invalidates every client holding it. Sign in again after a rotation.
  • To force a clean start, delete that server's token file and run the login again.
The tools are there but every write fails.
  • Check the access level you approved. Read-only blocks writes by design, and the error is deliberate rather than a bug.
  • Change it from the Sites page in your dashboard, then reconnect.
  • If reads also fail, the site is probably unreachable from outside. Confirm /wp-json/ is not blocked.

Questions people ask

Can Hermes Agent edit my WordPress site?

Yes. Once Respira is registered as an MCP server in ~/.hermes/config.yaml, Hermes can read and write posts, pages, media, menus, taxonomies, users, plugins and page-builder layouts on a live WordPress site. It works through the Respira plugin on your own hosting, not through a scraper or a headless browser.

Is it safe to let Hermes change a live WordPress site?

Page and element writes take a snapshot first, and structural page work is built on a duplicate rather than the live page. The Approvals and Undo screen in wp-admin is where a duplicate gets published or thrown away, and where any snapshot gets restored. You also pick an access level when you connect: read-only, content, builder or full. Read-only is a real read-only, so an agent that cannot write cannot surprise you.

Does it work with Elementor, Divi and Bricks?

Yes, plus 14 more. Respira reads and writes each builder in its own native storage format, so an Elementor page stays editable in Elementor and a Bricks page stays editable in Bricks. Nothing is flattened into HTML on the way through.

What does connecting Hermes to WordPress cost?

Hermes Agent is free and open source, MIT licensed, from Nous Research. Respira is the paid part, and the plans are on the pricing page. There is no separate Hermes fee and no per-client pricing: the same account works in Hermes, Claude, Cursor and Codex at once.

Do i need one connection per WordPress site?

It depends which route you take. The hosted endpoint lives on each site at /wp-json/respira/v1/mcp, so a browser sign-in is one entry and one OAuth per site. The stdio route carries the whole account in a single RESPIRA_CONFIG_B64 value, so one server entry covers every connected site and you move between them by naming the site in chat.

Where does Hermes store the Respira sign-in?

Tokens from an OAuth connection are written to ~/.hermes/mcp-tokens/ on your own machine. Hermes refreshes them on its own. Deleting the token file for a server forces a fresh sign-in the next time you run hermes mcp login.

How do i disconnect Hermes from my WordPress site?

Remove the entry from mcp_servers in ~/.hermes/config.yaml and delete its token file from ~/.hermes/mcp-tokens/. To cut access from the WordPress side instead, revoke or rotate the site token in your Respira dashboard, which kills every client holding it, not only Hermes.

Why Hermes plus Respira works

An open agent against a production-safe backend.
Hermes is MIT licensed and runs on your machine. Respira runs on your hosting. Neither side asks you to move the site anywhere.
Native builder writes.
Elementor stays Elementor, Bricks stays Bricks, Divi stays Divi, across 17 builders. Nothing is flattened to HTML in transit.
Snapshots and duplicates on every write path.
Agents move fast. Undo has to be faster.
Pick your route per machine.
Browser sign-in on a shared laptop, local bridge on the box where you run the fleet. Same account, same tools.