Use with Hermes
This MCP was validated end-to-end with Hermes Agent against hermes3:8b on Ollama on 2026-04-19. Hermes is an external agent that calls into this MCP’s 28-tool frozen primitive surface — it does the planning, the intern does the work.
Pairing works because v2.0.0 retired the qwen2.5:* family from the default model ladder and moved to hermes3:8b, and source_paths schema no longer requires min: 1 on log-driven incident_pack / change_pack calls. v2.0.2 readers: this is still the current rail.
Install
Section titled “Install”ollama pull hermes3:8bollama pull nomic-embed-text
# Hermes Agent — Linux / macOS / WSL2 / Termuxcurl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bashsource ~/.bashrc # or ~/.zshrchermes --versionNative Windows is not supported by Hermes — use WSL2. The validated config below assumes Hermes is reachable on its install path; the npx-spawned ollama-intern-mcp runs from wherever Hermes can shell out.
Config
Section titled “Config”Copy hermes.config.example.yaml from this repo into your Hermes install directory and adjust paths. Minimum shape:
model: provider: custom base_url: http://localhost:11434/v1 default: hermes3:8b context_length: 65536 # Hermes 64K floor — load-bearing
providers: local-ollama: name: local-ollama base_url: http://localhost:11434/v1 api_mode: openai_chat api_key: ollama model: hermes3:8b
mcp_servers: ollama-intern: command: npx args: ["-y", "ollama-intern-mcp"] env: OLLAMA_HOST: http://localhost:11434 INTERN_PROFILE: dev-rtx5080Shape constraints — each of these has a reason
Section titled “Shape constraints — each of these has a reason”- Nested
model.*is required. Hermes’s ready-check rejects the flatmodel: <provider>/<name>form. Use the nested shape above. context_length: 65536undermodel:enforces Hermes’s 64K minimum. Theproviders.local-ollama.models.*.context_lengthvalues are advisory and do not replace this floor.api_mode: openai_chatroutes through Ollama’s OpenAI-compatible/v1endpoint — that’s wherehermes3:8breturns cleantool_callsobjects without streaming-delta quirks.- Tier env overrides are optional in v2.0.0+. The default ladder is
hermes3:8bacross Instant/Workhorse/Deep, so you don’t needINTERN_TIER_*unless you’re pinning a different model.
Verify the wire
Section titled “Verify the wire”hermes mcp list # should show ollama-intern enabledhermes mcp test ollama-internThen run an imperative smoke — the integration test shape:
hermes chat -q "Call mcp_ollama_intern_ollama_incident_pack with:- log_text: [2026-04-17T11:10:00Z] db: connection refused- artifact_dir: /tmp/hermes-smoke
After the tool returns, respond only with: tool_called, artifact_paths, weak, incident_summary."Expect:
- Hermes dispatches
mcp_ollama_intern_ollama_incident_packvia stdio. - The MCP runs triage → incident_brief → writes both artifact files.
- Response carries
artifact.markdown_path,artifact.json_path, and a compact summary. Full brief is on disk.
Prompt shape is part of the contract
Section titled “Prompt shape is part of the contract”- Imperative tool-invocation prompts (“Call X with args …”) are the integration test. They give an 8B local model enough scaffolding to emit clean
tool_callsin one turn. Use these when you want to prove the wiring works. - List-form multi-task prompts (“do A, then B, then C”) are capability benchmarks for larger models. Do not interpret a list-form failure on 8B as “the wiring is broken” — run the imperative form first.
This is not a bug or a limitation of this MCP; it is a property of how 8B-class local models handle tool-call planning. The imperative form routes around the planning step.
Known caveats
Section titled “Known caveats”- Ollama
/v1streaming + OpenAI SDK. Ollama’s 2026 streaming shape interacts awkwardly with some older OpenAI-SDK versions — if you see emptytool_callsin streamed chunks but a clean one whenstream=False, patch your agent’s openai client to sendstream=falsefor:11434base URLs. The validated Hermes install uses a ~130 LOC shim to do exactly that. Not required for other agents. - Default model cascade. v2.0.0 dropped
qwen2.5:*-instruct-q4_K_Mfrom every profile and v2.x keeps it that way. If you hadINTERN_TIER_*pinning those tags, you’ll getOLLAMA_MODEL_MISSING— switch tohermes3:8bor aqwen3:*variant. - Hermes’s own config.yaml. Hermes may ship its own defaults that conflict with the snippet above. The
model.*nested block is what passes its ready-check; leave the top-levelproviders:andmcp_servers:blocks as shown.
What NOT to do
Section titled “What NOT to do”- Don’t swap Hermes’s stock
SOUL.mdpersona — it works. - Don’t use the flat
model: <provider>/<name>form. - Don’t drop the
context_length: 65536undermodel:— Hermes rejects below the 64K floor. - Don’t try to re-add a skill layer or memory layer inside this MCP. Hermes already does the cross-turn planning; that’s the division of labor.
See also
Section titled “See also”- Envelope and tiers — the uniform shape every tool returns, including
hardware_profile. - Artifacts — how
incident_pack/change_pack/repo_packwrite durable files Hermes can pick up later. - Laws — evidence-first contracts that don’t care which agent is calling.