Skip to main content
Glama

Search ABAP repository

abap_search
Read-only

Search ABAP objects by name, find where-used references, trace call graphs, or scan source text across packages to locate code and dependencies.

Instructions

Find objects by name pattern (mode=objects, wildcards *), list consumers (mode=where_used; 20+ seconds on wide fan-in — narrow by type/query first), walk multiple levels of callers or callees (mode=call_graph, direction=callers|callees, depth<=4), or scan source text (mode=source; hits grouped per object, needs the fluid API and a package/objects scope).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
maxNoDefault 50 rows (mode=objects/where_used), 100 hits (mode=source), or 50 children per node (mode=call_graph); narrowing `query` (not lowering `max`) is what makes a broad call cheaper.
modeNoDefault "objects". "source": raw source-text scan (literal/regex; needs the fluid API; also matches strings, comments and dead code — prefer "where_used" for real static references). "call_graph": multiple levels of callers or callees.
typeNoADT type filter (mode=objects/where_used/call_graph only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SHLP SRVB SRVD TABL TRAN TTYP TYPE VIEW XSLT; or a full code, e.g. "CLAS/OC".
userNoinactive=true: list another user's inactive worklist instead of your own.
depthNomode=call_graph: levels to expand. Default 2, max 4.
queryNoName pattern (mode=objects), target object (mode=where_used/call_graph), or literal/regex text (mode=source). Optional with inactive=true (then a name pattern filter, wildcards `*`).
regexNomode=source: treat `query` as a PCRE pattern instead of literal text.
typesNomode=source: object types to scan. One of: PROG CLAS INTF FUGR DDLS. Default: all five.
objectsNomode=source: object-name pattern (wildcards `*`), e.g. "ZCL_MY_*". Alternative/addition to `packages`.
inactiveNomode=objects: list the INACTIVE objects (your own inactive worklist, per user in ADT) that belong to `packages` (required, max 5). Optional `query` (name pattern), `type` filter, `include_subpackages`, `user`.
packagesNomode=source: package scope (TADIR-DEVCLASS). Required unless `objects` is given.
directionNomode=call_graph: "callers" (who calls this, default) or "callees" (what this calls).
case_sensitiveNomode=source: default false.
include_commentsNomode=source: also match inside comments (heuristic, line-local). Default false.
include_subpackagesNomode=source: also scan every package transitively under `packages` (TDEVC-PARENTCL).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.6.36
    • addedInput schema / properties / inactive
      Added value: +{
      +  "description": "mode=objects: list the INACTIVE objects (your own inactive worklist, per user in ADT) that belong to `packages` (required, max 5). Optional `query` (name pattern), `type` filter, `include_subpackages`, `user`.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Name pattern (mode=objects), target object (mode=where_used/call_graph), or literal/regex text (mode=source)."New value: +"Name pattern (mode=objects), target object (mode=where_used/call_graph), or literal/regex text (mode=source). Optional with inactive=true (then a name pattern filter, wildcards `*`)."
    • addedInput schema / properties / user
      Added value: +{
      +  "description": "inactive=true: list another user's inactive worklist instead of your own.",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
  2. Changed1 schema field changedv0.6.25
    • changedInput schema / properties / mode / description
      Previous value: -"Default \"objects\". \"source\" scans raw source text (literal/regex, any line) and needs the fluid API; prefer \"where_used\" when you want real static references to one object, since a text scan also matches strings, comments and dead code. \"call_graph\" walks multiple levels of callers or callees instead of just one."New value: +"Default \"objects\". \"source\": raw source-text scan (literal/regex; needs the fluid API; also matches strings, comments and dead code — prefer \"where_used\" for real static references). \"call_graph\": multiple levels of callers or callees."
  3. Changed7 schema fields changedv0.6.11
    • addedInput schema / properties / depth
      Added value: +{
      +  "description": "mode=call_graph: levels to expand. Default 2, max 4.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • addedInput schema / properties / direction
      Added value: +{
      +  "description": "mode=call_graph: \"callers\" (who calls this, default) or \"callees\" (what this calls).",
      +  "enum": [
      +    "callers",
      +    "callees"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / max / description
      Previous value: -"Default 50 rows (mode=objects/where_used) or 100 hits (mode=source); narrowing `query` (not lowering `max`) is what makes a broad call cheaper."New value: +"Default 50 rows (mode=objects/where_used), 100 hits (mode=source), or 50 children per node (mode=call_graph); narrowing `query` (not lowering `max`) is what makes a broad call cheaper."
    • changedInput schema / properties / mode / description
      Previous value: -"Default \"objects\". \"source\" scans raw source text (literal/regex, any line) and needs the fluid API; prefer \"where_used\" when you want real static references to one object, since a text scan also matches strings, comments and dead code."New value: +"Default \"objects\". \"source\" scans raw source text (literal/regex, any line) and needs the fluid API; prefer \"where_used\" when you want real static references to one object, since a text scan also matches strings, comments and dead code. \"call_graph\" walks multiple levels of callers or callees instead of just one."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "objects",
      -  "where_used",
      -  "source"
      -]New value: +[
      +  "objects",
      +  "where_used",
      +  "source",
      +  "call_graph"
      +]
    • changedInput schema / properties / query / description
      Previous value: -"Name pattern (mode=objects), target object (mode=where_used), or literal/regex text (mode=source)."New value: +"Name pattern (mode=objects), target object (mode=where_used/call_graph), or literal/regex text (mode=source)."
    • changedInput schema / properties / type / description
      Previous value: -"ADT type filter (mode=objects/where_used only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SHLP SRVB SRVD TABL TRAN TTYP TYPE VIEW XSLT; or a full code, e.g. \"CLAS/OC\"."New value: +"ADT type filter (mode=objects/where_used/call_graph only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SHLP SRVB SRVD TABL TRAN TTYP TYPE VIEW XSLT; or a full code, e.g. \"CLAS/OC\"."
  4. Changed1 schema field changedv0.6.2
    • changedInput schema / properties / type / description
      Previous value: -"ADT type filter (mode=objects/where_used only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SRVB SRVD TABL TTYP TYPE XSLT; or a full code, e.g. \"CLAS/OC\"."New value: +"ADT type filter (mode=objects/where_used only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SHLP SRVB SRVD TABL TRAN TTYP TYPE VIEW XSLT; or a full code, e.g. \"CLAS/OC\"."
  5. Changed12 schema fields changedv0.5.14
    • addedInput schema / properties / case_sensitive
      Added value: +{
      +  "description": "mode=source: default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_comments
      Added value: +{
      +  "description": "mode=source: also match inside comments (heuristic, line-local). Default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_subpackages
      Added value: +{
      +  "description": "mode=source: also scan every package transitively under `packages` (TDEVC-PARENTCL).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / max / description
      Previous value: -"Default 50 rows; narrowing `query` (not lowering `max`) is what makes a broad call cheaper."New value: +"Default 50 rows (mode=objects/where_used) or 100 hits (mode=source); narrowing `query` (not lowering `max`) is what makes a broad call cheaper."
    • changedInput schema / properties / mode / description
      Previous value: -"Default \"objects\"."New value: +"Default \"objects\". \"source\" scans raw source text (literal/regex, any line) and needs the fluid API; prefer \"where_used\" when you want real static references to one object, since a text scan also matches strings, comments and dead code."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "objects",
      -  "where_used"
      -]New value: +[
      +  "objects",
      +  "where_used",
      +  "source"
      +]
    • addedInput schema / properties / objects
      Added value: +{
      +  "description": "mode=source: object-name pattern (wildcards `*`), e.g. \"ZCL_MY_*\". Alternative/addition to `packages`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / packages
      Added value: +{
      +  "description": "mode=source: package scope (TADIR-DEVCLASS). Required unless `objects` is given.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Name pattern (mode=objects) or target object (mode=where_used)."New value: +"Name pattern (mode=objects), target object (mode=where_used), or literal/regex text (mode=source)."
    • addedInput schema / properties / regex
      Added value: +{
      +  "description": "mode=source: treat `query` as a PCRE pattern instead of literal text.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"ADT type filter. One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SRVB SRVD TABL TTYP TYPE XSLT; or a full code, e.g. \"CLAS/OC\"."New value: +"ADT type filter (mode=objects/where_used only). One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SRVB SRVD TABL TTYP TYPE XSLT; or a full code, e.g. \"CLAS/OC\"."
    • addedInput schema / properties / types
      Added value: +{
      +  "description": "mode=source: object types to scan. One of: PROG CLAS INTF FUGR DDLS. Default: all five.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
  6. Changed1 schema field changedv0.3.2
    • changedInput schema / properties / type / description
      Previous value: -"ADT type filter. One of: BDEF CLAS DDLS DDLX DEVC DOMA DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SRVB SRVD TABL TTYP XSLT; or a full code, e.g. \"CLAS/OC\"."New value: +"ADT type filter. One of: BDEF CLAS DCLS DDLA DDLS DDLX DEVC DOMA DRUL DTEL ENHO ENHS ENQU FUGR INTF MSAG PROG SRVB SRVD TABL TTYP TYPE XSLT; or a full code, e.g. \"CLAS/OC\"."
  7. First observedv0.3.0

TDQS

A4.6/5.0
Behavior5/5

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

With readOnlyHint and openWorldHint already present, the description adds real behavioral value: where_used can take 20+ seconds on wide fan-in and should be narrowed, source-mode hits are grouped per object, and fluid API plus a package/objects scope are required. Nothing contradicts the annotations.

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

Conciseness5/5

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

Despite being one long sentence, the description is tightly organized by mode and front-loads the main action. Every clause adds information, and there is no repeated schema content or 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?

For a 15-parameter, mode-heavy tool with no output schema, the description gives a strong high-level map of modes, performance caveats, and prerequisites. The main gap is that return shapes are only hinted at ('list consumers', 'hits grouped per object') rather than explicitly described, which matters more because no output schema is available.

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?

The schema already covers 100% of parameters in detail, so the baseline is 3. The tool description adds mode-level semantics beyond the schema, such as 'wildcards *', 'depth<=4', 'direction=callers|callees', and a performance warning that reinforces the schema's own advice about narrowing query rather than lowering max.

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

Purpose5/5

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

The description names a specific verb for each mode ('Find objects', 'list consumers', 'walk multiple levels of callers or callees', 'scan source text') and identifies the resource as the ABAP repository. It clearly distinguishes the four modes within the tool, so an agent can tell what abap_search offers 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.

Usage Guidelines4/5

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

Each mode is given a concrete use context: name-pattern lookup, consumer listing with a performance warning, call-graph traversal, and source text scanning with a prerequisite. It does not explicitly name sibling alternatives like abap_read or abap_fluid, but it gives enough mode-level guidance for typical routing decisions.

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