mcp-oci
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., "@mcp-ocilist instances in compartment 'production'"
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.
MCP Server for Oracle Cloud Infrastructure (OCI)
Production-oriented MCP server for Oracle Cloud Infrastructure (OCI), exposing Compute, Networking and Object Storage operations to MCP clients (Claude Desktop, VS Code Copilot, Cursor, and compatible hosts).
Features
Four authentication modes: config file (API key), inline API key, instance principal, and session token
Per-call region override (
regionargument) on every Compute/Networking/Object Storage tool — query any OCI region without restarting the serverTrimmed-by-default responses: list/get tools return a lean summary per resource instead of the full OCI SDK object (which can run 100+ fields deep, e.g. SSH keys and agent plugin configs on an instance); pass
raw=trueto get the untrimmed objectRead-only enforcement independent of IAM policy: mutating tools can be blocked at the server level
Compute instance discovery, VNIC inspection, and lifecycle actions
Networking discovery: VCNs, subnets, security lists, NSGs, route tables
Object Storage discovery and management: buckets and objects
Environment-driven configuration for secure deployment
Related MCP server: OCI MCP Server
Available Tools
Tool | Mutating | Trimmed by default | Description |
| No | — | Lists the tenancy's subscribed regions — resolves a name (e.g. "Vinhedo") to its region ID (e.g. |
| No | — | Lists compartments by name and/or parent — resolves a name (e.g. "cpLinux") to its OCID |
| No | Yes | Lists Compute instances in a compartment |
| No | Yes | Returns details of a specific Compute instance |
| No | Yes | Lists VNIC attachments in a compartment/instance |
| Yes | — | Performs START/STOP/SOFTSTOP/RESET/SOFTRESET/SENDDIAGNOSTICINTERRUPT on an instance |
| No | Yes | Lists Virtual Cloud Networks in a compartment |
| No | Yes | Returns details of a specific VCN |
| No | Yes | Lists subnets in a compartment/VCN |
| No | Yes | Lists security lists in a compartment/VCN (rule counts only — use |
| No | Yes | Lists NSGs in a compartment/VCN |
| No | Yes | Lists route tables in a compartment/VCN (route count only — use |
| No | — | Returns the Object Storage namespace for the tenancy |
| No | Yes | Lists Object Storage buckets in a compartment |
| No | Yes | Returns details of a specific bucket |
| No | — | Lists objects in a bucket, optional prefix filter (the SDK object here is already lean) |
| Yes | — | Creates an Object Storage bucket |
| Yes | — | Deletes an object from a bucket |
Tools marked Mutating are rejected by the server when OCI_READ_ONLY=true (the default), regardless of IAM permissions — a second layer of least-privilege enforcement on top of your OCI policies.
Tools marked Trimmed by default accept a raw boolean argument (default false) — set raw=true to get the untrimmed OCI SDK object instead of the summary (id, name, state, and the handful of fields that matter day-to-day).
Requirements
Node.js 18+
An OCI tenancy with credentials for one of the supported authentication modes
Network connectivity from the MCP host to the OCI region endpoints
Configuration
Authentication mode
Variable | Required | Default | Description |
| No |
|
|
| No |
| When |
| No | region from config/session | Default region when a tool call doesn't pass |
When a tool call omits compartmentId, it defaults to the tenancy root compartment (resolved from the auth provider). This doesn't work in instance_principal mode — the provider doesn't expose the tenancy OCID there, so compartmentId must be passed explicitly (use list_compartments to look it up by name first).
Compute, Networking and Object Storage resources are region-scoped in OCI. Every tool that touches them accepts an optional region argument (e.g. sa-vinhedo-1) to query a specific region without restarting the server; omitting it falls back to OCI_REGION or the config/session file's default region. list_compartments and list_regions are unaffected — compartments and region subscriptions are tenancy-wide, not regional.
config mode (API key via ~/.oci/config)
Variable | Required | Default | Description |
| No |
| Path to the OCI config file |
| No |
| Profile name inside the config file |
session mode (oci session authenticate token)
Uses the same OCI_CONFIG_FILE / OCI_CONFIG_PROFILE variables as config mode, pointing to a profile with a security_token_file.
apikey mode (inline API key, no config file)
Variable | Required | Description |
| Yes | Tenancy OCID |
| Yes | User OCID |
| Yes | API key fingerprint |
| Yes | Region ID (e.g. |
| Yes* | PEM private key content ( |
| Yes* | Path to the PEM private key file (alternative to |
| No | Private key passphrase, if any |
* Provide either OCI_PRIVATE_KEY or OCI_PRIVATE_KEY_PATH.
instance_principal mode
No extra variables required — credentials are resolved from the instance metadata service. Only works when the MCP server itself runs on an OCI Compute instance (or OKE pod configured for it).
Transport
Variable | Required | Default | Description |
| No |
| Transport mode: |
| No |
| Port for the HTTP server (only used when |
| No |
| Bind address for the HTTP server (only used when |
Usage
Run directly from GitHub
npx github:ferronicardoso/mcp-ociClaude Code (CLI)
claude mcp add oci --scope user -- npx -y github:ferronicardoso/mcp-oci--scope controls where the server registration is stored:
Scope | Stored in | Visible to |
| project-local, untracked | only you, only in this project |
|
| anyone who clones the repo (commit it to share) |
| your global Claude Code config | you, across every project |
Environment variables (auth mode, OCI_READ_ONLY, etc.) can be passed with repeated --env KEY=VALUE flags before the --, e.g.:
Bash (Linux/macOS/WSL):
claude mcp add oci --scope user \
--env OCI_AUTH_MODE=config \
--env OCI_CONFIG_PROFILE=DEFAULT \
--env OCI_READ_ONLY=true \
-- npx -y github:ferronicardoso/mcp-ociPowerShell:
claude mcp add oci --scope user `
--env OCI_AUTH_MODE=config `
--env OCI_CONFIG_PROFILE=DEFAULT `
--env OCI_READ_ONLY=true `
-- npx -y github:ferronicardoso/mcp-ociCodex CLI
Bash (Linux/macOS/WSL):
codex mcp add oci \
--env OCI_AUTH_MODE=config \
--env OCI_CONFIG_PROFILE=DEFAULT \
--env OCI_READ_ONLY=true \
npx -- -y github:ferronicardoso/mcp-ociPowerShell:
codex mcp add oci `
--env OCI_AUTH_MODE=config `
--env OCI_CONFIG_PROFILE=DEFAULT `
--env OCI_READ_ONLY=true `
npx -- -y github:ferronicardoso/mcp-ociThis registers the server in ~/.codex/config.toml. To remove it, run codex mcp remove oci.
Claude Desktop configuration
%APPDATA%\\Claude\\claude_desktop_config.json:
{
"mcpServers": {
"oci": {
"command": "npx",
"args": ["github:ferronicardoso/mcp-oci"],
"env": {
"OCI_AUTH_MODE": "config",
"OCI_CONFIG_PROFILE": "DEFAULT",
"OCI_READ_ONLY": "true"
}
}
}
}VS Code MCP configuration
.vscode/mcp.json:
{
"servers": {
"oci": {
"command": "npx",
"args": ["github:ferronicardoso/mcp-oci"],
"env": {
"OCI_AUTH_MODE": "config",
"OCI_CONFIG_PROFILE": "DEFAULT",
"OCI_READ_ONLY": "true"
}
}
}
}Run with Docker (HTTP transport)
The published image runs in Streamable HTTP mode by default, for use as a remote MCP endpoint (e.g. from n8n's MCP Client Tool node or any Streamable HTTP-compatible client):
Bash (Linux/macOS/WSL):
docker run -d --name mcp-oci \
-p 3003:3003 \
-e OCI_AUTH_MODE=apikey \
-e OCI_TENANCY_ID=ocid1.tenancy.oc1..xxxx \
-e OCI_USER_ID=ocid1.user.oc1..xxxx \
-e OCI_FINGERPRINT=xx:xx:xx:xx \
-e OCI_REGION=sa-saopaulo-1 \
-e OCI_PRIVATE_KEY_PATH=/keys/oci_api_key.pem \
-e OCI_COMPARTMENT_ID=ocid1.compartment.oc1..xxxx \
-e OCI_READ_ONLY=true \
-v /path/to/oci_api_key.pem:/keys/oci_api_key.pem:ro \
ghcr.io/ferronicardoso/mcp-oci:latestPowerShell:
docker run -d --name mcp-oci `
-p 3003:3003 `
-e OCI_AUTH_MODE=apikey `
-e OCI_TENANCY_ID=ocid1.tenancy.oc1..xxxx `
-e OCI_USER_ID=ocid1.user.oc1..xxxx `
-e OCI_FINGERPRINT=xx:xx:xx:xx `
-e OCI_REGION=sa-saopaulo-1 `
-e OCI_PRIVATE_KEY_PATH=/keys/oci_api_key.pem `
-e OCI_COMPARTMENT_ID=ocid1.compartment.oc1..xxxx `
-e OCI_READ_ONLY=true `
-v C:\path\to\oci_api_key.pem:/keys/oci_api_key.pem:ro `
ghcr.io/ferronicardoso/mcp-oci:latestThe MCP endpoint is then available at http://localhost:3003/mcp.
Local Development
git clone https://github.com/ferronicardoso/mcp-oci
cd mcp-oci
npm install
npm run buildStart the compiled server:
npm startBuild and Commit Workflow
This repository intentionally tracks dist/ to support npx github:user/repo usage.
The project uses a Husky pre-commit hook to:
build TypeScript (
npm run build)stage generated artifacts (
git add dist)
Manual fallback:
npm run build
git add distSecurity Notes
Never commit real credentials, private keys, or
.envfiles.OCI_READ_ONLY=trueis the default; only set it tofalsefor environments that must run mutating operations, and prefer pairing it with a least-privilege IAM policy on the OCI side.Prefer
instance_principalauthentication when the server runs on OCI Compute/OKE — it avoids storing long-lived credentials entirely.For
apikeymode, prefer mounting the private key file (OCI_PRIVATE_KEY_PATH) over passing raw key content viaOCI_PRIVATE_KEY.
License
MIT © Raphael Augusto Ferroni Cardoso
Available Tools
18 toolscreate_bucketA
Creates an Object Storage bucket. Blocked when OCI_READ_ONLY=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Bucket name | |
| region | No | OCI region ID to create the bucket in (e.g. sa-vinhedo-1). Default: server-configured region | |
| namespace | No | Object Storage namespace (default: auto-resolved) | |
| compartmentId | No | Compartment OCID (default: tenancy root) | |
| publicAccessType | No | NoPublicAccess | ObjectRead | ObjectReadWithoutList (default: NoPublicAccess) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It adds the important behavioral constraint 'Blocked when OCI_READ_ONLY=true', which indicates it is a write operation and cannot run in read-only mode. However, it omits other traits like idempotency, permission requirements, or return 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 two sentences with no wasted words. The first sentence states the purpose, the second provides a key constraint, and both are front-loaded and relevant.
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 no output schema and only a terse description, the agent is left without information on return values, error behavior (e.g., bucket already exists), or idempotency. The read-only block is useful, but the description is incomplete for a mutation tool of this complexity.
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 parameters described. The description adds no parameter-specific 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 'Creates an Object Storage bucket' with a specific verb and resource, clearly distinguishing it from sibling tools that list, get, delete, or perform actions. It precisely identifies what the tool 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 implies use for creating a bucket but does not explicitly mention when to use it vs alternatives like list_buckets or get_bucket. The read-only block condition is helpful but not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_objectA
Deletes an object from a bucket. Blocked when OCI_READ_ONLY=true.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | OCI region ID where the bucket lives (e.g. sa-vinhedo-1). Default: server-configured region | |
| namespace | No | Object Storage namespace (default: auto-resolved) | |
| bucketName | Yes | Bucket name | |
| objectName | Yes | Object name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: the tool is blocked when OCI_READ_ONLY=true, which goes beyond the obvious 'deletes'. However, it does not mention other important aspects like irreversibility, permissions, or failure behavior, and no annotations are present to fill this 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?
The description is two sentences, front-loaded with the core action, and the second sentence adds a useful caveat. There is no redundancy or unnecessary detail.
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 delete tool with no output schema and straightforward parameters, the description provides the essential action and a key constraint. It is reasonably complete, though it could mention that deletion is permanent.
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 100% schema description coverage, the schema already documents all parameters. The description does not add any new parameter-related semantics, only restating the existence of bucket and object, 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 ('Deletes') and the target ('an object from a bucket'), making it unambiguous. It also differs from all sibling tools, none of which perform deletion.
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 through its clear action, but it provides no explicit guidance on when to choose this tool over alternatives. The only additional context is the read-only block, which is a constraint rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bucketA
Returns details of a specific Object Storage bucket. Returns a trimmed summary unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object instead of the trimmed summary (default: false) | |
| region | No | OCI region ID where the bucket lives (e.g. sa-vinhedo-1). Default: server-configured region | |
| namespace | No | Object Storage namespace (default: auto-resolved) | |
| bucketName | Yes | Bucket name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the default trimmed summary and the raw=true option, and the verb 'Returns' implies a read-only operation. However, it does not mention potential error behavior, required permissions, or what fields the summary contains.
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, front-loads the main behavior, and has 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 absence of an output schema, the description lacks details about the return structure or what the trimmed summary includes. The raw=true escape hatch mitigates this somewhat, but for an AI agent to invoke the tool correctly, knowing what to expect in the summary would be beneficial. It is adequate 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?
The input schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds minimal extra meaning beyond the raw toggle, which is already described in the schema (raw parameter description). It does not add details on region/namespace formatting or usage.
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 returns details of a specific Object Storage bucket, using a specific verb ('Returns') and resource ('specific Object Storage bucket'). It distinguishes itself from sibling list operations like list_buckets by emphasizing 'specific', and mentions the raw/summary toggle, adding precision.
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 explicit guidance on when to use this tool versus alternatives like list_buckets or get_namespace. The phrase 'specific bucket' implies single-resource lookup, but no exclusions or alternative references are provided. The usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instanceA
Returns details of a specific Compute instance. Returns a trimmed summary unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object instead of the trimmed summary (default: false) | |
| region | No | OCI region ID where the instance lives (e.g. sa-vinhedo-1). Default: server-configured region | |
| instanceId | Yes | Instance OCID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses a key behavioral trait: returns a trimmed summary by default unless raw=true, which changes the output to the full OCI SDK object. This adds value beyond the schema and conveys output 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?
Two short sentences with no filler. The core purpose and the raw flag behavior are front-loaded and immediately actionable.
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 get-instance tool, the description plus schema covers the essential information: what the tool does, how to adjust output (raw), and all parameters. It does not detail the exact fields in the trimmed summary, but this is not critical for a read 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?
Schema description coverage is 100%, with each parameter already explained. The description only mentions raw=true's effect but does not add significant meaning beyond the schema, 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?
Clearly states 'Returns details of a specific Compute instance', identifying the resource and scope. It distinguishes itself from sibling list_instances by emphasizing a single instance rather than a 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?
Usage is implied: use when you need details of one specific instance. It does not explicitly mention alternatives (e.g., list_instances) or state when not to use, leaving the agent to infer from the 'specific' wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_namespaceA
Returns the Object Storage namespace for the tenancy.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It clearly states the tool returns the namespace, implying a read-only operation. However, it does not disclose authentication requirements, error behavior for invalid regions, or the exact return format.
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 directly states the action and the object without superfluous detail.
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 simplicity of the tool (one optional parameter, no output schema, no nested objects), the description is sufficient. It explains what is returned and for whom. The absence of an output schema is not a major gap because the return value is a simple namespace string, and the schema already explains the region parameter.
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 'region' parameter, which is already fully described in the input schema. The tool description adds no additional parameter semantics beyond what the schema 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 uses a specific verb 'Returns' and identifies the exact resource ('Object Storage namespace') and scope ('for the tenancy'). It clearly distinguishes from sibling tools like list_buckets or get_instance, which serve 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 implies usage when the Object Storage namespace is needed, but it does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. There is no mention of alternatives in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vcnA
Returns details of a specific VCN. Returns a trimmed summary unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object instead of the trimmed summary (default: false) | |
| vcnId | Yes | VCN OCID | |
| region | No | OCI region ID where the VCN lives (e.g. sa-vinhedo-1). Default: server-configured region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits itself. It does so by explaining the trimmed summary default and the raw=true override, which is meaningful behavioral context. However, it does not mention potential errors or permission requirements, though these are less critical for a read-only getter.
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 followed by the key behavioral detail. Every word earns its place with no 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, parameters are fully documented in the schema, and the description explains the output format. Without an output schema, it could specify in more detail what the trimmed summary contains, but for a getter this is 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% for all 3 parameters, so the schema already fully documents them. The description's mention of raw=true is redundant with the schema's parameter description, providing no additional semantic 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 returns details of a specific VCN, using a specific verb and resource. It distinguishes itself from sibling list_vcns by emphasizing 'specific' VCN, and from other getters like get_instance by naming the VCN resource.
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 a single VCN's details rather than a list, which contrasts with list_vcns. It provides clear context but does not explicitly exclude alternative tools or state 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.
instance_actionA
Performs a lifecycle action on a Compute instance (START, STOP, SOFTSTOP, RESET, SOFTRESET, SENDDIAGNOSTICINTERRUPT). Blocked when OCI_READ_ONLY=true.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | START | STOP | SOFTSTOP | RESET | SOFTRESET | SENDDIAGNOSTICINTERRUPT | |
| region | No | OCI region ID where the instance lives (e.g. sa-vinhedo-1). Default: server-configured region | |
| instanceId | Yes | Instance OCID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of disclosing behavioral traits. It does state that the tool is blocked when OCI_READ_ONLY=true, signaling that it is a write operation and that read-only mode prevents execution. However, it does not mention other important behaviors such as whether actions are asynchronous, what response to expect (no output schema), potential state preconditions (e.g., instance must be stopped before starting), or reversibility of actions.
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 extremely concise: two sentences, front-loaded with the primary purpose and then a critical constraint. Every word earns its place, with no filler or repetition of schema details. Excellent structure.
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 mutating tool with no annotations and no output schema, the description provides essential purpose and one key constraint, but omits other contextual information that would help an agent, such as whether operations take effect immediately, how to verify success (e.g., using get_instance), or error conditions. It is adequate but not rich enough for a lifecycle-management 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 input schema already provides 100% coverage for all three parameters (action, region, instanceId), including an enum-like list for action and a default for region. The description's mention of 'lifecycle action' adds minimal extra meaning beyond the schema, but it does reinforce the purpose of the action parameter. Since the schema carries the heavy lifting, 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 tool's function with a specific verb ('Performs'), a precise resource ('Compute instance'), and an enumerated list of lifecycle actions (START, STOP, etc.). This unambiguously distinguishes it from sibling tools that are primarily read-only list/get 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?
The description makes the intended use case obvious: performing lifecycle actions on Compute instances. It does not explicitly compare against alternatives, but the sibling context shows a clear separation from read-only/list tools, so an agent can infer when to select this tool. The OCI_READ_ONLY constraint adds a clear condition under which the tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bucketsA
Lists Object Storage buckets in a compartment. Returns a trimmed summary per bucket unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per bucket instead of the trimmed summary (default: false) | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Buckets are regional. Default: server-configured region | |
| namespace | No | Object Storage namespace (default: auto-resolved) | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the key behavior of returning a trimmed summary unless raw=true, which is useful. However, it omits other behavioral details such as whether this is a read-only operation (implicit but not stated), whether pagination is involved, what the trimmed summary contains, or any access/authorization requirements. This is a minimum-viable disclosure with clear gaps.
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 exceptionally concise and front-loaded. The first sentence immediately states the core purpose, and the second sentence adds a critical nuance about output formatting. There is no redundancy or boilerplate, making it efficient for an agent to parse.
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 4 optional parameters and no output schema, so the description should provide more context about parameter interactions and the expected return structure. It mentions a 'trimmed summary' but does not specify what it contains, nor does it clarify that listing is limited to a single compartment (with tenancy root as default, per the schema). The description is adequate but leaves the agent without important contextual details for invoking the 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 100% since every parameter has a detailed description. The tool description adds marginal value by mentioning the raw=true behavior, but that is already captured in the schema. The baseline of 3 applies because the schema does the heavy lifting and the description does not significantly enrich parameter understanding beyond what is already in the input 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 (Lists), the resource (Object Storage buckets), and the scope (in a compartment). It is specific enough to distinguish from sibling tools like list_compartments or list_instances, and the additional note about returning a trimmed summary adds useful detail.
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 this tool is used for listing buckets, but it does not explicitly mention when to use it versus alternatives such as get_bucket (for a single bucket) or list_objects (for objects within a bucket). No when-not-to-use or alternative tool references are provided, leaving the agent to infer usage from the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_compartmentsA
Lists compartments by name and/or parent compartment. Use this to resolve a compartment name (e.g. "cpLinux") to its OCID before calling other tools. Defaults to searching the entire tenancy tree from the root compartment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Exact compartment name to filter by (e.g. "cpLinux", "cpFiles") | |
| compartmentId | No | Parent compartment OCID to search under (default: tenancy root) | |
| includeSubtree | No | Search the whole hierarchy below the parent compartment (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the default behavior (searching the entire tenancy tree from the root) and the filtering options, which is useful. However, it does not describe the return format (e.g., list of compartments with OCIDs), pagination, or error behavior, leaving some gaps.
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 long, immediately states the primary action, and provides a concrete example. Every sentence serves a purpose with no redundant filler, making it highly 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?
For a simple list tool with no output schema and no annotations, the description covers the essential behavior: filtering rationale, default scope, and intended use case. It falls slightly short by not stating the return structure explicitly, but the inference that OCIDs are returned is strong given the stated purpose.
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 already clearly described (exact name match, parent compartment, includeSubtree default true). The description adds context about the tenancy-wide default but does not significantly enhance parameter understanding 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 clearly states the tool lists compartments by name and/or parent compartment, with a specific verb ('Lists') and resource ('compartments'). It also distinguishes its purpose by noting it resolves compartment names to OCIDs before calling other tools, setting it apart from sibling tools like list_instances or list_vcns.
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 says to use this tool to resolve a compartment name to its OCID before calling other tools, providing clear context. It does not explicitly name alternatives or when not to use it, but the guidance is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instancesA
Lists Compute instances in a compartment. Returns a trimmed summary per instance unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per instance instead of the trimmed summary (default: false) | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1, sa-saopaulo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) | |
| availabilityDomain | No | Optional availability domain filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key behavior: default returns a trimmed summary, and raw=true returns full OCI SDK objects. This adds meaningful context beyond the schema, though it omits other details like pagination or permissions.
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, front-loaded with the primary purpose, and every word earns its place. No fluff 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 list tool with four optional parameters and no output schema, the description sufficiently explains the operation and return format (trimmed vs raw). It is slightly vague about exactly what the trimmed summary contains, but overall complete enough for typical 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 baseline is 3. The description only references the 'raw' parameter and does not add new meaning to other parameters beyond what the schema already 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 states the tool lists Compute instances in a compartment, specifying both the resource type and scope. It distinguishes itself from sibling tools like get_instance (single instance) and instance_action (actions) by the verb 'Lists' and resource focus.
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 as a list operation but does not explicitly state when to use it over alternatives like get_instance or list_vcns. No exclusions or alternative tool references are provided, leaving the context partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_security_groupsA
Lists network security groups (NSGs) in a compartment, optionally filtered by VCN. Returns a trimmed summary per NSG unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per NSG instead of the trimmed summary (default: false) | |
| vcnId | No | Optional VCN OCID filter | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It discloses the output format ('trimmed summary per NSG unless raw=true') and mentions optional filtering, but does not address permissions, pagination, or error behavior. The read-only nature is implied but not stated.
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 clear sentences, front-loaded with the main action and followed by a reference to the raw option. No wasted words, perfectly sized.
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 list tool, the description and rich parameter schema provide enough context to invoke it: scope, optional filter, region, and output mode. There is no output schema, so the raw/trimmed distinction is valuable. Minor gaps include pagination details, but they are less critical for this resource.
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 descriptions cover all 4 parameters (compartmentId, vcnId, region, raw) with defaults and meaning. The tool description adds a little context about the trimmed vs raw output, but mostly relies on the schema. Baseline of 3 is appropriate given 100% 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 lists network security groups (NSGs) in a compartment, optionally filtered by VCN. It specifies the resource (NSGs) and the scoping dimensions, distinguishing it from sibling tools like list_security_lists.
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 (compartment, optional VCN filter) but does not explicitly mention when to use this versus sibling tools like list_security_lists. The usage is implied by the resource name, but no exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_objectsA
Lists objects in a bucket, optionally filtered by prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max objects to return (default: 100) | |
| prefix | No | Optional object name prefix filter | |
| region | No | OCI region ID where the bucket lives (e.g. sa-vinhedo-1). Default: server-configured region | |
| namespace | No | Object Storage namespace (default: auto-resolved) | |
| bucketName | Yes | Bucket name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It states the core action but omits details about pagination, return format (whether it returns object names, metadata, or contents), or any API-specific behavior. This is a significant gap for a tool with no 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, front-loaded sentence that conveys the essential function 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 simple list operation, the description is adequate but incomplete: it doesn't describe what data is returned (e.g., object names, sizes, ETags) or whether pagination is handled. The lack of an output schema and annotations makes the description the sole source of return-value information, which is insufficient.
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 5 parameters have descriptions in the schema, giving high coverage. The description's mention of 'prefix filter' reinforces the prefix parameter but adds no extra semantics beyond the schema's existing documentation.
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 'Lists objects in a bucket, optionally filtered by prefix' uses a specific verb ('lists') and clear resource ('objects in a bucket'), distinguishing it from sibling tools like list_buckets which lists buckets. It clearly describes the core function.
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 listing objects but provides no explicit guidance on when to choose this over alternatives such as list_buckets or get_bucket. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regionsA
Lists the OCI regions this tenancy is subscribed to (region ID, region key, home region flag). Use this to resolve a region name (e.g. "Vinhedo", "São Paulo") to its region ID (e.g. "sa-vinhedo-1") before passing it as the region argument to other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| tenancyId | No | Tenancy OCID (default: resolved from the auth provider, same rule as compartmentId) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses what fields are returned and provides a concrete example of the name-to-ID mapping. It implies a read-only listing operation. While it doesn't mention pagination or error behavior, for a simple list tool this is sufficient context. It adds useful behavioral detail beyond a bare 'Lists regions.'
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 the primary purpose front-loaded and the usage guidance in the second sentence. There is no redundant or unclear language; every clause adds value.
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 no output schema. The description covers purpose, output fields, example conversion, and usage context, making it fully self-contained for an agent to select and invoke the 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?
The schema has 100% coverage for the single optional parameter 'tenancyId', describing it as 'Tenancy OCID'. The description adds extra meaning by explaining the default resolution ('default: resolved from the auth provider, same rule as compartmentId'), which is not evident from the schema alone. This enhances the parameter's 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 clearly states the tool's function: 'Lists the OCI regions this tenancy is subscribed to (region ID, region key, home region flag).' It uses a specific verb ('Lists') and resource ('OCI regions'), and distinguishes itself from sibling tools that deal with instances, compartments, and networks.
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 explains when to use this tool: 'Use this to resolve a region name... before passing it as the region argument to other tools.' This gives clear context for selection and indicates the tool is a prerequisite for other region-aware operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_route_tablesA
Lists route tables in a compartment, optionally filtered by VCN. Returns a trimmed summary (with route rule count) per table unless raw=true — pass raw=true to inspect the actual routes.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object (including route rules) per table instead of the trimmed summary (default: false) | |
| vcnId | No | Optional VCN OCID filter | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the default returns a trimmed summary with route rule count, and that raw=true returns the full SDK object. This is valuable behavioral information beyond the schema, though it does not cover potential errors or permissions.
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, front-loaded with the primary action and resource, and efficiently conveys the default vs. raw behavior. Every sentence adds value 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 tool with four optional parameters and no output schema, the description sufficiently explains the return behavior (trimmed summary vs. raw object). The schema covers parameter defaults and filters, and the description adds the key behavioral nuance. It is complete enough for an agent to select and invoke 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 baseline is 3. The description adds a minor semantic hint by explaining the purpose of raw=true ('inspect the actual routes'), but does not add new parameter meaning beyond what 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?
The description starts with 'Lists route tables in a compartment, optionally filtered by VCN' – a specific verb and resource with clear scope. The resource 'route tables' is unique among siblings, so there is no ambiguity about what is being listed.
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 listing route tables in a compartment, and notes the optional VCN filter. However, it does not explicitly mention when-not-to-use or name alternative tools, though the resource clearly distinguishes it from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_security_listsA
Lists security lists in a compartment, optionally filtered by VCN. Returns a trimmed summary (with ingress/egress rule counts) per list unless raw=true — pass raw=true to inspect the actual rules.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object (including ingress/egress rules) per list instead of the trimmed summary (default: false) | |
| vcnId | No | Optional VCN OCID filter | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries full responsibility for behavioral disclosure. It transparently explains the default trimmed summary return format, including ingress/egress rule counts, and that raw=true returns the full OCI SDK object with actual rules. This goes beyond a simple listing statement and meaningfully informs the agent of output 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, well-structured sentence that leads with the primary action, then efficiently explains the key behavioral nuance (trimmed summary vs raw). There is no wasted wording or redundancy with the schema, achieving maximum conciseness.
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 no required parameters and no output schema, so the description appropriately covers the essential return behavior (trimmed summary vs raw) and the optional filters. It could further detail the exact structure of the trimmed summary beyond rule counts, but the schema covers parameter semantics and the description sufficiently explains expected outcomes for a list 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 provides full coverage (100%) for all four parameters with clear descriptions, so the parameter semantics are already well-documented. The description adds marginal value by highlighting raw=true and VCN usage, but those are restatements of the schema. It does not introduce new meaning for any parameter, keeping this at the 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 clearly specifies the verb (lists), the resource (security lists), and the scope (in a compartment, optionally filtered by VCN). It also distinguishes this tool from siblings like list_network_security_groups and list_subnets by naming the exact resource type, leaving no ambiguity about its 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?
The description gives clear context for when to use the tool (listing security lists in a compartment) and mentions an optional VCN filter. However, it does not explicitly advise against using this tool for other network resource types or point to alternatives such as list_network_security_groups, so the usage guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subnetsA
Lists subnets in a compartment, optionally filtered by VCN. Returns a trimmed summary per subnet unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per subnet instead of the trimmed summary (default: false) | |
| vcnId | No | Optional VCN OCID filter | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add valuable context that the default return is a trimmed summary and that raw=true returns full OCI SDK objects. However, it does not mention other behavioral aspects such as pagination, permissions, or error handling, leaving some ambiguity.
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 brief and to the point. Two sentences convey the action, optional filter, and output behavior without unnecessary 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?
Given the absence of an output schema, the description should clarify what a 'trimmed summary' contains. It also does not mention pagination or limits, leaving some uncertainty about the return format. While the tool is relatively simple, the vague 'trimmed summary' term is a notable 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?
The input schema already provides 100% parameter descriptions, so the baseline is met. The tool description adds no extra meaning beyond the schema; it only references raw and VCN filtering, which are already in 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 ('Lists'), resource ('subnets'), and scope ('in a compartment, optionally filtered by VCN'). It also distinguishes itself from sibling tools like list_vcns or list_instances by specifying exactly what is listed and that the output is a trimmed summary by default.
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 clear context for when to use the tool (to list subnets) and how to narrow the scope (by compartment or VCN). It does not explicitly mention when not to use it or alternative tools, but the purpose is specific enough that this is not a major gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vcnsA
Lists Virtual Cloud Networks (VCNs) in a compartment. Returns a trimmed summary per VCN unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per VCN instead of the trimmed summary (default: false) | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the trimmed summary vs. raw output toggle and compartment scoping, but does not address pagination, exact fields in the summary, error behavior, or permission requirements. These gaps make it adequate but not rich.
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, well-structured sentence that front-loads the main action and immediately explains the key behavior (trimmed summary vs. raw). No redundant words 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 is a straightforward list operation with three optional parameters and no output schema. The description sufficiently explains the purpose and raw behavior, and the schema documents all parameters. It could mention default region behavior, but the schema covers that, so no major 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?
Schema description coverage is 100%, so the baseline is 3. The description mentions compartment and raw=true, but these are already fully described in the schema. It adds no new parameter syntax or format details 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 uses a specific verb (Lists), specifies the resource (Virtual Cloud Networks), and scopes it to a compartment, clearly distinguishing it from sibling tools like get_vcn. It also highlights the raw=true output behavior, adding clarity about what the tool returns.
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 clear context: this is for listing VCNs in a compartment. It implicitly differentiates from get_vcn (which fetches a single VCN) but does not explicitly name alternatives or state when not to use this tool. Thus it has clear context but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vnic_attachmentsA
Lists VNIC attachments in a compartment, optionally filtered by instance. Returns a trimmed summary unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full OCI SDK object per attachment instead of the trimmed summary (default: false) | |
| region | No | OCI region ID to query (e.g. sa-vinhedo-1). Default: server-configured region | |
| instanceId | No | Optional instance OCID filter | |
| compartmentId | No | Compartment OCID (default: tenancy root) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains the default return behavior ('trimmed summary') and how to opt into the full object ('unless raw=true'). This is a meaningful behavioral trait, though it does not cover other aspects like pagination or permissions.
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 front-load the purpose and then add the key behavioral note about raw mode. Every word earns its place; no redundant information or padding.
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 no output schema, so the description's mention of the return format ('trimmed summary' vs 'raw') is valuable. It covers the essential context for a list operation, though it does not address when to use it relative to sibling tools, which is a slight gap given the abundance of list tools.
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 baseline is 3. The description's mention of 'compartment' and 'instance' filter echoes the schema but does not add new semantic detail beyond what the parameter descriptions already provide.
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 ('Lists') and the resource ('VNIC attachments'), scoped to a compartment with an optional instance filter. This is specific enough to distinguish it from sibling tools like list_instances or list_vcns, as VNIC attachments are a distinct resource type.
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 context (compartment scope, optional instance filter) but does not explicitly state when to use this tool over alternatives or mention exclusions. While it's clear what the tool does, it lacks explicit guidance on when it should be preferred over related list tools.
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.
18 tool updates
v1.0.0- First observed
create_bucket - First observed
delete_object - First observed
get_bucket - First observed
get_instance - First observed
get_namespace - First observed
get_vcn - First observed
instance_action - First observed
list_buckets - First observed
list_compartments - First observed
list_instances - First observed
list_network_security_groups - First observed
list_objects - First observed
list_regions - First observed
list_route_tables - First observed
list_security_lists - First observed
list_subnets - First observed
list_vcns - First observed
list_vnic_attachments
TDQS
Scored across 18 tools
Each tool targets a distinct resource and action (e.g., list_regions vs list_compartments, get_instance vs instance_action). No two tools appear to do the same thing, and descriptions clearly differentiate their purpose.
The vast majority of tools follow the verb_noun pattern (list_*, get_*, create_*, delete_*). The only deviation is instance_action, which is noun_verb, creating a minor inconsistency.
18 tools is at the high end but acceptable for a server spanning compute, networking, and object storage. Each tool has a distinct role, so the count feels purposeful rather than bloated.
The tool set is heavily read-focused. Compute instances lack create/update/delete, VCNs lack create/delete, and subnets are limited to list operations. Object storage has only partial write coverage (create_bucket, delete_object), leaving significant lifecycle gaps for a management server.
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol (MCP) server exposing Oracle Cloud Infrastructure tools, resources and prompts.MIT
- AlicenseCqualityCmaintenanceAn MCP server that exposes Oracle Cloud Infrastructure (OCI) control plane to LLM clients, enabling management of compute, networking, storage, databases, and more through natural language.551Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for Oracle Container Engine for Kubernetes (OKE) that enables inspection, querying, and troubleshooting of OKE clusters through safe, composable tools.Universal Permissive v1.0
- AlicenseAqualityDmaintenanceMCP server for Oracle Cloud Infrastructure (OCI) that provides tools to manage Compute, Object Storage, Block Storage, Networking, Autonomous Database, and IAM via the official OCI SDK.2325 npmMIT