opencode-mcp
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., "@opencode-mcpadd input validation to POST /api/users"
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.
opencode-mcp
Delegate coding work to OpenCode from your MCP client.
opencode-mcp connects Claude, Cursor, VS Code, and other MCP clients to OpenCode's headless API. Ask questions, implement features, monitor background work, respond to questions and permissions, and review changes across projects.
Version 3.0.0 requires Node.js 22 or newer. Upgrading from 2.x? See the migration notes.
Quick Start
Install OpenCode and start its server from your project:
opencode serve --hostname 127.0.0.1 --port 4096If you use the TUI, start it with opencode --port 4096 and share that server. Set OPENCODE_BASE_URL for another endpoint.
For Claude Code:
claude mcp add opencode -- npx -y opencode-mcpFor clients using an mcpServers configuration:
{
"mcpServers": {
"opencode": {
"command": "npx",
"args": ["-y", "opencode-mcp"]
}
}
}Restart the client and call opencode_setup. Choose a provider from its configured providers, then use opencode_provider_models to select a model. Set OPENCODE_DEFAULT_PROVIDER and OPENCODE_DEFAULT_MODEL together or pass the selected IDs in each prompt call.
Client-specific configuration includes VS Code, Windsurf, Continue, Zed, and Amazon Q. To test unreleased changes, build from source and configure your client to run node with the absolute path to dist/index.js.
Related MCP server: mcacp
Choose a Workflow
Need | Tools |
Setup and orientation |
|
Quick question or follow-up |
|
Start work and wait |
|
Work in the background |
|
Recover or control a recorded job |
|
Resolve required input |
|
Review the result |
|
opencode_fire({
directory: "/absolute/path/to/project",
prompt: "Add input validation to POST /api/users and run the relevant tests",
providerID: "<configured-provider>",
modelID: "<available-model>"
})
// Save the returned job and session IDs; use them to monitor or resume observation.Async results distinguish accepted, running, input_required, completed, failed, cancelled, and unknown. An observation timeout returns current progress; it does not mean the task failed or was cancelled. Follow the returned state and IDs instead of assuming an absent busy status means success.
Modern clients can use the MCP Tasks extension for opencode_run. Clients without that extension use ordinary tools, including opencode_fire and opencode_check. Task status is retrieved by polling; this package does not promise to wake an idle assistant with completion notifications.
Tools retain readable text and provide structured results for clients that consume them. Prompt tools accept optional model variants and OpenCode structured-output formats. See the generated tools reference and examples.
Multi-Project Use
Project-scoped tools accept directory: an absolute path on the OpenCode server. POSIX, Windows drive, and UNC paths are preserved across client operating systems. Relative paths are rejected; OpenCode checks existence and access.
opencode_project_init({path: "/absolute/local/project"}) creates or opens a directory on the MCP host. For remote OpenCode servers, create the project on that server instead. Authentication tools are global. Resources offer both static reads of the default project and explicit project/session templates.
Independent sessions do not isolate filesystem changes. Use separate project directories or Git worktrees when running overlapping coding tasks in parallel.
Configuration
All settings are optional; an OpenCode server must already be running by default.
Variable | Purpose |
| Server endpoint; defaults to |
| Optional server HTTP authentication |
| Set to |
| Default prompt provider/model pair |
|
|
| Override the local directory for persisted job records |
See configuration for storage, permissions, and client setup. Auto-start only supports local loopback HTTP endpoints; custom OpenCode CLI flags require a manually started server.
Development and Verification
npm ci
npm test
npm run test:coverageTests use local fixtures and do not require a model subscription. For controlled live checks against a local OpenCode server:
npm run build
node scripts/mcp-smoke-test.mjsLive smoke checks use a disposable project and owned session. Inference is opt-in with an explicitly selected provider and model. See live verification and releases for scope, skipped capabilities, and publishing checks.
Documentation
Available Tools
87 toolsopencode_agent_listARead-onlyIdempotent
List all available agents with their names, descriptions, and modes (primary/subagent)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds the output content (names, descriptions, modes), which is useful, but it does not disclose any additional behavioral traits such as scope limitations, pagination, or side effects beyond what annotations already cover.
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 with no wasted words. It states the action, the resource, and the output fields efficiently.
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?
For a simple list tool with a read-only, idempotent, non-destructive annotation profile and a fully documented optional parameter, the description fully explains what the tool returns. The schema covers the directory parameter, and annotations cover behavior, so nothing an agent needs to call it correctly is missing.
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 description coverage is 100% for the single 'directory' parameter, which is fully described in the schema. The tool description does not mention this parameter or add any meaning beyond the schema, so the baseline of 3 is appropriate.
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 uses a specific verb ('List') and resource ('agents'), and explicitly states the returned content (names, descriptions, modes). It clearly distinguishes from sibling list tools like opencode_command_list, opencode_tool_list, and opencode_provider_list by naming 'agents' as the target.
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?
The context is clear: this tool is for listing available agents. It does not explicitly mention when not to use it or name alternatives, but the purpose itself signals its appropriate use relative to other list tools. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_askBDestructive
Ask OpenCode a question in one step. Creates a new session, sends your prompt, and returns the AI response. This is the easiest way to interact with OpenCode.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Agent to use (e.g. 'build', 'plan') | |
| title | No | Optional title for the session | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| prompt | Yes | The question or instruction to send | |
| system | No | Optional system prompt override | |
| modelID | No | Model ID (e.g. 'claude-3-5-sonnet-20241022') | |
| variant | No | Model variant (e.g. 'fast', 'smart') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| providerID | No | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, which is consistent with the description mentioning creating a new session, which could have side effects. However, the description doesn't add much beyond that, such as mentioning that it creates a session or that it might use resources. The openWorldHint is noted but not explained.
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 short and front-loaded with the key behavior, but it doesn't waste words. It clearly states the one-step nature and that it's the easiest way, which is concise and efficient. More detail could be added, but it's not overly lengthy.
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's complexity with 9 parameters and an output schema, the description is sparse but not entirely incomplete. The schema and output schema cover most aspects. However, it doesn't mention the output response details or any side effects (e.g., session creation) that might be relevant for a one-step action. The description could benefit from mentioning that it is a higher-level convenience wrapper.
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 schema has 100% coverage, so the description of parameters is complete within the schema. The description does not add much beyond the schema, but the schema's own descriptions are detailed, including the format options and directory behavior. Given high coverage, a baseline of 3 is extended to 4 because the format parameter's description is notably clarifying about JSON Schema requirements.
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 states it asks OpenCode a question in one step, creating a session, sending the prompt, and returning the response. However, it doesn't clearly distinguish from similar tools like opencode_conversation or opencode_session_create, and the verb 'ask' is vague compared to more specific actions like 'send message' or 'get response'.
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?
The description says this is the 'easiest way to interact', implying it's for quick, one-off interactions, but it doesn't explicitly state when to prefer this over opencode_message_send or opencode_session_create. No mention of when not to use it or what conditions might require a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_auth_setBDestructive
Set authentication credentials for a provider (e.g. API key). Credentials are stored globally and shared across all projects.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | API key or credential value | |
| type | Yes | Auth type (e.g. 'api') | |
| providerId | Yes | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a write operation. The description adds the useful context that credentials are stored globally and shared across all projects, which goes beyond the annotations. It does not disclose that existing credentials will be overwritten, but the destructiveHint partially covers that. Overall, the description adds moderate value without contradicting the annotations.
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 two sentences with no wasted words. The primary action is stated first, and the global-scope side effect is added efficiently. It is well-structured and front-loaded.
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 100% schema coverage, output schema, and annotations covering destructive behavior, the description is largely sufficient. It explains the tool's purpose and a key side effect (global storage). It could mention that existing credentials for the provider may be overwritten, but the destructiveHint already signals this. No critical information needed to invoke the tool correctly is missing.
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 description coverage is 100%—each parameter (key, type, providerId) has a description. The tool description adds no additional meaning beyond the schema, such as examples of valid provider IDs or auth types. Since the schema does the heavy lifting, the baseline of 3 is appropriate.
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 uses a specific verb ('Set') and resource ('authentication credentials for a provider') with a concrete example ('API key'). It is clear what the tool does, and the name opencode_auth_set reinforces this. However, it does not explicitly differentiate itself from sibling auth-related tools like opencode_provider_auth_methods or opencode_provider_oauth_authorize, so it lacks the sibling distinction that would merit a 5.
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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that OAuth flows should use opencode_provider_oauth_authorize, nor does it state any exclusions or prerequisites. The only context given is that credentials are stored globally, which does not help an agent choose this tool over other auth-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_checkARead-onlyIdempotent
Get current task status, pending input, todos and file counts. Uses session summary metadata instead of fetching patches. Pass jobId for exact durable turn correlation; detailed includes response text.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | Durable job ID | |
| detailed | No | Include response text (default false) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageId | No | Submitted user message ID to correlate | |
| sessionId | No | Session ID (required unless jobId is supplied) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and idempotentHint already present, the description adds meaningful behavior by explaining that it uses session summary metadata instead of fetching patches, and that detailed includes response text. This helps an agent predict cost and output behavior beyond the annotations.
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 two tight sentences. The core purpose is front-loaded, and the second sentence adds parameter guidance without redundancy or filler.
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?
The tool has five parameters, but the schema fully documents them and an output schema exists. The description explains the key usage distinction for jobId and detailed while leaving structural details to the schema. It is mostly complete, though the relationship between sessionId, jobId, and messageId could be summarized more explicitly.
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 100%, so the baseline is 3. The description enriches jobId by explaining it enables exact durable turn correlation, which goes beyond the schema's 'Durable job ID'. The detailed note largely repeats the schema, but the jobId guidance justifies moving above baseline.
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 uses a specific verb ('Get') and a concrete set of resources: current task status, pending input, todos, and file counts. It is clear about what the tool returns, though it does not explicitly distinguish itself from siblings like opencode_session_status or opencode_status.
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?
The description gives clear context for when to use the tool: when you need task status, pending input, todos, and file counts without fetching patches. It also provides practical guidance on jobId for durable turn correlation and the detailed flag, but it does not explicitly name alternatives or say when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_command_executeBDestructive
Execute a slash command in a session (e.g. /init, /undo, /redo)
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Agent to use | |
| command | Yes | The slash command to execute (e.g. 'init', 'undo') | |
| modelID | No | Model ID | |
| variant | No | Model variant | |
| arguments | No | Arguments for the command | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID | |
| providerID | No | Provider ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive and open-world behavior, and the description adds little beyond examples. It does not disclose that commands like /undo or /redo mutate session state, that effects may be significant, or what an agent should watch out for. There is no contradiction with annotations.
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?
A single front-loaded sentence with useful examples and no filler. Every word contributes to understanding what the tool does.
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?
The output schema and full parameter coverage reduce the burden on the description, but an agent is not told how to discover valid slash commands or how this relates to command_list and the TUI execution tools. Adequate but minimal.
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 description coverage is 100%, so the schema already documents all parameters. The description adds no parameter-level meaning beyond examples, but the baseline of 3 is appropriate because the schema carries the load.
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?
States a specific verb and resource: executing a slash command within a session, with concrete examples (/init, /undo, /redo). It is clear, though it does not explicitly distinguish itself from sibling tools like opencode_tui_execute_command or opencode_command_list.
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 given about when to use this tool versus alternatives such as opencode_command_list, opencode_shell_execute, or opencode_tui_execute_command. The context implies session-scoped slash commands, but there are no exclusions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_command_listARead-onlyIdempotent
List all available commands (built-in and custom slash commands)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds scope context ('built-in and custom slash commands') but no additional behavioral traits beyond what annotations provide.
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?
One sentence with no filler, front-loaded with the verb and object. The parenthetical adds necessary scope clarification without redundancy.
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?
This is a simple read-only listing operation with rich annotations, full schema coverage for its only parameter, and an output schema. Nothing an agent needs to call it correctly is missing.
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 single optional parameter (directory) has 100% schema description coverage, so the schema fully documents it. The description adds no parameter-level information, but none is needed given the schema.
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 uses a specific verb ('List') and resource ('all available commands'), and the parenthetical clarifies that it covers both built-in and custom slash commands. This clearly distinguishes it from sibling tools like opencode_command_execute (execution) and opencode_tool_list (tools).
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?
The description implies its use as a discovery step before executing commands, but it does not explicitly state when to use it vs alternatives or mention exclusions. The usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_config_getBRead-onlyIdempotent
Get the current opencode configuration
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds little behavioral context beyond a generic label. It does not say whether the returned value is the effective/resolved configuration, how the optional directory affects the result, or what happens when no project configuration exists.
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 one short, front-loaded sentence with no filler. Every word adds meaning, and the core operation is stated immediately.
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?
For a simple getter with no required parameters, an output schema, and read-only annotations, the description is nearly sufficient. It does not, however, help an agent distinguish this from opencode_config_update or opencode_config_providers, and it relies on the schema to explain the directory behavior. The description alone is thin but not misleading.
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 fully documents the only parameter, `directory`, including that it is an absolute path, that it targets a specific project when provided, and that omission uses the server's working directory. The tool description itself contributes no parameter detail, but the schema covers this dimension completely.
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 uses a clear verb and resource: 'Get the current opencode configuration.' It is easy to identify this as a read operation on the configuration. It does not explicitly call out sibling tools like opencode_config_update or opencode_config_providers, but the 'get' wording makes the primary purpose clear.
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?
The word 'current' implies this tool is for retrieving the active configuration rather than updating it or inspecting providers, so some usage context is present. However, it gives no explicit when-to-use or when-not-to-use guidance and does not mention alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_config_providersBRead-onlyIdempotent
List all configured providers and their default models
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no extra behavioral context (e.g., no mention of output format, but an output schema exists). It is consistent with the annotations, so no contradiction. Since annotations carry the burden, a 3 is appropriate.
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 with no filler. It states the action and the key detail (default models) efficiently. Every word earns its place.
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?
The tool is simple, has an output schema that defines the return, and annotations cover safety. The description tells the agent what it does. The only gap is the lack of usage guidance relative to siblings, but for a straightforward list tool this is a minor omission. Overall, an agent can call it correctly with the provided information.
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 schema description covers 100% of the parameter (directory), so the schema already documents its meaning and optionality. The description adds nothing about parameters, so it does not exceed the baseline of 3 when schema coverage is high.
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 states a clear verb ('List') and resource ('configured providers') with an additional detail ('their default models'). It distinguishes from config_update (which is a write) and config_get (which gets config), though it does not explicitly contrast with opencode_provider_list, which could also list providers. The phrase 'configured' and 'default models' adds specificity.
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 given on when to use this tool versus alternatives like opencode_provider_list or opencode_provider_models. The agent must infer usage from the description alone, with no mention of conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_config_updateCDestructive
Update the opencode configuration. Pass a partial config object with fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | Partial config object with fields to update | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the operation's mutating nature is known. However, the description adds no extra behavioral context—it does not explain what happens to existing configuration fields, whether the update merges or replaces, or any side effects beyond the annotation signals. This is minimal transparency.
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 concise, uses two short sentences, and clearly states the purpose at the start. There is no redundant fluff, and the partial config concept is front-loaded. It earns a 4 for efficiency, though it could have been more informative without much verbosity.
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 is destructive (per annotations) and has multiple siblings (opencode_config_get, opencode_config_providers), the description is incomplete. It lacks guidance on usage, potential risks, or what happens to the configuration. While an output schema exists, it does not compensate for the missing operational context. The agent needs more to call it safely and correctly.
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 description coverage is 100%, so both parameters (config and directory) are already documented in the schema. The description reinforces that config is a partial object, but this is already stated in the parameter description. No additional meaning is added beyond the schema, so a baseline 3 is appropriate.
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 states 'Update the opencode configuration' which clearly identifies the verb and resource. It mentions passing a partial config object, which indicates the update mechanism. However, it does not explicitly differentiate from sibling tools like opencode_config_get, so it's slightly below a 5.
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?
The description provides no guidance on when to use this tool versus alternatives such as opencode_config_get for reading or opencode_config_providers. There is no mention of prerequisites, warnings, or exclusions. It leaves the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_contextARead-onlyIdempotent
Get full project context in one call: current project, path, VCS info, config, and available agents. Useful to understand the current state before starting work.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well-covered. The description adds behavioral context by stating that it gathers multiple distinct pieces of context in a single call, which goes beyond the bare annotation data. Minor gap: it doesn't mention potential latency or external calls, but the annotations make this less critical.
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 two sentences with zero filler. The first sentence front-loads the tool's purpose and scope, listing concrete elements; the second gives a practical usage directive. Every word earns its place.
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?
The tool is simple: one optional parameter, no destructive actions, and a full output schema provided externally. The description tells the agent exactly what context is retrieved and when to use it. Combined with the annotations and schema, nothing an agent needs for correct invocation is missing.
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 description coverage is 100% — the only parameter, 'directory', is fully described in the input schema. The description adds no extra meaning about the parameter, but per the rubric baseline, a score of 3 is appropriate when the schema thoroughly documents parameters.
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 states a specific verb ('Get') and a well-defined resource ('full project context') with enumerated components (current project, path, VCS info, config, agents). It clearly differentiates from sibling tools by emphasizing 'one call' aggregation, which contrasts with granular tools like opencode_project_current or opencode_vcs_info.
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?
It explicitly gives a use context: 'Useful to understand the current state before starting work.' This implies the appropriate timing and intent. It does not explicitly compare to alternatives, but the notion of combining multiple lookups into one call inherently suggests a preferred approach for a consolidated overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_conversationBRead-onlyIdempotent
Get the full conversation history of a session, formatted for easy reading. Shows all messages with their roles and content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (default: all) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety. The description adds that output is 'formatted for easy reading' and shows roles/content, which is useful. However, it does not disclose behavior like limit handling or pagination, and adds only modest context beyond annotations.
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 two sentences, direct and front-loaded with the primary action. It avoids redundancy and is appropriately sized for a simple read operation.
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?
For a straightforward read-only tool with annotations covering safety, a complete output schema, and 100% parameter coverage, the description is sufficient. It clarifies the purpose and output format, and no critical details appear missing.
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 description coverage is 100%, so all three parameters (limit, directory, sessionId) are already described in the schema. The tool description adds no additional meaning or clarification about these parameters, so it relies entirely on the schema.
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 verb 'Get' and the resource 'full conversation history of a session', and specifies that it shows messages with roles and content. This distinguishes it from session metadata tools, though it doesn't explicitly name alternatives like opencode_message_list.
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 sibling tools such as opencode_message_list or opencode_session_get. There are no explicit conditions, exclusions, or mentions of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_events_pollARead-onlyIdempotent
Poll project events from OpenCode, or explicitly select global scope. Collects up to maxEvents within the duration. Connection failures are reported with any partial events; stopping observation does not abort remote work.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Event scope (default: project). Global events include all projects and cannot be combined with directory. | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| maxEvents | No | Maximum number of events to collect (default: 50, max: 1000) | |
| durationMs | No | How long to collect events in milliseconds (default: 3000, max: 30000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations: connection failures return partial events, and stopping observation does not abort remote work. This helps an agent predict side effects and failure modes.
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?
Two sentences with no filler. The core verb and resource are front-loaded, and the scope choice appears immediately. Every sentence contributes behavioral or usage information.
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?
The description covers the tool's purpose, scope variants, collection limits, failure behavior, and side-effect guarantees. With an output schema present and annotations covering safety, nothing essential is missing for an agent to invoke it correctly.
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 description coverage is 100%, so the schema already explains scope, directory, maxEvents, and durationMs. The description adds the relationship between maxEvents and duration, but this is marginal beyond the structured parameter descriptions.
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 states a specific verb ('Poll'), a resource ('project events'), and an explicit scope option ('global scope'). It clearly distinguishes project-wide behavior from global behavior, so an agent understands exactly what the tool operates on.
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?
The description makes the primary usage clear: poll project events, or explicitly select global scope. It does not name alternative sibling tools, but no sibling directly competes with event polling, and the scope selection is stated upfront.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_file_listBRead-onlyIdempotent
List files and directories at a path
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to list (defaults to project root) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no meaningful behavioral context beyond what 'List files and directories' implies, such as recursion, hidden files, or scope limits. It does not contradict the annotations.
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 sentence with no wasted words. It is appropriately concise for a simple tool whose parameter details and output structure are already provided elsewhere.
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?
For a low-complexity list tool with strong annotations, full schema coverage, and an output schema, the description is nearly sufficient. The only gap is the lack of any sibling differentiation or usage context, which is accounted for in other dimensions rather than making the tool description incomplete for invocation.
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 description coverage is 100%, so the parameters are already fully documented in the input schema. The description adds no additional semantic detail about path interpretation, default behavior, or the directory/project parameter distinction.
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 uses a specific verb ('List') and resource ('files and directories at a path'), making the basic purpose clear. However, it does not differentiate this from similar file-related siblings like opencode_find_file or opencode_file_status, which could cause some ambiguity for an agent selecting among them.
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 given about when to use this tool versus alternatives such as opencode_find_file, opencode_file_read, or opencode_file_status. The only contextual hint is the path default, which appears in the schema; the description itself provides no usage direction or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_file_readBRead-onlyIdempotent
Read the content of a file
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File path to read | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description merely restates the read-only behavior without adding extra behavioral context such as encoding, binary file handling, or output size limits. It does not contradict the annotations.
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 succinct sentence with no filler or redundant content. It is front-loaded and immediately communicates the core operation. Every word earns its place.
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?
For a simple read tool with a clear schema, full parameter coverage, an output schema, and comprehensive annotations, the description is sufficient for an agent to invoke it correctly. Additional context about file types or edge cases would be nice but is not necessary given the available structured metadata.
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 covers 100% of the parameters with descriptions, so the schema does the heavy lifting. The tool description adds no additional parameter meaning beyond what the schema already provides. With full schema coverage, the baseline of 3 is appropriate.
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 states a specific verb and resource: 'Read the content of a file.' This clearly distinguishes it from sibling tools like opencode_file_list or opencode_find_text. However, it does not explicitly differentiate itself from alternative file-related tools, though the name and wording make the intent obvious.
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 about when to use this tool versus file_list, find_text, or other file-related tools. There are no exclusions, prerequisites, or alternative suggestions. The intended usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_file_statusARead-onlyIdempotent
Get status for tracked files (VCS changes: modified, added, deleted, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful scope ('tracked files', 'VCS changes') but does not disclose operational details such as whether untracked files are excluded or what the output structure looks like; the output schema covers the latter. This mirrors the get_calls calibration where annotation coverage yields a baseline 3.
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 compact sentence that leads with the action and resource, and the parenthetical immediately disambiguates 'status' as VCS changes. No filler or redundant information.
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?
For a simple, read-only, idempotent tool with one fully documented optional parameter and an output schema, the description is sufficient. Nothing an agent needs to select or invoke the tool correctly is missing.
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 100%; the single optional directory parameter is fully documented in the schema, including behavior when omitted. The description adds no parameter-specific meaning beyond that, so the baseline 3 applies.
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 uses a specific verb ('Get status') with a well-defined resource ('tracked files') and immediately clarifies the domain with 'VCS changes: modified, added, deleted, etc.' This is distinct from sibling file listing/reading tools and from the broader status tools, so an agent can tell what the tool is for.
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?
The description gives clear context: use this when you need VCS change status for tracked files. It does not explicitly name alternatives or when-not-to-use conditions, but the scope is sufficiently unambiguous for this simple read-only operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_find_fileARead-onlyIdempotent
Find files and directories by name (fuzzy match)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Limit results to 'file' or 'directory' | |
| limit | No | Max number of results (1-200) | |
| query | Yes | Search string for file/directory names | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| searchDirectory | No | Override the project root for the search |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds the fuzzy-match behavior and clarifies the search-scope distinction between directory and searchDirectory. No contradictions with annotations.
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 sentence that is front-loaded with the essential purpose. It's appropriately minimal, though it could arguably mention the fuzzy-match behavior more explicitly as the key differentiator.
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 output schema exists, annotations cover safety, and all parameters are documented in the schema, the description is complete enough. It could add a note about how searchDirectory relates to directory, but the schema already covers this. Complexity is low; an agent can invoke this correctly.
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 description coverage is 100%, so the schema documents all parameters. The description adds the fuzzy-match semantics that apply to query. The directory parameter is already well-documented in the schema with its fallback behavior.
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 states a clear verb and resource: 'Find files and directories by name (fuzzy match)'. It distinguishes from siblings like opencode_find_text and opencode_find_symbol by focusing on file/directory names, though it doesn't explicitly name those alternatives.
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?
The description implies when to use this tool: when searching for files/directories by name. It doesn't explicitly exclude alternatives like opencode_find_text or opencode_find_symbol, but the fuzzy-match-by-name phrasing is clear enough context for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_find_symbolARead-onlyIdempotent
Find workspace symbols by name (functions, classes, variables, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Symbol name to search for | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds 'workspace' scope, implying it only searches within the current workspace, which is a useful behavioral constraint. However, it does not disclose return format, case sensitivity, or indexing behavior. Since annotations cover safety, a 3 is appropriate.
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?
A single, front-loaded sentence that is extremely concise and includes illustrative examples. No filler or redundant phrasing. The structure is optimal for a simple tool.
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?
For a simple search tool with an output schema and safety annotations, the description is largely sufficient. It could mention whether the search is case-sensitive or requires an LSP server, but these are minor gaps. The presence of an output schema covers return values, and annotations cover side effects. Overall, it is complete enough for correct invocation.
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 100% coverage, with clear descriptions for both 'query' (symbol name to search for) and 'directory' (absolute path). The tool description does not add any parameter-specific details beyond the schema, so it meets the baseline but adds no extra value.
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 finds workspace symbols by name, with concrete examples (functions, classes, variables). It is unambiguous and distinguishes this from text/file search by focusing on 'symbols', even though it doesn't name alternatives. The verb 'find' and resource 'workspace symbols' are specific.
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 given on when to use this tool versus sibling search tools like opencode_find_text or opencode_find_file. The description does not mention scenarios, exclusions, or prerequisites (e.g., needing an initialized project). An agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_find_textARead-onlyIdempotent
Search for text patterns in project files (regex supported). Returns file paths, line numbers, and matching lines.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Text or regex pattern to search for in files | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that regex is supported and that results include file paths, line numbers, and matching lines, which is useful but does not disclose details like case sensitivity, default search scope, or behavior when no matches are found. No contradiction with annotations.
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?
One sentence with zero waste. The core action, scope, regex capability, and return values are all front-loaded and clearly stated.
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?
For a read-only search tool with a full output schema and complete parameter documentation, the description is nearly complete. It could mention case sensitivity or default directory behavior, but the annotations and schema cover the essential safety and parameter context, so nothing critical is missing.
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 description coverage is 100%, so the schema already documents both parameters. The description adds the regex capability and the result shape, but it does not add meaning beyond the schema for the parameters themselves. Baseline 3 is appropriate.
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 states a specific verb ('Search'), a resource ('project files'), and the key capability ('regex supported'). It also names the return payload (file paths, line numbers, matching lines), which distinguishes it from sibling search tools like opencode_find_file and opencode_find_symbol.
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?
The description implies usage for text/regex search across project files, and the sibling list shows opencode_find_file and opencode_find_symbol as alternatives, but the description does not explicitly say when to choose this tool over those siblings. It provides clear context but no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_fireADestructive
Dispatch a durable background task and return its job, session and message IDs immediately. Use opencode_check or opencode_wait to observe; job_cancel stops the task.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | OpenCode agent name | |
| title | No | Title for a new session | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| prompt | Yes | Task or instruction to send to OpenCode | |
| modelID | No | Model ID from provider discovery | |
| variant | No | Model variant | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | No | Existing session to continue; omit to create one | |
| providerID | No | Provider ID from provider discovery |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description informs that the task is durable, meaning it persists across failures, and that it returns immediately with IDs, indicating non-blocking behavior. This adds context beyond the annotations (readOnlyHint=false, destructiveHint=true) by explaining the operational semantics of background execution. It does not detail exactly how destructive it is, but the combination with annotations and the description is sufficient. The description doesn't contradict any annotations, as the destructive hint aligns with the fact that dispatching a task may have side effects.
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?
Two concise sentences that state the core action, the immediate return, and the follow-up tools. No redundant or irrelevant information. The information is well-structured, with the main purpose first and usage guidance second. Perfectly sized for quick understanding.
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's moderate complexity (9 params) and the presence of an output schema (describing the returned IDs), the description is nearly complete. It covers the purpose, key behavior, and next steps, which is crucial for an async tool. A minor gap is not mentioning any permission or auth requirements (e.g., for structured output), but the schema description already notes the StructuredOutput permission. So the description is adequate without repeating that. Thus, a 4 is justified as it covers the essential context for correct usage.
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 already provides comprehensive descriptions for all 9 parameters (100% coverage). The description does not add extra param-specific detail, but the schema handles it. The description's focus on the tool's overall behavior, not individual parameters, is acceptable given the high schema coverage. No additional semantics needed beyond what's provided.
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?
Clearly states the tool dispatches a durable background task and immediately returns job, session, and message IDs. It uses a specific verb ('dispatch') with a defined resource (background task) and context ('durable'), distinguishing it from fire-and-forget or synchronous operations. The description is clear and unambiguous, separating it from sibling tools like opencode_run (synchronous) and opencode_message_send_async (no job handling).
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?
Explicitly states when to use this tool (to dispatch a background task) and directs users to alternatives: use opencode_check or opencode_wait to observe results, and job_cancel to stop the task. This gives clear guidance on the lifecycle and differentiates it from synchronous execution tools and other async tools like opencode_message_send_async. It also implies not to use this for synchronous interactions, guiding the agent to opencode_run or opencode_ask instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_formatter_statusCRead-onlyIdempotent
Get the status of configured formatters
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. However, the description adds no behavioral context beyond the basic action—it does not explain what 'status' means (e.g., enabled/disabled, configured paths), whether it reads from configuration files, or what the response structure looks like. With annotations present, the description should still provide value, but it is essentially a restatement of the tool's name.
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 with no redundant information. It is appropriately concise for a simple read-only status tool. While it could be richer, it avoids waste and communicates the core action efficiently.
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?
The tool is simple (one optional parameter, read-only, with an output schema). The description is minimal but technically sufficient for an agent to understand the basic operation. However, it omits details about what constitutes 'status', potential prerequisites (e.g., configured formatters), or how results are presented—information that would help an agent decide whether to call this tool. Since an output schema exists, return values need not be explained, but the description still feels sparse for a tool with a sibling named opencode_status.
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 schema covers 100% of the single optional parameter 'directory', including its meaning and default behavior. The description does not mention parameters at all, but because schema coverage is high, the baseline score is 3. No additional semantic value is added by the description.
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 verb 'get' and the resource 'configured formatters', making the tool's purpose unambiguous. It is distinct from sibling tools like opencode_status or opencode_config_get because it targets formatters specifically, though it does not explicitly name alternatives or clarify what 'status' includes.
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?
The description provides no guidance on when to use this tool versus alternatives such as opencode_status or opencode_config_get. There is no mention of scenarios that favor this tool, no exclusions, and no reference to related tools. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_healthARead-onlyIdempotent
Check server health and version
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the 'health and version' scope but doesn't disclose what the response contains or whether the optional directory changes behavior beyond targeting. No contradiction with annotations.
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 short sentence that front-loads the core purpose. Every word earns its place; no filler or redundancy.
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?
For a simple read-only health check with one optional parameter and an output schema, the description is mostly adequate. However, it doesn't clarify what 'health' includes (e.g., server status, version string) or when the directory parameter matters, which could leave an agent uncertain about expected results.
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 description coverage is 100%, so the schema already documents the directory parameter fully. The description adds no extra meaning about the parameter beyond what the schema provides. Baseline 3 is appropriate.
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 states a clear verb and resource: 'Check server health and version'. It is distinct from siblings like opencode_status or opencode_config_get, though it doesn't explicitly name a sibling to differentiate from. The purpose is unambiguous.
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?
The description implies usage for checking server health/version but provides no explicit when-to-use guidance or alternatives. The optional directory parameter hints at targeting a specific project, but no context is given for when to use this vs other status-like tools (e.g., opencode_status, opencode_lsp_status).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_instance_disposeADestructive
Dispose the current opencode instance (shuts it down). WARNING: This is destructive and will terminate the server.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true and readOnlyHint=false, and the description reinforces this with an explicit WARNING that the server terminates. It goes beyond the label by clarifying exactly what is destroyed: the current opencode instance/server. This is adequate transparency for a destructive shutdown tool.
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?
Two short sentences front-load the operation and add a necessary warning. Every word earns its place; there is no filler or redundancy.
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?
For a one-optional-parameter destructive tool with an output schema and clear safety annotations, the description covers the essential facts: function, target, and destructive consequence. The optional directory targeting behavior is fully covered by the schema, so no critical selection-time information is missing.
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 description coverage is 100%, so the directory parameter is fully documented in the schema. The description adds no parameter-specific semantics beyond the schema, matching the baseline for high schema coverage.
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 uses a specific verb, 'Dispose', names the resource ('current opencode instance'), and clarifies with 'shuts it down' and 'terminate the server'. This clearly distinguishes it from session-level tools like opencode_session_delete and from all read-only sibling tools.
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?
Usage is implied: call it to shut down the current opencode instance. However, it does not explicitly state when not to use it or name less destructive alternatives such as session deletion or abort. A sentence like 'Use only when the instance is no longer needed' would strengthen this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_job_cancelADestructive
Explicitly abort the OpenCode session owned by a job. This also stops other work in that session.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent behavior; the description adds useful consequence detail by telling the agent that aborting the session also stops other work in that session. It does not contradict annotations.
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?
Two short sentences, front-loaded with the primary action and a second sentence for the important side effect. No filler.
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?
For a one-parameter destructive action with annotations and an output schema, the description covers what it does and the main side effect. It does not specify the job lifecycle outcome or async behavior, but those are minor given the schema and annotations.
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 schema provides no description for jobId and coverage is 0%, but the description ties the operation to 'a job,' so jobId is inferable as that job's ID. It still never explicitly says what jobId means or how to obtain it, so the description only partially compensates for the empty schema.
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?
States a specific action—explicitly abort—and a target: the OpenCode session owned by a job. It clearly separates this job-scoped cancel/abort from direct session tools like opencode_session_abort, and the side-effect sentence reinforces the resource being acted on.
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?
Usage context is implied rather than spelled out: an agent can infer that this should be used when it needs to cancel a job and stop its session, but the description never names alternatives like opencode_session_abort or states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_job_getARead-onlyIdempotent
Observe a durable job by ID, including pending inputs and final results.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate safety. It adds value by specifying the response includes pending inputs and final results, which is beyond what annotations state. No contradictions found.
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 with no wasted words. It conveys the action, the resource, and the key content of the response efficiently.
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 one parameter, an output schema, and annotations covering safety, the description is complete. It tells the agent what the tool does and what to expect, with no missing prerequisites or side-effect information.
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?
With 0% schema description coverage, the description compensates by clarifying that the jobId parameter is the identifier of the job to observe. Though the name already implies this, the description reinforces it and ties the parameter to the action.
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 states a specific verb (observe) and resource (durable job) and explicitly includes what is returned (pending inputs and final results). It clearly distinguishes itself from siblings like job_cancel, job_list, and job_input, as it is the getter for a single job's details.
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?
The purpose is clear for a get operation, and the context is evident: use this when you need details of a specific job by ID. It does not explicitly list alternatives or exclusions, but the naming and description make the usage unambiguous relative to job_list and job_input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_job_inputBDestructive
Respond to a job's pending questions or permissions. Omit responses to request MCP forms when supported, or receive manual response instructions. Never approves automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| responses | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate destructiveHint true and readOnlyHint false, so the description carries the burden of behavioral disclosure. It adds key behaviors: 'Never approves automatically' clarifies that it does not auto-approve, and 'Omit responses to request MCP forms when supported, or receive manual response instructions' describes nuanced behavior. This provides meaningful context beyond the annotations without contradiction.
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 two sentences with no wasted words. The primary purpose is front-loaded, and the additional behavioral clauses are concise. Every sentence contributes essential information, making it highly efficient.
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's moderate complexity (nested responses array, permission/question kinds) and the lack of parameter explanations, the description is incomplete. It does not explain how to structure responses or what the output schema returns. While an output schema exists, the description fails to clarify the request format, leaving an agent to guess at the meaning of fields like 'always' vs 'once' or 'reject'. The omission of parameter semantics makes this contextually insufficient for reliable invocation.
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 description coverage is 0%, so the description must compensate for explaining the parameters. However, it does not mention jobId or the responses structure, nor explain the enums (once/always/reject) or the answers array. The schema itself has no descriptions, so an agent would have to infer parameter usage from names and types. The description adds no parameter-specific meaning, severely undercompensating for the low schema coverage.
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's purpose: 'Respond to a job's pending questions or permissions.' This identifies the specific verb (respond) and resource (a job's questions/permissions). It adds a distinctive behavior (omitting responses to request MCP forms) that helps differentiate it from generic reply tools, though it does not explicitly name sibling tools like opencode_question_reply. It is specific enough to be understood, but lacks explicit sibling differentiation.
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?
The description provides implicit usage context: use this tool when there are pending questions or permissions for a job, and it mentions a special case (omit responses to request MCP forms). However, it does not explicitly state when not to use it or name alternatives among the many sibling tools (e.g., opencode_question_reply for single questions). The guidance is present but not explicit about selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_job_listARead-onlyIdempotent
List locally retained jobs in this OpenCode server and credential scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the 'locally retained' and 'credential scope' scoping constraints, but it does not disclose behaviors like default ordering, whether results are paginated, or what happens when limit is omitted.
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, focused sentence that front-loads the verb and resource. It contains no filler or repetition, and every word contributes to scoping the operation.
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?
The tool is simple, has robust annotations, and an output schema exists, so return values do not need explanation. The core purpose is clear, but the undocumented `limit` parameter and the lack of explicit guidance about alternatives leave a moderate gap for an agent trying to invoke this tool correctly.
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 description coverage is 0%, and the description adds no meaning about the only parameter, `limit`. It does not mention the default behavior, the effect of omitting the parameter, or how limit interacts with the listed jobs, leaving the description to compensate for the schema gap without doing so.
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 uses a specific verb ('List') and resource ('locally retained jobs'), and clarifies the scope ('in this OpenCode server and credential scope'). It distinguishes this from job_get, job_cancel, and job_input by clearly positioning it as the enumeration operation.
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?
The description gives clear context for when to use the tool: you list jobs retained locally in the server/credential scope. It does not explicitly name alternatives or state when not to use it, but the distinction from single-job operations is reasonably clear from the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_logBDestructive
Write a log entry to the opencode server
| Name | Required | Description | Default |
|---|---|---|---|
| extra | No | Extra data to include in the log entry | |
| level | Yes | Log level | |
| message | Yes | Log message | |
| service | Yes | Service name for the log entry | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the description's 'write' adds no new behavioral insight beyond what is structured. It does not disclose side effects, persistence, error behavior, or rate limits. No additional value is provided over the annotations.
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 sentence with no filler words. It front-loads the core action and target, and every word earns its place. This is appropriately concise for a simple logging endpoint.
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 output schema exists and annotations cover the mutation/destructive nature, the description is minimally adequate: an agent can invoke the tool correctly by relying on the schema. However, it lacks any usage context or behavioral nuance beyond what structured fields provide, so it does not exceed the minimum viable completeness.
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 description coverage is 100%, meaning every parameter (service, level, message, extra, directory) is documented with its own description. The tool description does not reference any parameters, but the schema fully carries the semantic load, so the baseline of 3 applies.
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 states a specific verb ('write') and resource ('log entry to the opencode server'). It clearly identifies the tool's function and is distinct from all sibling tools, none of which are logging tools. The purpose is immediately understandable and not a tautology.
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?
The description provides no guidance on when to use this tool, when not to use it, or any alternatives. There is no context about its intended role (e.g., diagnostics, auditing) or any prerequisites. An agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_lsp_statusBRead-onlyIdempotent
Get the status of LSP (Language Server Protocol) servers
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, and the description adds no behavioral detail beyond restating that it returns status. It does not mention scope behavior, prerequisites, or any other context beyond what the structured metadata already provides.
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 short, front-loaded sentence with no filler. It states the core action, expands the acronym, and every word earns its place.
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?
For a simple read-only status tool with a fully documented optional parameter, an output schema, and strong annotations, the description is sufficient to identify the tool's purpose. It lacks sibling-related usage guidance, but that gap is already captured in the usage dimension.
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 description coverage is 100%, so the single optional directory parameter is fully documented in the schema. The description itself says nothing about parameters, but because the schema carries the burden, the baseline score of 3 applies.
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 identifies a specific verb ('Get') and resource ('status of LSP servers'), and it expands the LSP acronym for clarity. It is distinguishable from sibling tools like opencode_mcp_status and opencode_formatter_status by the explicit LSP focus, though it does not explicitly contrast itself with them.
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 given on when to use this tool versus alternatives such as opencode_health, opencode_status, opencode_mcp_status, or opencode_formatter_status. The optional directory parameter is documented in the schema, but the description itself provides no usage context, exclusions, or decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_mcp_addCDestructive
Add an MCP server dynamically to opencode
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the MCP server | |
| config | Yes | MCP server configuration object | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnly=false, so the description doesn't need to restate that. However, it adds little behavioral context beyond 'dynamically'—it doesn't mention whether it modifies configuration files, persists across restarts, or affects running sessions. It doesn't contradict annotations but adds minimal value beyond what annotations already imply.
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 concise sentence with no wasted words. It is front-loaded and efficient—there is no filler or redundancy.
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 that this is a mutation tool with a nested config object and an output schema, the one-sentence description is insufficient. It doesn't explain the effect of the directory parameter, how the config object is used, or any side effects. The presence of many siblings also calls for more context to guide tool selection.
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 100%, so the baseline is 3. The description doesn't add any parameter-specific meaning; it just says 'Add an MCP server' without referencing the name, config, or directory parameters. It thus doesn't exceed the baseline provided by the schema.
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 a specific action (add) and resource (MCP server) with context ('dynamically to opencode'). It is distinct from siblings like config_update or mcp_status, though it doesn't explicitly differentiate. The verb and resource are clear and unambiguous.
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?
There is no guidance on when to use this tool versus alternatives like config_update or mcp_status. No context about prerequisites, typical scenarios, or exclusions. The description leaves usage entirely to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_mcp_statusARead-onlyIdempotent
Get the status of all MCP servers configured in opencode
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. However, the description adds no additional behavioral context—such as permission requirements, rate limits, or how the directory parameter affects scope. It only restates the tool's purpose without disclosing any non-obvious behavior.
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 sentence that states the tool's function directly with no filler. It is front-loaded and easy to parse, containing exactly the information needed for purpose clarity.
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?
For a simple read-only status tool with one optional parameter, an output schema, and clarifying annotations, the description is mostly sufficient. The schema explains the directory parameter, and the output schema documents return values. However, the description does not explicitly mention that the directory parameter changes the scope of the status check, which could be relevant for project-specific configurations.
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 description coverage is 100%, and the directory parameter is fully documented in the schema. The description adds no extra meaning or usage nuance beyond the schema, so the baseline score of 3 is appropriate.
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 opens with a specific verb 'Get' and names the exact resource: 'status of all MCP servers configured in opencode'. This is unambiguous and distinguishes it from related tools like opencode_health (general health) or opencode_status (overall status) by targeting MCP servers specifically.
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?
The description implies usage when MCP server status is needed, but it does not explicitly state when to choose this over alternatives like opencode_health or opencode_status, nor does it mention exclusions or prerequisites. There is minimal contextual guidance beyond what the name already conveys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_message_getARead-onlyIdempotent
Get details of a specific message in a session
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageId | Yes | Message ID | |
| sessionId | Yes | Session ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no behavioral traits beyond 'Get details,' which is consistent with the annotations and adds minimal context. No contradiction exists.
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?
A single, concise sentence that front-loads the core purpose. No filler or redundant information. Every word earns its place.
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 simple read-only operation, the output schema, and the annotations, the description is complete for an agent to call the tool correctly. The required parameters are already listed in the schema, and the return format is defined by the output schema, so nothing essential is missing.
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 description coverage is 100%, with all three parameters (directory, messageId, sessionId) documented in the schema. The description does not add any additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
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?
States a specific verb ('Get'), resource ('details of a specific message'), and scope ('in a session'). This clearly distinguishes it from siblings like opencode_message_list (listing messages) and opencode_message_send (sending messages). The purpose is unambiguous.
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?
The description implies usage (retrieve details of one message) but provides no explicit guidance on when to choose this over opencode_message_list or how it differs from other session/message tools. No alternatives or exclusions are mentioned, leaving the agent to infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_message_listARead-onlyIdempotent
List all messages in a session with formatted output showing roles and content
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that output is formatted with roles and content, which is useful but minimal; it does not disclose ordering, pagination behavior, or behavior when a sessionId is invalid.
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 with no filler. It conveys the core operation, scope, and output shape efficiently.
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?
For a straightforward read-only list operation, the combination of a clear description, 100% parameter coverage, a complete output schema, and strong annotations is nearly sufficient. The only minor gap is the lack of explicit guidance about ordering or pagination, but this is not critical for the tool's basic invocation.
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 100%, so all three parameters are already documented with descriptions. The tool description does not add extra parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.
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 action ('List all messages'), the resource ('in a session'), and the output format ('showing roles and content'). It is easily distinguished from sibling tools like opencode_message_get because it explicitly targets the full message list rather than a single message.
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?
The description implies the use case: a caller who needs all messages in a session. However, it does not explicitly name alternatives such as opencode_message_get for single-message retrieval or opencode_session_search for filtered queries, nor does it state any exclusions or prerequisites beyond the required sessionId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_message_sendBDestructive
Send a prompt message to a session and wait for the AI response. Use parts to send text, and optionally specify a model.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text message to send | |
| agent | No | Agent to use | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| system | No | System prompt override | |
| modelID | No | Model ID (e.g. 'claude-3-5-sonnet-20241022') | |
| noReply | No | If true, inject context without triggering AI response (useful for plugins) | |
| variant | No | Model variant (e.g. 'fast', 'smart') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID | |
| providerID | No | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds the key behavioral trait of waiting for the AI response, which is useful. It also mentions the format option requiring OpenCode permission for StructuredOutput tool, which is a behavioral constraint. However, it doesn't disclose what 'destructive' means in this context (e.g., does sending a message mutate session state irreversibly?), and it doesn't mention rate limits or side effects beyond the annotation hints. The description adds some value but not rich behavioral context.
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 two sentences with no waste. It front-loads the core action ('Send a prompt message to a session and wait for the AI response') and then adds the key parameter hints. It could be slightly more structured by explicitly naming the async sibling, but it is concise and readable.
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?
The tool has 10 parameters, an output schema, and annotations, so the description doesn't need to explain return values. However, given the complexity (10 params, multiple model-related fields, format options, noReply behavior), the description is thin. It doesn't explain when to use noReply, how format works, or how this differs from the async sibling. The output schema and annotations cover some gaps, but for a tool with this many options, more contextual guidance would help.
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 description coverage is 100%, so the schema already documents all 10 parameters. The description adds minimal parameter meaning beyond the schema: it mentions 'parts' (which maps to text) and 'optionally specify a model' (modelID). It doesn't explain the relationship between agent, modelID, providerID, and variant, which could be ambiguous. Baseline 3 is appropriate since the schema does the heavy lifting.
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 states a specific verb ('send'), a resource ('prompt message to a session'), and the key behavior ('wait for the AI response'). It also mentions using 'parts' to send text and optionally specifying a model. However, it doesn't explicitly distinguish itself from the sibling opencode_message_send_async, which is a close alternative, so it loses a point on sibling differentiation.
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?
The description implies usage: send a prompt and wait for the response. It mentions 'optionally specify a model' and 'use parts to send text', giving some context. However, it does not explicitly state when to use this tool versus opencode_message_send_async (the async sibling), nor does it mention when to use noReply or other alternatives. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_message_send_asyncADestructive
Send a prompt asynchronously and return its messageId. Pass sessionId and messageId to opencode_wait to observe this exact turn.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text message to send | |
| agent | No | Agent to use | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| modelID | No | Model ID (e.g. 'claude-3-5-sonnet-20241022') | |
| variant | No | Model variant (e.g. 'fast', 'smart') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID | |
| providerID | No | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag mutating behavior (destructiveHint=true, readOnlyHint=false), so the description adds value by disclosing the async timing behavior and the exact mechanism for correlating the result to a turn via opencode_wait. This goes beyond what annotations alone convey, though it doesn't cover failure modes or side effects in depth.
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?
Two sentences, no filler, front-loaded with the core action and outcome. The follow-up instruction earns its place by explaining the purpose of the returned messageId in a concrete workflow.
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?
For a tool with an output schema and well-documented parameters, the description covers the critical async workflow and links to the necessary companion tool. It is slightly light on what asynchronous dispatch means for error handling or response timing, but nothing essential to invoking it correctly is missing.
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 100% and every parameter already has a description. The tool description adds limited semantic value, mostly by explaining the role of sessionId in the follow-up wait step, but it does not deepen understanding of parameters like format, agent, or providerID beyond the schema.
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 states a specific action ('Send a prompt asynchronously') and a specific result ('return its messageId'). It is clearly distinguishable from the sibling opencode_message_send by the explicit async qualifier, and from opencode_wait by describing the send-vs-observe relationship.
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?
Provides clear contextual guidance: after sending, pass sessionId and messageId to opencode_wait to observe the exact turn. It does not explicitly call out when not to use it or name the synchronous alternative, but the workflow is unambiguous enough for an agent to know how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_path_getBRead-onlyIdempotent
Get the current working path of the opencode server
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, which cover the safety profile. The description adds no extra behavioral context beyond the operation, such as how the optional directory parameter affects the result or what the return value contains, but it does not contradict the annotations.
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 with no filler or redundant wording. It is appropriately sized for a trivial getter tool.
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 fully documented schema, the detailed annotations, and the presence of an output schema, the one-line description is nearly sufficient for an agent to invoke the tool correctly. It lacks only an explicit pointer to related project/status tools, which is a minor gap rather than a critical omission.
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 description coverage is 100%, and the single optional 'directory' parameter is already documented in the schema, including the fallback behavior when omitted. The description itself adds no parameter-level detail beyond what the schema already provides, so the baseline of 3 is appropriate.
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 names a concrete operation ('get') and a specific resource ('current working path of the opencode server'), so an agent can clearly tell what the tool does. It does not explicitly contrast it with sibling tools like opencode_project_current or opencode_status, but the path resource is distinct enough to avoid serious confusion.
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 given about when to use this tool rather than related getters such as opencode_project_current or opencode_status. The description simply states what the tool does, leaving the agent to infer selection criteria without explicit help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_permission_listARead-onlyIdempotent
List all pending permission requests across all sessions. When a session is blocked waiting for approval (e.g. to run a shell command or access a file outside the project), it appears here. Respond with opencode_session_permission.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context: it lists what kinds of requests appear (shell commands, file access) and instructs the agent to respond via a specific sibling tool. This goes beyond the annotations without contradicting them.
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?
Two sentences with no waste. The core purpose is front-loaded, and the follow-up instruction is placed immediately after. Efficient and well-structured.
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 an output schema present, return values are covered. The description explains the tool's scope, the trigger conditions, and the recommended follow-up action. For a simple listing tool, nothing essential is missing.
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 description coverage is 100%, so the `directory` parameter is already fully documented. The tool description does not add additional semantics about the parameter, so the baseline of 3 is appropriate.
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 states a specific verb ('List') and resource ('all pending permission requests across all sessions'), and distinguishes itself from the sibling `opencode_session_permission` by noting the global scope and providing concrete examples of what triggers a pending request (shell command, file access). This is clear and unambiguous.
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?
It explains when to use the tool: when a session is blocked waiting for approval, and provides the immediate next step by instructing to respond with `opencode_session_permission`. It doesn't explicitly exclude alternatives, but the context makes it obvious this is the tool for enumerating pending requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_project_currentCRead-onlyIdempotent
Get the current active project
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds no behavioral context such as what 'active' means, whether a directory changes the target, or what happens when no active project exists. No contradiction with annotations.
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 efficient sentence with the main action front-loaded. It wastes no words, though it could afford one clarifying sentence about the active-project concept or sibling distinction.
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?
For a simple read-only getter with an output schema and no required parameters, the description is minimally viable. However, it leaves 'active project' undefined and does not explain how the directory parameter relates, so an agent may still need to infer context.
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 description coverage is 100%, and the single directory parameter is well described there. The tool description adds no additional meaning, so the baseline of 3 is appropriate.
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 states a clear verb and resource: 'Get the current active project.' It distinguishes the tool from list/init siblings by pointing at a single active project, but it does not explicitly contrast any sibling.
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?
There is no guidance about when to use this tool instead of opencode_project_list or opencode_project_init, nor about what makes a project 'active.' The optional directory parameter is documented only in the schema, not in terms of usage strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_project_initADestructive
Initialize or open a project directory to host an independent OpenCode session. Use this to create new empty folders, or to explicitly open preexisting projects on the MCP host machine for parallel code generation workloads. This tool operates on the local filesystem; create remote server directories separately.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The absolute file path where the project directory is located or should be created. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, covering the safety profile. The description adds useful context about operating on the local filesystem and supporting parallel workloads. However, it never explains what 'initialize' or 'open' actually changes on disk, leaving the destructive side effect underspecified.
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?
Three sentences, each earning its place: the first states the core action, the second gives concrete use cases, and the third establishes the filesystem boundary. There is no filler, repetition, or schema duplication, and the purpose is front-loaded.
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?
For a single-parameter tool with annotations and an output schema, the description covers the essential operational context: what it acts on, where, and when to use it. The main omission is the precise nature of the destructive hint, but that is a minor gap given the annotations and simplicity of the tool.
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 description coverage is 100%, with the path parameter already documented in the schema. The description adds no new parameter-level details; it restates the idea of a directory path and adds local vs. remote scope. Baseline 3 is appropriate because the schema fully covers parameter semantics.
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 names a specific verb and resource: initialize or open a project directory to host an OpenCode session. It clearly distinguishes itself from read-only project tools and session tools by focusing on directory creation/opening for parallel workloads. The local/remote boundary further separates it from other tools.
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?
The description explicitly states when to use the tool: to create new empty folders or to open preexisting projects for parallel code generation workloads. It also gives a clear exclusion by saying remote server directories must be created separately. It does not name a specific alternative tool, but the usage conditions are sufficient for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_project_listARead-onlyIdempotent
List all projects known to the opencode server
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the 'all projects' scope and the directory targeting behavior, but does not disclose details like whether the list is sorted, whether it includes hidden projects, or what happens when directory is invalid. With strong annotations, a 3 is appropriate.
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?
A single sentence that states the action and scope with zero waste. The description is front-loaded and every word earns its place.
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?
For a simple read-only list tool with an output schema, full annotations, and one optional parameter, the description is nearly complete. The only minor gap is not explaining what the output contains (e.g., project names, paths), but the output schema likely covers that, and the description's job is not to repeat structured data.
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 description coverage is 100%, so the schema already documents the directory parameter. The description adds the context that omitting directory uses the server's working directory, which is already in the schema. No additional semantic value beyond the schema is provided, so baseline 3 applies.
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 uses a specific verb ('List') and resource ('all projects known to the opencode server'), which clearly distinguishes it from project_init and project_current. It does not explicitly name sibling alternatives, but the scope is unambiguous.
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?
The description implies a simple read-only listing use case, and the optional directory parameter provides context for targeting a project. However, it does not explicitly state when to use this tool versus project_current or project_init, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_auth_methodsBRead-onlyIdempotent
Get available authentication methods for all providers
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds the bulk-scope behavior — it returns auth methods for ALL providers rather than a single provider — which is useful context beyond the annotations. It does not disclose details like whether an active server connection is required, but with output schema present and safety fully covered by annotations, a 3 is appropriate.
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?
A single 8-word sentence that front-loads the verb and resource with zero filler. Every word contributes meaning, and no redundant restatement of the tool name appears.
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?
For a simple read-only listing tool, the combination of annotations (safety profile), a complete input schema (100% param coverage), and an output schema makes the description nearly sufficient. The main gap is the lack of differentiation from auth-related siblings, which belongs to usage guidance rather than this dimension. Nothing an agent needs to invoke the tool correctly is missing.
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 description coverage is 100%, so the directory parameter is already fully documented in the input schema. The description adds no parameter-level detail, and its 'all providers' claim only loosely implies that the directory parameter does not scope the results to a single provider. Baseline 3 is correct since the schema carries the semantic weight.
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 states a specific verb (get) and resource (available authentication methods for all providers), which distinguishes it from siblings like opencode_provider_list (providers), opencode_provider_models (models), and opencode_auth_set (setting auth). The scope qualifier 'for all providers' helps differentiate it from per-provider auth actions like opencode_provider_oauth_authorize, though siblings are not named explicitly.
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 explicit guidance is given about when to use this tool versus related siblings such as opencode_provider_oauth_authorize, opencode_provider_oauth_callback, or opencode_auth_set. The phrase 'for all providers' implies scope but does not tell the agent when to choose this over alternatives or whether it is a prerequisite before authorizing a provider.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_listARead-onlyIdempotent
List all configured providers with their connection status. Returns a compact summary — use opencode_provider_models to see models for a specific provider.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description does not need to repeat those. It adds useful context by stating the output is a 'compact summary' with connection status, but does not detail response fields or directory-dependent behavior; the output schema likely covers the rest.
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?
Two sentences with no filler. The primary action is front-loaded, and the alternative tool is mentioned efficiently in the second sentence. Every word earns its place.
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?
For a read-only list operation with full schema coverage, clear annotations, and an output schema, the description provides everything needed to call it correctly. It even routes the agent to the relevant sibling for model details.
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 only parameter, directory, has 100% schema description coverage with a clear explanation. The tool description adds no parameter-level semantics, which is acceptable because the schema already fully documents the optional parameter.
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 uses a specific verb and resource: 'List all configured providers with their connection status.' It clearly states what the tool does and differentiates it from opencode_provider_models, which is explicitly mentioned as the tool for viewing models.
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?
The description gives a clear routing cue by saying 'use opencode_provider_models to see models for a specific provider,' which helps distinguish the tool from its most relevant sibling. It does not enumerate other provider-related siblings like auth methods or testing, but the core use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_modelsARead-onlyIdempotent
List available models for a specific provider. Call opencode_provider_list first to see provider IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max models to show (default 30). Use 0 for all. | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| providerId | Yes | Provider ID (e.g. 'anthropic', 'openrouter', 'google') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds the useful prerequisite dependency on opencode_provider_list, but does not disclose other behavioral details such as default limits or pagination, which are handled by the schema and output schema.
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?
Two concise sentences with no redundancy. The core purpose is front-loaded, and the prerequisite instruction is provided immediately after, making the description efficient and scannable.
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?
For a simple read-only list operation, the description is complete: it states what the tool does, names the required dependency, and the schema plus output schema cover parameters and return structure. Nothing an agent needs to invoke it correctly is missing.
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 description coverage is 100%, so all three parameters are already documented with clear descriptions. The tool description does not add further meaning beyond implying providerId is central, which the schema already states.
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 states a specific verb ('List'), resource ('available models'), and scope ('for a specific provider'). It also names the prerequisite sibling (opencode_provider_list), making it easy to distinguish from other provider-related tools.
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?
The description gives clear usage context by instructing the agent to call opencode_provider_list first to obtain provider IDs. It does not explicitly mention alternatives or when not to use this tool, but the prerequisite guidance is actionable and contextually sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_oauth_authorizeCDestructive
Start OAuth authorization for a provider
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | No | Additional inputs requested by the selected authentication method | |
| method | No | Auth method index from opencode_provider_auth_methods (default 0) | |
| providerId | Yes | Provider ID to authorize |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, open-world, destructive operation, so the description need not repeat those flags. However, it adds no behavioral context beyond the tool name, such as whether this launches an external browser flow, requires user interaction, or expects a subsequent callback. It does not contradict the annotations, but it also does not enrich them.
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 with no filler or repetition. It is efficient, but it may be too sparse for a tool with three parameters and nested object inputs; conciseness is achieved by omitting useful operational detail rather than by condensing rich content.
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?
The tool has moderate complexity and participates in a multi-step OAuth flow, yet the description does not mention the surrounding sequence: resolving provider IDs, selecting an auth method, or completing authorization via opencode_provider_oauth_callback. Although the schema is well-described and an output schema exists, the description alone leaves the agent without enough process context to use the tool confidently.
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 description coverage is 100%, with providerId, method, and inputs already documented meaningfully, including the method's default and its link to opencode_provider_auth_methods. The tool description itself contributes no additional parameter semantics. This stays at the baseline for full schema coverage.
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 states a specific action ('Start') and resource ('OAuth authorization for a provider'), making it clear that this tool initiates rather than completes an OAuth flow. It does not explicitly contrast with sibling opencode_provider_oauth_callback, but the verb 'start' differentiates initiation from callback handling. Some ambiguity remains about what 'starting authorization' concretely entails.
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?
The description gives no guidance on when to use this tool versus alternatives such as opencode_provider_auth_methods or opencode_provider_oauth_callback. It does not mention prerequisites like resolving provider IDs or auth method indices before authorizing. The only sequencing hints are implicit in the schema, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_oauth_callbackCDestructive
Handle OAuth callback for a provider
| Name | Required | Description | Default |
|---|---|---|---|
| providerId | Yes | Provider ID | |
| callbackData | Yes | OAuth callback data |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, but the description adds no behavioral context beyond these flags. It does not disclose that completing the callback may store credentials, modify provider state, or require a prior authorization step. With annotations present, the description should at least add sequencing or side-effect details, which it does not.
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 concise sentence with no fluff, which is structurally efficient. However, it is under-specified – it lacks any contextual or clarifying information that would make the sentence 'earn its place'. It is not verbose, but it is also not informative enough to be considered well-structured.
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?
For an OAuth callback tool with nested objects, an output schema, and annotations, the description is far too minimal. It does not explain the prerequisite of having called the authorize tool, the expected redirect flow, or what happens after the callback is processed. An agent lacks the context needed to correctly sequence this tool in a workflow.
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 description coverage is 100% – both providerId and callbackData are already described in the schema. The description adds no additional meaning or usage hints for these parameters, so the baseline of 3 applies. The callbackData object's 'method' and 'code' fields are already self-explanatory from the schema.
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 states a clear verb and resource ('Handle OAuth callback for a provider'), which conveys the basic function. However, it does not distinguish this from the sibling 'opencode_provider_oauth_authorize' – an agent cannot tell that this is the second step of the OAuth flow (after user redirect) versus the initial authorization request. It is clear but lacks differentiation.
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?
The description provides no guidance on when to invoke this tool or how it fits into the OAuth flow. There is no mention that it should be called after the user has been redirected back from the provider, nor any exclusions or alternatives. An agent has to infer the usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_provider_testADestructive
Quick-test whether a provider is working. Creates a temporary session, sends a trivial prompt, checks the response, and cleans up. Great for debugging auth issues.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| modelID | No | Specific model ID to test. If omitted, discovers the provider default or first available model. | |
| variant | No | Model variant | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| providerId | Yes | Provider ID to test (e.g. 'anthropic', 'openrouter') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true and idempotentHint=false, which signal that this tool creates and cleans up a temporary session. The description adds context about the temporary nature and side effects (creates a session, cleans up). However, it doesn't disclose potential side effects like cost (if the provider is paid) or that it might leave artifacts if cleanup fails. Given the annotations carry the destructive hint, the description adds moderate value but doesn't fully elaborate on edge cases.
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 two sentences and front-loads the core action. Every sentence is informative: the first states the purpose and process, the second gives a contextual use case. No filler or redundancy. It's appropriately concise.
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?
The description is sufficient for an agent to understand what the tool does and when to use it. It covers the primary use case (debugging auth) and hints at the process. With the output schema present and annotations covering destructive behavior, the description doesn't need to explain return values or side effects in detail. Slight gap: no mention of time requirements or failure handling, but given the tool is a quick test, this is acceptable.
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 100%, so the schema documents all five parameters with descriptions. The description adds no extra parameter-level detail beyond what's in the schema. For example, 'format' and 'modelID' are already explained. The description mentions 'providerId' implicitly but doesn't add usage nuances. Given full schema coverage, the baseline is 3, and the description doesn't elevate it.
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 purpose: 'Quick-test whether a provider is working.' It specifies the exact process (creates a temporary session, sends a trivial prompt, checks the response, cleans up) and the target resource (provider). It is distinct from sibling tools like opencode_provider_list (listing) or opencode_provider_models (model discovery), as it focuses on testing connectivity and auth.
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?
The description explicitly states when to use: 'Great for debugging auth issues.' It implies that for other provider-related tasks (e.g., listing models, configuring), one would use other tools. However, it does not explicitly mention alternatives or when NOT to use it (e.g., not for performance testing), but the purpose is clear enough for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_question_listARead-onlyIdempotent
List pending OpenCode questions, optionally filtered to a session.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat these. It adds the concept of 'pending' and 'optionally filtered to a session', which gives useful behavioral context beyond the annotations. However, it does not describe return format or edge cases, which are partially covered by the output schema.
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, efficient sentence that front-loads the main purpose ('List pending OpenCode questions') and then adds the optional filter. Every word earns its place with no redundancy.
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?
For a simple list operation with an output schema and annotations covering safety, the description is complete enough. It states the core action, the optional filter, and the subject (pending questions). It does not elaborate on question semantics, but sibling tools like opencode_question_reply provide context. The main missing piece is explicit guidance on when to use this versus alternatives, which is partially addressed in usage_guidelines.
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 description coverage is 50% (directory has a description, sessionId does not). The description mentions 'optionally filtered to a session', which gives meaning to sessionId as the filter, partially compensating for the missing schema description. Directory is already described in the schema, so the description adds value for sessionId but does not fully explain its format or constraints.
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 uses a specific verb 'List' and a clear resource 'pending OpenCode questions', with an optional filter by session. This clearly distinguishes it from sibling tools like opencode_session_list (lists sessions) and opencode_message_list (lists messages), which have different purposes.
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?
The description states the primary action and the optional filter but does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or conditions. The context of sibling tools (e.g., opencode_question_reply) implies usage, but it is not made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_question_rejectBDestructive
Reject a pending OpenCode question explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| requestId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, non-read-only, and non-idempotent, so the description does not need to restate that. It adds the 'pending' scope and 'explicitly' nuance, but does not describe side effects or irreversibility beyond what the annotations imply.
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?
A single, front-loaded sentence with no filler. Every word adds meaning: 'Reject', 'pending', and 'explicitly' all contribute to understanding the action.
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?
The tool is simple and has an output schema plus annotations covering destructiveness, but the description still leaves the agent to infer the role of requestId and when rejection is appropriate. Adequate for a minimal call, but with clear gaps.
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 description does not explain that requestId identifies the question to reject, and the schema only gives it a minLength with no semantic description. Directory is described in the schema, but at 50% coverage the description should compensate for requestId and does not.
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 uses a specific verb ('Reject') and a clear resource ('a pending OpenCode question'), which makes the tool's function immediately understandable and distinguishes it from siblings like opencode_question_reply and opencode_question_list.
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 given about when to reject a question versus replying to it, or what conditions must hold (e.g., the question must still be pending). The word 'pending' hints at the precondition, but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_question_replyBDestructive
Answer an OpenCode question request. Supply one array of selected labels or free text per question.
| Name | Required | Description | Default |
|---|---|---|---|
| answers | Yes | ||
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| requestId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true and openWorldHint: true, so the agent already knows this mutates state. The description adds minimal behavioral context—'Answer' implies a one-way submission, and 'per question' hints at cardinality, but it doesn't disclose side effects beyond that. It adds no new behavioral traits that annotations don't cover, so a 3 is appropriate.
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 concise, two sentences, with the core purpose front-loaded. No unnecessary words. It could possibly add a hint about multiple questions in one call, but as is, it's efficient and well-structured. Loses a point for not explicitly hinting at the array-of-arrays shape in the first sentence, but the structure is solid.
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?
Because an output schema exists (per context signals), return handling is covered elsewhere. The description covers the essential input format but omits prerequisites, such as the requirement that a question request must be currently active or that this action is final and cannot be retracted. For a destructive tool with a nested answers structure, more context would help an agent use it correctly, so a 3 is fair.
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 description coverage is only 33% (only directory is described). The description's phrase 'Supply one array of selected labels or free text per question' clarifies the answers parameter structure (array of arrays of strings) and its alignment with questions. However, it doesn't explain requestId beyond what the schema implies (a required string), and directory already has its own schema description. It partially compensates for the low coverage but leaves requestId semantics 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?
The description clearly states the tool's purpose: 'Answer an OpenCode question request.' This specifies a verb (answer) and a resource (question request), distinguishing it from sibling opencode_question_reject. It is clear and specific, though it doesn't explicitly differentiate from other reply/send tools, so not a perfect 5.
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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that it should only be used for pending questions, nor does it point to opencode_question_reject for the reject case. Sibling tools exist but are not referenced. Usage context is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_replyADestructive
Send a follow-up message to an existing session. Use this to continue a conversation started with opencode_ask or opencode_session_create.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Agent to use | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| prompt | Yes | The follow-up message | |
| modelID | No | Model ID | |
| variant | No | Model variant | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID to reply in | |
| providerID | No | Provider ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description adds little beyond the name, only restating 'follow-up message to an existing session.' It does not explain side effects, append behavior, or auth/rate limits. With annotations present, a score of 3 reflects that it adds minimal contextual value.
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?
Two concise sentences: the first states the purpose, the second gives usage context. Every word earns its place and the key action is front-loaded.
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 an output schema present, annotations covering side effects, and full parameter descriptions, the description fills the remaining gap by linking to sibling tools. It is complete enough for correct invocation, though it could optionally mention that it appends to conversation history, but that is implied by the destructive hint.
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 description coverage is 100%—each of the 8 parameters has a clear description in the schema. The tool description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
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 states a specific action—'send a follow-up message to an existing session'—and explicitly ties it to conversation starters (opencode_ask, opencode_session_create). This clearly distinguishes it from sibling tools like opencode_session_create or opencode_message_send.
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?
It provides clear usage context: 'Use this to continue a conversation started with opencode_ask or opencode_session_create.' This tells the agent when to use it, though it does not enumerate alternatives or exclusions, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_review_changesARead-onlyIdempotent
Get a formatted summary of all file changes made in a session. Shows diffs in a readable format.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageID | No | Specific message ID to get diff for | |
| sessionId | Yes | Session ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior. The description adds that the result is a formatted/readable summary, but it does not disclose additional behavioral traits such as scope limits, message-level filtering behavior, or any operational caveats.
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?
Two short sentences, front-loaded with the primary purpose and no filler. The description efficiently communicates the core action and output format without redundancy.
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 read-only annotations, full parameter documentation in the schema, and presence of an output schema, the description is largely complete for invoking the tool. The main missing piece is explicit differentiation from opencode_session_diff, but that is a usage-guidance gap rather than an invocation-blocking omission.
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 schema already documents all three parameters with 100% coverage, so the baseline is 3. The description reinforces that sessionId identifies the target session, but it adds no meaningful detail about messageID or directory beyond what the schema provides.
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 identifies the verb ('Get'), the resource ('formatted summary of all file changes made in a session'), and the output style ('Shows diffs in a readable format'). It is specific and understandable, but it does not explicitly differentiate itself from similar siblings like opencode_session_diff.
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?
The usage context is implied: use it when you want a readable summary of session file changes. However, there is no explicit guidance about when to prefer this over opencode_session_diff or other change-related tools, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_runADestructive
Send a task and wait for its correlated response. Returns a durable job ID; an observation timeout leaves the remote job running and can be resumed with opencode_wait.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | OpenCode agent name | |
| title | No | Title for a new session | |
| format | No | Response format: plain text or JSON constrained by a JSON Schema. JSON Schema requires OpenCode permission for the StructuredOutput tool. | |
| prompt | Yes | Task or instruction to send to OpenCode | |
| modelID | No | Model ID from provider discovery | |
| variant | No | Model variant | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | No | Existing session to continue; omit to create one | |
| providerID | No | Provider ID from provider discovery | |
| maxDurationSeconds | No | Maximum observation duration in seconds (default 600); timeout does not abort the job |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: jobs are durable, an observation timeout does not abort the remote job, and results can be resumed later. It does not detail side effects or permission requirements, but the schema and existing annotations help cover those aspects.
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 compact and front-loaded: the first sentence states the core purpose, and the second communicates the most important behavioral nuance. There is no filler or redundant repetition.
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 complex tool with 10 parameters, this description is reasonably complete because the schema covers parameters and an output schema exists. The timeout/resume behavior is included, which is essential context for correctly using the tool. It could add a little more guidance on retrieving job results, but it is not a significant gap.
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 description coverage is 100%, so the parameters are already well documented. The tool description adds little about individual parameters, only confirming that a task is sent and a durable job ID is returned. This matches the baseline for high schema coverage.
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 states a specific verb and resource: send a task and wait for its correlated response. It differentiates itself from other session/message tools by highlighting the durable job ID and the ability to resume with opencode_wait.
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?
The description clarifies the main use case and explicitly routes follow-up after an observation timeout to opencode_wait. It does not mention when to prefer alternatives like opencode_message_send_async or opencode_ask, but the provided context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_abortBDestructive
Abort a running session
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID to abort | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description is consistent with them. It adds the useful scoping that only 'running' sessions are targeted, but it does not describe what happens to the session after abort or whether child tasks are stopped.
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 four words, front-loaded with the action, and contains no filler or redundant phrasing. Every word earns its place.
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?
For a simple destructive tool, annotations and the output schema cover much of the safety and return-value context. However, there is no mention of what 'abort' changes, what happens to related sessions, or when this should be preferred over sibling session tools, making it adequate but not complete.
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 provides 100% description coverage for both parameters, id and directory, so the baseline is 3. The description adds no parameter-specific meaning, but the schema already explains what each field is for.
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 states a specific action ('abort') and a specific target ('a running session'), which is clear and meaningful. It is not a tautology, and the 'running' qualifier hints at how it differs from session_delete or session_revert, though it never names those siblings explicitly.
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?
There is no guidance about when to use this tool versus the many session_* alternatives such as session_delete, session_revert, or session_update. The only usage signal is the verb 'abort,' leaving an agent to infer when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_childrenARead-onlyIdempotent
Get child sessions of a session
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Parent session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well established. The description adds little behavioral context beyond the basic operation, but it does not contradict the annotations.
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 operation without any filler. Every word contributes to understanding the tool's purpose.
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?
The tool has a straightforward purpose, a complete input schema, and an output schema, so the minimal description is largely sufficient for an agent to invoke it correctly. The only notable gap is the lack of guidance about what 'child sessions' means or when they differ from plain session listing, but this does not seriously hinder use.
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 description coverage is 100%, so the parameters 'id' and 'directory' are already fully documented in the input schema. The description does not add additional meaning or clarify the relationship between the parameters beyond what the schema provides, so the baseline score of 3 is appropriate.
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 'Get child sessions of a session' uses a specific verb and resource, clearly identifying the operation as retrieving the child sessions associated with a parent session. The 'child' qualifier distinguishes it from sibling tools like session_get and session_list, which operate on sessions more generally.
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?
The description implies the tool is used to retrieve child sessions, and the parameter 'Parent session ID' makes the target clear. However, it gives no explicit guidance on when to choose this over alternatives such as session_list or session_get, nor does it state any exclusions or fallback conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_createBDestructive
Create a new session. Optionally provide a parentID to create a child session, and a title.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Session title | |
| parentID | No | Parent session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| isError | Yes | |
| session | Yes | |
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true but description doesn't explain what gets destroyed or side effects. No mention of the session creation being tracked, persisted, or any context about interactions with other tools. With destructiveHint present, description should clarify the lifecycle but doesn't.
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 that is clear and front-loaded with the core action. No unnecessary words, all essential information included despite being brief.
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?
There is an output schema to describe return values, and schema covers all parameters at 100%. However, given the destructiveHint and the potentially complex session management across many sibling tools, the description could benefit from mentioning prerequisites or typical usage flow. Still adequate for a simple creation.
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 covers all 3 parameters with descriptions (100% coverage). Description adds meaning by clarifying parentID creates a child session, but title and directory are already described in the schema. Little added value beyond what schema provides.
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?
States a clear verb+resource: 'Create a new session', and mentions optional a parentID for child session. Distinguishes from siblings by focusing on creation rather than listing, deleting, or updating.
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?
Infers use when a new session is needed but no explicit when-to-use or alternatives. Lacks guidance on when to use child sessions vs separate sessions, and doesn't mention that deletion (destructiveHint) may require careful handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_deleteADestructive
Delete a session and all its data
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID to delete | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds meaningful context by specifying that the session's data is destroyed with the session. This goes beyond the bare destructive flag, though it could be even more explicit about irreversibility and cascading effects.
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 one short sentence with no filler, front-loading the action and the scope. Every word earns its place.
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?
For a simple two-parameter delete operation, the combination of the description, full schema coverage, output schema, and annotations is nearly complete. It lacks guidance on irreversibility or live-session behavior, but those are partially implied by the destructive annotation and deletion semantics.
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 description coverage is 100%, so the parameters 'id' and 'directory' are already clearly documented. The tool description adds no parameter-specific meaning, but it does not need to because the schema carries that burden.
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 uses a specific verb ('Delete'), names the resource ('a session'), and explicitly scopes the effect ('and all its data'). This clearly separates it from sibling tools like session_get, session_update, session_revert, or session_abort.
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 about when to use this tool instead of related session operations such as opencode_session_abort, opencode_session_revert, or opencode_session_fork. There is no mention of prerequisites, warnings about active sessions, or scenarios where deletion is or is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_diffBRead-onlyIdempotent
Get the diff for a session, optionally for a specific message
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageID | No | Message ID (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description simply restates the action ('get') without adding behavioral context such as whether the diff is unified, whether it requires an active session, or any limits. It does not contradict annotations, but adds little beyond them.
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?
A single, direct sentence that conveys the core purpose without any filler. The optional message aspect is front-loaded after the main action, making it easy to parse. There is no wasted wording.
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?
The tool has an output schema, so return values are presumably documented there. The description is adequate for a simple read-only getter, but it does not explain what 'diff' means (e.g., format, scope) or any prerequisites such as session existence. Given the simplicity and existing annotations/schema, it is minimally sufficient but not rich.
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 description coverage is 100%, with each parameter (id, directory, messageID) already having a clear description. The tool description adds the note that the diff can be 'optionally for a specific message', which reinforces the messageID parameter but adds no new information. Since the schema carries the semantic load, a baseline of 3 is appropriate.
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 action ('Get') and the resource ('diff for a session'), with an optional modifier for a specific message. It is specific and unambiguous, though it does not explicitly differentiate from sibling tools like opencode_session_get or opencode_message_get. The purpose is clear enough for an agent to understand what it does.
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?
The description provides no guidance on when to use this tool versus alternatives. Given the large set of sibling tools (e.g., opencode_session_get, opencode_message_get, opencode_session_children), an agent may not know when this diff-specific tool is appropriate. No exclusions or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_forkBDestructive
Fork an existing session, optionally at a specific message
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID to fork | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageID | No | Message ID to fork at (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, but the description adds no behavioral context beyond that. It does not state whether the original session is modified, whether a new session is created, or what side effects a fork has. With destructiveHint=true, this is a notable gap.
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?
A single compact sentence that front-loads the core purpose and mentions the key optional behavior. No filler or redundant wording.
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?
The output schema and fully described parameters reduce the need for return-value explanation. However, given destructiveHint=true and idempotentHint=false, the description should clarify preservation of the original session or the meaning of the destructive flag. It is minimally adequate but not fully self-sufficient.
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 description coverage is 100%, so the schema already documents all three parameters. The description only echoes the optional messageID concept and adds no extra format, constraints, or relationships among id, directory, and messageID.
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 action ('Fork'), the resource ('existing session'), and the optional fork point ('at a specific message'). It is understandable and distinct from session_create and session_revert, though it does not explicitly name those sibling alternatives.
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?
There is no guidance on when to use fork versus create, revert, or other session operations. The only implied context is 'existing session', which is too thin to help an agent decide between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_getBRead-onlyIdempotent
Get details of a specific session by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description adds no behavioral context beyond the schema and name. It does not mention response behavior, error cases, or how the optional directory affects the request.
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 with no wasted words. It communicates the core operation efficiently.
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?
For a straightforward get-by-ID operation, the description combined with the annotations, input schema, and output schema is mostly complete. It lacks sibling differentiation guidance, but the core call context is adequately covered.
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 description coverage is 100%, so the parameters are already well documented. The description reinforces the 'by ID' semantics but does not add meaning beyond the schema for the optional directory parameter.
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 uses a clear verb ('Get') and identifies the resource ('details of a specific session by ID'), which distinguishes it from listing all sessions. It is clear enough, though it does not explicitly differentiate itself from sibling tools like opencode_session_status or opencode_session_children.
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?
There is no guidance on when to use this tool versus alternatives such as opencode_session_list, opencode_session_status, or opencode_session_children. The description implies a read-by-ID use case but provides no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_initADestructive
Analyze the app and create AGENTS.md for a session. NOTE: This is a long-running operation that may take 30-60+ seconds depending on project size.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| modelID | Yes | Model ID (e.g. 'claude-3-5-sonnet-20241022') | |
| variant | No | Model variant (e.g. 'fast', 'smart') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageID | Yes | Message ID | |
| providerID | Yes | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false, and openWorldHint=true. The description adds valuable context beyond annotations by naming the side effect (creates AGENTS.md) and the long-running nature (30-60+ seconds). It does not explicitly warn about overwriting an existing AGENTS.md, but the destructive hint already covers the hazard.
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?
Two purposeful, front-loaded sentences. The action 'Analyze the app and create AGENTS.md' comes first, and the runtime caveat is isolated in a clear NOTE. There is no filler or repetition of schema information.
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?
Taken together with the rich schema, annotations, and output schema, the description covers the main decision-relevant facts: what the tool does, that it creates a file artifact, and that it may take a long time. It could state when to use it relative to other session tools, but the provided structure is sufficient for correct invocation.
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 description coverage is 100%, so all six parameters are already documented with meaningful descriptions. The tool description adds no direct parameter semantics; it only indirectly references project size, which relates to the directory parameter. Baseline 3 is appropriate.
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 states a concrete action and resource: 'Analyze the app and create AGENTS.md for a session.' This clearly differentiates it from session lifecycle tools like opencode_session_create or opencode_project_init, and tells an agent exactly what the tool produces.
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?
The description gives no explicit guidance on when to call this tool versus alternatives such as opencode_session_create, opencode_session_update, or opencode_project_init. The only timing note is the 30-60+ second runtime warning, which is not usage-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_listBRead-onlyIdempotent
List all sessions
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no extra behavioral context, such as what 'all sessions' means (global vs. project-scoped) or whether results are paginated. With annotations present, the bar is lower, but the description adds no value beyond the annotations.
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 with no fluff. It is appropriately concise for the simplicity of the tool, though it could be slightly expanded to clarify scope without losing efficiency.
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 an output schema and multiple sibling tools that also deal with sessions, the description is too minimal. It fails to clarify whether 'all sessions' means all sessions across projects or only within the specified directory. This ambiguity could lead an agent to misuse the tool or select an inappropriate sibling.
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 description coverage is 100%, and the only parameter 'directory' is fully documented in the schema. The description does not add any extra meaning about the parameter, but since the schema carries the full burden, the baseline of 3 is appropriate.
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 states the verb 'List' and the resource 'sessions', making the core action clear. However, it does not differentiate from sibling tools like opencode_sessions_overview or opencode_session_search, which could also list sessions. It is not a tautology, but it lacks the specificity needed to distinguish it from similar operations.
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. The description does not mention any conditions, exclusions, or alternative tools, leaving the agent to infer the appropriate usage context from the parameter schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_permissionADestructive
Respond to a permission request in a session. Use opencode_permission_list to see pending requests. Reply values: 'once' (approve this request only), 'always' (approve this + future matching requests for this session), 'reject' (deny the request).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| reply | Yes | Response to the permission request: 'once' to approve once, 'always' to auto-approve matching future requests, 'reject' to deny | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| permissionID | Yes | Permission request ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral detail beyond the annotations: it explains the effects of each reply value ('once' approves only the current request, 'always' approves current and future matching requests, 'reject' denies). It also notes the session scope. Annotations already flag readOnlyHint=false and destructiveHint=true, so the description enriches understanding without contradicting them.
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 two sentences with no redundancy. The first sentence states the purpose, the second gives the prerequisite and defines the reply values. It is front-loaded and every sentence earns its place, with no filler.
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?
The tool is simple and the description covers the core action, the prerequisite (opencode_permission_list), and the reply semantics. The output schema is present, so return details are not required. A minor gap is the lack of a warning about the persistence of 'always' (potentially destructive), but given the annotations already flag destructiveHint, this is acceptable.
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 100% with descriptive text for all parameters, including the reply enum values. The description largely repeats the schema's explanation of 'once', 'always', and 'reject', adding only the session-scope nuance. Per calibration, a 3 is baseline when the schema covers parameters well and the description offers minimal additional meaning.
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's action: 'Respond to a permission request in a session.' It names the specific resource (permission request) and the verb (respond), and differentiates itself from the sibling tool opencode_permission_list by explicitly directing the user to that tool for listing pending requests. This distinguishes it from other session-related tools.
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?
The description provides a clear usage context: it tells the agent to use opencode_permission_list first to see pending requests, implying this tool is the follow-up for responding. It does not explicitly mention alternatives like opencode_question_reply, but the context is strong enough to guide correct usage. A slight gap is the lack of an explicit 'when not to use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_revertCDestructive
Revert a message in a session
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| partID | No | Part ID to revert (optional) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageID | Yes | Message ID to revert |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds no behavioral context beyond that, such as whether the revert is reversible, what happens to dependent messages, or whether partID affects scope. It neither contradicts the annotations nor explains side effects.
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 with no filler words. It is concise, though extremely terse, which slightly limits its informativeness.
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 that opencode_session_unrevert exists as a sibling and partID is optional, an agent needs more context to understand what 'revert' changes and how it differs from unrevert. The output schema and annotations cover some safety aspects, but the description leaves the exact semantics under-specified for a destructive operation.
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 covers 100% of parameters with meaningful descriptions for id, messageID, partID, and directory. The tool description itself adds no parameter-level meaning, which aligns with the baseline for complete schema coverage.
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 uses the specific verb 'revert' and identifies the resource as 'a message in a session', giving the agent a clear sense of the operation. It does not explicitly contrast with siblings like opencode_session_unrevert, but the basic purpose is unambiguous.
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?
There is no guidance on when to use this tool versus alternatives such as opencode_session_unrevert or opencode_session_update. The description simply states the operation without specifying prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_searchARead-onlyIdempotent
Search sessions by keyword in title. Useful for finding a specific session among many.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search keyword (case-insensitive match on session title) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only the core behavior of searching by title but discloses no additional constraints, such as result limits, pagination, or whether searches are scoped to the workspace. It neither contradicts nor significantly enriches the annotation-derived behavioral expectations.
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 two sentences with no wasted words. The verb 'Search' is front-loaded, and the second sentence adds a small use-case context. The second sentence is slightly redundant with the first but does not detract from clarity.
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?
For a simple search tool with a full output schema and comprehensive annotations, the description is adequate. It covers the core search-by-title behavior, while parameter semantics live in the schema and safety/behavioral traits in annotations. It could mention the optional directory scope explicitly, but the schema provides that, so no critical information is missing.
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 description coverage is 100%, with both 'query' and 'directory' fully described. The tool description provides no additional parameter-specific meaning beyond the schema, so it neither compensates for nor adds to the structured definitions. Baseline 3 is appropriate given high schema coverage.
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 states a specific verb ('Search'), resource ('sessions'), and scope ('by keyword in title'). This clearly distinguishes it from sibling tools like opencode_session_list and opencode_session_get, which list all sessions or fetch by ID. The phrase 'finding a specific session among many' reinforces the intended purpose.
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?
'Useful for finding a specific session among many' provides clear context for when to use this tool. It implies a search scenario but does not explicitly name alternatives or state when not to use it. It does not mention that session_list is the alternative for listing all sessions, nor that session_get is for direct access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_sessions_overviewARead-onlyIdempotent
Get a quick overview of all sessions with their titles and status. Useful to find which session to continue working in.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds useful behavioral context by stating the tool returns an overview of all sessions and their titles/status, which is beyond what the annotations alone convey.
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 two short sentences with no filler. The core action and result are front-loaded, and the use case is stated in the second sentence efficiently.
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?
For a simple, read-only list tool with one optional parameter and an output schema, the description covers purpose and practical use. A minor gap is that it does not clarify whether 'all sessions' is scoped by the optional directory parameter, though the schema already documents that.
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 description coverage is 100% for the only parameter (directory), and the description adds no additional parameter-level meaning. Baseline 3 is appropriate since the schema already fully documents the optional directory behavior.
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 provides a quick overview of all sessions with titles and status, which is a specific verb and resource. It implies a lightweight listing role, but does not explicitly differentiate itself from the closely named sibling opencode_session_list.
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?
It gives a clear use case: finding which session to continue working in. However, it does not state when not to use it or mention any alternative tools such as opencode_session_list or opencode_session_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_statusARead-onlyIdempotent
Get status for all sessions (running, idle, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that the operation is read-only, non-destructive, and idempotent, so the safety profile is covered. The description adds the behavioral scope of returning statuses for all sessions, which is useful but does not mention pagination, filtering behavior, or how the optional directory affects scope.
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?
A single sentence delivers the core purpose with no filler. The phrase 'all sessions (running, idle, etc.)' is front-loaded and communicates scope and output type effectively.
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?
For a simple read-only tool with an output schema and full parameter coverage, the description is mostly sufficient. It could clarify whether 'all sessions' means all server sessions or sessions in the optional directory context, but the annotations and schema fill most of the remaining context.
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 schema description covers 100% of the single optional 'directory' parameter, explaining its behavior and default. The tool description adds no parameter-specific meaning, but because the schema already handles parameter semantics, the baseline score of 3 is appropriate.
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 states a specific verb ('Get'), a clear resource ('status for all sessions'), and gives example status categories ('running, idle, etc.'). It is distinguishable from session_get and session_list because it emphasizes aggregate status rather than individual session details or metadata, though it does not explicitly name a sibling distinction.
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?
The description implies when to use the tool: when the agent needs status across all sessions rather than one session. However, it provides no explicit exclusions or references to alternatives like opencode_session_list, opencode_session_get, or opencode_sessions_overview, leaving some selection ambiguity among closely related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_summarizeADestructive
Summarize a session using a specified model. NOTE: This is a long-running operation that may take 30-60+ seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| modelID | Yes | Model ID (e.g. 'claude-3-5-sonnet-20241022') | |
| variant | No | Model variant (e.g. 'fast', 'smart') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| providerID | Yes | Provider ID (e.g. 'anthropic') |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a useful behavioral note about the operation taking 30-60+ seconds, which is valuable beyond annotations. However, it does not explain the destructiveHint true annotation, nor does it describe any side effects or changes to the session. Given the annotations provide a baseline, the extra duration note earns a middle score.
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, clear sentence followed by a note about the long-running nature. It is front-loaded with the essential action and the warning is placed immediately, with no wasted words.
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?
The tool has an output schema and complete parameter descriptions, so the description doesn't need to explain return values. It does mention the duration, which is important. However, it omits any discussion of the destructiveHint true annotation and what consequences might follow, which could be critical for an agent deciding whether to call it. Given the existence of annotations and schema, this is a minor gap but still leaves the agent partially uninformed.
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 100%, so all parameters (id, providerID, modelID, variant, directory) already have descriptions. The description mentions 'using a specified model' but does not add any syntactic or semantic detail beyond what the schema provides. Since the schema does the heavy lifting, the baseline of 3 is appropriate.
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 states a clear verb ('summarize') and resource ('a session'), and specifies that a model is used. It is distinct from other session tools (like opencode_session_get or opencode_session_status) which are about retrieval or state, not summarization. The purpose is unambiguous.
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 given about when to use this tool versus alternatives. There is no mention of prerequisites, conditions, or why one would choose summarization over other session operations. The description only states what it does, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_todoARead-onlyIdempotent
Get the todo list for a session
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate safety. However, it adds no behavioral context beyond the annotations, such as what the todo list represents or any limitations. Given the strong annotations, the description is adequate but not enriching.
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 concise sentence that is front-loaded with the core action and resource. There is zero waste, and it is immediately scannable.
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?
An output schema exists, so the description need not explain return values. For a simple read-only tool, the description suffices to convey the operation. It could mention what a 'todo list' contains, but given the clear purpose and the availability of the output schema, it is adequately complete.
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 description coverage is 100%, so the parameters (id, directory) are already documented in the schema. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
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 'Get the todo list for a session' uses a specific verb (Get) and a precise resource (todo list for a session), clearly distinguishing it from sibling tools like session_get, session_status, or session_summarize. An agent immediately understands the exact purpose without ambiguity.
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?
The description implies usage (when you need the session's todo list) but provides no explicit guidance on when to choose this tool over alternatives. While the purpose is clear, there are many session-related tools, and the description does not mention exclusions or direct comparisons, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_unrevertADestructive
Restore all reverted messages in a session
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds the scope 'all reverted messages' but does not disclose side effects, irreversibility, or operational consequences beyond what annotations already communicate. No contradiction with annotations.
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?
A single, front-loaded sentence with no filler. Every word contributes to understanding the operation.
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?
For a mutation tool with a complete parameter schema and an output schema, the description is nearly sufficient. The only meaningful gap is the absence of explicit when-to-use guidance relative to opencode_session_revert and other session operations.
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 description coverage is 100%, with both 'id' and 'directory' described in the schema. The description adds no additional parameter-level meaning, so the baseline of 3 applies.
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 uses a specific verb ('Restore') and a clear resource ('all reverted messages in a session'). It unambiguously conveys the tool's function and is naturally distinguished from the sibling opencode_session_revert.
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?
The usage is implied by the name and description—it is the counterpart to opencode_session_revert—but the description does not explicitly state when to use this tool versus alternatives or mention any prerequisites. There is no exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_session_updateBDestructive
Update session properties (e.g. title)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session ID | |
| title | No | New title for the session | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=true, but the description adds no behavioral context about what 'update' does to existing session state, whether unspecified properties are reset, or whether changes are reversible. This is a meaningful gap for a tool marked as destructive.
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 one short front-loaded sentence that names the operation and gives an example with no filler. It is appropriately sized for a tool whose parameter details are already well documented in the schema.
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?
For a simple three-parameter tool with a fully documented schema and an output schema, the description is mostly sufficient to understand the basic call. However, it does not explain the destructive implications or provide enough usage context, leaving the overall definition slightly under-specified.
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 description coverage is 100%, and each parameter already has a meaningful description, including the role of `directory`. The tool description only redundantly mentions `title` and adds no new parameter-level meaning beyond the schema.
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 names a specific action and resource ('Update session properties') and gives a concrete example ('title'), making the tool's basic job clear. It is distinct from sibling session tools like create, get, delete, and revert, though 'properties' is broad and doesn't clarify whether `directory` is a property or a request-targeting parameter.
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 about when to use this tool instead of alternatives such as session_create, session_revert, or config_update. The use case is only implied by the verb 'update' and the example 'title', with no exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_setupBRead-onlyIdempotent
Check OpenCode status, provider configuration, and optionally initialize a project directory. Use this as the first step when starting work — it tells you what is ready and what still needs configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool can 'optionally initialize a project directory,' which implies a write or setup side effect, while the annotations declare readOnlyHint=true and destructiveHint=false. This is a direct contradiction. It also fails to explain what initialization does to the directory or what configuration changes might occur.
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?
Two sentences with no filler: the first states the core function and the second gives usage timing. The most important guidance is front-loaded and every sentence earns its place.
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?
The description leaves a significant behavioral gap around 'initialize'—whether it writes to the directory, what it configures, and what exactly the status and provider configuration checks cover. The output schema reduces the need to explain return values, but the initialization ambiguity and the contradiction with readOnlyHint make the definition incomplete for safe invocation.
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 only parameter, directory, is fully described in the schema with 100% coverage, so the baseline is 3. The description only loosely connects to it via 'optionally initialize a project directory' and adds no meaningful detail about how the parameter controls initialization.
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 a composite purpose: check OpenCode status and provider configuration, and optionally initialize a project directory. It also positions the tool as the first step when starting work, which gives it a distinct role among the many focused sibling tools, though it does not explicitly name alternatives.
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?
The second sentence provides explicit usage timing: 'Use this as the first step when starting work' and describes what the tool reveals. However, it does not mention when not to use it or name alternative tools like opencode_health or opencode_config_get, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_shell_executeCDestructive
Run a shell command through the opencode session
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | Agent to use for the shell command | |
| command | Yes | Shell command to execute | |
| modelID | No | Model ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| sessionId | Yes | Session ID | |
| providerID | No | Provider ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the description's 'Run a shell command' is consistent but adds no additional behavioral context such as side effects, permissions, or reversibility. It doesn't go beyond what annotations convey.
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?
A single, concise sentence with no fluff. It is appropriately short and front-loaded, delivering the core action efficiently.
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?
Despite a complete schema and rich annotations, the description omits usage context like when to choose this tool, potential side effects beyond the annotation, or interaction with the session. For a destructive operation, more guidance would be expected, but the minimal description leaves an agent without enough context to decide when to invoke it.
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?
All 6 parameters have descriptions in the schema (100% coverage), so the description doesn't need to explain them. The description adds nothing about parameters, but the baseline for high coverage is 3, so this is appropriate.
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 states a clear verb 'Run' and resource 'shell command through the opencode session', making the tool's purpose evident. However, it does not differentiate from siblings like opencode_command_execute or opencode_run, which also execute commands, so it doesn't fully distinguish itself.
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?
The description provides no guidance on when to use this tool versus alternatives, nor any conditions, prerequisites, or exclusions. An agent would have no clue about selection criteria among the many execution-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_statusARead-onlyIdempotent
Get a quick status dashboard: server health, provider count, session count, and VCS info. Lighter than opencode_setup — good for at-a-glance checks.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds the 'quick/lighter' performance characterization and content scope, but discloses nothing about error behavior, though the output schema covers return structure. No contradiction with annotations.
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?
Two sentences, both earning their place: the first front-loads the action and the returned dashboard fields, the second adds the usage context and sibling comparison. Zero filler or redundancy.
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 a rich annotation set, a fully documented single parameter, and an output schema, the description covers nearly everything an agent needs to call it correctly. The only material gap is the unaddressed overlap with opencode_health, which the field list partially resolves but never names.
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 single optional parameter has 100% schema description coverage — the schema fully documents the directory semantics, including the omitted-parameter fallback to the server's working directory. The description adds no parameter-level detail, so the baseline of 3 applies per the high-coverage rule.
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?
States a specific verb+resource ('Get a quick status dashboard') with an explicit field enumeration (server health, provider count, session count, VCS info) that distinguishes it from similar siblings like opencode_health and opencode_vcs_info. Also explicitly contrasts itself with opencode_setup as the heavier alternative.
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?
Gives clear usage context ('good for at-a-glance checks') and compares against opencode_setup as the heavier alternative. However, it never explicitly addresses the closest sibling, opencode_health, which overlaps on the server-health field, and provides no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tool_idsARead-onlyIdempotent
List all available tool IDs that the LLM can use (experimental)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds the 'experimental' qualifier, which is useful context about stability. However, it does not elaborate on what 'tool IDs' are or how they relate to other tools, so it adds only marginal behavioral insight beyond annotations.
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 sentence that is front-loaded with the action and object. It contains no filler or redundant wording, and the experimental caveat is appended efficiently. It is appropriately sized for a simple list operation.
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 that the tool has an output schema and a single optional parameter, the description is nearly complete for invocation. It does not mention when to use it, but that gap is captured in usage guidelines. The description's note that the IDs are 'for the LLM' implies their utility, and the experimental flag warns of instability. Overall, nothing critical is missing for a basic read-only discovery tool.
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 only parameter, 'directory', is fully described in the schema (100% coverage), including its type and purpose. The description adds no additional meaning or usage detail beyond what the schema already provides, so it meets the baseline but does not enhance understanding.
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 states a specific verb ('List') and resource ('all available tool IDs'), and clarifies the audience ('that the LLM can use'). It is unambiguous and distinct from the many sibling tools; even though it doesn't explicitly name an alternative, the purpose is precise and self-contained.
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 given on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or situations where this tool should be preferred over other discovery tools like opencode_tool_list or opencode_provider_list. An agent would have to infer its utility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tool_listARead-onlyIdempotent
List tools with JSON schemas for a given provider and model (experimental)
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ID | |
| provider | Yes | Provider ID | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the 'experimental' flag, which is useful context, but does not disclose further behavioral details such as pagination, errors, or format specifics.
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 with no wasted words. It conveys the core action, resource, scoping, and an experimental caveat efficiently.
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?
The combination of a complete parameter schema, rich annotations, and an output schema covers the operational details. The description adds the key semantic information—listing tools with JSON schemas for a provider/model—so nothing essential is missing for an agent to invoke it correctly.
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 description coverage is 100%, so the input schema already documents all three parameters. The description restates provider and model contextually but adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
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 uses a specific verb ('List') and a distinct resource ('tools with JSON schemas'), scoped by provider and model. This makes it easy to distinguish from siblings like opencode_tool_ids or opencode_provider_models without needing to inspect them.
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?
The description clearly indicates when to use this tool: when tool schemas are needed for a given provider and model. It does not mention alternatives or exclusions, but the context is sufficiently clear for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_append_promptBDestructive
Append text to the TUI's prompt input field
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to append to the prompt | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, signaling a state-modifying, non-idempotent operation. The description adds nothing beyond this—it merely restates the append action without noting cumulative effects, side effects, or interaction with the current prompt content. It does not contradict annotations, but it also does not enrich them.
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, clear sentence with no wasted words. It is front-loaded with the core action and contains no extraneous information, exemplifying ideal conciseness for a simple tool.
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?
For a straightforward append operation with full schema coverage, safe annotations, and a simple purpose, the description is adequate. It communicates the essential action. Minor gaps like usage differentiation are covered under other dimensions, and the tool's simplicity means the description suffices without needing extensive detail.
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 fully describes both parameters: 'text' is required and self-explanatory, and 'directory' explains its optional targeting behavior. With 100% schema coverage, the description adds no additional meaning. Per baseline, a score of 3 is appropriate since the schema carries the semantic load.
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 states a specific verb ('Append') and resource ('text to the TUI's prompt input field'), clearly indicating it adds text to the prompt. It distinguishes from siblings like opencode_tui_clear_prompt (which removes) and opencode_tui_submit_prompt (which sends), though it does not explicitly name them.
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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is for incremental text addition without submission, nor does it contrast with clearing or submitting. An agent must infer usage from the name alone, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_clear_promptBDestructive
Clear the current prompt text in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the agent knows this is destructive. The description adds that it clears 'current prompt text' specifically, which is useful context beyond the annotation. However, it does not disclose whether this is reversible, whether it affects the session, or what the output schema contains. No contradiction with annotations.
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?
A single sentence with no waste. The action and target are front-loaded and clear. It earns its place without redundancy.
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?
For a simple TUI action with one optional parameter and an output schema, the description is mostly sufficient. However, it does not explain the effect of the 'directory' parameter on the action, nor does it clarify whether clearing is scoped to a project. Given the destructive annotation, a bit more context about what is not affected (e.g., session history) would improve completeness.
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 description coverage is 100%, so the schema already documents the 'directory' parameter. The description does not add any parameter-specific meaning beyond the schema. Baseline 3 is appropriate because the schema carries the burden.
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 states a specific verb ('Clear') and resource ('current prompt text in the TUI'), which is clear and distinguishes it from sibling tools like opencode_tui_append_prompt and opencode_tui_submit_prompt. It lacks explicit differentiation from those siblings, but the action is unambiguous.
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 alternatives. It does not mention that it only affects the current prompt text, not the session or conversation, nor does it state when clearing is appropriate. The sibling list includes related TUI tools, but the description provides no routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_execute_commandADestructive
Execute a slash command through the TUI (e.g. '/init', '/undo')
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Command to execute (e.g. '/init') | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint and openWorldHint, and the description does not contradict them. However, the description adds no new behavioral context—it simply restates the action without mentioning potential side effects, permission requirements, or impact on the TUI session. Given the annotations carry the safety profile, a 3 is appropriate for the minimal additional value.
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 short sentence with immediate action verb and examples. It is front-loaded and contains no filler, though it could be slightly more informative about parameter behavior without becoming verbose.
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?
The tool has a simple interface with an output schema and fully described parameters, so the description covers basic invocation needs. However, it lacks context for selecting this tool over similar siblings (e.g., opencode_command_execute) and does not explain what 'through the TUI' means operationally. Given the low complexity, it is adequate but not complete.
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 description coverage is 100%, so both parameters are already documented. The description adds nothing beyond example command values, and does not clarify the directory parameter or command syntax further. Baseline 3 is correct as the schema does the heavy lifting.
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 states a specific verb and resource: 'Execute a slash command through the TUI' with concrete examples ('/init', '/undo'). This clearly differentiates from sibling tools like opencode_command_execute and opencode_shell_execute by explicitly scoping to TUI slash commands, so an agent can recognize the tool's purpose at a glance.
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?
The description implies usage for TUI slash commands but provides no explicit guidance on when to prefer this over alternatives like opencode_command_execute or when not to use it. There is no mention of preconditions, session requirements, or excluded contexts, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_open_helpADestructive
Open the help dialog in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what the annotations already convey. The annotations declare destructiveHint=true and readOnlyHint=false, but the description does not explain why opening a help dialog could be destructive or what state changes might occur. This is a missed opportunity to provide additional context.
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 with zero wasted words. It communicates the action and context efficiently, earning its place without redundancy.
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's simplicity, a full output schema, and complete parameter schema, the description is sufficient for an agent to invoke it correctly. The annotations cover safety traits, and the output schema covers return values, so nothing critical is missing.
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 schema already provides 100% coverage for the single 'directory' parameter with a clear description. The tool description does not mention this parameter, but the baseline of 3 applies because the schema does the heavy lifting. No additional meaning is added.
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 states a specific verb ('Open'), a clear resource ('help dialog'), and a context ('in the TUI'), which distinguishes it from sibling tools like opencode_tui_open_sessions or opencode_tui_open_models. An agent can immediately understand what this tool does without needing to inspect the schema.
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?
The intended usage is implied by the name and description: use this when the user needs help in the TUI. However, there is no explicit when-to-use guidance or comparison against alternative tools, so the agent must infer the usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_open_modelsBDestructive
Open the model selector in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds no behavioral context beyond the literal action. It does not explain side effects, whether a running TUI is required, or how the action affects state. Since annotations cover the destructive hint, the description still fails to add meaningful transparency.
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?
A single, direct sentence with no filler. The core action and target are front-loaded, making it highly scannable.
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?
For a simple TUI action with one optional parameter, the description is thin. It does not explain how the 'directory' parameter influences the action, nor does it provide any context about when to use this tool (e.g., during an active session). An agent could call it without understanding prerequisites or effects.
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 schema fully describes the 'directory' parameter (100% coverage), so the description does not need to elaborate. However, the description does not mention the parameter at all, offering no additional semantic value beyond the schema.
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?
States a specific verb 'open' and resource 'model selector' within the TUI context, clearly distinguishing it from sibling tools like opencode_tui_open_help and opencode_tui_open_themes. The action and target are unambiguous.
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 alternatives such as opencode_provider_models (which lists models) or other TUI open tools. The description does not mention conditions, prerequisites, or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_open_sessionsBDestructive
Open the session selector in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark the tool as non-read-only, non-idempotent, destructive, and open-world, but the description does not explain what opening the session selector changes or why it is flagged destructive. It adds little beyond what the tool name already communicates.
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 short sentence with no filler or repetition. It is concise, though it is terse enough that additional context would improve usefulness.
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 destructive and non-idempotent annotations, the description is not complete enough: it states the action but not when to use it or what effects to expect. The optional directory parameter is covered by the schema, but behavioral context is missing.
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 fully documents the optional 'directory' parameter, including its absolute-path requirement and fallback behavior, so schema coverage is 100%. The description adds no parameter-level meaning, which lands at the baseline score of 3.
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 names a concrete action ('open') and a specific resource ('the session selector in the TUI'), so an agent can clearly tell what tool does. It also distinguishes itself from sibling TUI commands like tui_open_help, tui_open_models, and tui_open_themes.
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 when-to-use or when-not-to-use guidance is provided. The description does not mention alternatives, prerequisites such as an active TUI, or how this relates to the many session and TUI sibling tools, so usage must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_open_themesBDestructive
Open the theme selector in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what annotations already imply. It does not disclose effects on the current TUI state, whether a running TUI session is required, or what happens after the selector opens. It does not contradict the destructiveHint or readOnlyHint annotations.
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 with no filler or repetition. Every word adds meaning.
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?
For a simple, single-action TUI tool with annotations covering safety and an output schema present, the description is largely complete. It could mention prerequisites or side effects, but the low complexity and existing structured metadata reduce the need.
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 description coverage is 100%, and the single optional directory parameter is already documented in the schema. The description adds no parameter-level information, so the baseline 3 is appropriate.
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 states a precise verb ('Open') and a specific resource ('the theme selector in the TUI'), making the tool's purpose immediately identifiable. It is clearly distinct from sibling tools like opencode_tui_open_models and opencode_tui_open_help, which target different selectors.
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?
The description gives no guidance about when to use this tool versus alternatives, and no exclusions or prerequisites are stated. Usage must be inferred entirely from the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_show_toastCDestructive
Show a toast notification in the TUI
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional toast title | |
| message | Yes | Toast message text | |
| variant | No | Toast variant (default: info) | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, signaling this is a mutating operation. The description adds no behavioral detail beyond the literal action—it doesn't clarify whether the toast is temporary, whether it blocks, or what side effects it may have. It does not contradict annotations, but it also provides no additional transparency.
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, concise sentence with no wasted words. It front-loads the core action. However, it lacks any structure (e.g., bullet points or examples) that might aid comprehension, though that is not required for such a simple tool.
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?
For a simple toast notification, the description plus schema covers the basics. But it doesn't explain the effect on the TUI (e.g., where it appears, duration), nor does it reference the output schema. Given the tool's simplicity, this is adequate but not comprehensive.
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 100%, so each parameter has a description. The tool description adds no semantic detail beyond the schema, such as how title interacts with message or how variant affects display. With full schema coverage, baseline 3 is appropriate.
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 uses a clear verb+resource pattern: 'Show a toast notification in the TUI'. It distinguishes this tool from other TUI utilities (e.g., opencode_tui_append_prompt, opencode_tui_submit_prompt) by the specific action of displaying a toast. However, it does not elaborate on what a toast is (e.g., a transient message, a status alert), leaving slight ambiguity for an agent unfamiliar with the TUI.
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?
There is no guidance on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or exclusions. An agent has no explicit reason to choose this over other TUI display tools, though the uniqueness of 'toast' is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_tui_submit_promptADestructive
Submit the current prompt in the TUI (equivalent to pressing Enter)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the agent knows this is a mutating, non-idempotent action. The description adds the behavioral context that it mimics pressing Enter, which implies it triggers whatever action the current prompt would trigger. However, it doesn't disclose what happens to the prompt after submission (e.g., whether it's cleared) or whether confirmation is needed.
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 sentence that is front-loaded with the action ('Submit the current prompt in the TUI') and immediately clarifies with the Enter-key analogy. Every word earns its place with zero waste.
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?
The tool is simple with one optional parameter and an output schema, so the description doesn't need to explain return values. However, it doesn't clarify what 'current prompt' means in the context of the TUI state, or whether the directory parameter scopes which TUI session receives the submission. Given the destructive annotation, a bit more context about the effect would improve completeness.
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 description coverage is 100%, so the single 'directory' parameter is already fully documented in the schema. The description doesn't add any additional meaning about how the directory parameter affects the submission, but with full schema coverage, the baseline of 3 is appropriate.
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 states a specific verb ('Submit') and resource ('the current prompt in the TUI'), and clarifies the action is equivalent to pressing Enter. This clearly distinguishes it from sibling tools like opencode_tui_append_prompt or opencode_tui_clear_prompt, though it doesn't explicitly name those alternatives.
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?
The description implies the tool is used when a prompt has been composed in the TUI and needs to be submitted, but it doesn't explicitly state when to use it versus alternatives like opencode_tui_execute_command or opencode_message_send. The 'equivalent to pressing Enter' analogy provides some context, but no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_vcs_infoARead-onlyIdempotent
Get VCS (version control) info for the current project (branch, remote, status)
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| text | Yes | |
| isError | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, side-effect-free read. The description adds useful behavioral context by naming the specific VCS data returned (branch, remote, status), which goes beyond the generic read-only hint. It does not contradict annotations.
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?
A single, efficient sentence that states the verb, resource, and key outputs in a compact form. There is no fluff or redundancy, and the most important information is front-loaded.
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?
For a simple read-only tool with an output schema (which covers return values), the description plus the schema fully specify what the tool does, how to target a directory, and what information is returned. Nothing essential is missing for an agent to correctly invoke it.
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 only parameter (directory) is fully described in the schema, which explains its absolute-path requirement and fallback to the server's working directory. With 100% schema description coverage, the baseline of 3 applies; the tool description adds no additional parameter meaning beyond echoing 'current project', so this is adequate.
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 uses a specific verb ('Get') and resource ('VCS info for the current project') and enumerates the key data fields (branch, remote, status). This clearly distinguishes it from similar-looking siblings like opencode_file_status (file-level) and opencode_status (likely broader project status), so an agent can select it correctly without opening its schema.
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?
The description states what the tool does and that it applies to the current project, with the directory parameter allowing targeting another project. However, it does not explicitly mention alternatives or when not to use it, such as pointing to opencode_file_status for per-file status or opencode_status for a broader snapshot. The usage context is clear but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opencode_waitARead-onlyIdempotent
Wait for a session or durable job. Returns completed, failed, input_required, or a resumable timeout. Cancelling this wait stops observation; use job_cancel or session_abort to stop OpenCode.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | Durable job ID returned by opencode_fire or opencode_run | |
| directory | No | Absolute path to the project directory. When provided, the request targets that project. If omitted, the OpenCode server uses its own working directory. | |
| messageId | No | Submitted user message ID to correlate the exact response | |
| sessionId | No | Session ID (required unless jobId is supplied) | |
| pollIntervalMs | No | Polling interval in milliseconds (default 2000) | |
| timeoutSeconds | No | Maximum seconds to wait (default 120); timeout is resumable |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| jobId | No | |
| result | No | |
| status | Yes | |
| isError | Yes | |
| directory | No | |
| messageId | No | |
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description meaningfully adds the cancellation behavior: cancelling this wait only stops observation, not the underlying job, and job_cancel or session_abort are required to actually stop OpenCode. It also discloses the possible return statuses and resumable timeouts. This is useful behavioral context beyond the annotations, though it does not detail polling/connection mechanics.
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?
Two sentences deliver the core purpose, return behavior, and the cancellation caveat with zero filler. The most important action ('Wait for a session or durable job') is front-loaded, and the follow-up sentence adds the critical distinction between stopping observation and stopping the work.
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?
For a tool with six parameters, full schema coverage, an output schema, and read-only/idempotent annotations, the description is complete enough. It explains what the tool returns, how cancellation behaves, and points to the correct tools for stopping work. Nothing an agent needs to call it correctly is missing.
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 description coverage is 100%, with every parameter (jobId, directory, messageId, sessionId, pollIntervalMs, timeoutSeconds) already documented in the input schema. The description reinforces the timeout is resumable and references jobId indirectly, but it does not add substantive parameter semantics beyond the schema. Baseline 3 is appropriate given the schema carries the parameter burden.
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 opens with a specific verb and resource: 'Wait for a session or durable job.' It further clarifies the tool's outcome by enumerating the possible return states (completed, failed, input_required, resumable timeout) and distinguishes waiting from stopping work by pointing to job_cancel/session_abort. An agent can immediately tell this is a blocking observation tool rather than a job status or cancellation 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?
The description clearly frames when to use the tool: when you want to wait for a session or durable job to reach a terminal state. It also gives an explicit alternative for stopping OpenCode ('use job_cancel or session_abort'), which helps avoid misuse. It does not explicitly contrast with sibling tools like opencode_events_poll or opencode_job_get, so it stops short of a 5.
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.
87 tool updates
v3.0.0- First observed
opencode_agent_list - First observed
opencode_ask - First observed
opencode_auth_set - First observed
opencode_check - First observed
opencode_command_execute - First observed
opencode_command_list - First observed
opencode_config_get - First observed
opencode_config_providers - First observed
opencode_config_update - First observed
opencode_context - First observed
opencode_conversation - First observed
opencode_events_poll - First observed
opencode_file_list - First observed
opencode_file_read - First observed
opencode_file_status - First observed
opencode_find_file - First observed
opencode_find_symbol - First observed
opencode_find_text - First observed
opencode_fire - First observed
opencode_formatter_status - First observed
opencode_health - First observed
opencode_instance_dispose - First observed
opencode_job_cancel - First observed
opencode_job_get - First observed
opencode_job_input - First observed
opencode_job_list - First observed
opencode_log - First observed
opencode_lsp_status - First observed
opencode_mcp_add - First observed
opencode_mcp_status - First observed
opencode_message_get - First observed
opencode_message_list - First observed
opencode_message_send - First observed
opencode_message_send_async - First observed
opencode_path_get - First observed
opencode_permission_list - First observed
opencode_project_current - First observed
opencode_project_init - First observed
opencode_project_list - First observed
opencode_provider_auth_methods - First observed
opencode_provider_list - First observed
opencode_provider_models - First observed
opencode_provider_oauth_authorize - First observed
opencode_provider_oauth_callback - First observed
opencode_provider_test - First observed
opencode_question_list - First observed
opencode_question_reject - First observed
opencode_question_reply - First observed
opencode_reply - First observed
opencode_review_changes - First observed
opencode_run - First observed
opencode_session_abort - First observed
opencode_session_children - First observed
opencode_session_create - First observed
opencode_session_delete - First observed
opencode_session_diff - First observed
opencode_session_fork - First observed
opencode_session_get - First observed
opencode_session_init - First observed
opencode_session_list - First observed
opencode_session_permission - First observed
opencode_session_revert - First observed
opencode_session_search - First observed
opencode_session_share - First observed
opencode_session_status - First observed
opencode_session_summarize - First observed
opencode_session_todo - First observed
opencode_session_unrevert - First observed
opencode_session_unshare - First observed
opencode_session_update - First observed
opencode_sessions_overview - First observed
opencode_setup - First observed
opencode_shell_execute - First observed
opencode_status - First observed
opencode_tool_ids - First observed
opencode_tool_list - First observed
opencode_tui_append_prompt - First observed
opencode_tui_clear_prompt - First observed
opencode_tui_execute_command - First observed
opencode_tui_open_help - First observed
opencode_tui_open_models - First observed
opencode_tui_open_sessions - First observed
opencode_tui_open_themes - First observed
opencode_tui_show_toast - First observed
opencode_tui_submit_prompt - First observed
opencode_vcs_info - First observed
opencode_wait
TDQS
Scored across 87 tools
Many tools overlap heavily: opencode_session_list/opencode_sessions_overview/opencode_session_status, opencode_message_send/opencode_ask/opencode_reply/opencode_run, opencode_wait/opencode_check/opencode_job_get, and opencode_tui_* commands are numerous. An agent would struggle to pick the right tool among these near-duplicates.
The opencode_ prefix and mostly verb_noun pattern (e.g. opencode_session_create, opencode_file_read) is consistent. Minor deviations exist like opencode_ask, opencode_reply, opencode_fire, opencode_run, and opencode_log which break the verb_noun convention, but the overall pattern is predictable.
87 tools is far beyond the typical well-scoped MCP server. The count is extreme and includes many overlapping or highly granular tools (e.g. 10 TUI tools, 6 provider tools, 5 job tools) that could be consolidated.
The surface is very comprehensive for the opencode domain: sessions, messages, files, providers, permissions, jobs, TUI, and VCS are all covered. There are no obvious dead ends, though the sheer number of tools makes it hard to verify every workflow.
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Connect MCP clients to 2,000+ AI models without managing provider API keys.
One connector for 15,000+ MCP servers plus your team's private MCPs, from any AI client.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA local MCP bridge that lets ChatGPT control opencode sessions for code modification, file reading, and repository management on your own computer.2MIT
- AlicenseAqualityDmaintenanceBridges any MCP client (like Claude Code, Zed, VS Code) to any ACP coding agent, enabling multi-agent orchestration from a single chat interface.24109 npm9Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP bridge from OpenCode to Cursor agent CLI, enabling code review, debugging, and planning via Cursor cloud.7 npmMIT
- AlicenseAqualityBmaintenanceA project-local MCP bridge that allows Codex Desktop to plan tasks and OpenCode to execute them within the current project directory, with session reuse and native OpenCode background subagents.41MIT