Skip to main content
Glama

call_procedure

Execute Oracle PL/SQL procedures, functions, or package subprograms with typed IN/OUT/INOUT arguments, returning scalar and SYS_REFCURSOR row-array results.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argsYesArguments as a JSON array: [{"name":"P","direction":"IN|OUT|INOUT","dataType":"NUMBER","value":1}].
nameYesObject name; optionally qualified as PKG.PROC for a package subprogram.
schemaNoSchema (owner) of the object. Optional — defaults to the server's current schema; omit rather than guess.
isFunctionNoSet true if the object is a function (registers a return slot and populates returnValue).
returnTypeNoOracle return type for functions (e.g. NUMBER, VARCHAR2, REF CURSOR). Ignored for procedures.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.16.3

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.