Hermes MCP Server
by darrenzwchan
README.md
# hermes-mcp
An MCP server that turns internal **Hermes** documents (HashiCorp PRDs, RFCs, specs, memos) into agent tools — relevance search, document metadata, related resources, and full document bodies — plus a companion **skill** that makes your agent cross-check specs against the code in your editor.
## Tools
`hermes_search` · `hermes_get_document` · `hermes_get_document_content` · `hermes_get_related_resources` · `hermes_recently_viewed_docs` · `hermes_check_auth` · `hermes_login` · `hermes_sharepoint_login`
## Requirements
- **Node.js 18+** (developed on 26)
- **Google Chrome** (for the sign-in / browser-content helpers)
- An MCP-capable agent (bob, Claude Desktop, VS Code, …)
## Quick start
```bash
git clone https://github.com/yummydirtx/hermes-mcp.git
cd hermes-mcp
node install.js
```
The installer:
1. runs `npm install`,
2. copies the **hermes** skill into `~/.bob/skills/hermes/`,
3. adds a **hermes** server to `~/.bob/settings/mcp.json` (existing servers/secrets are preserved).
Then authenticate and reload your agent (below).
> Claude Desktop or VS Code instead of bob? Run `node install.js --claude`, or copy a snippet from [`examples/`](examples/).
## Authenticate to Hermes
Hermes sits behind SSO. Capture your session one of two ways:
- **Automatic (recommended):**
```bash
npm run attach
```
A normal Chrome opens — sign in. Your session cookie is written to `.hermes-cookie` and hot-reloaded by the server. Keep that window open (it's also used for reading document bodies).
- **Manual:** in a logged-in Hermes tab, DevTools → Network → click a request → copy the `Cookie:` request header into `.hermes-cookie`:
```bash
# macOS
pbpaste > .hermes-cookie
# Windows (PowerShell)
Get-Clipboard | Set-Content -NoNewline .hermes-cookie
```
Verify with the `hermes_check_auth` tool.
## Reading full document bodies
Bodies live in SharePoint. `hermes_get_document_content` tries, in order (`source: "auto"`):
1. **Search index** — the body Hermes already indexed. No extra permissions. Often enough.
2. **Your browser session** (`source: "browser"`) — reads the file through the Chrome you signed into (`npm run attach`), over the DevTools protocol. **No Microsoft Graph, no admin, no extra scopes** — just the access you already have. Keep the document open in that Chrome.
3. **Microsoft Graph** (`source: "sharepoint"`, via `hermes_sharepoint_login`) — needs `Files.Read.All`/`Sites.Read.All`. The built-in client can't obtain these in a locked-down tenant; use a **dedicated Azure AD app** (below).
Test the browser path directly:
```bash
npm run sp-browser "<sharepoint-document-url>"
```
### Optional: dedicated Azure AD app (for the Graph path)
Azure Portal → **App registrations** → **New registration** → Redirect URI = *Public client/native* `http://localhost` → **API permissions** → Microsoft Graph → **Delegated**: `Files.Read.All`, `Sites.Read.All`, `offline_access` → **Grant admin consent**. Then set `SP_CLIENT_ID` and `SP_TENANT_ID` in the server `env` and run `hermes_sharepoint_login`.
## Manual setup (no installer)
Add this to your agent's MCP config, fixing the path (see [`examples/`](examples/) for bob / Claude / VS Code variants):
```jsonc
{
"mcpServers": {
"hermes": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/hermes-mcp/hermes-mcp.js"],
"env": {
"HERMES_BASE_URL": "https://hermes-sharepoint.hashicorp.services",
"HERMES_COOKIE_FILE": "/ABSOLUTE/PATH/TO/hermes-mcp/.hermes-cookie"
}
}
}
}
```
Then copy `skills/hermes/SKILL.md` into your agent's skills folder.
## Windows notes
- Use PowerShell; `node install.js` works the same.
- `npm run attach` launches your installed Chrome/Edge. If it isn't found, set `HERMES_CHROME` to the browser's `.exe`.
- Absolute paths in `args` use backslashes — the installer writes them correctly; if editing by hand use `\\` or forward slashes.
## Configuration (env)
| Var | Default | Purpose |
|-----|---------|---------|
| `HERMES_BASE_URL` | `https://hermes-sharepoint.hashicorp.services` | Hermes host |
| `HERMES_COOKIE_FILE` | `./.hermes-cookie` | Session cookie (hot-reloaded) |
| `HERMES_CDP_PORT` | `9222` | Debug-Chrome port for `attach` + browser content |
| `HERMES_CHROME` | auto-detect | Path to Chrome/Edge executable |
| `SP_CLIENT_ID`, `SP_TENANT_ID` | – | Dedicated Azure AD app for the Graph path |
| `SHAREPOINT_TOKEN_FILE` | `./.sharepoint-token` | Optional pasted Graph token |
## Scripts
- `npm start` — run the server (stdio)
- `npm run attach` — capture the Hermes session from a real Chrome
- `npm run sp-browser "<url>"` — read a document via your browser session
- `node install.js` — set up + register with your agent
## Security
Never commit `.hermes-cookie`, `.sharepoint-*`, or the browser profiles — they hold your live session. `.gitignore` already excludes them.
TDQS
A4.2/5.0
Scored across 8 tools
Disambiguation5/5
Each tool has a clear, distinct purpose: auth checking, document retrieval, full-text content, related resources, login, recently viewed, search, and SharePoint login. No overlapping functionalities.
Naming Consistency5/5
All tools follow the consistent pattern 'hermes_verb_noun' using snake_case, with descriptive verbs like check, get, login, search, and recently_viewed. No mix of conventions.
Tool Count5/5
8 tools is well-scoped for a document management server, covering authentication, search, retrieval, and related resources without being excessive or insufficient.
Completeness4/5
The tool surface covers core read operations (search, get, content, related, recent) and auth flows. Missing write operations but likely intentional for a consumption-oriented server.
Maintenance
ActivityStale
ResponsivenessNo issues