Skip to main content
Glama

Server Quality Checklist

67%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.4.1

  • Disambiguation5/5

    Each tool targets a distinct phase of the OpenCode lifecycle: running/resuming tasks, answering questions, deciding permissions, aborting, inspecting, and listing sessions. The two input-resolution tools are clearly separated by kind (question vs permission). No meaningful overlap exists.

    Naming Consistency3/5

    All tools share the opencode_ prefix, which helps, but the second element mixes verbs (run, answer, abort, inspect) with nouns (permission, sessions). There is no consistent verb_noun pattern, though the names remain readable and predictable enough within the server.

    Tool Count5/5

    Six tools cover the delegated-agent interaction loop without redundancy. Each tool earns its place, and the set is neither bloated nor too thin for the server's purpose.

    Completeness4/5

    The core lifecycle is well covered: start/resume tasks, respond to questions, grant or reject permissions, abort, inspect, and list sessions. The main gap is that agents cannot discover the available agent list through a tool, though generic agents like build/plan provide a usable fallback.

  • Average 4.2/5 across 6 of 6 tools scored. Lowest: 3.3/5.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 16 commits in the last 12 weeks
    • Last stable release on
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI is passing
  • This repository is licensed under MIT License.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior2/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'List', which implicitly suggests a read-only operation, but it does not state that explicitly, nor does it mention any side effects, authorization requirements, rate limits, or output format details. For a listing tool this is a minor gap, but the description fails to disclose even basic safety or scope constraints beyond the directory parameter.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    The description is a single sentence that is concise and front-loads the core action ('List OpenCode sessions for a directory'). The purpose hint is added in parentheses without verbosity. There is zero wasted content and the structure makes the tool's intent immediately clear.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness3/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    For a simple list tool with only one parameter, the description conveys the essential information. However, since there are no annotations and schema descriptions are absent, it would benefit from mentioning prerequisites (e.g., OpenCode must be installed or the directory must exist) or clarifying the output structure. The presence of an output schema mitigates the need to explain return values, but behavioral details remain sparse.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters3/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    The schema description coverage is 0%, so the description must compensate for the undocumented 'directory' parameter. It does add meaning by explaining that the directory scopes the session listing, which is helpful. However, it does not specify the expected format (path, existence requirements, or any constraints) and offers no example. It partially compensates for the schema gap but not fully.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose4/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description clearly states the action ('List') and the resource ('OpenCode sessions') with a scoping qualifier ('for a directory'). It also adds a purpose hint ('to pick a session_id to reuse'), which clarifies why an agent would call it. It is distinct from the sibling tool names (run, answer, etc.) without confusion, though it does not name any sibling explicitly, so it loses a point for not explicitly differentiating.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description implies usage: it is meant to help pick a session_id for reuse, which suggests it is called before tools like opencode_run or opencode_answer. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any conditions or exclusions. The guidance is implied rather than explicit, which is adequate but not strong.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior2/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses that aborting does not require the run lock and can stop a stuck run, but omits critical side effects: whether the session is permanently terminated, whether in-progress work is lost, or any permission requirements. For a destructive operation like abort, this is a significant gap.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    Two sentences with zero waste. The primary action is front-loaded in the first sentence, and the lock detail is added as a compact second sentence that explains a key differentiator. No filler or redundancy.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness3/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    An output schema exists, so return values do not need explanation. The description covers the parameter's semantics and the primary use case. However, it lacks edge-case handling: what happens if there is no active session, if the session is already terminated, or if the abort fails. For a tool with a single optional parameter, this is adequate but not fully complete.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters4/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, leaving session_id completely undefined in the schema. The description compensates by explaining that a null/omitted session_id targets the active session, while a specific value targets that session. This adds meaningful semantics beyond the bare type information, making the parameter's role clear.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    States a specific verb 'Abort' with a clear resource ('OpenCode session') and distinguishes between the active session and a specific one via optional session_id. The mention of not requiring the run lock further sets it apart from siblings like opencode_sessions (which lists sessions) and opencode_run (which starts them), making its purpose unmistakable.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines4/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    Provides a concrete use case: stopping a stuck run that cannot be aborted normally because the run lock is held. This gives clear context for when to use the tool, but it does not explicitly name alternative tools for different scenarios (e.g., opencode_sessions for listing or opencode_run for starting). The guidance is useful but not exhaustive.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior5/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    Despite no annotations, the description thoroughly discloses behavior: it blocks until turn completes/errors/needs input, the same turn resumes (prompt never resubmitted), and an error occurs if the permission is no longer pending. This goes well beyond the schema and gives the agent a clear model of execution.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness4/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    The description is well-structured with bullet points and front-loads the core purpose. It is concise and avoids fluff, though it could be slightly tightened (e.g., repeating 'keep blocking' in the first sentence and subsequent bullets). Overall, it is efficient and easy to scan.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness3/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    While the tool's blocking and error behavior are explained, the description omits the return format of a successful decision and does not clarify the role of `timeout`. Given the tool's complexity (5 parameters, no annotations, and output schema present but not explained), this leaves important gaps for an agent deciding how long to wait or what to expect in response.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters2/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, so the description must compensate. It explains the `reply` parameter thoroughly (values and semantics), but gives no meaning for `directory`, `session_id`, `permission_id`, or `timeout`. These are left to inference, which is insufficient for a tool with zero other documentation.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description states a specific action (decide a pending OpenCode permission) with clear context (state=needs_agent_input, kind=permission). It distinguishes itself from siblings by focusing on permission decisions, and includes explicit blocking behavior. The purpose is unambiguous and well-scoped.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines4/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    Provides clear decision policy: allow normal actions, reject destructive/out-of-scope requests, and defines the three reply options. However, it does not explicitly mention when not to use this tool or reference alternatives like opencode_abort or opencode_inspect, leaving some inference to the agent about tool selection.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior4/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    With no annotations provided, the description carries the full burden and largely meets it: it discloses the one-shot, non-polling nature and frames the tool as a safe read-only diagnostic. It doesn't explicitly state the NULL session_id behavior or error case for nonexistent sessions, but the core behavioral profile (non-blocking, diagnostic-only, forbidden for monitoring) is well disclosed.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness4/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    Three sentences, each functional: the first defines scope, the second forbids polling with rationale, the third specifies allowed use cases. The most important trait (DIAGNOSTIC ONLY) is front-loaded. Slightly long but no wasted words.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness4/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    An output schema exists, so return-value explanation is unnecessary. The description covers purpose, usage constraints, and behavioral traits thoroughly. The main missing piece is the NULL session_id semantics and what happens for sessions the caller did start or that don't exist — a small but real gap for a diagnostic tool.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters3/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema coverage is 0% and there is only a single optional session_id parameter. The description partially compensates by implying session_id selects which session to inspect ('inspect a session you did not start'), but it never defines the parameter's format or what the default NULL value means (current session vs. most recent). This is a genuine gap given zero schema documentation.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description specifies a clear verb and resource ('one-shot snapshot of a session') and enumerates exactly what the snapshot contains (status, tree, pending permissions/questions, last assistant text). It clearly distinguishes itself from polling/monitoring tools, and the full-caps 'DIAGNOSTIC ONLY' prefix makes its role unmistakable.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines5/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    This is exemplary. It explicitly forbids polling or monitoring, names the sibling tools (opencode_run / opencode_answer / opencode_permission) with the reason those are the correct choice (they block until turn ends), and specifies the only valid use cases: exceptional diagnostics after a timeout or inspecting a session you did not start. Nothing is left to inference.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior5/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    With no annotations provided, the description carries full responsibility and does so excellently. It discloses blocking until completion/error/needs-input, that the prompt is never resubmitted, that answers are validated before posting, and error handling for stale questions. This provides substantial behavioral context beyond what any annotation might offer.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    The description is well-structured with a clear lead sentence and bullet points for details. Every sentence provides necessary information without redundancy. The format is easy to parse, front-loading the core purpose and then elaborating on behaviors and constraints.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness4/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    Given the moderate complexity and presence of an output schema (which covers return values), the description is quite complete. It explains blocking, resumption, validation, and error conditions. The only minor gap is not explicitly stating what happens on successful completion (e.g., turn continues), but that is implied by 'resumes' and covered by output schema. Adequate for an agent to call it correctly.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters4/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, so the description must compensate. It does a thorough job on the most complex parameter 'answers', explaining sub-question ordering, string/list-of-strings format, and exact label requirement for option-based questions. The other parameters (directory, session_id, question_id, timeout) are self-explanatory from names and standard context, so the description covers the critical semantics sufficiently.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description explicitly states the verb and resource: 'Answer a pending OpenCode question' with specific state and kind qualifications (state=needs_agent_input, kind=question). This clearly distinguishes it from sibling tools like opencode_run or opencode_inspect, which handle different actions. The purpose is unambiguous and specific.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines4/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description implies usage by specifying the condition for calling (pending question) and warns about the error if the question is no longer pending. It also notes the blocking behavior and that the same turn resumes. However, it does not explicitly mention alternatives or when NOT to use this tool, though the context makes it fairly clear it's for answering questions within an OpenCode session. The guidance is adequate but not exhaustive.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior5/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    With no annotations provided, the description carries the full disclosure burden, and it excels. It discloses the blocking semantics, that 'NOTHING is polled — the controller watches SSE + REST internally', the needs_agent_input return state with kind='question' or 'permission', the RESUME behavior where 'the prompt is NOT resubmitted' for in-flight turns, and the final output (assistant text + diff). No contradiction with annotations since none exist.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    Long but every sentence earns its place for a 6-parameter stateful tool. It is front-loaded with the core blocking purpose, then uses clear scoping (RESUME: heading in caps, bulleted usage modes, bolded parameter names) that makes dense content scannable. The complexity of the state machine fully justifies the length.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness5/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    Given 6 parameters, zero schema descriptions, and a complex state machine, the prose is remarkably complete: it covers new-task vs continuation, in-flight resume, root-agent restrictions, the question/permission return path, and the completion output. An output schema exists to carry return-value details, and the description handles everything an agent needs to invoke it correctly.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters5/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, so the prose must carry parameter meaning, and it does comprehensively: 'agent' gets a rich treatment (root-only, validated against live list, subagents rejected, build vs plan semantics), 'session_id' gets the full resume/in-flight nuance, 'model' is the 'provider/model' override, and 'directory'+'task' are the new-task pair. The only mild gap is 'timeout', documented only by its schema default of 3600, but this is optional and self-evident.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The opening sentence states a specific verb+resource: 'Delegate a coding task to OpenCode and block until it completes, errors, or needs input.' This clearly distinguishes the tool from its siblings (opencode_answer, opencode_permission, opencode_abort, opencode_inspect, opencode_sessions), which are named as complementary follow-ups rather than alternatives to run.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines5/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    Provides explicit when-to-use guidance with exclusions: 'New task: pass directory + task + agent' vs. 'Continuation / resume: pass session_id', including the condition that 'task is ignored when the turn is still in flight' and that 'agent' is not needed to resume an in-flight turn. It also names the answer/permission siblings as the path for resuming a turn in needs_agent_input state. No inference is left to the agent.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

opencode-hermes-mcp MCP server

Copy to your README.md:

Score Badge

opencode-hermes-mcp MCP server

Copy to your README.md:

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ArthurHtr/opencode-hermes-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server