hermes-oh-my-pi-mcp
This server acts as a bridge between Hermes and the oh-my-pi (omp) coding agent CLI, exposing two tools:
prompt: Runsompin one-shot mode with a given prompt, returning output as plain text or JSON. Supports optional parameters:cwd– working directory for context-aware executionmode– output format (textorjson)model/provider– select a specific AI model or providerprofile– use a custom profile for tailored behaviornoSession– disable session persistence for fully stateless calls
doctor: Verifies that bothompandbunare installed and accessible on the local system. No input required — useful for diagnosing environment issues before running prompts.
Provides tools for executing oh-my-pi coding tasks via the omp CLI, enabling code generation, refactoring, and analysis within the Hermes AI assistant.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hermes-oh-my-pi-mcpprompt: write a Python script to fetch weather data"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hermes-oh-my-pi-mcp
A tiny Hermes-friendly bridge for oh-my-pi / omp.
This repository now includes both the working MCP bridge and the full integration explanation for GitHub readers.
What this repo provides
It exposes two MCP tools:
prompt— runompin one-shot mode and return the outputdoctor— verifyompandbunare available locally
Related MCP server: @staticpayload/gemini-mcp
Why this exists
Hermes works well with MCP, plugins, and custom tools. oh-my-pi already provides a strong CLI/runtime, so this bridge lets Hermes users call it without reimplementing the agent stack.
The recommended operating model is:
User → Hermes → MCP bridge → bun → omp → resultHermes vs MCP vs Skill
Hermes: decides what to do
MCP bridge: actually calls
ompomp: performs the coding task
Skill: teaches Hermes when to prefer
ompand how to fall back when needed
In other words, the skill is helpful but optional; the MCP bridge is the execution layer.
Detailed integration guide
See the full explanation here:
That guide covers:
call structure
why MCP is the right wrapper
when a skill helps
example Hermes configuration
troubleshooting and usage policy
Release notes
Use this file to see what changed in each published version.
Requirements
Node.js 20+
ompinstalled and onPATHbuninstalled and onPATHbecauseompis Bun-based
Install oh-my-pi
npm install -g @oh-my-pi/pi-coding-agentIf the omp binary fails with bun: No such file or directory, install Bun 1.3.14+ and retry.
Local development
npm install
npm test
npm run doctorRun as an MCP server
npx hermes-oh-my-pi-mcpOr from source:
node ./src/index.jsHermes config example
Add this to Hermes MCP config:
{
"mcpServers": {
"oh-my-pi": {
"command": "npx",
"args": ["-y", "hermes-oh-my-pi-mcp"]
}
}
}If you want to point Hermes at a local checkout instead:
{
"mcpServers": {
"oh-my-pi": {
"command": "node",
"args": ["/absolute/path/to/hermes-oh-my-pi-mcp/src/index.js"]
}
}
}Verified local setup
On this machine, Hermes is actually connected to oh-my-pi and the MCP server is enabled.
The working registration looks like this:
hermes mcp add oh-my-pi \
--command node \
--args /home/ubuntu/oh-my-pi-hermes-mcp/src/index.js \
--env OMP_BIN=/home/ubuntu/.local/share/mise/installs/node/24.16.0/lib/node_modules/@oh-my-pi/pi-coding-agent/dist/cli.js \
--env BUN_BIN=/home/ubuntu/.bun/bin/bunThat setup was verified with:
hermes mcp test oh-my-piIf your machine uses different paths, keep the same shape but replace the absolute values with your own OMP_BIN and BUN_BIN locations.
Suggested skill policy
If you also want Hermes to prefer omp for coding requests, add a small skill that says:
Code generation / refactoring / analysis requests should consider
ompfirst.If the environment looks broken, run
doctorfirst.If
ompoutput is insufficient, Hermes should supplement it with its own reasoning and tools.
That skill is not required for the bridge to work; it just makes the usage pattern consistent.
Notes
The bridge runs
ompin a one-shot JSON-friendly mode and returns the text response.Set
OMP_BINif your binary is not justomp.Set
BUN_BINif Bun is installed somewhere custom.The long-form architecture and usage notes live in
docs/hermes-omp-integration.md.
Available Tools
2 toolsdoctorA
Check whether the local oh-my-pi and bun runtime are available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only diagnostic action ('Check'), which implies no side effects. However, with no annotations, it does not elaborate on potential behaviors like error handling, output format, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential information without waste. Every word is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and is a simple diagnostic check, the description sufficiently covers its functionality. No additional details are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to add parameter meaning. Baseline of 4 applies as no param info is necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks availability of 'oh-my-pi' and 'bun runtime', using a specific verb 'Check' and naming the resources checked. This distinguishes it from the sibling 'prompt' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'prompt'). It only states what the tool does without context on preconditions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promptC
Run oh-my-pi (omp) in one-shot mode and return the result as text or JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| cwd | No | ||
| model | No | ||
| provider | No | ||
| profile | No | ||
| noSession | No | ||
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Minimal disclosure: only mentions one-shot mode and result type. No details on side effects, authentication requirements, or parameter interactions. No annotations exist to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise, but it sacrifices necessary detail. It is not overly verbose but lacks structure for a tool with 7 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain return format beyond 'text or JSON', nor cover optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description only adds context for the required 'prompt' parameter. Other parameters like 'cwd', 'model', 'provider', etc. are left completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names the tool (oh-my-pi) and specifies its action: running in one-shot mode and returning text or JSON. It is clear about what it does, though no differentiation from sibling tool 'doctor' is provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the sibling 'doctor' or any other alternatives. The description does not mention any prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
doctor - First observed
prompt
TDQS
Scored across 2 tools
The two tools, 'doctor' and 'prompt', have clearly distinct purposes: one checks environment setup and the other runs the main functionality. There is no overlap or confusion between them.
Both tool names are single words but do not follow a consistent verb_noun pattern. While simple and clear, they lack a predictable naming convention across the set.
With only 2 tools, the server is at the lower boundary of acceptable size. For a simple one-shot execution server, this may be appropriate, but it feels thin compared to typical MCP servers.
The tool surface covers checking availability and executing the main command, but misses other potential operations like configuration or version info, leaving minor gaps for more complex agent workflows.
Maintenance
Related MCP Connectors
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides a shared MCP SDK wrapper for building MCP servers with stdio transport, tool registration, JSON-safe responses, and environment helpers.38 npmMIT
- AlicenseNot gradedqualityFmaintenanceBridges Google's Gemini CLI to MCP-compatible AI assistants, enabling prompt execution, model listing, and raw CLI commands.11 npm1GPL 3.0
- AlicenseNot gradedqualityAmaintenanceBootstraps dev environments by installing, wiring, and verifying CLI tools and MCP servers from curated recipes, and provides scope-aware audit of MCP configurations.MIT
- AlicenseBqualityCmaintenanceWraps the copilot CLI into MCP tools, allowing third-party MCP clients to invoke Copilot through prompt and command tools.2GPL 3.0