Hermes Agent has a first-class MCP client, so Boardstate works as a drop-in toolset: the agent gets boardstate_* tools (tabs, widgets, data, undo, design review) and builds live dashboards you can watch in a browser.
Looking for the full integration? The boardstate-hermes-plugin puts the board inside Hermes — a Board tab in the web dashboard and a page in the desktop app, with Hermes-native skins, live Hermes data widgets, and an operator-governed connector layer. Bundling PRs are open upstream (tracker hermes-agent#66413). This page documents the lightweight no-install recipe: point Hermes' MCP client at
@boardstate/mcpand watch the board in a separate browser tab.
Add to ~/.hermes/config.yaml (note: the file is config.yaml — cli-config.yaml.example is just the example's name):
mcp_servers:
boardstate:
command: npx
args: ["-y", "@boardstate/mcp", "--state-dir", "~/boards"]Verify: hermes mcp list should show boardstate … ✓ enabled.
hermes -t boardstate -z "Build me a sales insights board: a revenue stat card, \
a weekly-sales bar chart with sample data, and a notes widget with next steps."Tip: -t (toolsets) accepts MCP server names — -t search,boardstate gives the agent web search plus the board tools while keeping the prompt small.
npx -y @boardstate/mcp --state-dir ~/boards --serve 4400
# open http://127.0.0.1:4400The served host page renders the same state directory the agent writes — edits stream in as the agent works.
Screenshot note (kept honest): the stat-card renders the agent-provided value; the chart and notes mounted empty on the first agent run because the agent guessed prop shapes the widgets don't read — see the "field note" in the networked-transport PR; a widget_catalog read tool is the planned fix.
- Any Hermes provider works. For z.ai/GLM, the native provider is the clean path:
export GLM_API_KEY=...then--provider zai -m glm-4.7(hermes auto-detects the endpoint). If a specific model pool is congested (retries with no output), try another GLM model. - The MCP server is stdio; Hermes spawns and supervises it per session. State persists in
--state-dirbetween runs, so follow-up prompts ("add a churn widget to Sales") evolve the same board.

