lu-query
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., "@lu-queryshow me the top 10 customers by total orders this month"
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 that exposes an Oracle database to MCP clients over stdio - 75 tools for querying, changing, inspecting and triaging it, with zero-install thin mode and a Markdown audit of every statement.
Requirements
Node.js >= 22
Oracle Database 12c+ (developed and tested against Oracle Database 26ai Free)
No Oracle Client installation: node-oracledb runs in thin mode
Related MCP server: Oracle Database MCP Server
Quick start
npx lu-queryClient configuration (Claude Desktop example; any MCP client works):
{
"mcpServers": {
"lu-query": {
"command": "npx",
"args": ["lu-query"],
"env": {
"ORACLE_DB_URL": "jdbc:oracle:thin:@//db.host:1521/FREEPDB1",
"ORACLE_DB_USERNAME": "app_user",
"ORACLE_DB_PASSWORD": "secret"
}
}
}
}With OpenCode
1. Install once. The package ships the lu-query binary, so a single global install gives you the command forever:
npm i -g lu-query2. Export the Oracle credentials in the environment that launches OpenCode (your shell profile is fine). They never need to live in the config file.
3. Register the server in opencode.json (global, in ~/.config/opencode/) or in .opencode/ for a single project:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"lu-query": {
"type": "local",
"command": ["lu-query"],
"environment": {
"ORACLE_DB_URL": "{env:ORACLE_DB_URL}",
"ORACLE_DB_USERNAME": "{env:ORACLE_DB_USERNAME}",
"ORACLE_DB_PASSWORD": "{env:ORACLE_DB_PASSWORD}",
"MCP_AUDIT_DIR": "/home/you/.lu-query/audit"
}
}
}
}
}4. Verify: opencode mcp list → ✓ lu-query connected. The nine MCP prompts become commands like /lu-query:review-sql-performance.
Notes:
{env:NAME}is OpenCode's substitution syntax for reading a variable from the environment; shell forms like$NAMEare not expanded inside JSON. Keep the password in the environment, not in the file.Pin
MCP_AUDIT_DIRto an absolute path like above. Without it the audit Markdown lands in./mcp-audit-logsrelative to the process working directory, which is your project — audit files would show up in the repo. SetMCP_AUDIT_ENABLED=falseto turn auditing off.npm may warn that install scripts for
oracledbwere blocked. It is harmless: lu-query runs node-oracledb in thin mode and needs no native client.No
ORACLE_DB_SCHEMA? Every tool uses the connected user's schema; set it to pin one.The pool is lazy: the server answers
initializewithout a database; the credentials are only needed when a tool actually queries.
Prefer no global install? Use "command": ["npx", "-y", "lu-query"] instead: same behavior, npx downloads and caches the package on the first call — and that first call can exceed the 30 s default startup timeout, so add "timeout": { "startup": 120000 }.
From a local clone
While working on the code (or on an unpublished build), point the command at your local build instead of the installed one:
"lu-query": {
"type": "local",
"command": ["node", "/absolute/path/to/lu-query/dist/index.js"],
"cwd": "/absolute/path/to/lu-query",
"environment": {
"ORACLE_DB_URL": "{env:ORACLE_DB_URL}",
"ORACLE_DB_USERNAME": "{env:ORACLE_DB_USERNAME}",
"ORACLE_DB_PASSWORD": "{env:ORACLE_DB_PASSWORD}"
}
}Run npm run build first: dist/ is generated and gitignored.
The pool is lazy: the server starts and answers initialize without a database; the first tool call opens the connection.
Configuration
Variable | Required | Default | Purpose |
| yes | — | Connect string: JDBC ( |
| yes | — | Database user |
| yes | — | Database password |
| no | session default | Schema set via |
| no |
| Connection pool size |
| no | package version | Version reported by the server |
| no |
| Session audit on by default — the only contract change vs the Java server (which defaulted to |
| no |
| Directory for audit Markdown files |
| no |
| Error reporting to Sentry |
| if Sentry | — | Sentry DSN |
| no |
| Sentry environment |
| no |
| Sentry release |
| no |
| PII in Sentry events |
| no | — | Accepted for config parity; unused at runtime ( |
| no |
| Server log level |
All of them in one place, ready to paste. Only the first three are required; drop any other line and its default from the table applies. The same names go in the environment block of an MCP client config.
# required
export ORACLE_DB_URL='jdbc:oracle:thin:@//db.host:1521/FREEPDB1'
export ORACLE_DB_USERNAME='app_user'
export ORACLE_DB_PASSWORD='change-me'
# optional
export ORACLE_DB_SCHEMA='APP' # pin a schema instead of the connected user's
export ORACLE_POOL_SIZE='8' # connections kept open (default 4)
export MCP_AUDIT_ENABLED='true' # session audit Markdown on/off
export MCP_AUDIT_DIR='/var/log/lu-query' # absolute path, or it lands in the client's cwd
export LOG_LEVEL='INFO' # APP_LOG_LEVEL also works
export SENTRY_ENABLED='false' # stays off until SENTRY_DSN is set
# Sentry, only if you report errors (values from your Sentry project)
# export SENTRY_DSN='https://key@sentry.io/1234567'
# export SENTRY_ENV='production'
# export SENTRY_RELEASE='2.16.3'
# export SENTRY_SEND_DEFAULT_PII='false'
# export SENTRY_AUTH_TOKEN=''
# export MCP_SERVER_VERSION='2.16.3' # only to pin the reported version{
"ORACLE_DB_URL": "jdbc:oracle:thin:@//db.host:1521/FREEPDB1",
"ORACLE_DB_USERNAME": "app_user",
"ORACLE_DB_PASSWORD": "change-me",
"ORACLE_DB_SCHEMA": "APP",
"ORACLE_POOL_SIZE": "8",
"MCP_AUDIT_ENABLED": "true",
"MCP_AUDIT_DIR": "/var/log/lu-query",
"LOG_LEVEL": "INFO",
"MCP_SERVER_VERSION": "2.16.3",
"SENTRY_ENABLED": "false",
"SENTRY_DSN": "",
"SENTRY_ENV": "",
"SENTRY_RELEASE": "",
"SENTRY_SEND_DEFAULT_PII": "false",
"SENTRY_AUTH_TOKEN": ""
}The same set as JSON, for the environment block of a client config (mcp.servers.<name> in opencode.json, mcpServers.<name> in claude_desktop_config.json). Empty values are read as unset.
Sentry, only if you want error reporting. All six keys ship in the JSON above:
SENTRY_ENABLED- master switch; off means nothing is ever sent.SENTRY_DSN- client key of your Sentry project. Without it the server stays off and says so on stderr.SENTRY_ENV- environment tag on every event (localby default).SENTRY_RELEASE- version tag on every event (0.0.1-SNAPSHOTby default, inherited from the Java config).SENTRY_SEND_DEFAULT_PII- let Sentry attach IPs and user agents (falseby default).SENTRY_AUTH_TOKEN- build token of the Java setup, accepted for config parity and ignored at runtime.
Limits. Result sets are capped at 1000 rows. Three timeout layers: statement 120 s, socket 30 s, MCP request watchdog 150 s. Identifiers are validated against ^[A-Za-z][A-Za-z0-9_$#]{0,127}$; literals are escaped (' -> '').
Architecture reference
The whole server on one page: the execution path from the MCP client to Oracle, the 75 tools by domain, the agent interface (prompts, resource templates, skills), the built-in control points, the three DML paths and the audit trail.

Session audit
Every session writes one Markdown file lu-query-<timestamp>-log.md in MCP_AUDIT_DIR, with one entry per tool execution: tool name, statement kind (SELECT, INSERT, ...) and type (READ/WRITE/OTHER), duration, rows, parameters and the SQL verbatim.
### #1 · 11:33:52 · test_connection · SELECT · READ · ✅ OK
| Inicio | 11:33:52.410 | Fin | 11:33:52.492 | Duración | 82 ms | Filas | 1 | Parámetros | |
```sql
SELECT * FROM V$VERSION
```Read a session back with the resource oracle://audit/session/{id} (autocomplete offers current and recent ids). Audit disables itself on I/O errors and says so on stderr. Set MCP_AUDIT_ENABLED=false to turn it off. Audit files contain every statement executed — protect the directory (see SECURITY.md).
Tools (75)
System (1)
Tool | Purpose |
| Connectivity check: database version, name, current user/schema, instance |
Query (2)
Tool | Purpose |
| Run a single SELECT (verbatim, CTEs allowed) with optional |
| First N rows of a table (default 10, max 1000) with progress notifications |
DML (3)
Tool | Purpose |
| Execute one INSERT/UPDATE/DELETE/MERGE and commit |
| Dry-run an UPDATE/DELETE: rows that would be affected plus the WHERE breakdown, no execution |
| Execute DML inside a transaction that is immediately rolled back — nothing persists |
DDL (7)
Tool | Purpose |
| Add or replace a table comment (own tables only) |
| Add or replace a column comment (own tables only) |
| Create or replace a view in the user's own schema |
| Create a private or public synonym for another schema's object |
| Create a sequence in the user's own schema |
| Create an index on a table (columns array; table ownership or CREATE ANY INDEX) |
| Create a materialized-view log for fast refresh |
Metadata — core (8)
Tool | Purpose |
| List schemas (users) visible to the connection |
| List tables with optional schema and LIKE pattern |
| List views with optional schema and LIKE pattern |
| Columns of a table: type, nullability, default, comment |
| true/false via ALL_TABLES (views not considered) |
| Search objects by case-insensitive LIKE pattern, optional type filter |
| List objects by schema and type (tables, views, packages, ...) |
| DDL of an object via DBMS_METADATA.GET_DDL (as CLOB string) |
Metadata — catalog (21)
Tool | Purpose |
| Indexes of a table with columns, uniqueness, status |
| PK/FK/unique/check constraints with columns and references |
| Sequences with range, increment, last number, cycle, cache |
| Metadata of a single sequence |
| Triggers with type, event, table, status |
| Procedures, functions, packages, types |
| Private/public synonyms with resolved target and DB link |
| Database links visible to the user |
| Directory objects and filesystem paths |
| External tables: driver, directory, reject limit, access params |
| MViews with refresh mode/method, last refresh, staleness |
| Materialized-view logs on tables |
| Table partitions: high value, rows, compression, last analyzed |
| Index partitions: status, leaf blocks, distinct keys |
| Subpartitions of a composite-partitioned table |
| LOB columns: segment, index, caching, SECUREFILE, retention |
| User-defined types: typecode, attributes, methods, supertype |
| Objects with status INVALID (broken code) |
| Objects a given object depends on (impact analysis) |
| Scheduler jobs: state, run/failure counts, next run |
| Recent job run details: duration, error code, output |
Optimizer statistics & health (7)
Tool | Purpose |
| Table optimizer stats: rows, blocks, avg row length, last analyzed |
| Column stats: NDV, density, nulls, buckets |
| Histogram endpoints of a column |
| Granted and effective system privileges |
| Enabled roles with admin/default flags |
| Compilation errors of PL/SQL units |
| One-shot readiness check: connectivity, version, catalog role, invalid objects, server config, audit state |
PL/SQL (2)
Tool | Purpose |
| Arguments and full source of a PL/SQL object |
| Execute a procedure/function/package subprogram with IN/OUT/INOUT args and REF CURSOR returns |
Explain & tuning (4)
Tool | Purpose |
| Execution plan via EXPLAIN PLAN + DBMS_XPLAN without executing the statement |
| Analyse a statement's plan; propose CREATE INDEX when a table is read by full scan |
| Indexes with columns and best-effort usage info |
| DBMS_SQLTUNE report with recommendations |
Graphs & helpers (7)
Tool | Purpose |
| NEXTVAL of a sequence — side-effecting read: it advances the counter |
| Orphan rows per FK of a table (empty list = integrity intact) |
| Lowest free id in 1..maxRange (default 1000, cap 10000) not present in the table |
| Duplicate value groups in one or more columns (NULLs excluded) |
| Exact row count of a table without running SQL |
| Object-dependency graph of a schema (Mermaid) |
| Foreign-key graph of a schema or table (Mermaid) |
Performance — V$ views (13)
Requires SELECT ANY DICTIONARY (or equivalent) on the database user; tools return a grant hint on ORA-00942/01031.
Tool | Purpose |
| ACTIVE sessions: user, machine, program, last call elapsed |
| Blocked sessions with blocker sid/user and wait event |
| DML/transaction/user locks held and requested, object and decoded mode |
| Full SQL text currently executed by a session (sid + serial#) |
| Top-N SQL by buffer_gets (default), disk_reads, elapsed_time, executions, cpu_time |
| Current waits from V$SESSION_WAIT, optional sid/class filter |
| Long-running operations with progress from V$SESSION_LONGOPS |
| Instance name, host, version, startup time, status, archiver |
| Database name, creation, log mode, open mode, role |
| Cumulative V$SYSSTAT stats: parses, DB time, physical IO |
| V$SYS_TIME_MODEL: DB CPU, DB time, parse times |
| Initialization parameters from V$PARAMETER |
| Datafiles with size, reads/writes and average IO time |
Resources (4)
URI template | Purpose |
| Markdown audit log of a session ( |
| Column-level description of a table or view |
| DDL source of any object (type auto-detected) |
| PL/SQL source (procedure, function, package, type body) |
Prompts (9)
review-sql-performance, explain-schema, debug-invalid-plsql, safe-dml-plan, data-quality-audit, triage-database-incident, prepare-plsql-call, operating-rules, oracle-sql-style — read-only working guides for common Oracle tasks through these tools.
Agent skills (optional)
Nine task-based skills. Eight teach an agent how to use these 75 tools well - which tool for which job, in what order, what mutates, how failures look, how to read results. The ninth turns the audit trail into an interactive HTML report. Install them with the skills CLI, which puts each skill where your agent looks for them:
npx skills@latest add zademy/lu-query # install the nine skills
npx skills@latest add zademy/lu-query --list # just show themUseful flags: -g install globally instead of per project, -a <agent> pick the target (claude-code, opencode, cursor, codex, gemini-cli, …), -s <skill> install one skill (or '*' for all), --copy copy instead of symlink.
No CLI? Copy them by hand - each folder is self-contained (SKILL.md + references/):
cp -r node_modules/lu-query/skills/lu-query-* ~/.claude/skills/ # Claude Code and OpenCodeSkills: lu-query-explore-schema, lu-query-query-data, lu-query-audit-data-quality, lu-query-plan-data-changes, lu-query-manage-schema, lu-query-use-plsql, lu-query-tune-sql, lu-query-triage-incident, lu-query-audit-report. Catalog and examples provenance: skills/README.md. Installing the server never installs skills on its own.
Skills: lu-query-explore-schema, lu-query-query-data, lu-query-audit-data-quality, lu-query-plan-data-changes, lu-query-manage-schema, lu-query-use-plsql, lu-query-tune-sql, lu-query-triage-incident. Catalog and examples provenance: skills/README.md. Installing the server never installs skills on its own.
Security
See SECURITY.md. Highlights: stdio only (no ports), identifier allow-list, escaped literals, audit directory must be protected. The database user should be least-privilege: the server relies on Oracle grants, not on its own checks, for anything the tools do not validate.
Contributing
See CONTRIBUTING.md. Releasing to npm is manual and done by the maintainer. Vocabulary in GLOSSARY.md; decisions in docs/adr/.
License
MIT (c) 2026 Sadot Hernández Moreno
Available Tools
75 toolscall_procedureA
Execute a PL/SQL procedure, function or package subprogram with typed arguments. Supports IN/OUT/INOUT scalar parameters and function return values via typed binds (SYS_REFCURSOR OUT/return arguments are fetched and returned as row arrays). Pass args as a JSON array: [{"name":"P","direction":"IN","dataType":"NUMBER","value":1}]. PL/SQL BOOLEAN/RECORD/TABLE/VARRAY/OBJECT types are rejected with guidance to create a scalar wrapper. Requires GRANT EXECUTE on the target object. Auto-commits like execute_dml.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Arguments as a JSON array: [{"name":"P","direction":"IN|OUT|INOUT","dataType":"NUMBER","value":1}]. | |
| name | Yes | Object name; optionally qualified as PKG.PROC for a package subprogram. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. | |
| isFunction | No | Set true if the object is a function (registers a return slot and populates returnValue). | |
| returnType | No | Oracle return type for functions (e.g. NUMBER, VARCHAR2, REF CURSOR). Ignored for procedures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: auto-commit behavior, required GRANT EXECUTE privilege, SYS_REFCURSOR results being fetched into row arrays, and explicit rejection of BOOLEAN/RECORD/TABLE/VARRAY/OBJECT types with remediation guidance.
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?
Four dense sentences, each delivering distinct information (capability, arg format, rejection policy, privilege/commit semantics). Slightly packed but front-loaded and free of 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?
No output schema exists, yet the description explains what comes back for functions (returnValue) and REF CURSOR out/return args (row arrays). It omits error/exception reporting behavior, which for an execute-style tool is a minor remaining 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 coverage is already 100%, so the baseline is 3, but the description adds real value: a worked JSON arg example, direction semantics, and the fact that isFunction registers a return slot and populates returnValue. The type-rejection rule also constrains what dataType values are legal.
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 (execute) and resource (PL/SQL procedure, function, or package subprogram) with scope (typed arguments, IN/OUT/INOUT). It is clearly separable from execute_dml and describe_plsql among the siblings.
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 concrete usage conditions: pass args as a JSON array, requires GRANT EXECUTE, and pins the commit behavior to execute_dml for consistency. It stops short of an explicit 'use this instead of X when...' statement, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_columnA
Add or replace the comment on a column. Only works for tables the MCP user owns.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| column | Yes | Column name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. | |
| comment | Yes | Comment text. Single quotes are escaped automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose real behavior: this is an upsert ('add or replace') rather than an append, and it is gated on table ownership by the MCP user. That is meaningful. It stops short of saying whether this is DDL, whether existing comments on other columns are affected, or what the response looks like.
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, zero filler, with the operation stated before the caveat. Nothing to trim.
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 four-parameter mutation tool with no annotations and no output schema, the description covers the operation and the key access constraint, and the schema fully documents each parameter. It is nearly complete; only permissions/DDL-side effects and result reporting are left unstated.
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 each of the four parameters is described in the schema, including the non-obvious schema/default guidance ('omit rather than guess') and automatic quote escaping. The description's 'add or replace' clarifies the comment parameter's overwrite semantics, but otherwise adds little the schema does not already carry, 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?
States a specific verb pair and resource: 'Add or replace the comment on a column.' An agent immediately knows the operation and target. It does not, however, name or distinguish itself from the sibling comment_on_table, so sibling differentiation is left to the name.
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 ownership restriction ('Only works for tables the MCP user owns') gives an implied usage boundary, which is genuinely useful. But there is no explicit when-to-use guidance and no routing to the obvious alternative (comment_on_table) or to describe_table for reading existing comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_tableA
Add or replace the comment on a table. Only works for tables the MCP user owns (no system privilege exists for COMMENT on others' objects; you'll get ORA-01031 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. | |
| comment | Yes | Comment text. Single quotes are escaped automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: the operation replaces any existing comment, and it requires table ownership, with the exact failure mode (ORA-01031) spelled out. It omits return/response behavior and required privileges beyond ownership, but the safety-relevant constraints are well covered.
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: the first front-loads the action, the second gives the constraint and failure mode. No redundant restatement of the name or schema, and every clause 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 mutation tool with no annotations and no output schema, the description covers the key behavioral facts an agent needs: what it does, who can run it, and the error on failure. Return value is unspecified, but that is a minor gap given the operation's simplicity.
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 (table, schema, comment) are already documented, including the schema-defaulting and quote-escaping behavior. The description adds nothing about parameters, 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?
States a specific verb ('add or replace') and resource ('comment on a table'), which clearly differentiates from the sibling comment_on_column without needing to name it. The 'add or replace' phrasing also communicates the upsert nature of the operation. It lacks explicit sibling routing but the resource 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?
Gives a concrete precondition — only tables the MCP user owns — and explains why (no system privilege exists for COMMENT on others' objects) plus the resulting error (ORA-01031). This is a clear 'when this works' constraint, though it does not route the agent between this tool and comment_on_column.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_rowsA
Count rows in a table without running SQL. Useful to size a table before indexing, partitioning or sampling.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
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. "Without running SQL" is a genuine behavioral disclosure (no SQL parsing/privilege path), but it omits whether the count is exact or from stats, the cost on very large tables, required table-level privileges, and behavior for views or missing tables.
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 zero filler; the core operation is front-loaded before the use-case rationale. Nothing could be cut without losing 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 low-complexity two-parameter tool this is nearly adequate, but with no output schema the description never states the return shape (a single integer row count) or error behavior on nonexistent/inaccessible tables, leaving a small but real 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%, and the schema itself carries a strong hint for the optional schema param ("omit rather than guess"). The description adds no parameter-level 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?
States a precise verb+resource ("Count rows in a table") and adds the differentiator "without running SQL," which implicitly contrasts it with run_query. It doesn't explicitly name a sibling alternative, so it lands just short of 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?
"Useful to size a table before indexing, partitioning or sampling" gives clear when-to-use context tied to concrete workflows. It stops short of naming the alternative for similar information (e.g., get_table_stats, which also exposes row counts) or saying 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.
create_indexA
Create an index on a table. Requires CREATE ANY INDEX (if the table is in another schema) or table ownership; Oracle returns ORA-01031 otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Index name. | |
| table | Yes | Target table name. | |
| schema | No | Schema where the index will live. Optional — defaults to the server's current schema; omit rather than guess. | |
| unique | No | Whether to create a UNIQUE index (default false). | |
| columns | Yes | Column names to index (JSON array, ordered). | |
| tableSchema | Yes | Schema of the target table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full behavioral burden. It helpfully discloses the privilege requirement and the specific Oracle error on insufficient authorization, but it does not describe DDL side effects such as table locking, resource consumption, index-name conflicts, or whether the operation can be safely retried.
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 language. The primary action is front-loaded, and the privilege caveat follows directly as supporting 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 DDL creation tool with fully documented parameters and no output schema, the description covers the essential action and the key authorization prerequisite. It is nearly complete, though it could better route agents away from suggest_index and mention operational side 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?
Schema description coverage is 100%, so all parameters are already documented in the input schema. The description adds no additional parameter meaning beyond what the schema provides, making the baseline score of 3 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 (Create) and resource (an index on a table), which is unambiguous and distinguishes it from sibling read tools like list_indexes and suggest_index. An agent can identify the operation without opening 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 description gives a prerequisite for use: it requires CREATE ANY INDEX or table ownership, and failure returns ORA-01031. However, it does not say when to choose this tool over alternatives such as suggest_index or explain_plan, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mview_logA
Create a materialized-view log on a table for fast refresh. Requires CREATE TABLE privilege and tablespace quota; Oracle returns ORA-01031 / ORA-01950 otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Master table name. | |
| schema | No | Schema (owner) of the master table. Optional — defaults to the server's current schema; omit rather than guess. | |
| withRowid | No | Whether to include ROWID columns. | |
| withPrimaryKey | No | Whether to include PRIMARY KEY columns (recommended). | |
| includingNewValues | No | Whether to add INCLUDING NEW VALUES (enables fast refresh with DML tracking). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real value: it discloses required privileges (CREATE TABLE, tablespace quota) and the concrete failure modes (ORA-01031 / ORA-01950), which an agent could not infer from the schema. It stops short of covering idempotency or what happens if a log already 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?
Two sentences, no filler, and the core action is front-loaded ahead of the prerequisite/error detail. Every clause 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 DDL tool with no annotations and no output schema, the description covers purpose, prerequisites, and error conditions adequately. Minor gaps remain around duplicate-log behavior and return value, but the essentials for a correct call are present.
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 five parameters including the schema default and the withPrimaryKey recommendation. The description adds no parameter-level meaning beyond that, 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?
States a specific verb (Create), resource (materialized-view log), and target (on a table), plus the reason (for fast refresh). An agent can distinguish it from read-side siblings like list_mview_logs and from other create_* tools without opening 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 phrase 'for fast refresh' implies the scenario in which this DDL is warranted, which is useful context. However, it names no alternatives and gives no explicit when-not guidance (e.g., how it relates to creating the materialized view itself, or to list_mview_logs). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_or_replace_viewA
Create or replace a view in the MCP user's own schema. Requires CREATE VIEW privilege; Oracle returns ORA-01031 otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| view | Yes | View name. | |
| schema | No | Schema (owner) for the new view (must be one the MCP user can create in, typically their own). Optional — defaults to the server's current schema; omit rather than guess. | |
| selectBody | Yes | SELECT statement body for the view (e.g. "SELECT id, name FROM owner.table WHERE active = 1"). |
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 does disclose the privilege requirement and error code, but says nothing about the destructive 'replace' semantics (an existing view and its grants are dropped), transaction/commit behavior, or invalidation of dependent objects.
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 action and scope, then the precondition. Every clause earns its place with zero 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 mutation tool with no annotations and no output schema, the definition is workable but incomplete: it omits the replacement consequences (lost grants, dependent-object invalidation) and any return/confirmation behavior, leaving an agent under-informed about side 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?
Schema description coverage is 100%, so the schema already documents all three parameters, including the schema default. The description only echoes the 'own schema' constraint and adds no syntax or format detail beyond what the schema provides, 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?
States a specific verb (create or replace) plus resource (view) and scope (the MCP user's own schema). No sibling tool creates views, so the agent can distinguish this from list_views, get_ddl, or describe_table without opening a 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 names the required CREATE VIEW privilege and the resulting ORA-01031 error, which is useful precondition context. However, it gives no explicit when-to-use vs alternatives guidance or exclusions, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sequenceA
Create a sequence in the MCP user's own schema. Requires CREATE SEQUENCE privilege; Oracle returns ORA-01031 otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| cache | No | Optional CACHE size (e.g. 20). 0 or omit means NOCACHE. | |
| cycle | No | Whether to CYCLE when max is reached (default false). | |
| order | No | Whether to guarantee ORDER (default false, useful in RAC). | |
| schema | No | Schema (owner) for the new sequence. Optional — defaults to the server's current schema; omit rather than guess. | |
| sequence | Yes | Sequence name. | |
| startWith | No | Optional START WITH value. | |
| incrementBy | No | Optional INCREMENT BY value (can be negative for descending). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a genuine behavioral fact: the CREATE SEQUENCE privilege requirement and the resulting ORA-01031 error. It omits other important traits such as behavior when the sequence already exists, idempotency, and the return 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 tight sentences with zero waste; the scope constraint is front-loaded and the privilege/error note follows. Nothing extraneous.
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?
No output schema and no annotations, but the schema fully documents every parameter and the description adds scope plus the privilege/error requirement. For a simple creation tool this is nearly complete, though it doesn't cover existing-sequence behavior or the success response.
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 7 parameters (cache, cycle, order, schema, sequence, startWith, incrementBy) are already well documented in the schema. The description adds no parameter-level meaning beyond that, 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?
States a specific verb ('Create') and resource ('sequence') plus a scope qualifier ('in the MCP user's own schema'). This clearly separates it from read siblings like list_sequences, get_sequence_info, and get_next_sequence_value, though it doesn't name any of them 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?
Usage is implied by the verb and the privilege prerequisite, but the description never states when to choose this over alternatives or when not to use it (e.g. if the sequence already exists). The 'own schema' scoping note is a mild usage constraint, but no routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_synonymA
Create a private or public synonym pointing at another schema's object. Requires CREATE SYNONYM (private) or CREATE PUBLIC SYNONYM (public); Oracle returns ORA-01031 otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema where the synonym will live (ignored for PUBLIC). Optional — defaults to the server's current schema; omit rather than guess. | |
| synonym | Yes | Synonym name. | |
| isPublic | No | Whether to create a PUBLIC synonym (requires CREATE PUBLIC SYNONYM privilege). | |
| targetName | Yes | Name of the target object (table/view/sequence/procedure). | |
| targetSchema | Yes | Schema of the target object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the auth requirements and the exact error returned when they are missing — the kind of context the rubric explicitly credits. It stops short of covering other behavioral edges such as what happens if the synonym name already exists or whether creation is idempotent.
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 tight sentences: the operation is front-loaded, and the privilege/error sentence immediately follows as the actionable constraint. No filler or restated boilerplate.
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 5-parameter mutation tool with no annotations and no output schema, the description covers purpose, scope choice, and the failure mode an agent will actually hit. The main remaining gap is the behavior on name collision/overwrite, which an agent would want before retrying.
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 every parameter (including the isPublic/schema interaction and the 'omit rather than guess' guidance on schema) is already documented in the schema. The description adds no parameter-level detail beyond what the schema provides, 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?
States a specific verb+resource ('Create a ... synonym') plus the scope variant (private vs public) and the target ('pointing at another schema's object'). This clearly separates it from the read-side sibling list_synonyms and from the other create_* tools (create_sequence, create_index, create_mview_log).
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 a concrete prerequisite that determines whether the call can succeed at all: CREATE SYNONYM for private, CREATE PUBLIC SYNONYM for public, with ORA-01031 as the failure signal. It does not explicitly route between alternatives (e.g., create_or_replace_view or list_synonyms), so it stops short of full 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.
describe_plsqlB
Describe a PL/SQL object: returns its arguments (name, data type, in/out, position) and full source code. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Object name (procedure, function or package). | |
| type | No | Object type, e.g. 'PROCEDURE', 'FUNCTION', 'PACKAGE' or 'PACKAGE BODY'. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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 burden. It states 'Read-only' and enumerates the return content, which is useful, but omits permissions, error behavior (e.g., object not found, invalid type), and any caveats about source retrieval.
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 purpose and return payload, ending with the safety trait. No filler or 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?
For a read-only describe tool with a fully documented schema and no output schema, the description supplies the essential contract: what it returns and that it is non-mutating. It could do more to mention error handling or permissions, but it is close to 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%, with clear descriptions for name, type, and schema (including the default behavior). The description adds no parameter-level detail, so it sits 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?
States a specific verb ('Describe') and resource ('PL/SQL object'), and enumerates the return payload (arguments and source code). However, it does not name or contrast with the closest siblings such as describe_table, get_ddl, or list_procedures, so differentiation is left to the agent.
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 gives no prerequisites or alternative conditions; it only implies usage by describing the action, leaving the agent to infer that this is the right call when source code and signature are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_tableA
Describe the columns of a table: name, data type, nullability, default value and comment. ALWAYS call this before writing a SELECT/INSERT/UPDATE against an unverified table, so column names and types are known rather than invented.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
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 operational protocol (verify before DML) and the return shape, but says nothing about permissions required, cost, or whether the call is read-only — the read-only nature is only implied by the verb 'describe'.
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 zero waste: the first front-loads what the tool returns, the second front-loads the imperative usage rule. Nothing is repeated from 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?
There is no output schema, but the description enumerates the returned column attributes, so an agent knows what it will get back. Combined with a fully documented 2-parameter schema, nothing needed to call this 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 schema already documents both parameters — including the useful 'omit rather than guess' note on schema. The description adds no additional parameter meaning, making 3 the correct 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?
States a specific verb (describe) and resource (a table's columns) and enumerates exactly what is returned: name, data type, nullability, default value and comment. That field-level specificity separates it from get_ddl, list_lob_columns and list_constraints without the agent opening any 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?
Gives an explicit trigger: call it before writing SELECT/INSERT/UPDATE against an unverified table, with the rationale that column names and types should be known rather than invented. It does not name alternative metadata tools (get_ddl, get_table_stats) or state when not to bother, 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.
execute_dmlA
Execute a single INSERT, UPDATE, DELETE or MERGE statement on existing tables and auto-commit it (no explicit COMMIT needed; there is no cross-call transaction boundary). One statement per call. Returns the number of rows affected; if the Oracle user lacks the required privileges the failure surfaces as an error result (isError=true).
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single INSERT, UPDATE, DELETE or MERGE statement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so well: it discloses auto-commit semantics, the absence of a cross-call transaction boundary, one-statement-per-call enforcement, the row-count return, and how privilege failures surface (isError=true). It stops short of flagging irreversibility/rollback options, but the auto-commit statement implies it.
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?
Front-loaded with the core verb and target, then layered with commit semantics, call constraints, and return/error behavior. Slightly dense but every clause is load-bearing and there is 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?
No output schema, so the description correctly explains the return value (rows affected) and error channel (isError=true). Given a single required parameter, this is nearly complete; the only gap is routing guidance versus the preview/rollback sibling 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% for the single 'sql' parameter, so the baseline is 3. The description reinforces the allowed statement types and the single-statement constraint, but adds no syntax or format detail 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 (Execute) and resource (a single INSERT/UPDATE/DELETE/MERGE statement on existing tables), and constrains to one statement per call. This distinguishes it from run_query (reads), execute_dml_preview, and execute_dml_rollback_first without opening any 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?
Conveys the operating model (single statement, auto-commit, no cross-call transaction) which implies when it applies, but never names the obvious alternatives. Siblings execute_dml_preview and execute_dml_rollback_first exist and an agent gets no explicit rule for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_dml_previewA
Dry-run an UPDATE or DELETE without executing it. Returns the total number of rows that would be affected plus a sample of those rows. INSERT and MERGE are not supported; use execute_dml_rollback_first for those.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single UPDATE or DELETE statement to preview (not execute). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it clarifies the operation is non-executing (a true dry-run) and specifies what it returns (affected row count plus a sample). It stops short of stating permission requirements or whether any read locks are taken, so it is strong but not exhaustive.
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 tight sentences: purpose, return behavior, and the exclusion/alternative. The key constraint (dry-run, no execution) is front-loaded and nothing is redundant.
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, the description covers the return values (total affected rows and a sample). It handles the exclusivity constraint and points to the correct alternative, leaving nothing an agent needs in order to call 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?
Only one parameter with 100% schema description coverage, so the schema already documents the sql argument fully. The description reaffirms that it must be a single non-executed UPDATE/DELETE statement but adds nothing beyond the schema's own wording. 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?
States a specific verb (dry-run) and resource (UPDATE/DELETE statements) with scope, and names the sibling tools it is NOT by excluding INSERT/MERGE. An agent can distinguish this from execute_dml and execute_dml_rollback_first without opening any 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?
Explicitly states when to use it (dry-run UPDATE/DELETE), when not to (INSERT and MERGE unsupported), and routes the agent to the correct alternative (execute_dml_rollback_first) for the excluded cases. Both the positive and negative routing are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_dml_rollback_firstA
Execute an INSERT, UPDATE, DELETE or MERGE inside a transaction that is immediately rolled back. Nothing is persisted; the tool only proves the statement is valid and reports the number of rows affected. Call execute_dml afterwards to apply the change for real.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single INSERT, UPDATE, DELETE or MERGE statement to dry-run (executed then rolled back). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that nothing is persisted, that the transaction rolls back, and that it reports rows affected, so the agent understands the side-effect profile. It omits permission/auth requirements and how the statement is validated, which keeps it short of a 5.
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 tight sentences, front-loaded with the rollback semantics before the workflow instruction. Every sentence adds information (what runs, what persists, what to do next) 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 one-parameter tool with no output schema, the description supplies the missing return information ('reports the number of rows affected') and the non-persistence guarantee. Minor gaps remain around required privileges and the ambiguity versus execute_dml_preview, but the definition is essentially callable as written.
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 `sql` parameter, so the schema already documents the accepted statement types. The description restates the same INSERT/UPDATE/DELETE/MERGE list and the dry-run behavior without adding syntax, size, or binding detail beyond the schema. 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?
States a specific verb (execute) and resource (INSERT/UPDATE/DELETE/MERGE) plus the key differentiator: the statement runs inside a transaction that is immediately rolled back. This clearly separates it from execute_dml and run_query without needing to open a 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?
Explicitly states the workflow: validate here first, then 'Call execute_dml afterwards to apply the change for real.' This names the alternative tool and the condition that selects it. It does not, however, distinguish against the closely-named sibling execute_dml_preview, leaving one routing question open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_planA
Generate and return the Oracle execution plan for a SQL statement via EXPLAIN PLAN and DBMS_XPLAN, without executing the statement. Needs a PLAN_TABLE; if it is missing or the user lacks access, the failure is surfaced as an error result. Reports progress to clients that pass a progress token.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL statement to plan (typically SELECT, INSERT, UPDATE, DELETE or MERGE). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does well: it discloses non-execution of the target SQL, the PLAN_TABLE requirement, that missing table/access failures surface as error results, and that progress is reported to progress-token clients. It omits that EXPLAIN PLAN itself writes rows into PLAN_TABLE, which is a relevant side effect an agent should know.
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 tight sentences, front-loaded with the action and mechanism, then prerequisites and failure behavior. No filler and no repetition of 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 single-parameter tool with no output schema and no annotations, it covers action, mechanism, prerequisite, failure mode, and progress reporting. The remaining gap is the shape of the returned plan and the PLAN_TABLE write side effect.
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?
Only one parameter with 100% schema description coverage, so the schema already explains `sql` including the typical statement types. The description adds no syntax or formatting detail beyond that, 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?
States a specific verb (generate and return) plus resource (Oracle execution plan) and the exact mechanism (EXPLAIN PLAN and DBMS_XPLAN). The clause 'without executing the statement' cleanly separates it from siblings like run_query, execute_dml, or execute_dml_preview.
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 conditions for use: planning a statement without running it, and the PLAN_TABLE prerequisite. It stops short of naming alternatives such as suggest_index or run_sql_tuning_advisor, so it lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicatesA
Find duplicate value groups in one or more columns of a table (excluding NULLs). Groups at or above minCount (default 2) come back with a COUNT and a sample ROWID.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. | |
| columns | Yes | Columns to compare together. | |
| minCount | No | Minimum occurrences of a group. Defaults to 2. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose useful traits: NULLs are excluded, the minCount threshold is applied, and the return includes a COUNT plus a sample ROWID. However, it says nothing about read-only vs mutation semantics, permissions, or cost on large tables, so the behavioral picture is only partially covered.
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 tightly written sentences with zero filler, and the core operation is front-loaded before the threshold/return detail. Every clause carries information not already implied by the name.
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 no output schema and no annotations, but the description partially compensates by stating the return contents (COUNT and sample ROWID) and the NULL/minCount semantics. Only the read-only guarantee and any performance caveat are left unstated.
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 table, schema, columns and minCount are already documented in the schema; the baseline is 3. The description reinforces the minCount default and NULL exclusion but adds no format or syntax detail beyond what the schema already supplies.
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 ('Find duplicate value groups') and pins the scope ('in one or more columns of a table'), which is enough to distinguish it from adjacent siblings like count_rows or get_sample_data. An agent can tell what it returns without opening any 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?
Usage is implied by the purpose (you call it when you suspect duplicates across given columns), but there is no explicit when-to-use, no when-not-to-use, and no routing to or from siblings such as validate_fk_integrity or count_rows. Adequate but leaves the agent to infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_free_idA
Find a free id for a new row: scans 1..maxRange (default 1000, capped at 10000) and returns the lowest value not already used, so a key can be inserted without a sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| column | Yes | Numeric id column to search for a free value. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. | |
| maxRange | No | Inclusive upper bound of the search window. Defaults to 1000; capped at 10000. | |
| excludeTable | No | Optional second table (same schema, same column) whose ids must also be avoided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the scan algorithm (1..maxRange), the default (1000), the cap (10000), and the return semantics (lowest unused value). It omits caveats about performance on large scans or concurrency races between find and insert, so it is not exhaustive.
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 front-loads the action and packs the range, default, cap, and return value without wasted words. Dense but readable; slightly long for one sentence but every clause 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 5-parameter tool with no annotations and no output schema, the description explains the mechanism and the returned value adequately. It could say more about failure cases (no free id within range) or concurrency, but an agent has enough to call 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 all five parameters are already documented in the schema. The description restates maxRange's default and cap but adds no new semantics for table, column, schema, or excludeTable. Baseline 3 applies when 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?
States a specific verb+resource ('find a free id for a new row') and clarifies the mechanism: scanning a range and returning the lowest unused value. This is distinguishable from the sibling get_next_sequence_value since the description explicitly frames it as an alternative 'without a sequence'. It stops just short of naming the sibling outright.
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 phrase 'so a key can be inserted without a sequence' implies when to use it (when no sequence exists), but there is no explicit when-not guidance or named alternative. The condition is suggested rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_column_statsB
Return optimizer statistics for columns of a table: number of distinct values (NDV), density, null count, bucket count, low/high value, histogram type. Optional column filter.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| column | No | Optional column name filter. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does useful work by disclosing the exact shape of the payload (the metric list) for a tool with no output schema, but it never states that this is a read-only dictionary lookup, whether statistics may be stale/missing if never gathered, or how it behaves for a nonexistent table or column.
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?
Front-loaded with the verb and resource, then the returned metrics, then the filter note — dense and almost waste-free. The trailing 'Optional column filter' fragment slightly duplicates the schema's column description, a minor 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 read-only stats lookup with a fully documented 3-parameter schema and no output schema, enumerating the returned metrics in the description is the right compensation. It is slightly short on context about stat provenance and staleness, but nothing 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%; all three parameters (table, column, schema) are documented directly in the schema, including a helpful 'omit rather than guess' warning for schema. The description only restates the optional column filter and adds no format, casing or default semantics beyond the schema, 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?
Specific verb ('Return optimizer statistics') plus precise resource and granularity ('columns of a table'), and it enumerates exactly which metrics come back (NDV, density, null count, buckets, low/high, histogram type). It implicitly separates itself from table-level siblings like get_table_stats, but never names the neighboring get_histogram or get_table_stats, which is the only thing keeping it from 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 notes an 'Optional column filter' but gives no when-to-use guidance, no prerequisites (e.g., stats must have been gathered), and no routing against the obvious alternatives get_table_stats, get_histogram or describe_table. The agent must infer the choice purely 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.
get_database_infoA
Return database-level information: name, creation date, log mode (archivelog/noarchivelog), open mode, role, flashback status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the disclosure burden. It does real work by enumerating exactly which database attributes come back (log mode, open mode, role, flashback status), which is the main behavioral question for a metadata read. It says nothing about required privileges, cost, or failure modes, but for a parameterless read-only lookup the risk surface is small.
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 states the scope first and then the payload. No filler, no restatement of the tool name, every listed field 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?
With no output schema, the description must describe the return value, and it does so field by field for a parameterless read. Minor gaps remain (value formats for creation date, whether flashback status implies any prerequisite), but an agent has enough to call it and interpret the result.
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?
Zero parameters, so the schema cannot carry meaning and there is nothing to mis-specify; the baseline of 4 applies. The description correctly offers no argument syntax because none exists.
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?
Specific verb ('Return') plus resource ('database-level information') with an explicit inventory of the fields returned (name, creation date, log mode, open mode, role, flashback status). It implicitly separates itself from the instance-level sibling get_instance_info by scoping to 'database-level', though it never names that sibling or any other.
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 this is the right call versus get_instance_info, get_system_stats, get_parameter, or the health report. The agent must infer from the field list alone that this is a one-shot database identity/settings snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_db_time_modelA
Return the database time model from V$SYS_TIME_MODEL: DB CPU, DB time, parse time elapsed, hard parse elapsed, etc.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 does disclose the underlying source (V$SYS_TIME_MODEL), which implies a read-only dynamic performance view and cumulative-since-startup semantics, but it omits privileges required for V$ access, whether values are cumulative or delta, and the unit/format of the returned numbers.
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 front-loaded sentence with no filler; the source view and representative metrics are packed in efficiently. The trailing 'etc.' is the only mild weakness but does not bloat the definition.
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 zero-parameter read tool with no output schema, the description names the source view and sample fields, which gives the agent enough to know what comes back. It stops short of clarifying cumulative semantics, units, or row shape, which would fully close the gap left by the absent output schema.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. The schema is trivially complete and the description adds no misleading parameter claims.
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 ('Return') and resource ('database time model') and names the exact source view (V$SYS_TIME_MODEL) plus example contents (DB CPU, DB time, parse time). An agent can distinguish it from other stats tools like get_system_stats or get_instance_info, though the description never says how it differs from those siblings.
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 guidance and no alternatives named. It does not tell the agent whether this is the right tool versus get_system_stats, get_instance_info, or get_database_info, nor any prerequisites, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ddlA
Return the DDL definition of an object as a CLOB string, using DBMS_METADATA.GET_DDL. Read-only: never executes the DDL. All three parameters (schema, name, type) are REQUIRED. Valid type values: TABLE, VIEW, INDEX, SEQUENCE, PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, TRIGGER, TYPE, SYNONYM, DB LINK. schema/name/type are matched case-insensitively against ALL_OBJECTS (lowercase is fine) and the exact stored object is passed to GET_DDL, so a case mismatch never surfaces as ORA-31603. Requires SELECT_CATALOG_ROLE plus EXECUTE on SYS.DBMS_METADATA (granted in db/setup_least_privilege_user.sql); privilege or not-found failures surface as error results.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Object name. | |
| type | Yes | Object type, e.g. 'TABLE', 'VIEW', 'INDEX', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'SEQUENCE', 'TRIGGER'. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares read-only behavior, that the DDL is never executed, the required grants (SELECT_CATALOG_ROLE plus EXECUTE on SYS.DBMS_METADATA), and how privilege/not-found failures surface. This is exactly the behavioral context an agent needs before calling a DDL 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?
Dense but front-loaded: purpose first, then safety, then parameters, then privileges/errors. Every sentence carries useful information, though the packing makes it read more like a spec than a description.
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?
No output schema and no annotations, yet the description covers return type (CLOB string), safety, prerequisites, and failure modes — everything needed to call it correctly. The one gap is the required/optional contradiction with the schema, which should have been aligned.
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, and the description adds real value with the full list of valid type values (absent from the schema) and case-insensitive matching semantics. However, it claims 'All three parameters (schema, name, type) are REQUIRED' while the schema marks only name and type as required and explicitly calls schema optional/defaulting to the current schema — a direct conflict that undercuts the otherwise useful guidance.
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 ('Return the DDL definition of an object') and names the underlying mechanism (DBMS_METADATA.GET_DDL). An agent can immediately distinguish this object-level DDL extraction tool from the many list_* siblings.
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 strong operational context (read-only, required privileges, error behavior) but never explicitly states when to choose this over alternatives like describe_table or search_objects. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dependency_graphB
Build an object-dependency graph for a schema using all_dependencies. Returns directed edges (dependent→referenced) filtered by optional name/type, plus a Mermaid diagram string.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional object name to scope the graph. | |
| type | No | Optional object-type filter (TABLE, VIEW, PROCEDURE, PACKAGE, …). | |
| schema | No | Schema (owner) to inspect. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the edge direction semantics (dependent→referenced) and that the return includes a Mermaid diagram string, which is genuine behavioral detail. It says nothing about permissions, cost, or failure modes, so it is 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?
Two tight sentences with the core action front-loaded and the return shape trailing. Nothing is wasted, though it is dense enough that the return description is somewhat compressed.
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 no annotations, the description still covers the source view (all_dependencies), the scoping/filtering, and the return format (edges plus Mermaid string). Only permission and error behavior are omitted, which is minor for a read-style graph 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%, so the baseline is 3. The description restates that name/type are optional filters but adds no format, syntax, or interaction detail beyond what the schema already documents, so it neither helps nor hurts.
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: "Build an object-dependency graph for a schema," and specifies the output (directed dependent→referenced edges plus a Mermaid string). It does not, however, differentiate itself from sibling tools like list_dependencies or get_fk_graph, which an agent could easily confuse it with.
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 notes the graph is scoped to a schema and can be narrowed by name/type, but gives no when-to-use guidance, no exclusions, and never mentions the alternatives (list_dependencies, get_fk_graph) that an agent would weigh it against. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fk_graphA
Build a foreign-key relationship graph for a schema or a single table. Returns directed edges (child→parent) and a Mermaid diagram string.
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | Optional table name to scope the graph. Leave blank for the entire schema. | |
| schema | No | Schema (owner) to inspect. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It usefully discloses the return content ('directed edges (child→parent) and a Mermaid diagram string'), which is real behavioral value since there is no output schema, but it never states that the operation is read-only, whether it hits the live database, or any cost/latency characteristics.
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 action and followed immediately by the return format. 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?
With no annotations and no output schema, the description covers the essential missing piece by describing the returned edges and Mermaid string. It is largely sufficient for calling the tool, though it omits read-only assurance and any indication of graph size or depth limits.
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, including the 'omit rather than guess' default for schema. The description's 'for a schema or a single table' merely restates that split and adds no syntax or format detail 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 states a specific verb and resource ('Build a foreign-key relationship graph') plus its scope ('for a schema or a single table'), and it names the output shape. It does not, however, distinguish itself from close siblings such as get_dependency_graph or validate_fk_integrity, leaving the agent to infer the difference.
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?
Scope guidance is present ('a schema or a single table', 'leave blank for the entire schema'), which implies when the table parameter matters, but there is no explicit when-to-use or when-not-to-use guidance relative to get_dependency_graph or validate_fk_integrity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_histogramA
Return the optimizer histogram endpoints for a column (frequency or height-balanced). Useful to understand data skew and cardinality estimates.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| column | Yes | Column name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
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 burden. It discloses what is returned (endpoint values, histogram type), which implies a read operation, but says nothing about permissions, read-only nature, error behavior, or pagination.
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, front-loaded with the return content and followed by the use case; both sentences earn their 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?
For a low-complexity read tool with fully documented parameters and no output schema, the description covers what it returns and why it matters. It is largely complete, with only minor gaps around output format and safety.
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 table, column, and schema are already documented in the schema (including the default-schema guidance). The description adds no parameter meaning beyond the schema, 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?
States a specific verb (Return) and resource (optimizer histogram endpoints for a column), and names the two histogram types (frequency, height-balanced). This clearly distinguishes it from a plain stats tool, though it does not explicitly contrast with the close sibling get_column_stats.
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 to understand data skew and cardinality estimates" gives a rationale for calling it, but there is no explicit when-to-use versus alternatives like get_column_stats or get_table_stats, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_infoA
Return Oracle instance information: name, host, version, startup time, status, archiver, thread.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose the return payload (name, host, version, startup time, status, archiver, thread). It says nothing about permissions, cost, or whether it is guaranteed read-only, but for a zero-argument instance-metadata read there is limited further behavior to disclose.
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 the verb and resource first and the field list after the colon. Nothing is padding; every token 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?
With no output schema, the description usefully enumerates the returned attributes, and with zero parameters and no annotations there is little else required. The only gap is the absence of any differentiation from get_database_info, which a sibling-aware agent would want.
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 tool takes zero parameters, so there are no parameter semantics to document and the baseline is 4. The enumerated field list is a return-value description rather than a parameter description, but it is not misleading here.
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 ('Return Oracle instance information') and enumerates the exact fields returned, so the scope is unambiguous. It does not explicitly distinguish itself from the nearby sibling get_database_info, which an agent may reasonably confuse it with.
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 when-to-use guidance, no prerequisites, and never mentions the alternative get_database_info sibling that covers similar ground. The agent is left to infer selection 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.
get_next_sequence_valueA
Return the NEXTVAL of a sequence. WARNING: this is a side-effecting read — calling it advances the sequence counter and the consumed value cannot be reused. When the sequence has cache > 0 the returned value may already be consumed elsewhere; before using it as a key, verify it is not already present in the target table. Use sparingly.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) of the sequence. Optional — defaults to the server's current schema; omit rather than guess. | |
| sequence | Yes | Sequence 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, and it does so well: it discloses non-idempotence (advances the counter, value cannot be reused) and the cache>0 hazard that makes the returned value potentially already-consumed. It omits failure/privilege behavior and the concrete return type, which are the remaining gaps for a tool with zero annotation coverage.
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?
Four short sentences, front-loaded with the core action and then escalating to the warning. Every sentence adds a distinct fact (what it returns, that it mutates, the cache caveat, the sparing-use advice) 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?
With no annotations and no output schema, the description must carry the behavioral contract, and it covers the critical side-effect and correctness risks thoroughly. It stops short of naming the sibling alternative for obtaining safe keys and does not state error behavior, leaving minor 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% and both parameters (schema, sequence) are documented there, including the 'omit rather than guess' default for schema. The description adds no parameter-level meaning beyond the schema, 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?
States a specific verb and resource ('Return the NEXTVAL of a sequence') and immediately frames the operation as a side-effecting read, which separates it from the read-only list_*/get_* siblings. An agent can distinguish it from list_sequences, get_sequence_info and create_sequence without opening any 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?
Gives clear operational context ('Use sparingly') and a concrete pre-use condition: verify the value is not already present in the target table when cache > 0. It does not name an alternative tool (e.g. find_free_id, which exists among siblings and serves a similar key-generation need), so the routing guidance is incomplete but the caution guidance is genuinely useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parameterA
Return Oracle initialization parameters from V$PARAMETER with type, value, default/modified flags and modifiability. Optional name LIKE pattern (case-insensitive, supports %).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional LIKE pattern for the parameter name (case-insensitive, supports '%' wildcard). Omit to list all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It discloses the data source (V$PARAMETER) and the shape of returned fields, which implicitly signals a read-only catalog query, but it never explicitly states read-only semantics, permission requirements, or result-set size 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?
Two sentences, zero filler, and the core operation is front-loaded before the optional filtering detail. Nothing in the text is redundant boilerplate.
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 read tool with no output schema, the description compensates by listing the returned columns, which is the main gap an absent output schema would otherwise leave. Minor omissions (read-only confirmation, row-volume expectations) keep it short of perfect.
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 a single parameter at 100% schema description coverage, the schema already documents the LIKE pattern, case-insensitivity, and % wildcard. The description restates the same facts rather than adding syntax, escaping rules, or edge-case behavior, 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?
States a specific verb and resource ('Return Oracle initialization parameters from V$PARAMETER') and enumerates the returned attributes (type, value, default/modified flags, modifiability), which cleanly separates it from sibling info tools like get_instance_info or get_database_info. An agent can identify the exact data domain without opening 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?
Usage is implied rather than stated: the description conveys that omitting the pattern lists all parameters and supplying one filters, which covers the two calling modes. It never explains when to prefer this tool over adjacent instance/database introspection tools, so guidance stops at the implicit level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plsql_errorsA
List compilation errors of PL/SQL units (procedures, functions, packages, triggers, types). Optional schema, name and type filter. Critical for diagnosing broken code.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object name filter. | |
| type | No | Object type filter: 'PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY','TRIGGER','TYPE','TYPE BODY'. | |
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'List' implies a safe read operation and the scope (all schemas when no schema given) is noted, but there is no mention of permissions, result limits, pagination, or volume of output.
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 short sentences with zero waste, front-loading the action and resource before the filters and use case. Nothing needs trimming and the important information comes first.
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 tool with three optional, fully documented parameters and no output schema, the description covers what to expect and when it matters. It could be more complete by clarifying how it relates to sibling tools that report invalid or dependent objects.
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, including the enumerated type list. The description merely restates that schema, name, and type are optional filters without adding format or behavioral detail 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 ('List') and resource ('compilation errors of PL/SQL units') and enumerates the covered object kinds (procedures, functions, packages, triggers, types). The purpose is immediately clear, though it does not explicitly distinguish itself from close siblings like list_invalid_objects or describe_plsql.
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?
'Critical for diagnosing broken code' gives implied usage context, but there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as list_invalid_objects. Usage is left to inference from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sample_dataA
Return the first N rows of a table as a quick data preview.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Number of rows to return. Defaults to the server default (10). | |
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a real trait — only the *first* N rows, i.e. a truncated preview with no ordering guarantee — but it never confirms read-only safety, side effects, or any row ceiling beyond the server default.
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 short sentence, front-loaded with the action and scope, with no wasted words. Sized appropriately for a simple preview 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?
There is no output schema and no annotations, so the description is the only source of behavioral context, and it covers only the row-count behavior. It omits return shape, ordering determinism, and safety profile — minor but real gaps for an agent deciding whether to call 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?
Schema description coverage is 100%, so all three parameters (rows, table, schema) are already documented in the schema. The description's "first N rows" mildly reinforces the rows parameter but adds no format or default nuance beyond what the schema 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?
"Return the first N rows of a table as a quick data preview" gives a specific verb (return), resource (table rows), and the scope qualifier (first N, preview). It is clear, but it does not name or distinguish itself from close siblings like run_query, count_rows, or describe_table.
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 phrase "quick data preview" implies the intended context (eyeballing data rather than querying or counting), but it never states when to prefer this over run_query or count_rows, nor any exclusions. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sequence_infoA
Return metadata for a single sequence (min_value, max_value, increment_by, last_number, cache_size, cycle_flag, order_flag) from ALL_SEQUENCES. Read-only: does NOT consume NEXTVAL, so the sequence counter is untouched. Prefer this over querying ALL_SEQUENCES/DBA_SEQUENCES directly.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. | |
| sequence | Yes | Sequence name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so well: it declares read-only semantics, explicitly states NEXTVAL is not consumed so the counter is untouched, and enumerates the returned metadata fields. It omits error behavior (e.g., unknown sequence name) and required privileges.
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 tight sentences with zero filler, front-loading what is returned before the behavioral caveat and the alternative-query guidance. 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?
No output schema exists, so the enumeration of return fields (min_value, max_value, increment_by, etc.) usefully compensates. Scope, source, and safety profile are covered; only failure/error behavior for a missing sequence is left unstated.
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 both parameters are already documented in the schema, including the 'omit rather than guess' guidance for schema. The description adds no syntax or format detail for either parameter, so 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?
States a specific verb+resource ('Return metadata for a single sequence') and names the exact source view (ALL_SEQUENCES). The tool is cleanly distinguishable from sibling list_sequences (plural listing) and get_next_sequence_value (which mutates the counter).
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 explicit routing guidance: 'Prefer this over querying ALL_SEQUENCES/DBA_SEQUENCES directly,' and the read-only note implicitly steers callers away from get_next_sequence_value when they don't want to advance the counter. It stops short of naming that sibling tool or stating when a metadata read is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_longopsA
List long-running operations from V$SESSION_LONGOPS (backups, stats gathering, long queries) with progress percentage and ETA. Optional sid filter; only in-progress ops shown.
| Name | Required | Description | Default |
|---|---|---|---|
| sid | No | Optional session id (SID) filter. |
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 burden. It usefully discloses that only in-progress operations are returned and that each row carries progress percentage and ETA, but says nothing about privilege requirements (V$ views typically need elevated access), row volume, or read-only safety beyond the implicit 'List'.
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 tight sentences with zero filler: the source view and scope lead, and the filter/visibility constraint follows. Every clause 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 single-parameter read tool with no output schema, the description adequately covers source, scope, return content (progress %, ETA), and filtering. The only meaningful gap is the absence of privilege/pagination context, which is minor for a V$ monitoring query.
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 parameter is already documented as 'Optional session id (SID) filter.' The description's 'Optional sid filter' merely restates the schema, adding no syntax, format, or edge-case guidance, 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?
States a specific verb (List) and resource (long-running operations) and names the exact source view V$SESSION_LONGOPS, plus concrete examples (backups, stats gathering, long queries). An agent can distinguish this from monitoring siblings like list_active_sessions or get_wait_events without opening 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 description implies usage (in-progress operation monitoring) and notes the optional sid narrowing filter, but never states when to prefer this over adjacent tools such as list_active_sessions or get_session_sql_text, nor any prerequisites. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_privsA
List system privileges available to the current connection: directly granted system privs plus effective privs from enabled roles (deduplicated, ordered). WHEN TO CALL: only when the user explicitly asks what privileges the connection has; do NOT call as a preamble before querying tables or objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers substantive behavioral detail: it aggregates directly granted privileges plus effective privileges from enabled roles, deduplicated and ordered. It does not describe the return shape or whether ordering is deterministic, but the aggregation semantics are disclosed well.
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 purpose is front-loaded in the first clause, followed by a clearly demarcated WHEN TO CALL section. Both sentences are dense with load-bearing information and there is 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?
With no output schema, the description must convey the return contents, and it does so reasonably by enumerating what is included (direct grants plus effective role privileges, deduplicated, ordered). It could be marginally richer on output format, but is largely complete for a no-arg read 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 tool takes zero parameters, so there is no parameter semantics to document; the schema is empty and coverage is 100%. Baseline 4 applies for a no-parameter tool.
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 ('List') and resource ('system privileges available to the current connection'), and further clarifies scope as 'directly granted system privs plus effective privs from enabled roles'. This distinguishes it from the sibling get_session_roles, which covers roles rather than privileges.
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 an explicit WHEN TO CALL condition (only when the user explicitly asks what privileges the connection has) and an explicit when-not-to-call exclusion (do NOT call as a preamble before querying tables or objects). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_rolesA
List roles enabled for the current connection, with admin option and default-role flag. WHEN TO CALL: only when the user explicitly asks which roles the connection has; do NOT call as a preamble before querying tables or objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose the returned fields (admin option, default-role flag) and a misuse warning, but never states that it is a side-effect-free read, nor any permission/connection prerequisites. That is a modest but real gap for a zero-annotation 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 sentences, zero filler: the first front-loads what is returned, the second front-loads the calling condition and the prohibition. Every clause 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?
With no output schema, the description compensates by naming the returned attributes, and the usage constraints cover the main selection risk. The only shortfall is the absence of any behavioral note (read-only nature, connection prerequisite), which would matter more given the lack of 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 tool takes no parameters, so there is nothing for the description to disambiguate; the schema is trivially complete at 100% coverage. Baseline for zero parameters 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?
States a specific verb (List) and a precisely scoped resource (roles enabled for the current connection), plus the returned attributes (admin option, default-role flag). This clearly separates it from the nearby sibling get_session_privs, which deals with privileges rather than roles.
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?
Explicit when-to-call ('only when the user explicitly asks which roles the connection has') and an explicit exclusion ('do NOT call as a preamble before querying tables or objects'). Nothing about usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_sql_textC
Return the full SQL text currently being executed by a session, given its sid and serial#.
| Name | Required | Description | Default |
|---|---|---|---|
| sid | Yes | Session id (SID). | |
| serialNum | Yes | Session serial number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Currently being executed' implicitly hints that idle sessions yield nothing, but it never states what happens for an inactive/unknown session, whether querying another user's session SQL requires elevated privileges, or whether the result is truncated for very long statements.
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; the verb, resource, and qualifier appear in order. It is efficient, though the terseness leaves behavioral gaps unaddressed.
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 read with fully covered schema and no output schema, the definition is minimally adequate. It hints at the return value ('full SQL text') but omits behavior for inactive sessions and any privilege requirements, which an agent would need to invoke it 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%, so the schema already documents sid (SID) and serialNum (session serial number). The description merely names the same two identifiers, adding no format, source, or retrieval guidance 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 states a specific verb (Return) and a precisely scoped resource (the full SQL text currently being executed by a session), which clearly separates it from siblings like list_top_sql or get_wait_events. It does not explicitly name a sibling or contrast scope, so it falls short of the top band.
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 guidance, no mention of alternatives (e.g., list_top_sql for aggregate SQL, get_wait_events for waits), and no exclusions. The phrase 'given its sid and serial#' only restates the input requirement rather than explaining 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.
get_system_statsA
Return cumulative system statistics from V$SYSSTAT (parse count, execute count, DB time, physical reads/writes, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 usefully discloses that values are 'cumulative' (versus deltas/rates) and names the underlying V$SYSSTAT view, which implies a read-only operation, but it says nothing about permissions, row volume, or snapshot semantics.
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 zero waste; the resource, its source, and representative metrics are all delivered 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 zero-parameter read tool with no output schema, the description does the needed work by naming the source view and sampling the returned metrics. It would be stronger with a note on the volume/granularity of returned rows, but coverage is reasonable.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies since no parameter semantics are needed.
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 (Return) and resource (cumulative system statistics from V$SYSSTAT) and enumerates concrete metrics like parse count, execute count, DB time, and physical reads/writes. This makes the tool's scope evident, though it does not explicitly distinguish itself from sibling stats tools such as get_db_time_model or get_instance_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?
The description offers no when-to-use guidance, no prerequisites, and no comparison against alternatives in the crowded stats/info sibling set. An agent must infer that this is the instance-wide cumulative-stat source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_statsA
Return optimizer statistics for a table: row count, blocks, avg row length, sample size, last analyzed, degree, partitioned, compression.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
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 usefully discloses the returned data fields, which implies a read-only operation, but says nothing about privileges required to read stats views, what happens when a table was never analyzed (null/stale stats), or freshness/refresh considerations.
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 zero filler; the verb and resource lead and the field list follows 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?
No output schema exists, but the description effectively enumerates the return fields, which covers the main informational need for this low-complexity read tool. Only the privilege/null-stats behavior is missing, a minor gap for a simple read.
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 'table' and 'schema' are documented in the schema, including the 'omit rather than guess' guidance for schema. The description adds no parameter meaning beyond that, 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?
States a specific verb (Return) plus a precise resource (optimizer statistics for a table) and enumerates the exact fields returned (row count, blocks, sample size, last analyzed, degree, partitioned, compression). That field list cleanly separates it from siblings like get_column_stats, get_histogram, and count_rows.
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 what it returns but never states when to use it versus alternatives such as get_column_stats, get_histogram, count_rows, or describe_table. There are no preconditions or exclusions, so the agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wait_eventsB
List current wait events from V$SESSION_WAIT. Optional sid filter and wait_class filter (e.g. 'Application','Concurrency','User I/O').
| Name | Required | Description | Default |
|---|---|---|---|
| sid | No | Optional session id (SID) filter. | |
| waitClass | No | Optional wait class filter (e.g. 'User I/O', 'Application'). |
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 burden. It discloses the underlying data source (V$SESSION_WAIT), which is useful context, but says nothing about required privileges, whether the read is truly side-effect-free, rate/cost implications, or what the result set looks like.
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 tight sentences, front-loaded with the core action and source view before the optional filters. 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?
With no output schema and no annotations, the description should carry more weight, yet it does not describe return columns or result shape for the V$SESSION_WAIT view. It is adequate for invoking the tool (optional filters fully covered) but leaves the return and safety context thin.
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, establishing a baseline of 3. The description restates the filters and adds one extra wait_class example ('Concurrency'), but adds no syntax or behavioral 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?
States a specific verb+resource ('List current wait events') and even names the source view (V$SESSION_WAIT), so the agent knows exactly what data is returned. It does not differentiate from the many sibling session/diagnostic tools (list_active_sessions, list_blocked_sessions, get_session_longops), so it stops short of 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 word 'current' implies a live-snapshot diagnostic use case, but there is no explicit when-to-use, when-not-to-use, or named alternative among the session-oriented siblings. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_sessionsA
List currently ACTIVE sessions with username, machine, program, last call elapsed, module and logon time. Optional username and sid filters.
| Name | Required | Description | Default |
|---|---|---|---|
| sid | No | Optional session id (SID) filter. | |
| username | No | Optional Oracle username filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It conveys read-only intent and the notion of an ACTIVE scope, but says nothing about privileges required to read session data, any row caps or pagination, or whether the elapsed/last-call values are snapshots. That is meaningful missing context for a monitoring tool, though not a 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?
Two compact sentences, purpose and returned fields front-loaded, filters last. Every clause carries information and there is 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?
There is no output schema, so the description usefully enumerates the returned columns, which is the key information an agent needs. Missing only secondary context such as privilege requirements or result-size behavior, which keeps it short of a 5.
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?
Both parameters have 100% schema description coverage ('Optional session id (SID) filter', 'Optional Oracle username filter'), so the schema already documents them fully. The description only restates that these filters are optional, adding no format, matching, or edge-case semantics 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 (List) and resource (ACTIVE sessions) and enumerates the columns returned (username, machine, program, last call elapsed, module, logon time), so the agent knows exactly what it gets. It does not, however, differentiate itself from the nearby siblings list_blocked_sessions or get_session_sql_text, which an agent might reasonably confuse for session inspection.
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?
"Currently ACTIVE" plus the two optional filters implies the use case (inspect live sessions, optionally narrowed by user or SID), but there is no explicit when-to-use or when-not-to-use guidance and no pointer to the blocked-session or session-SQL siblings. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_blocked_sessionsA
List sessions currently blocked by another session, with the blocker sid/username/program and the wait event being waited on.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 usefully discloses the shape of the result (blocker sid/username/program plus wait event), which acts as informal output documentation, but says nothing about whether the call is read-only, its cost, or any limits.
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 leads with the verb and scope and appends the returned detail. Every clause 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?
With no output schema and no annotations, the description covers the essential contract for a parameterless read: what it lists and what fields come back. It is nearly complete for this complexity level, missing only explicit read-only confirmation and any ordering/pagination note.
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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The schema is an empty object and no additional parameter meaning is needed.
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 ('List sessions currently blocked by another session') and enumerates the returned fields (blocker sid/username/program, wait event). It is clearly distinguishable from list_locks and get_wait_events by focusing on the blocked/blocker pairing, but 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?
Usage is implied by 'currently blocked' – an agent can infer this is for diagnosing blocking chains – but there is no explicit statement of when to use this versus list_locks, list_active_sessions, or get_wait_events, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_constraintsA
List constraints on a table (primary key, foreign key, unique, check) with their columns and references.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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 burden. It discloses the return contents (constraint types with columns and references), but says nothing about permissions, row limits, or pagination for what is presumably a read-only listing.
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 names the resource first and then the returned fields. Zero waste, 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 simple two-parameter read tool with no output schema, the description covers what is listed and what the entries contain. The lack of a stated return shape is a minor gap but acceptable given the tool's simplicity and full schema coverage.
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 both parameters (table, schema) are fully documented in the schema, including the 'omit rather than guess' default note. The description adds no parameter detail beyond the schema, so 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?
States a specific verb (list) and resource (constraints on a table), and enumerates the constraint types returned (primary key, foreign key, unique, check). This clearly separates it from list_indexes and describe_table, though it never names a sibling 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?
Usage is implied by the resource — you call it to enumerate a table's constraints — but there is no explicit when-to-use guidance and no mention of alternatives like get_ddl or validate_fk_integrity that overlap in the integrity domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datafile_ioB
List datafiles with size, physical reads/writes, block reads/writes and average IO time per file.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 returned metrics but says nothing about the operation being read-only, which datafiles are covered (whole DB vs. tablespace subset), or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource, then lists the relevant columns with no filler. Every clause 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?
With no parameters and no output schema, the description reasonably tells the agent what comes back. The main gap is scope – it doesn't state whether IO stats cover all datafiles or a filtered subset.
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 tool takes zero parameters, which is the baseline-4 case; there is no parameter semantics to clarify. The description's field listing is a bonus rather than a substitute for schema detail.
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 (List) and resource (datafiles) and enumerates the metrics returned (size, physical/block reads and writes, average IO time). This is clearly distinct from sibling stat tools like get_system_stats or get_table_stats, though it never names 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?
There is no guidance on when to use this versus related tools such as get_table_stats, get_system_stats, or list_top_sql. No prerequisites or scope conditions are mentioned, leaving the agent to infer context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_db_linksA
List database links visible to the current user with their connect username, host and creation date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It usefully adds that results are scoped to the current user and names three returned attributes, but it does not explicitly confirm the operation is read-only, describe required privileges beyond visibility, or mention side effects or rate limits.
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 tightly written sentence with the resource and scope front-loaded, followed by the returned attributes. Every component earns its place and there is no redundant or filler text.
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, zero-parameter list tool with no output schema, the description covers the essential facts: what is listed, what scope applies, and what fields are returned. It stops short of richer return-format details or explicit read-only confirmation, but those gaps are minor for this tool's 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?
The tool takes zero parameters, so there is no parameter semantics for the description to clarify. The baseline score of 4 applies because no compensation for schema gaps is needed.
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?
It states a specific verb (List) and resource (database links), plus the visibility scope (visible to the current user), so the purpose is immediately clear. However, it does not explicitly differentiate itself from other list_* siblings such as list_synonyms or list_objects, relying instead on the resource name to do that work.
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 only states what the tool returns; an agent must infer that this is the tool for listing database links rather than reading it as an explicit usage recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dependenciesA
List objects that a given object depends on (referenced objects). Useful for impact analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Object name. | |
| type | No | Optional object type filter (e.g. 'VIEW', 'PROCEDURE'). | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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 usefully clarifies directionality (dependencies, not dependents), but does not state whether traversal is recursive/transitive, whether results are depth-limited, or the return shape. For a low-risk list tool this is adequate but not complete.
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 tight sentences, zero waste, with the core action front-loaded and the purpose cue following. Nothing to trim.
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?
Adequate for a simple three-parameter listing tool with full schema coverage and no output schema, but it omits recursion/depth behavior and the shape of returned rows, which an agent would want before trusting the result for impact analysis.
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 schema already documents name, the optional type filter, and the schema-defaults guidance; the description adds nothing parameter-specific, which is acceptable given full 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?
States a specific verb and resource ('List objects that a given object depends on') and pins down the direction as 'referenced objects', which disambiguates from the reverse 'who depends on me' reading. It does not name the closely related siblings get_dependency_graph or get_fk_graph, so differentiation is left to the agent.
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 impact analysis' gives an implied context, but there is no explicit when-to-use versus get_dependency_graph or get_fk_graph, nor any stated exclusions or prerequisites. The agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoriesB
List Oracle directory objects and their filesystem paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. 'List' implies a read-only operation, which is reasonable for this verb, but the description says nothing about privilege scoping (which directories are visible to the current user), whether results are paged, or what the return shape looks like. For a low-risk zero-parameter listing tool this is acceptable 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 tight sentence with the core purpose front-loaded and the 'filesystem paths' detail appended without waste. It is appropriately sized, though it stops just short of the detail that would make it fully self-sufficient.
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 annotations and no output schema, the description is the only source of behavior, and it omits Oracle-relevant context such as visibility scoping (ALL_DIRECTORIES vs DBA_DIRECTORIES) and required privileges. Adequate for a trivial listing tool, but thin.
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 defines zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4.
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 (List) and resource (Oracle directory objects) and clarifies the output includes filesystem paths, which disambiguates it from OS-level directory listings. It is easily distinguished from siblings like list_schemas or list_datafile_io, though it does not explicitly name or exclude 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 when-to-use guidance, no prerequisite or privilege context, and no mention of alternatives (e.g., run_query against ALL_DIRECTORIES/DBA_DIRECTORIES). The usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_external_tablesB
List external tables with their access driver, default directory, reject limit and access parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
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 does disclose the returned attribute set, which is useful behavioral context, but is silent on row limits, ordering, pagination, and privilege requirements for reading external table definitions. 'List' implies read-only, but nothing confirms scope or safety.
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; the verb and resource lead and the attribute list follows economically. It is appropriately sized for a simple listing tool, though the attribute enumeration crowds out space that could have held scope or usage guidance.
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 no output schema, but the description names the columns that come back, which partly covers return semantics. For a one-optional-parameter list tool with no annotations, it is adequate but leaves open whether regular tables are excluded, how results are ordered or capped, and what privileges are needed.
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?
Only one parameter and schema description coverage is 100%, so the schema fully documents the optional schema/owner filter and the omit-to-search-all behavior. The description adds nothing beyond that, which is the expected baseline when 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?
States a specific verb (List) and resource (external tables), and enumerates the attributes returned (access driver, default directory, reject limit, access parameters), which distinguishes it from the plain list_tables sibling by implication. It never explicitly contrasts with list_tables, so differentiation relies on the reader knowing what an external table is.
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 choose this over list_tables or list_directories, and no statement of exclusions or prerequisites. The only usage hint is the schema parameter's own text in the schema itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indexesA
List indexes on a table with their columns, uniqueness and status.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose what is surfaced (columns, uniqueness, status), but says nothing about pagination, permissions, or exhaustive-vs-filtered behavior. The read-only nature is only implied by 'List'.
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 zero filler, leading with the verb and resource and closing on return contents.
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 two-parameter read tool with no output schema, the description covers scope and the salient return fields. It would be stronger with a note on result ordering or volume, but it is largely sufficient to 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 coverage is 100% and the schema fully documents both 'table' and 'schema' (including the helpful 'omit rather than guess' default note), so the description adds no parameter detail beyond it. 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?
Specific verb (List) + resource (indexes) + scope (on a table) + what is returned (columns, uniqueness, status). An agent can immediately tell it apart from create_index or suggest_index, though it never names the closest sibling list_unused_indexes.
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 by the scope 'on a table' but there is no explicit when-to-use, no exclusion, and no routing to alternatives like list_unused_indexes. Adequate but leaves 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.
list_ind_partitionsB
List partitions of indexes on a table: index name, partition, status, leaf blocks, distinct keys, num rows.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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. 'List' implies a read-only operation and it discloses the returned columns (index name, partition, status, leaf blocks, distinct keys, num rows), which is useful. However, it says nothing about permissions, behaviors on unpartitioned tables, or result volume.
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 zero waste, naming the resource first and then the return fields.
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 no output schema, listing the returned columns is a valuable substitute. But with no annotations and no usage guidance, an agent still lacks enough context to confidently pick this over sibling 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 coverage is 100% and both parameters (table, schema) are well documented in the schema itself. The description adds no syntax or format detail beyond what the schema provides, 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?
States a specific verb (List) and resource (index partitions on a table), and enumerates the returned fields, making it distinct from table-level siblings like list_partitions. It stops short of explicitly naming the alternative to differentiate in ambiguous cases, but the scope is 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?
No guidance on when to use this versus list_partitions, list_subpartitions, or list_indexes. No prerequisites, permissions, or mention of what happens on non-partitioned indexes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invalid_objectsA
List objects whose status is INVALID (broken code needing recompile). Excludes index/LOB partitions. Optional schema and type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Object type, e.g. 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TABLE', 'VIEW'. | |
| schema | No | Schema (owner) name. Omit to search all schemas. |
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 does disclose useful scope behavior (excludes index/LOB partitions) and the semantics of the INVALID status, but does not state that it is read-only, whether results are paginated or ordered, or any privilege requirements. 'List' implies a safe read, but that is left to inference.
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 compact sentences, front-loaded with the defining filter criterion and followed by scope and parameter notes. No filler or 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?
There is no output schema and no annotations, so the description should ideally say what a returned row looks like (name, owner, type, status) and whether the list is exhaustive. It covers the selection semantics well but leaves the return shape entirely unspecified for a read tool with zero structured support.
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 enum examples for type and the 'omit to search all schemas' semantics for schema are already documented. The description only restates 'Optional schema and type filter' and adds no syntax, default, or interaction detail 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 (List) and resource (objects) qualified by a precise and uncommon criterion: status = INVALID, glossed as 'broken code needing recompile'. That criterion cleanly separates it from the many sibling listers such as list_objects, list_procedures and list_views, which have no status filter.
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 this tool is relevant (you want invalid/broken objects) and notes the scope exclusion for index/LOB partitions, but it never says when to prefer it over list_objects or search_objects, nor points to a recompile/remediation tool. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lob_columnsB
List LOB columns of a table with their segment, index, caching, logging, SECUREFILE flag and retention.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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 burden. It discloses the shape of the result set (the LOB-specific attributes), and 'List' implies a read-only operation, but it says nothing about permissions required, behavior when the table has no LOB columns, or error handling for an unknown table.
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 the resource front-loaded and the returned attributes trailing. Every clause earns its place; there is no filler or repetition of the tool name.
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 two-parameter read tool with full schema coverage and no output schema, the description supplies the return fields an agent needs to decide whether to call it. It is only missing edge-case behavior (non-LOB tables, unknown table errors), which is a minor 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%, and the schema already explains both 'table' and the optional 'schema' with its default-to-current-schema caveat. The description adds only the implicit notion that 'table' is the target of the listing, so the baseline 3 for schema-covered parameters 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 gives a specific verb and resource ('List LOB columns of a table') and enumerates the attributes returned (segment, index, caching, logging, SECUREFILE flag, retention), which scopes it well against generic siblings like describe_table. It does not explicitly name or contrast itself with any sibling, which is what keeps it short of 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?
There is no when-to-use guidance, no preconditions, and no mention of alternatives such as describe_table or get_ddl for broader column metadata. Usage is only weakly implied by the phrase 'of a table'; the agent must infer the call context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_locksA
List DML/transaction/user locks held and requested, with the locked object name and lock mode (decoded).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 burden. It usefully discloses that output includes the locked object name and a decoded lock mode, and that both held and requested locks are covered, but it says nothing about permissions required, row limits, or whether the read is expensive.
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 tightly-written sentence with the resource front-loaded and the output contents trailing. Every clause 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?
For a zero-parameter listing tool with no output schema, the description adequately explains what the returned rows describe (object name, lock mode, held vs requested). A brief note on required privileges or result size would close the remaining 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 tool takes zero parameters, so the baseline of 4 applies. There is no parameter surface for the description to clarify or for the schema to document.
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 (List) and resource (locks), then narrows scope to DML/transaction/user locks and clarifies it covers both held and requested locks. An agent can tell exactly what this tool surfaces without consulting any 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?
No when-to-use guidance, no prerequisites, and no mention of related siblings such as list_blocked_sessions or list_active_sessions. The agent must infer from the name alone that this is a diagnostic listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_materialized_viewsB
List materialized views with their refresh mode, method, last refresh and staleness. Optional schema and LIKE name pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| namePattern | No | LIKE pattern for the mview name. Defaults to '%'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It does disclose the read-oriented payload (refresh mode, method, last refresh, staleness), but says nothing about privileges required, row volume, or result limits for a catalog-wide listing when schema 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?
Two short sentences with the core capability front-loaded; the second sentence mostly echoes what the schema already documents, so it is efficient but slightly redundant rather than fully earning 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 listing tool with no output schema, naming the four returned attributes compensates well for the absent return contract, and the parameters are fully documented. Only the missing when-to-use context and any large-result caveat keep it from being 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%: the schema already explains that omitting schema searches all schemas and that namePattern is a LIKE defaulting to '%'. The description only restates 'Optional schema and LIKE name pattern', adding no semantics 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 and resource ('List materialized views') plus the salient returned attributes (refresh mode, method, last refresh, staleness), which differentiates it in substance from list_views and list_mview_logs. It stops short of explicitly naming those siblings or contrasting scope with them, so it is clear but not routing-grade.
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 when-to-use guidance: the description never says to prefer this over list_views, list_mview_logs, or search_objects, nor any prerequisite. Usage 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.
list_mview_logsC
List materialized view logs defined on tables. Optional schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but discloses almost nothing: it never states this is a read-only/safe operation, what fields are returned, ordering, or any privilege requirements. For an Oracle catalog-listing tool, this leaves meaningful 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?
Two short, front-loaded sentences with no wasted words. It is efficient, though the brevity borders on under-specification rather than crisp completeness.
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 read-only listing tool with no output schema and no annotations, the description is minimally adequate. However, given zero annotation coverage, it should say more about the read-only nature and what the listing yields.
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?
There is a single optional parameter with 100% schema description coverage ('Schema (owner) name. Omit to search all schemas.'). The description's 'Optional schema' adds nothing beyond the schema, 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?
States a specific verb and resource (List materialized view logs), which is discernible from siblings like list_materialized_views and create_mview_log. It does not explicitly contrast itself with those siblings, but the resource is precise enough to route correctly.
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 offers no when-to-use guidance, no prerequisites, and no pointer to alternatives such as list_materialized_views or create_mview_log. 'Optional schema' is the only usage hint and is a restatement of the parameter's optionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_objectsC
List database objects (tables, views, packages, procedures, functions, ...). Optional schema and object type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Object type filter, e.g. 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'VIEW'. | |
| schema | No | Schema (owner) name. Omit to search all schemas. |
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 burden. It implies a read-only enumeration but says nothing about result volume, paging, ordering, required privileges, or how object names are returned — material gaps for a catalog-wide listing 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, well front-loaded with the action and resource. Minor deduction for the open-ended '...' list, which is vague rather than informative.
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 two optional params, no annotations and no output schema, the description is minimally adequate — it lets an agent call the tool — but leaves an agent guessing about scope overlap with dedicated list_* siblings and about result shape/size.
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 'type' enum-ish values and the 'schema' semantics (omit to search all schemas) are already spelled out in the schema. The description restates 'Optional schema and object type filter' without adding syntax or format detail, so it earns the baseline 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?
Clear verb+resource ('List database objects') with a parenthetical enumeration of object kinds, so the agent knows this is the generic catalog lister. It does not, however, distinguish itself from the many single-kind siblings (list_tables, list_views, list_procedures, list_types), which overlap heavily with what it claims to return.
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 only notes that the schema and type filters are optional. It never says when to pick this broad lister over list_tables/list_views/list_procedures, nor what happens if type is omitted (does it return everything, including types with dedicated tools?).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_partitionsB
List partitions of a partitioned table: name, position, high value, row count, compression, last analyzed.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
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 usefully discloses the returned columns (name, position, high value, row count, compression, last analyzed), which is genuine output context, but says nothing about permissions, behavior on non-partitioned tables, or result limits.
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 names the action, the target, and the returned fields with zero filler. Every clause 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?
With no output schema and no annotations, the description partially compensates by enumerating the returned columns, and the two parameters are fully documented in the schema. It is only short of error/edge-case behavior for non-partitioned tables and sibling routing.
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 two parameters are documented in the schema, including the 'omit rather than guess' caveat for schema. The description adds no parameter-level 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?
States a specific verb (List) and resource (partitions of a partitioned table), and the qualifier 'of a partitioned table' scopes it away from index partitions. It does not, however, explicitly name its close siblings list_ind_partitions or list_subpartitions, so the agent must infer the boundary.
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 guidance, no prerequisites, and no named alternatives. With list_ind_partitions and list_subpartitions in the same family, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proceduresC
List stored procedures, functions, packages and types. Optional schema, LIKE name pattern and object type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Object type, e.g. 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'TABLE', 'VIEW'. | |
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| namePattern | No | LIKE pattern for the object name. Defaults to '%'. |
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 burden. 'List' implies a read-only operation, but nothing is said about result size, truncation, ordering, pagination, or what a returned row contains. For a catalog-scan tool in a database with many objects, those omissions are material.
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, front-loaded sentences with no padding, and the resource list comes first where it matters. The second sentence largely duplicates schema content, so it earns its place only marginally, keeping this just under a top score.
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 annotations and no output schema, the description should compensate by explaining what the call returns and any behavioral caveats. It instead stops after naming the object classes and filters, leaving return shape, volume, and read-only confirmations entirely to inference.
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 type, schema, and namePattern in detail, including the LIKE semantics and the default '%'. The description only restates that these filters exist and are optional, adding essentially nothing beyond the structured fields. 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 states a specific verb ('List') and the exact resource classes it returns (stored procedures, functions, packages, types), which is more informative than the bare name. However, it offers no differentiation from closely related siblings such as list_objects, search_objects, list_types, or describe_plsql, so an agent cannot easily tell when this one is the right pick.
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 lists the available filters ('Optional schema, LIKE name pattern and object type filter'), which is parameter information rather than usage guidance. There is no statement of when to prefer this over list_objects or list_types, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduler_job_runsA
List recent DBMS_SCHEDULER job run details: start time, run duration, instance id, session id, error code, additional info. Ordered by start time desc. (operation/status live in ALL_SCHEDULER_JOB_LOG, not the run-details view.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of rows to return (default 20). | |
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| jobName | No | Optional job name filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add real behavioral context — result ordering (start time desc), the underlying scope (recent runs), and an explicit boundary on what this view does not contain — but it says nothing about privileges needed to read scheduler views, truncation behavior, or pagination.
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 short sentences, front-loaded with the verb and resource, then return fields, then ordering, then the boundary caveat. Every sentence contributes and nothing is padded.
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, the description correctly enumerates the returned columns and states the sort order, so an agent can interpret results. It could still note the default row cap or privilege requirements, but for a simple read-only list tool it is nearly 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 limit, schema, and jobName are fully documented in the schema itself. The description adds no syntax, default, or semantics 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?
Specific verb+resource ('List ... DBMS_SCHEDULER job run details') plus an enumeration of the returned columns, which is more than a restatement of the name. It clarifies the resource is run details rather than job definitions, but never explicitly names the sibling list_scheduler_jobs as the tool for job definitions, so sibling differentiation is only partial.
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 (inspect recent execution history) but there is no explicit when-to-use or when-not-to-use clause. The parenthetical pointing operation/status to ALL_SCHEDULER_JOB_LOG is useful negative guidance but it steers toward a different Oracle view, not toward a sibling MCP tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduler_jobsA
List DBMS_SCHEDULER jobs with state, run/failure counts, last start, next run and repeat interval.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It usefully discloses the returned content (state, counts, timing, interval), which substitutes for a missing output schema, but says nothing about permissions, result size, or whether the operation is strictly read-only beyond the implication of 'List'.
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, front-loaded with the verb and resource, with every clause adding concrete information about the returned fields. There is 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 simple read-only listing tool with one optional parameter, the description is nearly sufficient: it compensates for the absent output schema by naming the fields returned. It lacks only any routing guidance versus the scheduler-job-runs 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% for the single optional 'schema' parameter, whose description already explains that omitting it searches all schemas. The description adds no parameter-level detail, 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 gives a specific verb ('List') and resource ('DBMS_SCHEDULER jobs') and enumerates the attributes returned (state, run/failure counts, last start, next run, repeat interval). This implicitly separates it from the sibling list_scheduler_job_runs, which covers execution history rather than job definitions, though the distinction is not stated 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 explicit when-to-use or when-not-to-use guidance, and the closest alternative (list_scheduler_job_runs) is never named or contrasted. The purpose of inspecting scheduler job status is implied by the listed fields, so usage is inferable but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schemasB
List all Oracle schemas (users) visible to the current connection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. 'Visible to the current connection' hints at permission scoping, but it says nothing about return format, pagination, ordering, or whether it can be slow on large instances.
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 tight sentence with the key scoping qualifier ('visible to the current connection') placed immediately after the resource. Nothing is wasted.
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 zero-parameter read-only list tool with no output schema, the description is minimally sufficient to call it correctly. It stops short of describing what a 'schema' entry contains or how results are returned, which 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?
The tool takes zero parameters, so the schema has nothing to document and the baseline of 4 applies. There is no parameter semantics for the description to add.
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 (List) and resource (Oracle schemas/users), clearly distinguishing it from sibling list_* tools that target other object types. It doesn't explicitly name alternatives, but the resource 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 offers no when-to-use guidance, no prerequisites, and no mention of alternatives or related tools like search_objects or list_objects. An agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sequencesA
List sequences with their range, increment, last number, cycle flag and cache size (queried from ALL_SEQUENCES, not DBA_SEQUENCES). cache_size > 0 means values are pre-allocated, so gaps can appear after a crash or rollback. For a single sequence's full metadata (including order_flag) use get_sequence_info. Optional schema filter.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden, and it delivers real behavioral context: data comes from ALL_SEQUENCES rather than DBA_SEQUENCES (implying visibility is limited to what the session can see), and cache_size > 0 implies pre-allocated values that can leave gaps after a crash or rollback. It stops short of stating privilege requirements, result ordering, or any row-limit/pagination 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?
Front-loads the returned fields, then adds the operational caveat about cache size, then the disambiguation to the sibling. Three dense sentences 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?
For a read-only list tool with no output schema or annotations, the description covers returned columns, data-source scoping, and sibling routing. Minor omissions remain around privileges/visibility limits of ALL_SEQUENCES and result ordering, but nothing blocks a correct call.
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?
Only one parameter, and schema_description_coverage is 100% with the schema already stating 'Omit to search all schemas.' The description's 'Optional schema filter' merely restates this, 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?
States a specific verb ('List') plus resource ('sequences') and enumerates the exact columns returned (range, increment, last number, cycle flag, cache size), and names the sibling it is not (get_sequence_info). An agent can distinguish it from get_sequence_info and create_sequence without opening any 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?
Explicitly routes the agent: use get_sequence_info for a single sequence's full metadata including order_flag, and this tool for a list. It also flags that the schema filter is optional, so the agent knows a no-arg call is valid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subpartitionsB
List subpartitions of a composite-partitioned table. Requires schema and table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It correctly implies a read-only listing and surfaces the useful constraint that the target must be a composite-partitioned table, but says nothing about pagination, result size, 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 short sentences, front-loaded with the action and scope, with no filler. Efficient, though the second sentence's prerequisite framing is slightly redundant with 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 two-parameter read-only list tool this is close to sufficient, but with no output schema the description could have described the shape of the returned subpartition listing. It is adequate rather than 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 coverage is 100%, so both parameters are already documented in the schema, including the note that schema is optional and should be omitted rather than guessed. The description's 'Requires schema and table' actually understates this, adding no meaning beyond the schema and mildly conflicting with the optionality.
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 ('List subpartitions') and narrows scope to composite-partitioned tables, which distinguishes it from the sibling list_partitions without naming it explicitly. The resource name itself carries the differentiation, but no direct contrast is drawn.
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?
Only guidance is 'Requires schema and table,' which is a prerequisite rather than when-to-use guidance. No mention of when to prefer this over list_partitions or list_ind_partitions, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_synonymsB
List private and public synonyms with their resolved target owner/name and optional DB link. Optional schema and LIKE name pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| namePattern | No | LIKE pattern for the synonym name. Defaults to '%'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it helpfully discloses the shape of the return (resolved target owner/name plus DB link) and confirms the filters are optional. It does not state permission requirements, result-size limits, or whether the listing is scoped to the connected user, which for a dictionary-wide listing is a meaningful omission.
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 compact sentences, front-loaded with the resource and its return content. Slightly duplicative in that the trailing parameter sentence restates scope already implied, but nothing is wasted.
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?
Only two optional parameters, no output schema, and no nested structures, so the description's coverage of resource, return fields, and optional filters is nearly sufficient. Missing only edge behavior (permissions, limits) to be fully self-contained.
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 both parameters are documented in-schema with defaults ('%') and omission semantics, so the schema does the heavy lifting. The description restates 'optional schema and LIKE name pattern' and adds nothing about pattern syntax or case sensitivity, making the baseline 3 correct.
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 ('List') and resource ('private and public synonyms') and adds the informative detail that results include the resolved target owner/name and DB link. It implicitly separates itself from the sibling create_synonym by being read-only, but never names an alternative or clarifies scope boundaries versus search_objects.
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 (browse synonyms) but gives no when-to-use guidance, no exclusions, and no pointer to alternatives such as search_objects or get_ddl for a single synonym. An agent gets no help deciding between this and the other list_* sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesB
List tables. Supports an optional schema and a case-insensitive LIKE name pattern (use '%' and '_' wildcards; defaults to '%').
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| namePattern | No | LIKE pattern for the table name, e.g. 'EMP%' or '%EMP%'. Defaults to '%'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the matching semantics: case-insensitive LIKE, '%'/'_' wildcards, and a default of '%'. It says nothing about result ordering, size limits, whether system/owned schemas are included, or whether views are excluded, which are the behaviors an agent would need for a listing 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 sentences, zero filler, and the core purpose is front-loaded before the filter mechanics. Every clause conveys a usable fact.
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 two-optional-parameter read-only listing tool with a fully documented schema and no output schema, the description is adequate but thin. It omits result scope (all schemas vs current user, system objects, views) and any indication of what each result entry contains, which matters given how many sibling list_* tools exist.
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 in the schema, including the LIKE example and the '%' default. The description's only genuinely additive detail is that matching is case-insensitive; the rest repeats the schema, 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?
States a specific verb and resource ('List tables') and describes the filtering capability, so the agent knows exactly what the tool returns at a coarse level. It never names or distinguishes itself from the many similar siblings (list_views, list_objects, list_external_tables, list_materialized_views), which is the only thing keeping it from 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?
There is no when-to-use guidance at all: nothing says to prefer this over list_objects, search_objects, or list_views, and no exclusions (e.g. system schemas) are stated. The only conditional behavior mentioned is the optional schema, which is really a parameter fact 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.
list_top_sqlB
Top-N SQL statements ordered by buffer_gets (default), disk_reads, elapsed_time, executions or cpu_time. Returns sql_id, executions, gets/reads/elapsed and a 200-char SQL preview.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of rows to return (default 10). | |
| orderBy | No | Sort key: 'buffer_gets' (default), 'disk_reads', 'elapsed_time', 'executions', 'cpu_time'. |
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 usefully discloses the return shape (sql_id, executions, gets/reads/elapsed, 200-char preview), but omits whether the operation is read-only, what time/AWR window is scanned, and any cost or permission implications.
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 tight sentences with the ordering options and the return fields front-loaded; nothing is padded. It is efficient, though the second sentence could have been leveraged for missing behavioral context.
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 no annotations, the description does describe the returned columns, which is helpful. However, for a performance-ranking tool the time scope (AWR window vs. since startup) and the read-only nature are unstated, leaving meaningful 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 both limit and orderBy are already fully documented with defaults and the enum of keys. The description restates the same ordering options and the top-N behavior without adding syntax, format, or boundary details 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 and resource (list top-N SQL statements) plus the ordering dimension, and names the candidate sort keys. An agent can tell this reports SQL performance ranking, though it draws no explicit line against siblings like get_wait_events or get_session_sql_text.
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 by the top-SQL framing (performance triage) but the description never states when to reach for it versus alternatives such as explain_plan, run_sql_tuning_advisor, or list_active_sessions. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_triggersA
List triggers with their type, triggering event, target table and status. Optional schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose what the listing returns (type, triggering event, target table, status), which is real behavioral value, but it says nothing about volume, pagination, whether disabled triggers are included despite the status column, or required privileges for reading the trigger catalog.
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 resource and returned fields before the terse parameter note. Nothing is wasted, though the fragment 'Optional schema.' is partially redundant with the schema description and could have carried more 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 one-parameter list tool with no output schema, the field enumeration effectively substitutes for a return-value description, so an agent knows what it gets back. Remaining gaps (ordering, disabled-trigger inclusion, privileges) are minor.
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 the single 'schema' parameter is fully documented in the schema itself ('Omit to search all schemas'), so the description's 'Optional schema.' only restates optionality. Baseline 3 applies when 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?
States a specific verb ('List') and resource ('triggers') and goes further by enumerating the returned fields (type, triggering event, target table, status). It is clearly distinguishable from sibling list_* tools such as list_sequences or list_views by resource alone, though it never explicitly names or contrasts an 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?
'Optional schema.' implies the usage pattern of scoping to one owner or omitting to scan everything, and there is no sibling alternative for triggers to route the agent away from. However, there is no explicit when-to-use statement, no note about what omitting the schema returns in practice, and no mention of disabled/invalid triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_typesA
List user-defined Oracle types with their typecode, attribute count, methods and supertype.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It discloses the return surface (typecode, attribute count, methods, supertype) and 'List' implies a safe read, but it says nothing about scope behavior (e.g. PUBLIC vs user types) or permissions beyond what the schema note already states.
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 tight sentence with the resource and returned fields front-loaded; 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?
With no output schema, the description usefully enumerates the fields returned, which an agent needs to decide whether to call it. For a low-complexity, single-optional-param read tool this is nearly sufficient, though the absence of any usage routing leaves a small 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?
Only one optional parameter and schema description coverage is 100%, so the schema already documents the 'schema' filter including the omit-to-search-all behavior. The description adds no additional parameter semantics, which matches the baseline 3 for fully covered schemas.
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 ('List') and a specific resource ('user-defined Oracle types') and enumerates the returned attributes, which distinguishes it from the many list_* siblings such as list_tables or list_views. It does not explicitly contrast itself with adjacent object-listing tools like list_objects or search_objects.
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 only implied by the verb 'List'; the description gives no when-to-use, when-not-to-use, or pointer to alternative tools that also enumerate object metadata. An agent can infer the intent, but nothing routes it here over search_objects or list_objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unused_indexesA
List indexes with their columns and best-effort usage information. The likely_unused flag is YES/NO when index monitoring is enabled, otherwise UNKNOWN. Definitive 'unused' answers require a DBA to run ALTER INDEX ... MONITORING USAGE.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (table owner). Omit rather than guess: defaults to the schema of the current session. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that usage data is 'best-effort', explains the YES/NO/UNKNOWN tri-state of likely_unused, and names the external dependency (ALTER INDEX ... MONITORING USAGE) needed for definitive answers. It does not explicitly state that this is a read-only operation, which is a minor remaining 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?
Three tightly packed sentences: purpose first, then flag semantics, then the limitation. Every sentence earns its place and the most important caveat is placed alongside the flag it qualifies.
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 listing tool with no output schema, the description adequately covers what is returned (indexes, columns, usage info) and how to read the key flag. It could be slightly more complete about the monitoring requirement being per-connection or about result volume, but nothing essential to 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% for the single optional 'schema' parameter, including the 'omit rather than guess' guidance, so the schema already does the heavy lifting. The description adds no parameter-level detail beyond what the schema provides, making the baseline 3 correct.
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 precise verb and resource ('List indexes with their columns and best-effort usage information'), which is more specific than the sibling list_indexes by promising usage data. It does not explicitly name or contrast with list_indexes, so the differentiation must be inferred from the 'usage information' wording.
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's use case (assessing whether indexes are unused) and warns that definitive answers require DBA-run index monitoring, which is a real usage caveat. However, it never says when to pick this over list_indexes or other index-related siblings, leaving the routing decision implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewsA
List views. Optional schema and case-insensitive LIKE name pattern (defaults to '%').
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema (owner) name. Omit to search all schemas. | |
| namePattern | No | LIKE pattern for the view name. Defaults to '%'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the matching behavior (case-insensitive LIKE) and the wildcard default. It does not state that this is a read-only operation, whether results are paginated, or any privilege requirements, leaving real gaps for a no-annotation 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 tight sentences with the resource statement front-loaded and the filter semantics second; nothing is wasted. The phrasing is slightly telegraphic ("Optional schema and case-insensitive LIKE name pattern") but still parseable.
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 two-optional-parameter read tool with a fully documented schema and no output schema, the description covers what is needed to invoke it correctly. It stops short of describing the shape of the returned view list, which would have closed the last 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 coverage is 100%, so the baseline is 3. The description adds one genuinely new detail beyond the schema — that namePattern matching is case-insensitive — but repeats the '%' default already documented in the schema, so the net added value is small.
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 ("List views") and immediately scopes it with the two available filters. It does not, however, distinguish itself from near-siblings such as list_materialized_views or list_tables, so an agent must infer the boundary from the name alone.
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 by explaining that both filters are optional and that the name pattern defaults to '%', which tells the agent a bare call lists everything. There is no explicit when-to-use guidance and no routing away from list_materialized_views or search_objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oracle_mcp_health_reportA
One-shot readiness check: connectivity, database version, catalog-role, invalid objects, and server configuration (max-rows, query-timeout, audit). Returns an aggregated health report for quick self-diagnosis. WHEN TO CALL: only when the user explicitly asks for a health/readiness check; do NOT call as a preamble before other work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 that the operation is a non-mutating aggregated diagnostic and names the checks performed. It does not mention permissions required or whether the check can be slow/rate-limited, which leaves a small gap for a no-annotation 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?
Front-loaded with the verb and scope, then the return value, then the call condition. Every sentence earns its place with no redundant restatement of the name.
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 zero-parameter diagnostic with no output schema and no annotations, the description supplies the full picture: what is checked, what is returned (an aggregated health report for self-diagnosis), and when it should and should not be invoked.
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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond confirming it is a self-contained one-shot call.
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?
Opens with a specific verb+resource ('One-shot readiness check') and enumerates exactly what it inspects: connectivity, database version, catalog-role, invalid objects, and server configuration. This clearly distinguishes it from narrower siblings like test_connection (connectivity only) and get_database_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?
Gives an explicit WHEN TO CALL trigger ('only when the user explicitly asks for a health/readiness check') and a negative exclusion ('do NOT call as a preamble before other work'). This is precisely the routing guidance an agent needs against the many list_*/get_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_queryA
Run a single SELECT statement and return the result set. Optional offset/limit enable stateless pagination (non-deterministic without an ORDER BY in the SQL). Non-SELECT statements or privilege failures return an Oracle error string. NOTE: recursive constructs like CONNECT BY and WITH (CTE) may be rejected by the SQL parser; for set differences use MINUS, and for row-number/gap problems prefer computing on the returned result set rather than relying on recursive SQL.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single SELECT statement. | |
| limit | No | Maximum rows to return for this page. Capped at the server max-rows. Defaults to the server max. | |
| offset | No | 0-based row offset for pagination. Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that offset/limit pagination is non-deterministic without an ORDER BY, that failures surface as Oracle error strings rather than exceptions, and that recursive constructs may be rejected by the parser. It does not describe concurrency, timeouts, or privilege requirements beyond the failure hint.
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 paragraph with the core purpose front-loaded, followed by pagination caveats and workarounds. Every sentence is substantive, though the recursive-construct workaround sentence is dense and could be trimmed.
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 query tool with no annotations, no output schema, and full parameter coverage, the description covers return behavior, error behavior, and pagination limits adequately. Remaining gaps (timeouts, row-size limits) are minor.
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, but the description adds real meaning on top of the schema by explaining that offset/limit enable stateless pagination and that ordering must come from the SQL itself for determinism. That non-determinism caveat is not captured 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?
States a specific verb and resource: 'Run a single SELECT statement and return the result set.' The 'SELECT' restriction cleanly separates it from the many metadata list_* siblings and from the execute_dml* tools, though it never names an alternative 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?
Offers substantive when-it-fails guidance (non-SELECT statements and privilege failures return an Oracle error string) and steers around parser limits by recommending MINUS for set differences and client-side computation for row-number/gap problems. It lacks explicit routing to sibling tools (e.g. count_rows, get_sample_data), 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.
run_sql_tuning_advisorA
Run Oracle's SQL Tuning Advisor (DBMS_SQLTUNE) on a statement and return its TEXT report with recommendations (indexes, SQL profiles, statistics, rewrites). Requires the ADVISOR privilege; a missing privilege is surfaced as an error result. Reports progress to clients that pass a progress token.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL statement to tune. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it names the underlying DBMS_SQLTUNE package, states the ADVISOR privilege requirement, discloses that a missing privilege is surfaced as an error result, and notes progress reporting via a progress token. It still omits runtime/duration expectations for what is typically a long-running analysis and does not explicitly confirm the operation is read-only.
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, front-loaded with purpose followed by privilege and progress behavior; every sentence carries information and none is redundant. Slightly less tight than a model example because the progress-token sentence is niche, but it is still informative rather than 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 tool with no annotations and no output schema, the description supplies the missing context an agent needs: output form, privilege requirement, error behavior on missing privilege, and async progress signaling. The main remaining gap is any indication of expected duration or timeout handling for a long-running advisor call.
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% for the single 'sql' parameter, so the baseline is 3. The description's phrase 'on a statement' loosely implies a single SQL statement is expected, but it adds no syntax, size, or statement-type constraints beyond what the schema already documents.
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 ('Run Oracle's SQL Tuning Advisor (DBMS_SQLTUNE) on a statement') and enumerates the output ('TEXT report with recommendations (indexes, SQL profiles, statistics, rewrites)'). It is clear what the tool does, but it never distinguishes itself from siblings like explain_plan or suggest_index, leaving the agent to infer the boundary.
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 only implied: the agent can infer it is for tuning a specific SQL statement, and the ADVISOR privilege prerequisite is stated. However, there is no explicit when-to-use guidance and no mention of when to prefer this over explain_plan or suggest_index, which are the obvious alternatives in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_objectsB
Search database objects by a case-insensitive LIKE name pattern, optionally filtered by object type.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional object type filter, e.g. 'TABLE', 'VIEW'. | |
| namePattern | Yes | LIKE pattern for the object name, e.g. 'EMP%' or '%ORDER%'. |
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 that matching is case-insensitive and LIKE-based, which is genuinely useful, but says nothing about schema scope, what object types are returned when 'type' is omitted, result limits, or whether anything can be mutated.
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, front-loaded with the verb and the matching semantics, with the optional filter trailing. Nothing is wasted and there is 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 small two-parameter read tool with no output schema, most of what an agent needs is present. The gaps are the default scope when 'type' is omitted and which schemas are searched — modest but real omissions for a search over a catalog with the sibling breadth shown.
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 with examples. The description restates the LIKE pattern and the optional type filter without adding syntax, defaults, or edge-case behavior 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?
Specific verb+resource: 'search database objects' with the matching mechanism (case-insensitive LIKE on name) spelled out. This distinguishes it from the many list_* siblings, which enumerate rather than pattern-match, though no sibling is 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?
Usage is implied by the mechanics — you use it when you have a partial name and want pattern matching instead of exhaustive listing. It never states when to prefer it over list_objects, list_tables, or table_exists, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_indexA
Analyse a SQL statement via EXPLAIN PLAN and, when a table is read by full scan, propose a CREATE INDEX statement. Returns the recommended DDL as text; it is never executed. Apply it manually only after DBA review.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL statement to analyse (typically SELECT; DML is also supported). | |
| targetTable | No | Optional table name to focus on when several tables are scanned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden and does well: it states the recommendation is returned as text and is never executed, and that manual DBA review is required. It omits operational details such as PLAN_TABLE/permission prerequisites for EXPLAIN PLAN or what happens on unsupported statements.
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 tight sentences with zero filler; the core action and the crucial 'never executed' guarantee come first, followed by the human-review constraint.
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 advisory tool with no output schema, the description covers the return value (DDL text) and the safety posture, which is what an agent most needs. Minor gaps remain around prerequisites for EXPLAIN PLAN, 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 description coverage is 100%, so both parameters are already documented in the schema; the description adds no extra syntax or format guidance for 'sql' or 'targetTable'. Baseline 3 applies when 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?
States a specific verb+resource: analyse a SQL statement via EXPLAIN PLAN and propose a CREATE INDEX DDL when a full scan is detected. It is clearly distinguishable from sibling create_index (which executes) and explain_plan (which only plans), so an agent can route correctly.
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 a clear triggering condition ('when a table is read by full scan') and a post-call workflow ('Apply it manually only after DBA review'). It does not explicitly name alternatives such as explain_plan or run_sql_tuning_advisor for related tuning tasks, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
table_existsA
Return true if a table exists (checked via ALL_TABLES; views are NOT considered). Use this instead of run_query {SELECT 1 FROM ALL_TABLES WHERE ...}.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does state the return type (boolean) and the non-obvious semantic that views are excluded, which is the main behavioral trap. It does not cover Oracle name-matching behavior (case sensitivity) or permission/visibility effects on ALL_TABLES, which are real caveats for a lookup 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 sentences, front-loaded with the outcome and mechanism, followed by the alternative to use. No filler or restatement of the name.
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 two-parameter read-only predicate tool with no output schema, the description supplies the return value and the key exclusion rule; the schema covers the optional schema param. Only minor gaps remain around name-matching conventions.
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 in the schema, including the default-to-current-schema hint and the 'omit rather than guess' guidance. The description adds nothing beyond the schema for parameters, 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?
States a specific verb+resource ('Return true if a table exists') plus the exact resolution mechanism (ALL_TABLES) and an explicit negative scope (views are NOT considered). An agent can distinguish it from list_tables, describe_table, and search_objects without opening any 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?
Explicitly names the alternative it replaces ('Use this instead of run_query {SELECT 1 FROM ALL_TABLES WHERE ...}') and gives the exact pattern being superseded, so the routing decision is unambiguous. The views exclusion also implicitly states when its answer will be false despite a visible object.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionA
Verify connectivity to Oracle and report the database version, name, current user, current schema and instance name. WHEN TO CALL: only when the user explicitly asks to verify the connection or diagnose reachability; do NOT call as a preamble before answering a query about tables, data, or schema objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the behavioral burden. It discloses the operation's output surface (version, database name, user, schema, instance) and implicitly frames it as a non-mutating diagnostic, but says nothing about failure behavior (e.g., whether an unreachable DB raises an error or returns a status field) or timeout characteristics.
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, zero filler. The purpose and its output payload lead, and the call-condition guidance follows immediately as a labeled block, making the front-loaded structure easy to scan.
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 no parameters, the description must supply the return surface itself, and it does so by naming the five reported values. Combined with the explicit usage boundary, an agent has everything needed to call this correctly and to avoid calling it unnecessarily.
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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate beyond confirming no input is required, which the empty schema already shows.
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+resource ('Verify connectivity to Oracle') and enumerates exactly what is reported: database version, name, current user, current schema and instance name. This cleanly separates it from the introspection-heavy siblings (list_*, get_*, describe_*) that query objects rather than the connection 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?
It gives an explicit positive condition ('only when the user explicitly asks to verify the connection or diagnose reachability') and an explicit negative ('do NOT call as a preamble before answering a query about tables, data, or schema objects'). This is precisely the routing guidance an agent needs to avoid over-calling a connectivity probe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_fk_integrityA
Check one or all foreign keys of a table and report orphan rows (child rows whose parent is missing). Returns one entry per FK with constraint name, child/parent columns and the orphan count; an empty list means referential integrity is intact.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name. | |
| schema | No | Schema (owner) of the table. Optional — defaults to the server's current schema; omit rather than guess. | |
| constraint | No | Optional constraint-name filter; omit to check every FK on the table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the return shape (one entry per FK, constraint name, child/parent columns, orphan count) and the empty-list meaning. It omits any note on read-only safety, permissions, or cost when scanning large tables.
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, front-loaded with the action, then the return contract. No filler, and the empty-list semantics are packed into the same 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?
No output schema exists, so the description must describe returns, and it does so adequately. It is nearly complete for a 3-param validation tool, missing only error behavior and performance expectations on large tables.
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. The description's 'one or all foreign keys'/'omit' phrasing only echoes the schema's meaning without adding format or syntax detail, 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?
States a specific verb+resource ('Check ... foreign keys of a table') and the exact outcome ('report orphan rows'). The orphan-detection framing cleanly distinguishes it from siblings like list_constraints and get_fk_graph.
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?
'Check one or all foreign keys' plus the 'omit to check every FK' note implies the scope choice, but there is no explicit when-to-use guidance or named alternative (e.g. vs get_fk_graph or list_constraints). Usage is inferable only.
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.
75 tool updates
v2.16.3- First observed
call_procedure - First observed
comment_on_column - First observed
comment_on_table - First observed
count_rows - First observed
create_index - First observed
create_mview_log - First observed
create_or_replace_view - First observed
create_sequence - First observed
create_synonym - First observed
describe_plsql - First observed
describe_table - First observed
execute_dml - First observed
execute_dml_preview - First observed
execute_dml_rollback_first - First observed
explain_plan - First observed
find_duplicates - First observed
find_free_id - First observed
get_column_stats - First observed
get_database_info - First observed
get_db_time_model - First observed
get_ddl - First observed
get_dependency_graph - First observed
get_fk_graph - First observed
get_histogram - First observed
get_instance_info - First observed
get_next_sequence_value - First observed
get_parameter - First observed
get_plsql_errors - First observed
get_sample_data - First observed
get_sequence_info - First observed
get_session_longops - First observed
get_session_privs - First observed
get_session_roles - First observed
get_session_sql_text - First observed
get_system_stats - First observed
get_table_stats - First observed
get_wait_events - First observed
list_active_sessions - First observed
list_blocked_sessions - First observed
list_constraints - First observed
list_datafile_io - First observed
list_db_links - First observed
list_dependencies - First observed
list_directories - First observed
list_external_tables - First observed
list_ind_partitions - First observed
list_indexes - First observed
list_invalid_objects - First observed
list_lob_columns - First observed
list_locks - First observed
list_materialized_views - First observed
list_mview_logs - First observed
list_objects - First observed
list_partitions - First observed
list_procedures - First observed
list_scheduler_job_runs - First observed
list_scheduler_jobs - First observed
list_schemas - First observed
list_sequences - First observed
list_subpartitions - First observed
list_synonyms - First observed
list_tables - First observed
list_top_sql - First observed
list_triggers - First observed
list_types - First observed
list_unused_indexes - First observed
list_views - First observed
oracle_mcp_health_report - First observed
run_query - First observed
run_sql_tuning_advisor - First observed
search_objects - First observed
suggest_index - First observed
table_exists - First observed
test_connection - First observed
validate_fk_integrity
TDQS
Scored across 75 tools
75 tools create many overlapping listing and diagnostic tools (e.g., list_objects vs list_tables vs search_objects; get_table_stats vs get_column_stats). Descriptions help distinguish most, but the sheer volume and multiple entry points for similar tasks make misselection likely.
Nearly all tools use snake_case with a verb_noun pattern (list_*, get_*, create_*). Minor deviations like table_exists and oracle_mcp_health_report break the pattern slightly.
75 tools is far beyond the 3-15 range for a well-scoped server. While the domain is complex, this many tools creates cognitive overload and violates the rubric's extreme mismatch threshold (50+).
Extensive read/metadata coverage and some create/DML, but missing core DDL operations like create/drop/alter table, grant/revoke, and transaction control. Agents will hit dead ends for many administrative tasks.
Maintenance
Related MCP Connectors
CloudOracle - 14-tool multi-cloud compliance MCP: AWS, Azure, GCP posture, IAM, configs.
Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
61 text, security, converter, calculator, and PDF tools -- callable via MCP on one host.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA read-only MCP server for exploring and querying Oracle schemas safely. Provides tools for table listing, schema description, column search, and validated SELECT execution.2-
- FlicenseAqualityBmaintenanceA production-grade MCP server for Oracle database interaction, providing 11 tools for full CRUD, transactions, execution plans, and comprehensive safety guardrails.11-
- FlicenseNot gradedqualityCmaintenanceMCP server that connects to Oracle databases, enabling execution of registered and ad-hoc SQL queries, retrieval of business object details, and discovery of capabilities over stdio, HTTP/SSE, and REST transports.-
- AlicenseAqualityAmaintenanceEnables Oracle Database schema introspection and SQL execution over stdio, letting MCP hosts list tables, describe columns, and run SQL—read-only by default with opt-in writes.36 npmMIT