Skip to main content
Glama

ARC-1 — SAP ADT MCP Server

ARC-1 (pronounced arc one [ɑːrk wʌn]) — Enterprise-ready MCP server for SAP ABAP systems. Secure by default, deployable to BTP or on-premise, and hardened with large unit/integration/E2E test coverage.

ARC-1 connects AI assistants (Claude, GitHub Copilot, Copilot Studio, and any MCP client) to SAP systems via the ADT REST API. It ships as an npm package and Docker image.

Test CodeQL Dependency Review

Full Documentation | Quickstart | Tool Reference | ARC-1 Updates | Blog Series

📬 Stay current with ARC-1 — get major releases, upgrade and security notes, practical guides, and occasional questions where your feedback can shape what comes next. Join ARC-1 Updates →

📖 New: AI ABAP Development blog series — long-form posts on AI for ABAP, ARC-1 design, and real-world BTP / Copilot Studio / Joule walkthroughs. Read the series →

Why ARC-1?

Built for organizations that need AI-assisted SAP development with guardrails. Inspired by the pioneering work of abap-adt-api, mcp-abap-adt, and vibing-steampunk — ARC-1 adds what's needed to run in production:

Security & Admin Controls

  • Safe by default — read-only, no free SQL, no table preview, no transport writes, no Git writes. Enable each capability with explicit SAP_ALLOW_* flags

  • Action deny list — block specific tool actions with SAP_DENY_ACTIONS (for example SAPWrite.delete), without exposing low-level operation codes to admins

  • Package restrictions — limit AI write operations (create, update, delete) to specific packages with wildcards (--allowed-packages "Z*,$TMP"). Read operations are not restricted by package — use SAP's native authorization for read-level access control

  • Data access control (off by default)SAPRead(type=TABLE_CONTENTS) and SAPQuery are gated behind explicit env vars (SAP_ALLOW_DATA_PREVIEW=true, SAP_ALLOW_FREE_SQL=true). These capabilities can expose application data or run ad-hoc SQL, so they are intentionally separated from the default development-tooling surface. They can be enabled for governed use cases, but should be reviewed against the SAP API Policy, your SAP agreement, and internal data-governance rules

  • Experimental data-source emergency brake — approved data/SQL deployments can set SAP_BLOCKED_DATA_SOURCES=USR02,PA0002. ARC-1 then parses each SQL request and resolves active CDS plus replacement-object lineage before execution, denying direct or transitive exact-name matches and failing closed when lineage is unsupported or cannot be proven. The empty default adds no metadata calls. This denylist is defense in depth, not a production allowlist or replacement for SAP authorization/CDS DCL; see Authorization & Roles.

  • Transport safety — transport reads are available for review, while transport mutations require both --allow-writes and --allow-transport-writes. Update/delete operations auto-use the lock correction number when no explicit transport is provided

  • Git workflow safety — Git operations are disabled by default. Enable explicitly with --allow-git-writes / SAP_ALLOW_GIT_WRITES=true

  • API-key profiles — multi-key HTTP deployments can assign viewer, viewer-data, viewer-sql, developer, developer-data, developer-sql, or admin per key

  • Writes restricted to $TMP when enabled — only local/throwaway objects; writing to transportable packages requires explicit --allowed-packages

  • HTTP security headers (helmet) on by default — HSTS, CSP, X-Frame-Options, CORP, X-Content-Type-Options. COOP is deliberately not set so popup-based OAuth flows (Copilot Studio) keep working. No flag to disable.

  • Opt-in CORS for browser MCP clientsARC1_ALLOWED_ORIGINS (comma-separated, exact match). Off by default; native MCP clients don't need it

  • Layered rate limiting — three layers out of the box: per-IP OAuth and shared MCP HTTP edge limits (Layer 1; MCP inherits the historical derived cap unless ARC1_MCP_HTTP_RATE_LIMIT overrides it), per-user MCP quota (Layer 2, off by default — multi-user deployments opt in via ARC1_RATE_LIMIT=60), and a server-wide SAP-bound semaphore (Layer 3, default 10, on). Honors Retry-After on 429/503 from SAP / BTP gateways. See the Rate Limiting Guide

  • Supply-chain security — Dependabot (npm + GitHub Actions + Docker, weekly + same-day security advisories), npm audit --audit-level=high PR gate, GitHub Dependency Review on every PR, CodeQL SAST, Trivy container scanning (scheduled multi-architecture HIGH/CRITICAL gate plus advisory release/dev scans), all third-party GitHub Actions pinned to commit SHA, SECURITY.md policy with severity-tiered SLAs. Image and npm package both ship with provenance attestations, and the release workflow publishes a best-effort CycloneDX SBOM for the production npm dependency graph. See the security guide §13

Authentication

  • API key — simple Bearer token for internal deployments

  • OIDC / JWT — Entra ID, Keycloak, or any OpenID Connect provider

  • OAuth 2.0 — local browser-based login for BTP ABAP Environment service-key development

  • XSUAA — SAP BTP native auth with automatic token proxy for MCP clients

  • Per-user SAP identity — BTP Destination Service forwards the MCP user to SAP: Cloud Connector principal propagation for on-premise SAP, or OAuth2UserTokenExchange for BTP ABAP Environment

BTP Cloud Foundry Deployment

Deploy ARC-1 as a Cloud Foundry app on SAP BTP with full platform integration:

  • Destination Service — connect to SAP systems via managed destinations

  • Experimental multi-target mode — the default-off, mutation-free BTP mode discovers destinations marked arc1.enabled=true and exposes pinned SID/client plus aggregate endpoints (setup, administration)

  • Cloud Connector — reach on-premise systems through the connectivity proxy

  • Per-user destinations — user identity forwarded end-to-end via X.509 certificates for on-premise SAP, or exchanged for an ABAP bearer token for BTP ABAP Environment

  • XSUAA OAuth proxy — MCP clients authenticate via standard OAuth, ARC-1 handles the BTP token exchange

  • Audit logging — structured events to stderr, file, or BTP Audit Log Service

Token Efficiency

  • 12 intent-based tools instead of 200+ individual tools — keeps tool selection simple, with the schema payload guarded by CI budgets and a hyperfocused 1-tool mode for tight context windows

  • Method-level read/edit — read or update a single class method, not the whole source (up to 20x fewer tokens)

  • Context-first understandingSAPContext(action="deps") is the first call for "what does this object do?": it returns the object's Knowledge Transfer Document (SKTD/KTD) when available plus public API contracts of dependencies in one call (7-30x compression)

Built-in Object Caching

  • Server-validated source caching — every SAP object read is cached in memory (stdio) or SQLite (http-streamable). Repeated reads use If-None-Match/ETag conditional GET, so unchanged objects return from cache after SAP confirms 304 Not Modified.

  • Dependency graph cachingSAPContext dep resolution keyed by source hash; unchanged objects skip all ADT calls on subsequent runs.

  • KTD-aware context — Knowledge Transfer Documents are cached as source entries and composed into SAPContext(action="deps") separately from the dependency graph, so cached dependency context can still include revalidated documentation.

  • Live where-usedSAPContext(action="usages") and CDS impact analysis query SAP's current repository index with the caller's identity; no startup repository scan is required.

  • Active/inactive source viewsSAPRead accepts version="active" | "inactive" | "auto" and warns when the active source has an unactivated draft.

  • Write invalidation — when SAPWrite or SAPActivate mutates an object, both active and inactive source cache entries are dropped; next read revalidates or fetches fresh source.

See docs/caching.md for full documentation.

Testing

  • 3,474 unit tests (104 unit test files, mocked HTTP)

  • 262-test default integration profile against live SAP systems, with explicit skip reasons when credentials or fixtures are missing

  • 141-test default E2E profile that executes real MCP tool calls against a running ARC-1 server and live SAP system

  • Manual slow SAP profiles keep broad where-used, RAP full-stack, and recursive CTS release coverage out of the PR path (test:integration:slow, test:e2e:slow, GitHub SAP Slow Tests workflow)

  • CRUD lifecycle and BTP smoke lanes included (test:integration:crud, test:integration:btp:smoke)

  • CI matrix on Node 22 and 24; live SAP integration + E2E run on internal PRs and manual dispatch, with SAP jobs gated off for docs/chore PRs and external forks

  • Reliability telemetry + coverage published as informational CI signals (non-blocking)

Tools Refined for Real-World Usage

The 12 tools are designed from real LLM interaction feedback:

Tool

What it does

SAPRead

Read exact ABAP source, method bodies, grep matches, table data, CDS views, access controls (DCLS), metadata extensions (DDLX), service bindings (SRVB), knowledge-transfer docs (SKTD or friendly alias KTD), message classes (MSAG), revision history (VERSIONS/VERSION_SOURCE), inactive object state, BOR objects, deployed UI5/Fiori apps (BSP, BSP_DEPLOY), and ABAP Platform 2025 server-driven objects (DESD, EVTB, EVTO, DTSC, CSNM, COTA). For "what does this object do?" use SAPContext first, then SAPRead for precise source. On-prem metadata reads include authorization fields (AUTH), feature toggles (FEATURE_TOGGLE), and enhancement implementations (ENHO). Structured format for classes returns metadata + decomposed includes as JSON. Optional grep regex returns only matching source lines (+context, method-annotated for classes) for token-efficient search. (Deprecated aliases MESSAGES/FTG2 accepted for one minor.)

SAPSearch

Object search + full-text source code search across the system

SAPWrite

Create/update/delete ABAP source and DDIC metadata with automatic lock/unlock (PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD/KTD, TABL, DOMA, DTEL, MSAG; availability adapts for BTP). Class updates can target local includes (definitions, implementations, macros, testclasses); class-section surgery (edit_class_definition, add_method, edit_method_signature, delete_method, change_method_visibility) lets an LLM edit a global class signature without re-sending /source/main; RAP behavior-pool scaffolding can auto-create lhc_* skeletons before injecting signatures/stubs. Batch creation supports terminal activation for interdependent multi-object workflows (e.g., RAP stack or domain+data element in one call)

SAPActivate

Activate ABAP objects — single or batch (essential for RAP stacks), with guarded retry for the S/4HANA ED064 batch quirk. Publish/unpublish OData service bindings (SRVB)

SAPNavigate

Go-to-definition, find references, code completion

SAPQuery

Execute ABAP SQL with table-not-found suggestions and automatic chunking for simple long literal IN (...) lists

SAPTransport

CTS transport management (list/get/create/release/delete/reassign/release-recursive), transport layer/target lookup, package transport requirement checks, and reverse lookup history (action="history")

SAPGit

Git-based ABAP workflows across gCTS and abapGit (list/clone/pull/push/commit/branch/unlink) with backend auto-selection and safety gating (--allow-git-writes)

SAPContext

Context-first object understanding (action="deps"): prepends the object's KTD when available and returns compressed dependency contracts. Also supports reverse dependency lookup (action="usages") and CDS upstream/downstream impact analysis (action="impact" for DDLS)

SAPLint

Local ABAP lint (system/release-aware presets, auto-fix, pre-write validation) + ADT PrettyPrint (server-side formatting)

SAPDiagnose

Syntax check, ABAP Unit tests, ATC code quality, CDS test-case suggestions, active/inactive object-state comparison, generic ADT quickfix proposals/application deltas, gateway/system message diagnostics, short dumps, profiler traces, and the on-prem authorization trace (SUAUTHVALTRC, data-preview gated)

SAPManage

Feature probing, cache statistics, package lifecycle/change-package operations, and FLP catalog/group/tile helpers

Tool definitions automatically adapt to the target system (BTP vs on-premise), removing unavailable types and adjusting descriptions so the LLM never attempts unsupported operations.

Feature Detection

ARC-1 probes the SAP system at startup and adapts its behavior:

  • Detects HANA, gCTS, abapGit, RAP/CDS, AMDP, UI5, and transport availability

  • Auto-detects BTP vs on-premise systems

  • Maps SAP_BASIS release to the correct ABAP language version

  • Each feature can be forced on/off or left on auto-detect

  • In shared-credential mode (technical user), runs a startup auth preflight once and blocks SAP tool calls with a clear error on 401/403 to avoid repeated failed logins and potential user lockout

Related MCP server: mcp-server-wazuh

ADT API Status and Strategy

ARC-1 is a governed development-tooling proxy around ADT behavior — code checks, build/activate, transport management, AI-assisted ABAP authoring, Git workflows — not a bulk data-extraction product. It runs with real user identity, respects SAP authorization, and keeps audit and rate controls in place.

Where this stands under SAP's API Policy is covered in full in SAP API Policy & Architecture Alignment — what API Policy v.4.2026a says clause by clause, why the ADT question is more nuanced than "undocumented API", where ARC-1 sits against SAP's reference architecture for third-party MCP access, and the specific questions to put to your SAP contact. Short version: usable at your own risk, and worth asking SAP before production.

Two ARC-1 capabilities can expose business data or execute ad-hoc SQL. Both are off by default and require explicit opt-in env vars, so the operator makes a deliberate decision before they are reachable:

Capability

Env var

Default

Policy note

Named table content preview (SAPRead(type=TABLE_CONTENTS))

SAP_ALLOW_DATA_PREVIEW=true

false (off)

Can expose application-table data; keep off unless the use case is approved.

Freestyle ABAP SQL (SAPQuery)

SAP_ALLOW_FREE_SQL=true

false (off)

Executes ad-hoc ABAP SQL; keep off unless the use case is approved.

Exact source blocklist (experimental)

SAP_BLOCKED_DATA_SOURCES=USR02,PA0002

empty (off)

Denies exact direct/transitive table or CDS dependencies; active mode is deliberately fail-closed and slower.

When either capability is enabled, successful data-preview bodies are limited cumulatively per tool call (2 MiB by default), and only two data-result calls per process remain admitted through parsing and serialization. SAPQuery.maxRows is separately clamped to 10,000, but wide rows can reach the byte limit much earlier. See Configuration before tuning ARC1_MAX_DATAPREVIEW_RESPONSE_BYTES or ARC1_MAX_CONCURRENT_DATA_RESULTS.

With both flags at their defaults, ARC-1's data/sql rows are unreachable. Turning either flag on is a valid operational choice for approved scenarios, but it should be deliberate: check the current SAP API Policy, the customer's SAP agreement, SAP authorizations, and internal data-protection rules before enabling it on a productive system.

ARC-1's strategy is to stay close to documented and discoverable ADT behavior, probe system capabilities before exposing tools, keep conservative security defaults (writes off, data preview off, free SQL off, package allowlist $TMP), and continuously review SAP's guidance as it evolves. This README is not a compliance decision for any specific customer landscape, but the default posture is intended to support normal governed development use rather than block it.

Versioning & Stability

From 1.0 onward ARC-1 follows semantic versioning: patch releases fix bugs, minor releases add backward-compatible capability, and breaking changes to the MCP tool surface, configuration, or auth contract bump the major version.

Experimental, default-off features are excluded from this guarantee until they are promoted — they are clearly labeled and their surface may still change in a minor release. Today this covers the multi-target BTP mode (ADR-0006 / ADR-0007) and the data-source blocklist.

What changed per release: the annotated Release Notes give each release its impact and upgrade action; CHANGELOG.md lists every merged PR.

Quick Start

Install as an Agent Plugin — one portable install for the MCP server and all bundled SAP skills in GitHub Copilot, VS Code, Cursor, Codex, and other compatible clients:

copilot plugin marketplace add arc-mcp/arc-1
copilot plugin install arc-1@arc-1

Agent Plugins 1.0 does not define secret prompts, so create the ARC-1 .env in the installed plugin's persistent data directory before connecting to SAP. See the Agent Plugin guide for client-specific installation, safe configuration, and verification.

Install in Claude — pick your surface (full guide: Install in Claude):

  • Claude Desktop — download the latest arc-1-*.mcpb from Releases and double-click it (or Settings → Extensions). Claude prompts for your SAP connection. (The .mcpb is attached to releases automatically; if the newest one doesn't have it yet, see Install in Claude.)

  • Claude Code — one install for the MCP server and all SAP skills:

    /plugin marketplace add arc-mcp/arc-1
    /plugin install arc-1@arc-1
  • Any MCP client / manual — run it directly:

    npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER
  • Trying it out on your laptop?Quickstart

  • Full local dev setup (Docker, cookie extractor, client configs)?Local Development

  • Deploying for a team / BTP?Deployment

Blog Series — AI ABAP Development

A long-form series on blog.zeis.de covering AI for ABAP development, ARC-1's design, and real-world walkthroughs:

  1. How I Use AI for Development and Why Context Matters

  2. ABAP and Agentic AI: The Hidden Problem in Real Projects

  3. Introducing ARC-1: A Secure ADT MCP Server for Enterprise SAP Development

  4. ARC-1 on SAP BTP: Secure ABAP Agentic Development Beyond the Laptop

  5. ARC-1 with Copilot Studio: SAP System Context Beyond Developers

  6. ARC-1 with Joule Studio: Bringing Real ABAP System Context into Joule

  7. From SEGW and Legacy UI5 to RAP with ARC-1

Full list and new posts → blog.zeis.de/tags/ai-abap-development-series.

Documentation

Full documentation is available at docs.arc-1-mcp.com.

Guide

Description

Quickstart

5-minute npx + Claude Desktop setup

Agent Plugin

Portable server + all skills for Copilot, VS Code, Cursor, Codex, and compatible clients

Install in Claude

Desktop .mcpb, Claude Code plugin (server + skills), and remote BTP connector

Local Development

Full local dev — all install methods, MCP client configs, SSO cookie extractor

Deployment

Multi-user deployment — Docker, BTP Cloud Foundry, BTP ABAP

SAP BTP: Start Here

Choose the BTP topology and follow the correct deployment, auth, destination, and operations guides

BTP Cloud Foundry

MTA deployment, topology decision, role handoffs, and safe acceptance

BTP Administration

Changes, roles, secrets, scaling, upgrades, rollback, and customer handover

Multi-System Setup

Experimental read-only BTP multi-target deployment, destinations, roles, and client configuration

Configuration

Every flag and env var, one table

Updating

Update procedures per install method

Enterprise Auth

Layer A / Layer B auth internals, coexistence matrix

Tool Reference

Complete reference for all 12 tools

Extensions (Custom Tools)

Add your own Custom_* tools without forking (FEAT-61) — reads, gated non-ADT writes, console-class execute

Architecture

System architecture with diagrams

AI Usage Patterns

Agent workflow patterns and best practices

Skills

Reusable ARC-1 agent skills, including GitHub Copilot in Eclipse and VS Code ADT setup

Blog Series

Long-form posts on AI for ABAP development, ARC-1 internals, and real-world walkthroughs

Development

npm ci && npm run build && npm test

See CLAUDE.md for codebase structure, testing commands, and contribution guidelines.

Credits

Project

Author

Contribution

vibing-steampunk

oisee

Original Go MCP server — ARC-1's starting point

abap-adt-api

Marcello Urbani

TypeScript ADT library, definitive API reference

mcp-abap-adt

Mario Andreschak

First MCP server for ABAP ADT

abaplint

Lars Hvam

ABAP parser/linter (used via @abaplint/core)

License

MIT

Available Tools

8 tools
SAPContextA
Read-only

Primary tool for understanding ABAP/CDS objects before specs, reviews, explanations, or changes — use instead of SAPRead when the user asks what an object does. Returns intent first (the object KTD when available) then compressed dependency contracts. Use SAPRead after SAPContext for exact source/method bodies/grep/drafts.

Decision rule — pick the action from the user's question:

  • "What breaks if I change ?" / "Who consumes <I_*>?" / "Blast radius" → action="impact" (DDLS only).

  • "Which includes/appends extend ?" → action="structure", type="TABL".

  • "What does do?" / "Explain" / "deps before editing" → action="deps" (default).

  • "Find all callers of " → action="usages" (live SAP where-used lookup).

impact (CDS blast-radius): upstream AST deps + downstream where-used, classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other) + sibling-consistency hints. Use this instead of text-scanning DDDDLSRC/ACMDCLSRC with SAPQuery (it filters the noise). Optional includeIndirect, siblingCheck, siblingMaxCandidates. deps (default): target KTD + the public API contracts of its dependencies (not full source) — one compact response vs N SAPRead calls (7-30x fewer tokens); SAP standard objects filtered out. For CDS, includes dependency DDL/field catalogs for cl_cds_test_environment. structure (TABL only): the DDIC include/append tree.

Use SAPContext BEFORE editing existing objects. For non-CDS reverse-lookup use SAPNavigate(references); for CDS prefer impact. Full detail: docs_page SAPContext.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesObject name (e.g., ZCL_ORDER)
typeNoObject type. Optional for action="impact" (defaults to DDLS) or action="usages"; required otherwise.
depthNoDependency depth: 1 = direct deps only (default), 2 = deps of deps, 3 = maximum. Higher depth = more context but more SAP calls.
groupNoRequired for FUNC type. The function group containing the function module.
actionNoAction: "impact" = CDS blast-radius analysis (DDLS only). USE THIS for any question like "what breaks if I change <view>", "who consumes <I_*>", "impact analysis on <CDS>", "downstream of <view>". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error. "deps" (default, can be omitted) = object understanding / forward dependency context — "what does <object> do?" or "what does <object> depend on?". Returns the object KTD when available plus public API contracts of dependencies. "usages" = live SAP where-used lookup. Provide "type" when known; without it, the name must resolve uniquely. Prefer "impact" for CDS. "structure" = TABL includes/appends.
sourceNoOptional: provide source directly instead of fetching from SAP. Saves one round-trip if you already have the source from SAPRead.
maxDepsNoMax dependencies to resolve (default 20). Lower = faster + fewer tokens.
includeKtdNodeps: When true/default, prepend the object Knowledge Transfer Document (KTD/SKTD) when one exists. Set false to skip the KTD lookup.
maxResultsNousages: max entries (default 100); impact: max per downstream bucket (default 50). Max 1000. "usageCount"/"summary" stay true totals, not page sizes.
siblingCheckNoimpact: Enable sibling metadata-extension consistency analysis. Default true.
includeIndirectNoimpact: Include indirect (transitive) downstream where-used entries. Default false.
siblingMaxCandidatesNoimpact: Maximum sibling DDLS candidates to compare. Default 4; hard cap 10.

TDQS

A4.4/5.0
Behavior3/5

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

The readOnlyHint annotation already declares this is a safe read operation, so the bar is somewhat lowered. The description does add value beyond the annotation: it discloses token efficiency ('7-30x fewer tokens'), compression behavior ('returns compressed dependency contracts, not full source'), and filtering behavior (SAP standard objects filtered out). However, it does not describe the return response shape or what happens when KTD is unavailable, and the guardrail error behavior is only mentioned in the schema action text, not the top description. It's 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.

Conciseness4/5

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

The description is dense and front-loaded with the critical scoping sentence first. The 'Decision rule' section uses bullet-free line breaks for scannability. It's reasonably complete but does get long, with some redundancy between the top description and the action field descriptions in the schema (e.g., the impact description appears in both places nearly verbatim). A tighter version could trim the duplicated impact enumeration while keeping the sibling-tool comparisons.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is genuinely complex — 12 parameters, 4 actions with action-specific parameter meanings (depth means different things per action, maxResults has different defaults per action) — the description is remarkably complete. It covers the decision matrix, cross-tool sequencing, token-cost tradeoffs, and specific per-action return semantics. It points to a docs page (docs_page SAPContext) for full detail. There's no output schema, so the description carries the burden of explaining what's returned, which it does well for each action bucket.

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 description coverage is 100% and each parameter's schema already has a detailed description. The tool description adds meaningful context on top: it explains the interplay between parameters (e.g., includeIndirect for transitive usages), and provides '7-30x fewer tokens' as motivation for depth/deps defaults. It documents the conditional requirements (type required unless impact/usages, group required for FUNC) that the schema alone doesn't fully convey semantically. This clearly exceeds the base-3 baseline.

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 has a very specific verb+resource: 'Primary tool for understanding ABAP/CDS objects before specs, reviews, explanations, or changes.' It clearly distinguishes from the sibling SAPRead by saying 'use instead of SAPRead when the user asks what an object does' and explicitly says to use SAPRead after for exact source/method bodies/grep/drafts. The action enumeration (impact/deps/usages/structure) maps clear verbs to concrete behaviors, further differentiating it from siblings like SAPNavigate and SAPQuery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Provides an explicit decision rule mapping user question phrasing to the correct action: 'What breaks if I change <CDS>?' → impact, 'What does <object> do?' → deps, 'Find all callers' → usages. It names the alternative (SAPRead) and the exact sequencing ('Use SAPRead after SAPContext'). It also states exclusions — non-DDLS input returns a guardrail error for impact, and prefers impact over text-scanning SAPQuery. This is exemplary when/why/when-not guidance.

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

SAPDiagnoseA

Run diagnostics on ABAP objects and analyze runtime errors. Actions:

  • "syntax": syntax-check (name+type; optional version; optional source = pre-write dry-run, nothing written).

  • "unittest": harmless ABAP Unit for CLAS/PROG/FUGR or DEVC (exact; includeSubpackages recurses).

  • "atc": run ATC checks (name+type; optional variant). "atc_variants": list variants + the system default (variant = name filter; read-only).

  • "cds_testcases": SAP-suggested ABAP Unit test cases for a CDS entity (name; read-only; SAP_BASIS 8.16+).

  • "object_state": compare active vs inactive source versions (name+type; CLAS compares all includes). Returns ETags/hashes/divergence flags.

  • "quickfix": get quick-fix proposals at a position (name+type+source+line; optional column, sourceUri).

  • "apply_quickfix": apply one proposal, return text deltas, no write (name+type+source+line+proposalUri+proposalUserContent; pass proposalUserContent through exactly).

  • "dumps": list/read ST22 short dumps (no id = list; id = read; includeFullText, sections).

  • "traces": list/analyze profiler traces (id+analysis: hitlist=hot spots, statements=call tree, dbAccesses=DB stats).

  • "trace_start": arm a profiler trace for the NEXT matching execution, then reproduce and read via "traces" (write scope; defaults: next HTTP request, SQL on).

  • "trace_requests": list armed trace requests. "trace_cancel": cancel one by id (write scope).

  • "system_messages": list SM02 messages. "gateway_errors": list /IWFND/ERROR_LOG (on-prem; detailUrl or id+errorType for detail).

  • "odata_perf": diagnose why an OData call is slow (url = host-relative path); returns the sap-statistics timing split (DB/ABAP/framework/auth). Read-only; needs allowDataPreview.

  • "authorization_trace": read the on-prem STUSERTRACE auth trace (SUAUTHVALTRC); needs SAP_ALLOW_DATA_PREVIEW.

  • "cds_sql": show the native SQL a CDS view compiles to (name; read-only).

  • "sql_trace_state" / "set_sql_trace_state" (sqlOn; needs SAP_ALLOW_WRITES) / "sql_trace_directory": ST05 SQL-trace control. Quickfix workflow: syntax/ATC → quickfix → apply_quickfix → write via SAPWrite. Full action reference: docs_page SAPDiagnose.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoDump or trace ID (for dumps/traces actions); also the trace-request id to cancel (for trace_cancel). Omit to list, provide to get details.
toNoOptional upper time boundary for feed-based diagnostics actions (system_messages/gateway_errors).
urlNoFor odata_perf: the host-relative OData path to probe, from the Fiori app's Network tab (e.g. "/sap/opu/odata4/sap/.../Entity?$filter=…"). Must be a path on the connected system — absolute URLs are rejected.
fromNoOptional lower time boundary for feed-based diagnostics actions (system_messages/gateway_errors).
lineNoSource line number for quickfix evaluation (required for quickfix/apply_quickfix).
nameNoObject name (for syntax/unittest/atc/object_state); the CDS entity / DDLS source name for cds_testcases and cds_sql
typeNoObject type; unittest accepts CLAS, PROG, FUGR, or DEVC.
userNoSAP-user filter for dumps, feeds, or authorization_trace.
sqlOnNoFor action="set_sql_trace_state": true to arm the ST05 SQL trace, false to disarm. Combine with user to filter the trace to one SAP user.
actionYes
columnNoSource column number for quickfix evaluation (default 0 for quickfix actions).
sourceNoCurrent source code (required for quickfix/apply_quickfix).
variantNoatc: check variant; atc_variants: name filter (*=all)
versionNoSource version for syntax check (default "active"). Use "inactive" to validate pending changes.
analysisNoTrace analysis type (for traces action with id). hitlist = execution hot spots, statements = call tree, dbAccesses = database access stats.
coverageNounittest only: collect statement/branch/procedure coverage and methodsBelowFull. Unavailable measurements do not discard test results. Default false.
sectionsNoDump chapter IDs to include for dumps detail mode (for example ["kap0","kap3","kap8"]). Omit to use focused defaults.
sqlTraceNoFor trace_start: capture SQL/DB accesses (default true — required for analysis="dbAccesses").
aggregateNoFor trace_start: aggregate the trace (default true).
detailUrlNoCanonical host-relative /sap/bc/adt/gw/errorlog/... path for detail mode; absolute URLs are rejected.
errorTypeNoGateway error type for gateway_errors detail by id (for example "Frontend Error"). Required when using id without detailUrl.
sourceUriNoExact ADT source URI for quickfix/apply_quickfix. Defaults to the type/name main source; use this for class includes such as /includes/definitions.
traceUserNoFor trace_start/trace_requests: the SAP user whose matching execution is traced/listed. Defaults to the connected user.
authObjectNoAuthorization object filter, e.g. S_TCODE.
maxResultsNoMaximum results for dumps/system_messages/gateway_errors (default 50) or authorization_trace (default 100); bounded to a safe cap.
objectTypeNoFor trace_start: what to match within the process. Defaults to the valid type for the process type (http→url, dialog→transaction, batch→report, rfc→functionModule).
descriptionNoFor trace_start: optional label for the trace request.
processTypeNoFor trace_start: the kind of work process to capture. Default "http" (OData/Gateway). dialog = SAP GUI transaction, batch = background job, rfc = RFC call.
proposalUriNoQuickfix proposal URI from quickfix action (required for apply_quickfix).
expiresHoursNoFor trace_start: hours until the armed request auto-expires (default 24).
onlyFailuresNoFor authorization_trace: return only denied checks (RC<>0), similar to the SU53 failure view.
resultFormatNounittest: legacy|structured|junit; atc: legacy|structured; other actions reject it.
maxExecutionsNoFor trace_start: how many matching executions to capture before the request is consumed (default 1).
timeoutSecondsNounittest/atc timeout: 1-3600s; default 300.
includeFullTextNoFor dumps detail mode only: include full formattedText blob. Default false to reduce token usage.
includeSubpackagesNo
proposalUserContentNoOpaque userContent from quickfix action (required for apply_quickfix). May be an empty string; pass through exactly.
proposalAffectedObjectsNoOptional affectedObjects array from quickfix action. Include content for each affected source unit when applying multi-object quickfixes.

TDQS

A3.9/5.0
Behavior2/5

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

The annotations readOnlyHint=false and destructiveHint=false do not clarify side effects. The description inconsistently labels some actions as 'read-only' (e.g., atc_variants, cds_testcases, odata_perf) but leaves write actions like apply_quickfix, trace_start, and set_sql_trace_state ambiguous. Notably, apply_quickfix is described as 'apply one proposal... no write', which is confusing and could mislead about its actual system impact.

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?

The description is a single bullet-like list of actions and their parameters, which is efficient and scannable. Although lengthy (covers 20+ actions), it avoids redundancy and maintains a consistent structure (action: description, parameters). It earns a 4 rather than 5 due to the density of information that could overwhelm without the schema reference.

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?

Given the tool's complexity (38 parameters, 20+ actions), the description covers all actions and their required/optional parameters, notes read-only status for some, and points to a full reference. It lacks details on return formats or error handling, but since there is no output schema, this is acceptable. It is complete enough for an agent to select and invoke correctly in most scenarios.

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?

With 95% schema coverage, the baseline is 3. The description enriches parameters with context: it explains defaults (e.g., version defaults to 'active', sourceUri defaults to main source), required relationships (e.g., proposalUri needed for apply_quickfix), and per-action constraints (e.g., 'read-only' flags, 'needs allowDataPreview'). This adds meaning beyond the raw schema.

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 clearly states the tool 'Run diagnostics on ABAP objects and analyze runtime errors' and enumerates specific actions (syntax, unittest, ATC, dumps, traces, etc.). This distinguishes it from sibling tools like SAPRead or SAPLint, which have different scopes.

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?

The description gives clear context for each action (e.g., 'syntax-check', 'read-only', 'needs allowDataPreview') but does not explicitly compare against alternatives or state when to prefer this tool over SAPRead/SAPSearch. The implied usage is clear enough for diagnostics scenarios.

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

SAPLintA

Run local abaplint rules on ABAP/CDS source (auto-selects cloud or on-prem rules by system type). Actions:

  • "lint": check source (errors+warnings) for ABAP (PROG/CLAS/INTF/FUNC) and CDS (DDLS).

  • "lint_and_fix": lint + auto-fix fixable issues (keyword case, obsolete statements); returns fixed source.

  • "list_rules": list rules + current config (no source).

  • "format": pretty-print via SAP's ADT formatter (needs source).

  • "get_formatter_settings" / "set_formatter_settings": read/update the system's global PrettyPrinter (indentation bool, style keywordUpper|keywordLower|keywordAuto|none; set is blocked read-only). lint/lint_and_fix/list_rules run locally; format/*_formatter_settings call SAP. For ATC/syntax/unit tests use SAPDiagnose.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoObject name (used for filename detection)
rulesNoRule overrides: { "rule_name": false } to disable, { "rule_name": { "severity": "Warning" } } to configure. Overrides system defaults.
styleNoPrettyPrinter: keyword casing (for set_formatter_settings)
actionYesCheck type
sourceNoABAP or CDS source code to lint/format (not needed for list_rules/get_formatter_settings)
indentationNoPrettyPrinter: indent source (for set_formatter_settings)

TDQS

A4.5/5.0
Behavior4/5

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

The description adds significant context beyond annotations: it discloses which sub-actions are local vs. remote (calling SAP), that the 'set' for formatter settings is 'blocked read-only', and that lint_and_fix auto-fixes issues and returns fixed source. Annotations provide readOnlyHint=false and destructiveHint=false, but the description adds richer behavioral detail about the mixed local/remote execution model and the blocked set operation.

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?

The description is compact and front-loads the core purpose in the first sentence before enumerating actions. The bullet list is scannable. Slight length from the detail on actions and their parameters, but each sentence earns its place and covers genuinely useful information.

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?

With no output schema, the description carries the burden of explaining what each action returns, which it does (fixed source for lint_and_fix, rules+config for list_rules). It covers the required parameter (action), the six actions thoroughly, and relevant tool boundaries. Minor gap: it doesn't specify the return shape of the lint/format actions beyond lint_and_fix, but the overall coverage is strong.

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 100%, so the baseline is 3. The description adds value by mapping which actions require which parameters (e.g., 'source needed for format', 'not needed for list_rules/get_formatter_settings', style/indentation are 'for set_formatter_settings'). This goes beyond the bare schema descriptions and clarifies parameter-to-action relationships.

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 clearly states 'Run local abaplint rules on ABAP/CDS source' with a specific verb (run), resource (ABAP/CDS source), and explicit action categories for each sub-command. It distinguishes itself from siblings by explicitly noting 'For ATC/syntax/unit tests use SAPDiagnose'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

The description explains both when to use each action (lint, lint_and_fix, list_rules, format, formatter settings) and what each does. It explicitly calls out that lint/lint_and_fix/list_rules run locally while format and formatter settings call SAP, and names the alternative tool SAPDiagnose for ATC/syntax/unit tests. This is exceptional guidance.

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

SAPManageA
Destructive

Probe and report SAP system capabilities. Use BEFORE operations that depend on optional features (abapGit, RAP/CDS, AMDP, HANA, UI5/Fiori, CTS transports, FLP). Also handles package (DEVC) lifecycle.

Actions:

  • "features": cached feature status (fast, no round-trip; id, available, mode, probedAt). "probe": re-probe now (feature probes + auth + discovery refresh). "cache_stats": object cache health.

  • "create_package" / "delete_package" / "change_package": DEVC lifecycle via ADT packages API.

  • FLP read: flp_list_catalogs, flp_list_groups, flp_list_tiles (catalogId). FLP write: flp_create_catalog, flp_create_group, flp_create_tile, flp_add_tile_to_group, flp_delete_catalog. Classic designer tile/target-mapping model, deprecated since S/4HANA 2023; Work Zone exposure v2 needs LADIs (SAPRead type=UIAD).

  • "set_api_state": release/revoke an object's API release contract (objectUri, or name+objectType; apiState defaults RELEASED, contract defaults C1 — C0 for SRVD, C3 for classic views). Write counterpart of SAPRead(type="API_STATE").

Returns features + systemType ("onprem"/"btp"); "available: false" means do NOT attempt dependent operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPackage name (required for create_package and delete_package).
tileNoTile definition for flp_create_tile.
titleNoTitle — required for flp_create_catalog and flp_create_group.
actionYesAction to execute. Read actions: features, probe, cache_stats, flp_list_catalogs, flp_list_groups, flp_list_tiles. Mutating package/FLP actions require writable safety config and write scope in authenticated mode.
groupIdNoFLP group/page identifier (required for flp_create_group, flp_add_tile_to_group).
apiStateNoFor set_api_state: target state of the object's API release contract — RELEASED (mark released for ABAP Cloud / Clean Core) or NOT_RELEASED (revoke). Default RELEASED. Visibility (ABAP Cloud / Key User Apps) follows the contract's defaults. Read the current state first with SAPRead(type="API_STATE").
contractNoFor set_api_state: which release contract to set. Default C1 (Key-User/Cloud — the common clean-core contract). Object types support different contracts: e.g. service definitions (SRVD) only support C0, classic DDIC views only C3, behavior definitions and tables support C0+C1. If the object does not support the chosen contract, the error lists the ones it does.
domainIdNoDomain ID — required for flp_create_catalog (e.g., ZARC1_SALES).
catalogIdNoFLP catalog identifier — accepts either full ID (X-SAP-UI2-CATALOGPAGE:MY_CAT) or domain ID (MY_CAT). Required for flp_list_tiles, flp_create_tile, flp_add_tile_to_group, flp_delete_catalog.
objectUriNoADT URI of the object to move (e.g., /sap/bc/adt/oo/classes/zcl_my_class). If not provided, resolved automatically from objectName + objectType via search. For set_api_state: the object whose API release contract to set (or pass name + objectType instead).
transportNoOptional transport request (corrNr) for create_package, delete_package, or change_package.
newPackageNoTarget package to move the object to. Required for change_package.
objectNameNoObject name to move (e.g., ZCL_MY_CLASS). Required for change_package.
objectTypeNoADT object type (e.g., CLAS/OC, DDLS/DF, PROG/P). Required for change_package. For set_api_state: object type of "name" when objectUri is omitted (e.g. CLAS, INTF, DDLS, TABL).
oldPackageNoCurrent package of the object. Required for change_package.
descriptionNoPackage description (required for create_package).
packageTypeNoPackage type for create_package (default: development).
responsibleNoPerson-responsible: an existing ABAP user (XUBNAME, max 12 chars); an email is rejected. Defaults to the connection user; pass explicitly under principal propagation. BTP: auto-resolved from prior creates.
superPackageNoParent package for create_package (defaults to empty root package).
recordChangesNoWhether the created package records object changes in transport requests. Defaults to true for non-LOCAL software components or when a transport layer is set; false for literal LOCAL packages.
tileInstanceIdNoTile instance ID in the source catalog (required for flp_add_tile_to_group).
transportLayerNoTransport layer for create_package (optional; required by some transportable landscapes).
softwareComponentNoSoftware component for create_package (default: LOCAL on-prem, ZLOCAL on BTP).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, and the description aligns: it distinguishes read actions ('features', 'probe', 'cache_stats', flp_list_*) from mutating actions and notes that mutating ones 'require writable safety config and write scope in authenticated mode'. The description adds meaningful behavioral context beyond annotations: caching semantics ('fast, no round-trip'), returns (features + systemType), and the concrete directive that 'available: false means do NOT attempt dependent operations'. Slight deduction for not spelling out exactly what 'probe' validation entails in terms of side effects or cleanup.

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?

The description is dense but front-loaded with the most important purpose and usage guidance. The action list is well-structured with a clear read vs write grouping, and FLP methods are compactly enumerated. Minor deduction: the action enumeration overlaps heavily with the schema's action enum, and the set_api_state detail sentence is somewhat bulky, but overall every section earns its place and the prose is resource-efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a high-complexity tool (23 params, multiple sub-domains: probe/features, package lifecycle, FLP read and write, set_api_state). The description covers every domain, rules out ambiguities (deprecation, alternative LADI path), documents defaults and edge cases (contract support per object type), and states return values (features + systemType) since there's no output schema. Given the breadth and the strong schema coverage, the description is appropriately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 23 parameters thoroughly with inline descriptions. The description adds a handful of meaningful semantics beyond the schema: the action list with read-vs-mutating classification, the set_api_state default values (RELEASED, C1, with C0 for SRVD and C3 for views) which clarify the apiState/contract params, and the write-scope gating requirement. However, most parameter semantics live in the schema, so the description doesn't carry the heavy lifting here — hence a baseline 3.

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 opens with a specific verb+resource statement: 'Probe and report SAP system capabilities' and explicitly frames when to use it ('Use BEFORE operations that depend on optional features'). It clearly distinguishes from siblings by listing covered domains (abapGit, RAP/CDS, AMDP, HANA, UI5/Fiori, CTS transports, FLP) and package lifecycle. The action list with inline sub-descriptions clearly delineates the tool's many functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

The description provides explicit usage context: 'Use BEFORE operations that depend on optional features' and lists specific features. It also gives exclusion guidance, e.g., 'Classic designer tile/target-mapping model, deprecated since S/4HANA 2023; Work Zone exposure v2 needs LADIs (SAPRead type=UIAD)' — directing to an alternative tool. The 'available: false means do NOT attempt dependent operations' instruction is a clear when-not-to-proceed signal.

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

SAPNavigateA
Read-only

Navigate code: definitions, references (where-used), completion, class hierarchy. references uses the scope-based Where-Used API (line numbers, snippets, package); optional objectType filters by ADT slash type (e.g. CLAS/OC, PROG/P); pass type+name instead of uri. hierarchy returns superclass + interfaces + direct subclasses. For CDS (DDLS), prefer SAPContext(action="impact") — the same where-used pre-classified into RAP buckets, answering "what breaks if I change this view".

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoSource URI of the object. Optional for references if type+name are provided.
lineNoLine number (1-based)
nameNoObject name — alternative to uri for references.
typeNoObject type (PROG, CLAS, INTF, FUNC, etc.) — alternative to uri for references.
actionYesNavigation action
columnNoColumn number (1-based)
sourceNoCurrent source code (for definition/completion)
maxResultsNoreferences: max entries (default 100, max 1000). "total" counts every match of the filter.
objectTypeNoreferences: keep only results of this ADT type, slash format (CLAS/OC, PROG/P, FUGR/FF). A bare prefix ("CLAS") matches every subtype.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds behavioral detail: references uses a scope-based Where-Used API, objectType filters by ADT slash type with bare-prefix behavior, and hierarchy returns superclass+interfaces+subclasses. However it doesn't disclose edge cases like authentication requirements, error conditions, or what happens when neither uri nor type+name is provided.

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?

The description is reasonably tight, front-loaded with the four actions, and each sentence adds value. The CDS recommendation sentence is slightly long but necessary for sibling differentiation. No wasted prose.

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 9-parameter navigation tool with no output schema, the description covers the main behavioral surface: what each action does, the scope-based references approach, filtering behavior, and a strong sibling alternative. Some gaps remain (e.g., what definition/completion return, line/column handling), but the core guidance is present and actionable.

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 100%, so baseline is 3. The description adds value by explaining the bare-prefix matching behavior for objectType ('A bare prefix matches every subtype'), the maxResults default/cap semantics, and the type+name-as-uri-alternative pattern for references. These go beyond the literal schema texts.

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

Purpose4/5

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

The description clearly states the tool navigates code with four specific actions: definitions, references, completion, and class hierarchy. It distinguishes itself from siblings by mentioning SAPContext for CDS views specifically, giving some differentiation though not for all sibling tools (SAPSearch, SAPLint etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance, notably recommending SAPContext(action='impact') as an alternative for CDS (DDLS) where-used queries — a clear when-not-here, use-this-instead directive. It also explains when to pass type+name instead of uri for references, which is actionable usage guidance.

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

SAPReadA
Read-only

Read SAP ABAP objects — exact raw source, a method body, grep output, inactive drafts, revision history, or metadata. For "what does this object do?", explanations, spec work, reviews, or pre-change orientation, prefer SAPContext first (intent-level context before raw source). Types: PROG, CLAS, INTF, FUNC, FUGR (expand_includes=true for all include sources), INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD/KTD (KTD aliases SKTD), TABL (covers both transparent tables AND DDIC structures — no separate STRU type), TTYP, VIEW, DOMA, DTEL, TRAN, TABLE_CONTENTS (single-column filter), TABLE_QUERY (multi-column WHERE via the freestyle endpoint; gated by allowDataPreview; CDS views need SAP_BASIS 752+), DEVC, SOBJ (BOR — method param reads one method), SYSTEM, COMPONENTS, MSAG, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE (contract states C0-C4; objectType for non-class), INACTIVE_OBJECTS (no name; pending-activation list), AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. AUTH/FEATURE_TOGGLE/ENHO/VERSIONS/VERSION_SOURCE are on-prem only. CLAS: to save tokens, prefer method="*" (all signatures), method="NAME" (one body, ~95% fewer tokens than the full class), or grep over reading the full source. Omit include for the full source, or include=definitions|implementations|macros|testclasses for a local section. Full per-type detail: docs_page SAPRead. Optional grep: case-insensitive regex returning only matching source lines (+context, line numbers); for CLAS, matches are annotated with the owning class/method. Optional version parameter (default "active"): "inactive" reads the user's draft, "auto" the developer view. Active reads note when an inactive draft exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoaction="diff" NEW side (default "inactive" = pending unactivated changes). Same values as from.
fromNoaction="diff" OLD side: "active" (default), "inactive", a revision id from SAPRead(type="VERSIONS"), or a /sap/bc/adt/ revision URI.
grepNoRegex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD/KTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex.
nameNoObject name (e.g., ZTEST_PROGRAM, ZCL_ORDER, MARA)
typeYesObject type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD or KTD (Knowledge Transfer Documents), TABL (transparent tables and DDIC structures), TTYP, VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (discovery-gated; XML metadata; source is AFF JSON, or DDL text for DTSC/DSFD/DTDC): DESD (Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (Static Cache), CSNM (CSN Model), COTA (Communication Target), DSFD (Scalar Function Def), DTDC (Dynamic Cache), UIAD (Launchpad App Descriptor Item). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE).
groupNoFor FUNC/VERSIONS type. The function group containing the function module. Optional for FUNC — auto-resolved via SAPSearch if omitted. Required for VERSIONS when querying a function module revision feed.
whereNoFor TABLE_QUERY: structured WHERE conditions, ANDed together. Each item: {field, op, value?}. Ops: =, <>, <, <=, >, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL; use <> because 758 rejects !=. For IN/NOT IN: use bare comma-separated values; do NOT quote them. ARC-1 quotes and escapes values, e.g. "261,262". No subqueries. Example: [{"field":"MATNR","op":"=","value":"300006888"},{"field":"BUDAT_MKPF","op":">=","value":"20250101"}].
actionNoSet to "diff" for a unified diff between two source versions (uses from/to) — cheaper than fetching both sources. Source types only: PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, BDEF, SRVD, DDLX, TABL.
formatNoOutput format. For action="diff", "structured" returns JSON {hasDifferences, identical, added, removed, diff, version labels}; default remains the human-readable patch. For ordinary reads, "text" (default) is raw source; "structured" (CLAS only) returns JSON metadata + EVERY class include — a superset of "text", so it always costs MORE (measured +10% to +1685%). Use only to split test from production code; otherwise method="*" / method="name" / grep=.
methodNoFor CLAS: method name to read a single method implementation (e.g., "get_name", "zif_order~process"). Use "*" to list all methods with signatures and visibility. For SOBJ: BOR method name to read. If omitted, returns the full BOR method catalog. Not used with other types.
columnsNoFor TABLE_QUERY: columns to SELECT (default: all). Example: ["MATNR","BWART","BUDAT","MENGE"].
includeNoFor CLAS: DO NOT use this to read the main class — omit include entirely to get the full class source (CLASS DEFINITION + CLASS IMPLEMENTATION). This parameter reads class-LOCAL auxiliary files only: definitions (local type definitions, NOT the main class definition), implementations (local helper class implementations), macros, testclasses (ABAP Unit). Comma-separated. For DDLS: use include="elements" for the CDS field catalog (key fields, aliases, associations, expression types) instead of raw DDL. For VERSIONS (CLAS): include selects the class include history to query (main, definitions, implementations, macros, testclasses).
maxRowsNoRow cap (default 100). On 758, TABLE_CONTENTS returns N+1; use TABLE_QUERY or cap client-side.
toLabelNoaction="diff" optional display label for the NEW side in the summary and patch header, e.g. "active" or "inactive draft". Does not affect source resolution.
versionNoSource version to read. "active" (default) returns the last activated version. "inactive" returns the user's unactivated draft or active if no draft exists. "auto" returns the draft if one exists, else active.
fromLabelNoaction="diff" optional display label for the OLD side in the summary and patch header, e.g. "DNT-6-6: Validate discounts (DS7K900123)". Does not affect source resolution.
sqlFilterNoTABLE_CONTENTS condition expression only (no WHERE, no SELECT); broken on 758 (SAP expects SELECT). Use TABLE_QUERY where.
maxResultsNoFor DEVC: max number of objects to list (default 200, clamped to [1, 1000]). Larger packages may be silently truncated by SAP at this limit; raise it if needed.
objectTypeNoFor API_STATE and VERSIONS: SAP object type (CLAS, INTF, PROG, FUNC, INCL, DDLS, DCLS, BDEF, SRVD, etc.). For API_STATE: auto-detected from name if omitted. For VERSIONS: required to pick the correct revisions endpoint (e.g., "FUNC" + group for function modules); inferred from CL_/IF_/CX_ name prefixes when possible, defaults to PROG.
versionUriNoVERSION_SOURCE: canonical source/revision URI from VERSIONS .revisions[].uri; rejects unrelated ADT endpoints, absolute URLs, traversal, queries, and fragments.
force_refreshNoFor source reads: bypass cached source and inactive-list state before reading. Use when you know the object changed outside ARC-1.
expand_includesNoFor FUGR type only. When true, recursively expands the function group include tree — the main source plus all nested INCLUDEs (the FUNCTION...ENDFUNCTION bodies live in nested LZ<grp>U01/U02 includes, so a flat one-level walk misses them). Each block is prefixed with a "=== name ===" marker; depth/count-capped. Dynpros and GUI status are not included (ADT does not expose them over REST).
includeSignatureNoFor FUNC type only. When true, response is JSON: {source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}, processingType?, updateTaskKind?} — each parameter parsed into {kind, name, type, byValue?, default?, optional?}; processingType reports rfc/update/normal. Default false (returns plain source body).

TDQS

A4.9/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation, disclosing on-prem-only types, token cost implications, draft/active version semantics, diff behavior, and the note about inactive draft existence. No contradictions with annotations.

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

Conciseness4/5

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

The description is lengthy but justified given 23 parameters and 40+ types. It is front-loaded with the core purpose and then systematically covers types, parameters, and options. It could benefit from more sectioning, but each sentence provides essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema, the description covers all parameter interactions, type-specific behaviors, platform restrictions, and performance considerations. It is exceptionally complete, leaving few if any gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even with 100% schema coverage, the description adds rich semantics: examples for where, warnings about 758 !=, details on grep fallback, include semantics, method usage, and format costs. It thoroughly explains each parameter's behavior and edge cases.

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 clearly states 'Read SAP ABAP objects' and enumerates all supported types, distinguishing itself from SAPContext (intent-level) and other siblings like SAPSearch. It also specifies sub-actions (raw source, method body, grep, etc.), making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It explicitly advises to prefer SAPContext for explanations or pre-change orientation, and provides detailed guidance on when to use method='*', grep, include, and expand_includes. It also notes on-prem limitations and token-saving strategies, leaving no ambiguity about selection.

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

SAPSearchA
Read-only

Search for ABAP objects, exact object-directory entries, or source code. Modes:

  1. Object search (default): name pattern with wildcards (*); returns type, name, package, description, ADT URI.

  2. TADIR lookup (searchType="tadir_lookup"): exact cross-package lookup of one or more names (prefer over long SAPQuery TADIR IN-lists). Tips: BOR objects appear as SOBJ; the uri field feeds SAPNavigate, objectType feeds SAPRead/SAPWrite/SAPActivate. Searches object NAMES only — for field names use SAPRead(type='DDLS', include='elements') or SAPQuery on DD03L.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNoFor tadir_lookup: exact object names to resolve across packages. Prefer this over long SAPQuery TADIR IN-lists.
queryNoSearch pattern for object search, or comma/whitespace-separated names for tadir_lookup.
sourceNoFor tadir_lookup only: data source for the lookup. "adt" (default) uses the ADT info-system endpoint — workbench-resolvable objects only. "db" issues SQL against table TADIR — also surfaces orphan/ghost rows from aborted create-delete cycles (requires sql scope and SAP_ALLOW_FREE_SQL=true). "both" runs both paths and adds a "splitBrain" array listing names where the two sources disagree, plus a "warnings" array explaining each divergence (requires sql scope).
maxResultsNoMaximum results (default 100)
objectTypeNoFor source_code search: filter by object type (e.g., PROG, CLAS, FUNC). For tadir_lookup: single type filter; use objectTypes for multiple.
searchTypeNoSearch mode: "object" (default) searches by object name, "tadir_lookup" does exact cross-package object lookup.
objectTypesNoFor tadir_lookup: optional ADT/TADIR type filters (e.g., TABL, DDLS, BDEF, SRVB, CLAS/OC).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries the transparency burden. It discloses the db source requires 'sql scope and SAP_ALLOW_FREE_SQL=true', explains the 'splitBrain' array behavior when sources disagree, notes BOR objects appear as SOBJ, and covers how uri/objectType feed other tools. This is strong behavioral disclosure beyond the read-only hint.

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?

The description is compact and front-loaded with the core purpose, then organized into numbered modes with a tips section. It's dense but every sentence adds value — no wasted words. Slightly long but appropriately so for a multi-mode tool with nuanced behaviors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, no output schema, and readOnly-only annotations, the description covers the purpose, all modes, parameter semantics, cross-tool integration (uri feeds SAPNavigate, objectType feeds SAPRead/SAPWrite/SAPActivate), and edge cases (orphan/ghost rows, splitBrain). Nothing critical is unexplained for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Though schema coverage is 100%, the description adds substantial meaning: it clarifies searchType 'object' is default and tadir_lookup does exact cross-package lookup, explains query applies comma/whitespace-separated names for tadir_lookup, details the source enum values (adt uses info-system endpoint, db uses SQL against TADIR), and explains objectTypes for multiple type filters. Each parameter's behavior is enriched beyond the schema.

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 clearly states 'Search for ABAP objects, exact object-directory entries, or source code' and enumerates two distinct modes (object search default, tadir_lookup). It distinguishes itself from siblings by explicitly stating searches object NAMES only and directing field-name searches to SAPRead/SAPQuery, clearly differentiating from associated tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: prefer tadir_lookup over 'long SAPQuery TADIR IN-lists', and directs users away for field-name searches ('for field names use SAPRead... or SAPQuery on DD03L'). It also explains when source='db' is advantageous (surfaces orphan/ghost rows) versus the adt default.

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

SAPTransportA
Destructive

Manage CTS transport requests (SE09/SE10). Actions: list (current user, modifiable), get (tasks + objects), create (always a Workbench (K) request — the package/target sets target & layer, not the request category; optional explicit target), release, delete, remove_object (keep the request), reassign (change owner), release_recursive (tasks then parent), check (does a package need a transport — type, name, package), history (legacy name: current object lock plus assignment candidates — type, name; not complete transport history; read-only, no write scope needed). IDs look like A4HK900123. Status: D/L=modifiable, O/P=releasing, R/N=released.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoTransport request ID, e.g. A4HK900123 (required for get/diff/release/delete/reassign/release_recursive/remove_object)
nameNoObject name (for check, history, or remove_object actions)
typeNoObject type for check/history/remove_object actions (PROG, CLAS, DDLS, etc.). Not used by create, which creates a Workbench (K) request.
userNoList user (default: current SAP user; "*" means all visible owners).
limitNodiff: objects per call (default 20, max 40); page with offset.
ownerNoNew owner SAP username (required for reassign)
pgmidNoProgram ID for remove_object: "R3TR" (whole object) or "LIMU" (sub-object). Required — object type alone does not determine pgmid.
actionYeslist: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. diff: what a transport CHANGED — per object, the revision written under it vs the one before, as diff hunks (get only lists names). LIMU entries roll up to their class; an open transport compares to the last released revision. Read baselineStatus first: prior-revision = solid; prior-revision-unverified = pair guessed, may be another change; no-prior-snapshot = created here; baseline-ambiguous = no baseline, so an all-additions block is NOT proof of creation; baseline-unavailable = the read FAILED, never call that unchanged. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. "/TRG/" or "C11"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with "...contains locked objects"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check create/modify transport needs for a package/object (requires type, name, package; operation defaults to create). history: inspect the current object lock and assignment candidates (legacy action name; not complete transport history; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Read-only. Both report unavailability at runtime on releases that lack the value-help endpoint.
offsetNodiff: first object to diff (default 0).
statusNoTransport status filter (for list). D=modifiable (default), R=released, "*"=all statuses.
targetNoExplicit transport target (Transportziel / TR_TARGET) for create — what the user means by "create a transport with target X". Forms: a system ("C11"), system.client ("C11.021"), or target group ("/TRG/"). The group and system.client forms require extended transport control (CTC) to be active. Created via the tm:root/newrequest endpoint (the only ADT path that sets the target directly) — this needs a newer ABAP Platform / S/4HANA; SAP_BASIS 7.50 rejects it with "user action is not supported" (an ADT-stack limitation, so set the target in SE09/SE10 there instead). SAP validates the target — an unknown target is rejected. Pass the exact value the user gives; do not invent one.
packageNoPackage name. For create: optional — defaults to $TMP; an explicit package influences the route/target, while the request remains Workbench type K. For check: required.
summaryNoFor list only. DEFAULT true: headers-only — drops each transport's (and task's) object lists, keeping id/description/owner/status/target + objectCount; use action="get" for one in full. Pass false for full object lists (~5x larger).
operationNoCheck mode: create (default) or modify.
recursiveNoApply recursively to child tasks (for delete/reassign). release_recursive always recurses.
maxResultsNoMaximum list rows or check/history assignment candidates (defaults: list/history 50, check 10; max 1000).
descriptionNoTransport description text (required for create)
resultFormatNorelease actions: legacy (default) or structured JSON.
timeoutSecondsNorelease timeout seconds: 1-1800; default 300.
transportLayerNoTransport layer for create (optional, advanced). Sent as the ?transportLayer= query param to override which consolidation route — and therefore which target — SAP resolves. OMIT IT by default: SAP resolves the target from the package automatically, which is correct for almost all cases. Never invent a value — if you need a specific layer, obtain it from action="layers" or from the user. Only effective when that layer has a classic STMS consolidation route; otherwise the request is local regardless.
removeLockedObjectsNoFor delete only. Strip locked objects from each task before deleting, so a request that still holds a locked object (e.g. a deleted object's lingering record → HTTP 400 "...contains locked objects") can be removed.

TDQS

A4.6/5.0
Behavior5/5

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

The description is exceptionally transparent about behavior. It warns of destructive actions (delete, release) and details how to control them (recursive, removeLockedObjects). It discloses limitations (e.g., history is not complete, create always produces K request, SAP_BASIS 7.50 limitation for target). It also distinguishes read-only operations (layers, targets) and notes permission requirements ('no write scope needed'). This goes far beyond the annotations (readOnlyHint=false, destructiveHint=true) and even enriches them with actionable context. No contradiction with annotations.

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

Conciseness4/5

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

The description is long but well-structured: it opens with the overall purpose, then lists actions with embedded details, and includes status codes and caveats. Each sentence carries meaningful information; there is little fluff. While not as terse as the TDQS 4.3 example, it efficiently packs a large amount of necessary detail for a complex 21-parameter tool. The structure (action-by-action) aids scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (21 parameters, 10+ actions, no output schema), the description is remarkably complete. It covers all actions, explains edge cases (e.g., $TMP default, extended transport control requirement, SAP_BASIS 7.50 fallback), provides return hints (e.g., 'response reports the resolved transport target'), and clarifies limitations (e.g., 'not complete transport history'). It effectively compensates for the missing output schema by describing expected results and failure modes.

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 100% with detailed per-parameter descriptions. The tool description adds further semantic context, such as defaults ($TMP), interplay between parameters (package influences target), and validation rules (target must be valid). For example, the 'action' parameter in the schema is already long, but the description adds practical guidance on when to use summary=true and how to interpret diff baselines. This adds value beyond the schema, justifying a score above the baseline of 3.

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 clearly states the tool's purpose as managing CTS transport requests (SE09/SE10) and enumerates specific actions (list, get, create, release, etc.). It uses a specific verb+resource pattern and differentiates from sibling tools like SAPRead or SAPManage by focusing on transport lifecycle operations. The explicit action list and status code explanation provide unambiguous scope.

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?

The description gives clear context for when to use the tool and its actions, e.g., 'check: check create/modify transport needs' and 'history: ... works without SAP_ALLOW_TRANSPORT_WRITES'. It also notes read-only actions (layers, targets) and explains trade-offs (e.g., summary=true for cheaper list). However, it does not explicitly compare against sibling tools or state 'use this instead of X', so it lacks explicit exclusions or alternatives. Still, context is clear enough for a 4.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv1.1.0
    • ChangedSAPDiagnose7 fields changed
      • removedInput schema / properties / action / description
        Removed value: -"Diagnostic action"
      • changedInput schema / properties / coverage / description
        Previous value: -"For action=\"unittest\": also return statement/branch/procedure coverage for the object, plus methodsBelowFull — the methods below 100% statement coverage, worst first (what to test next) — in one extra round-trip. If the coverage endpoint or measurement is unavailable, returns the tests without coverage. Default false."New value: +"unittest only: collect statement/branch/procedure coverage and methodsBelowFull. Unavailable measurements do not discard test results. Default false."
      • changedInput schema / properties / detailUrl / description
        Previous value: -"ADT detail URL for gateway_errors detail mode (preferred over id+errorType). Accepts absolute or /sap/bc/adt/... path."New value: +"Canonical host-relative /sap/bc/adt/gw/errorlog/... path for detail mode; absolute URLs are rejected."
      • addedInput schema / properties / includeSubpackages
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / resultFormat
        Added value: +{
        +  "description": "unittest: legacy|structured|junit; atc: legacy|structured; other actions reject it.",
        +  "enum": [
        +    "legacy",
        +    "structured",
        +    "junit"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / timeoutSeconds
        Added value: +{
        +  "description": "unittest/atc timeout: 1-3600s; default 300.",
        +  "type": "number"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Object type (PROG, CLAS, etc.) (for syntax/unittest/atc/object_state)"New value: +"Object type; unittest accepts CLAS, PROG, FUGR, or DEVC."
    • ChangedSAPRead5 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format. \"text\" (default): raw source. \"structured\" (CLAS only): JSON metadata + EVERY class include (main, testclasses, definitions, implementations, macros) — a superset of \"text\", so it always costs MORE (measured +10% to +1685%). Use only to split test from production code; otherwise method=\"*\" / method=\"name\" / grep=."New value: +"Output format. For action=\"diff\", \"structured\" returns JSON {hasDifferences, identical, added, removed, diff, version labels}; default remains the human-readable patch. For ordinary reads, \"text\" (default) is raw source; \"structured\" (CLAS only) returns JSON metadata + EVERY class include — a superset of \"text\", so it always costs MORE (measured +10% to +1685%). Use only to split test from production code; otherwise method=\"*\" / method=\"name\" / grep=."
      • changedInput schema / properties / maxRows / description
        Previous value: -"For TABLE_CONTENTS and TABLE_QUERY: max rows to return (default 100)"New value: +"Row cap (default 100). On 758, TABLE_CONTENTS returns N+1; use TABLE_QUERY or cap client-side."
      • changedInput schema / properties / sqlFilter / description
        Previous value: -"For TABLE_CONTENTS: condition expression only (no WHERE, no SELECT), e.g. \"MANDT = '100'\" or \"MATNR LIKE 'Z%'\"."New value: +"TABLE_CONTENTS condition expression only (no WHERE, no SELECT); broken on 758 (SAP expects SELECT). Use TABLE_QUERY where."
      • changedInput schema / properties / versionUri / description
        Previous value: -"For VERSION_SOURCE: URI of a specific revision from SAPRead(type=\"VERSIONS\") response (.revisions[].uri). Must start with /sap/bc/adt/."New value: +"VERSION_SOURCE: canonical source/revision URI from VERSIONS .revisions[].uri; rejects unrelated ADT endpoints, absolute URLs, traversal, queries, and fragments."
      • changedInput schema / properties / where / description
        Previous value: -"For TABLE_QUERY: structured WHERE conditions, ANDed together. Each item: {field, op, value?}. Allowed ops: =, !=, <>, <, <=, >, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL. For IN/NOT IN: value must be a comma-separated list of single-quoted literals, e.g. \"'261','262'\". Subqueries are not allowed. Example: [{\"field\":\"MATNR\",\"op\":\"=\",\"value\":\"300006888\"},{\"field\":\"BUDAT_MKPF\",\"op\":\">=\",\"value\":\"20250101\"}]."New value: +"For TABLE_QUERY: structured WHERE conditions, ANDed together. Each item: {field, op, value?}. Ops: =, <>, <, <=, >, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL; use <> because 758 rejects !=. For IN/NOT IN: use bare comma-separated values; do NOT quote them. ARC-1 quotes and escapes values, e.g. \"261,262\". No subqueries. Example: [{\"field\":\"MATNR\",\"op\":\"=\",\"value\":\"300006888\"},{\"field\":\"BUDAT_MKPF\",\"op\":\">=\",\"value\":\"20250101\"}]."
    • ChangedSAPTransport8 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check create/modify transport needs for a package/object (requires type, name, package; operation defaults to create). history: inspect the current object lock and assignment candidates (legacy action name; not complete transport history; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Read-only. Both report unavailability at runtime on releases that lack the value-help endpoint."New value: +"list: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. diff: what a transport CHANGED — per object, the revision written under it vs the one before, as diff hunks (get only lists names). LIMU entries roll up to their class; an open transport compares to the last released revision. Read baselineStatus first: prior-revision = solid; prior-revision-unverified = pair guessed, may be another change; no-prior-snapshot = created here; baseline-ambiguous = no baseline, so an all-additions block is NOT proof of creation; baseline-unavailable = the read FAILED, never call that unchanged. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check create/modify transport needs for a package/object (requires type, name, package; operation defaults to create). history: inspect the current object lock and assignment candidates (legacy action name; not complete transport history; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Read-only. Both report unavailability at runtime on releases that lack the value-help endpoint."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "list",
        -  "get",
        -  "check",
        -  "history",
        -  "layers",
        -  "targets"
        -]New value: +[
        +  "list",
        +  "get",
        +  "diff",
        +  "check",
        +  "history",
        +  "layers",
        +  "targets"
        +]
      • changedInput schema / properties / id / description
        Previous value: -"Transport request ID, e.g. A4HK900123 (required for get/release/delete/reassign/release_recursive/remove_object)"New value: +"Transport request ID, e.g. A4HK900123 (required for get/diff/release/delete/reassign/release_recursive/remove_object)"
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "diff: objects per call (default 20, max 40); page with offset.",
        +  "type": "number"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "diff: first object to diff (default 0).",
        +  "type": "number"
        +}
      • addedInput schema / properties / resultFormat
        Added value: +{
        +  "description": "release actions: legacy (default) or structured JSON.",
        +  "enum": [
        +    "legacy",
        +    "structured"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / timeoutSeconds
        Added value: +{
        +  "description": "release timeout seconds: 1-1800; default 300.",
        +  "type": "number"
        +}
      • changedInput schema / properties / user / description
        Previous value: -"SAP user for list (default: current user; \"*\" means all users)."New value: +"List user (default: current SAP user; \"*\" means all visible owners)."
  2. 8 tool updatesv1.0.2
    • ChangedSAPContext7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / includeIndirect / description
        Previous value: -"Only for action=\"impact\". Include indirect (transitive) downstream where-used entries. Default false."New value: +"impact: Include indirect (transitive) downstream where-used entries. Default false."
      • changedInput schema / properties / includeKtd / description
        Previous value: -"Only for action=\"deps\". When true/default, prepend the object Knowledge Transfer Document (KTD/SKTD) when one exists. Set false to skip the KTD lookup."New value: +"deps: When true/default, prepend the object Knowledge Transfer Document (KTD/SKTD) when one exists. Set false to skip the KTD lookup."
      • changedInput schema / properties / maxDeps / description
        Previous value: -"Maximum dependencies to resolve (default 20). Lower = faster + fewer tokens."New value: +"Max dependencies to resolve (default 20). Lower = faster + fewer tokens."
      • addedInput schema / properties / maxResults
        Added value: +{
        +  "description": "usages: max entries (default 100); impact: max per downstream bucket (default 50). Max 1000. \"usageCount\"/\"summary\" stay true totals, not page sizes.",
        +  "type": "number"
        +}
      • changedInput schema / properties / siblingCheck / description
        Previous value: -"Only for action=\"impact\". Enable sibling metadata-extension consistency analysis. Default true."New value: +"impact: Enable sibling metadata-extension consistency analysis. Default true."
      • changedInput schema / properties / siblingMaxCandidates / description
        Previous value: -"Only for action=\"impact\". Maximum sibling DDLS candidates to compare. Default 4; hard cap 10."New value: +"impact: Maximum sibling DDLS candidates to compare. Default 4; hard cap 10."
    • ChangedSAPDiagnose3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "syntax",
        -  "unittest",
        -  "atc",
        -  "cds_testcases",
        -  "dumps",
        -  "traces",
        -  "trace_start",
        -  "trace_requests",
        -  "trace_cancel",
        -  "system_messages",
        -  "gateway_errors",
        -  "object_state",
        -  "quickfix",
        -  "apply_quickfix",
        -  "odata_perf",
        -  "cds_sql",
        -  "sql_trace_state",
        -  "set_sql_trace_state",
        -  "sql_trace_directory",
        -  "authorization_trace"
        -]New value: +[
        +  "syntax",
        +  "unittest",
        +  "atc",
        +  "atc_variants",
        +  "cds_testcases",
        +  "dumps",
        +  "traces",
        +  "trace_start",
        +  "trace_requests",
        +  "trace_cancel",
        +  "system_messages",
        +  "gateway_errors",
        +  "object_state",
        +  "quickfix",
        +  "apply_quickfix",
        +  "odata_perf",
        +  "cds_sql",
        +  "sql_trace_state",
        +  "set_sql_trace_state",
        +  "sql_trace_directory",
        +  "authorization_trace"
        +]
      • changedInput schema / properties / variant / description
        Previous value: -"ATC check variant (for atc action)"New value: +"atc: check variant; atc_variants: name filter (*=all)"
    • ChangedSAPLint1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • ChangedSAPManage2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / responsible / description
        Previous value: -"BTP only: the internal ABAP user (XUBNAME, e.g. CB9980000000) for the new package person-responsible. Auto-resolved from prior object creates if omitted; the IAS email is rejected."New value: +"Person-responsible: an existing ABAP user (XUBNAME, max 12 chars); an email is rejected. Defaults to the connection user; pass explicitly under principal propagation. BTP: auto-resolved from prior creates."
    • ChangedSAPNavigate3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / maxResults
        Added value: +{
        +  "description": "references: max entries (default 100, max 1000). \"total\" counts every match of the filter.",
        +  "type": "number"
        +}
      • changedInput schema / properties / objectType / description
        Previous value: -"For references action: filter where-used results by ADT object type in slash format (e.g., PROG/P, CLAS/OC, FUGR/FF, INTF/OI). On systems supporting the scope endpoint, only returns references from objects of the specified type. On older systems, the filter is ignored and all references are returned with a note."New value: +"references: keep only results of this ADT type, slash format (CLAS/OC, PROG/P, FUGR/FF). A bare prefix (\"CLAS\") matches every subtype."
    • ChangedSAPRead6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / format / description
        Previous value: -"Output format. \"text\" (default): raw source code. \"structured\" (CLAS only): JSON with metadata (description, language, category) + decomposed source (main, testclasses, definitions, implementations, macros). Useful when you need to understand class structure or separate test code from production code."New value: +"Output format. \"text\" (default): raw source. \"structured\" (CLAS only): JSON metadata + EVERY class include (main, testclasses, definitions, implementations, macros) — a superset of \"text\", so it always costs MORE (measured +10% to +1685%). Use only to split test from production code; otherwise method=\"*\" / method=\"name\" / grep=."
      • changedInput schema / properties / include / description
        Previous value: -"For CLAS: DO NOT use this to read the main class — omit include entirely to get the full class source (CLASS DEFINITION + CLASS IMPLEMENTATION). This parameter reads class-LOCAL auxiliary files only: definitions (local type definitions, NOT the main class definition), implementations (local helper class implementations), macros, testclasses (ABAP Unit). Comma-separated. Not all classes have these sections — missing ones return a note instead of an error. For DDLS: use include=\"elements\" to get a structured field list extracted from the CDS DDL source — shows key fields, aliases, associations, and expression types (calculated, case, cast). Useful for understanding CDS entity structure without parsing raw DDL. For VERSIONS (CLAS): include selects the class include history to query (main, definitions, implementations, macros, testclasses)."New value: +"For CLAS: DO NOT use this to read the main class — omit include entirely to get the full class source (CLASS DEFINITION + CLASS IMPLEMENTATION). This parameter reads class-LOCAL auxiliary files only: definitions (local type definitions, NOT the main class definition), implementations (local helper class implementations), macros, testclasses (ABAP Unit). Comma-separated. For DDLS: use include=\"elements\" for the CDS field catalog (key fields, aliases, associations, expression types) instead of raw DDL. For VERSIONS (CLAS): include selects the class include history to query (main, definitions, implementations, macros, testclasses)."
      • changedInput schema / properties / includeSignature / description
        Previous value: -"For FUNC type only. When true, response is JSON: {source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}} — each parameter parsed into {kind, name, type, byValue?, default?, optional?}. Default false (returns plain source body). Use this to introspect FM parameter signatures programmatically without re-parsing ABAP."New value: +"For FUNC type only. When true, response is JSON: {source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}, processingType?, updateTaskKind?} — each parameter parsed into {kind, name, type, byValue?, default?, optional?}; processingType reports rfc/update/normal. Default false (returns plain source body)."
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD or KTD (Knowledge Transfer Documents), TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (ABAP Platform 2025 / SAP_BASIS 8.16+, discovery-gated, return JSON metadata + AFF JSON source): DESD (CDS Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (CDS Static Cache), CSNM (Core Schema Notation Model), COTA (Communication Target). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD or KTD (Knowledge Transfer Documents), TABL (transparent tables and DDIC structures), TTYP, VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (discovery-gated; XML metadata; source is AFF JSON, or DDL text for DTSC/DSFD/DTDC): DESD (Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (Static Cache), CSNM (CSN Model), COTA (Communication Target), DSFD (Scalar Function Def), DTDC (Dynamic Cache), UIAD (Launchpad App Descriptor Item). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "KTD",
        -  "TABL",
        -  "VIEW",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TTYP",
        -  "TABLE_CONTENTS",
        -  "TABLE_QUERY",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MSAG",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FEATURE_TOGGLE",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE",
        -  "DESD",
        -  "DTSC",
        -  "CSNM",
        -  "EVTB",
        -  "EVTO",
        -  "COTA"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "KTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TTYP",
        +  "TABLE_CONTENTS",
        +  "TABLE_QUERY",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE",
        +  "DESD",
        +  "DTSC",
        +  "CSNM",
        +  "EVTB",
        +  "EVTO",
        +  "COTA",
        +  "DSFD",
        +  "DTDC",
        +  "UIAD"
        +]
    • ChangedSAPSearch1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • ChangedSAPTransport8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / action / description
        Previous value: -"list: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. Uses the package value-help endpoint (NW 7.52+); older releases report it's unavailable. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Uses the official ADT target value-help; available only on releases whose ADT stack supports explicit targets (NW 7.50/7.51 report it's unavailable). Read-only."New value: +"list: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check create/modify transport needs for a package/object (requires type, name, package; operation defaults to create). history: inspect the current object lock and assignment candidates (legacy action name; not complete transport history; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Read-only. Both report unavailability at runtime on releases that lack the value-help endpoint."
      • addedInput schema / properties / maxResults
        Added value: +{
        +  "description": "Maximum list rows or check/history assignment candidates (defaults: list/history 50, check 10; max 1000).",
        +  "type": "number"
        +}
      • addedInput schema / properties / operation
        Added value: +{
        +  "description": "Check mode: create (default) or modify.",
        +  "enum": [
        +    "create",
        +    "modify"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package / description
        Previous value: -"Package name. For create: optional — defaults to $TMP, pass an explicit package to influence the transport route (SAP infers K/W/T from the package's TADIR route). For check: required."New value: +"Package name. For create: optional — defaults to $TMP; an explicit package influences the route/target, while the request remains Workbench type K. For check: required."
      • changedInput schema / properties / summary / description
        Previous value: -"For list only. Headers-only overview: omit each transport's (and task's) object lists, keeping id/description/owner/status/target plus an objectCount. Use it to scan many open transports cheaply, then action=\"get\" the one you want in full."New value: +"For list only. DEFAULT true: headers-only — drops each transport's (and task's) object lists, keeping id/description/owner/status/target + objectCount; use action=\"get\" for one in full. Pass false for full object lists (~5x larger)."
      • changedInput schema / properties / type / description
        Previous value: -"Object type for check/history/remove_object actions (PROG, CLAS, DDLS, etc.). Not used by create — the SAP backend infers transport type (K/W/T) from the package's TADIR route on the CreateCorrectionRequest endpoint."New value: +"Object type for check/history/remove_object actions (PROG, CLAS, DDLS, etc.). Not used by create, which creates a Workbench (K) request."
      • changedInput schema / properties / user / description
        Previous value: -"SAP username to filter by (for list). Defaults to the current SAP user. Use \"*\" to list all users."New value: +"SAP user for list (default: current user; \"*\" means all users)."
  3. 2 tool updatesv0.9.27
    • ChangedSAPContext2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = object understanding / forward dependency context — \"what does <object> do?\" or \"what does <object> depend on?\". Returns the object KTD when available plus public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead.\n\"structure\" = TABL includes/appends."New value: +"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = object understanding / forward dependency context — \"what does <object> do?\" or \"what does <object> depend on?\". Returns the object KTD when available plus public API contracts of dependencies.\n\"usages\" = live SAP where-used lookup. Provide \"type\" when known; without it, the name must resolve uniquely. Prefer \"impact\" for CDS.\n\"structure\" = TABL includes/appends."
      • changedInput schema / properties / type / description
        Previous value: -"Object type. Optional for action=\"impact\" (defaults to DDLS); required otherwise."New value: +"Object type. Optional for action=\"impact\" (defaults to DDLS) or action=\"usages\"; required otherwise."
    • ChangedSAPDiagnose5 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "syntax",
        -  "unittest",
        -  "atc",
        -  "cds_testcases",
        -  "dumps",
        -  "traces",
        -  "trace_start",
        -  "trace_requests",
        -  "trace_cancel",
        -  "system_messages",
        -  "gateway_errors",
        -  "object_state",
        -  "quickfix",
        -  "apply_quickfix",
        -  "odata_perf",
        -  "cds_sql",
        -  "sql_trace_state",
        -  "set_sql_trace_state",
        -  "sql_trace_directory"
        -]New value: +[
        +  "syntax",
        +  "unittest",
        +  "atc",
        +  "cds_testcases",
        +  "dumps",
        +  "traces",
        +  "trace_start",
        +  "trace_requests",
        +  "trace_cancel",
        +  "system_messages",
        +  "gateway_errors",
        +  "object_state",
        +  "quickfix",
        +  "apply_quickfix",
        +  "odata_perf",
        +  "cds_sql",
        +  "sql_trace_state",
        +  "set_sql_trace_state",
        +  "sql_trace_directory",
        +  "authorization_trace"
        +]
      • addedInput schema / properties / authObject
        Added value: +{
        +  "description": "Authorization object filter, e.g. S_TCODE.",
        +  "type": "string"
        +}
      • changedInput schema / properties / maxResults / description
        Previous value: -"Maximum results to return for dumps/system_messages/gateway_errors (default 50, bounded to a safe cap)."New value: +"Maximum results for dumps/system_messages/gateway_errors (default 50) or authorization_trace (default 100); bounded to a safe cap."
      • addedInput schema / properties / onlyFailures
        Added value: +{
        +  "description": "For authorization_trace: return only denied checks (RC<>0), similar to the SU53 failure view.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / user / description
        Previous value: -"Filter dumps by SAP user (for dumps action)"New value: +"SAP-user filter for dumps, feeds, or authorization_trace."
  4. 4 tool updatesv0.9.23
    • ChangedSAPContext4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = object understanding / forward dependency context — \"what does <object> do?\" or \"what does <object> depend on?\". Returns the object KTD when available plus public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead."New value: +"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = object understanding / forward dependency context — \"what does <object> do?\" or \"what does <object> depend on?\". Returns the object KTD when available plus public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead.\n\"structure\" = TABL includes/appends."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "impact",
        -  "deps",
        -  "usages"
        -]New value: +[
        +  "impact",
        +  "deps",
        +  "usages",
        +  "structure"
        +]
      • changedInput schema / properties / type / description
        Previous value: -"Object type. Required for action=\"deps\" and action=\"usages\". Optional for action=\"impact\" — defaults to DDLS (the only supported type for impact)."New value: +"Object type. Optional for action=\"impact\" (defaults to DDLS); required otherwise."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "CLAS",
        -  "INTF",
        -  "PROG",
        -  "FUNC",
        -  "DDLS"
        -]New value: +[
        +  "CLAS",
        +  "INTF",
        +  "PROG",
        +  "FUNC",
        +  "DDLS",
        +  "TABL"
        +]
    • ChangedSAPDiagnose1 field changed
      • changedInput schema / properties / url / description
        Previous value: -"For action=\"odata_perf\": the host-relative OData path to probe, copied from the Fiori app's Network tab (e.g. \"/sap/opu/odata4/sap/.../Entity?$filter=...\" or \"/sap/opu/odata/sap/<SRV>/<EntitySet>?$top=20\"). Must be a path on the SAP system ARC-1 connects to — absolute URLs are rejected."New value: +"For odata_perf: the host-relative OData path to probe, from the Fiori app's Network tab (e.g. \"/sap/opu/odata4/sap/.../Entity?$filter=…\"). Must be a path on the connected system — absolute URLs are rejected."
    • ChangedSAPManage4 fields changed
      • changedInput schema / properties / domainId / description
        Previous value: -"Domain ID for FLP catalog creation (e.g., ZARC1_SALES)."New value: +"Domain ID — required for flp_create_catalog (e.g., ZARC1_SALES)."
      • addedInput schema / properties / responsible
        Added value: +{
        +  "description": "BTP only: the internal ABAP user (XUBNAME, e.g. CB9980000000) for the new package person-responsible. Auto-resolved from prior object creates if omitted; the IAS email is rejected.",
        +  "type": "string"
        +}
      • changedInput schema / properties / softwareComponent / description
        Previous value: -"Software component for create_package (default: LOCAL)."New value: +"Software component for create_package (default: LOCAL on-prem, ZLOCAL on BTP)."
      • changedInput schema / properties / title / description
        Previous value: -"Title for FLP catalog/group creation."New value: +"Title — required for flp_create_catalog and flp_create_group."
    • ChangedSAPRead2 fields changed
      • addedInput schema / properties / fromLabel
        Added value: +{
        +  "description": "action=\"diff\" optional display label for the OLD side in the summary and patch header, e.g. \"DNT-6-6: Validate discounts (DS7K900123)\". Does not affect source resolution.",
        +  "type": "string"
        +}
      • addedInput schema / properties / toLabel
        Added value: +{
        +  "description": "action=\"diff\" optional display label for the NEW side in the summary and patch header, e.g. \"active\" or \"inactive draft\". Does not affect source resolution.",
        +  "type": "string"
        +}
  5. 3 tool updatesv0.9.21
    • ChangedSAPDiagnose14 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "syntax",
        -  "unittest",
        -  "atc",
        -  "cds_testcases",
        -  "dumps",
        -  "traces",
        -  "system_messages",
        -  "gateway_errors",
        -  "object_state",
        -  "quickfix",
        -  "apply_quickfix"
        -]New value: +[
        +  "syntax",
        +  "unittest",
        +  "atc",
        +  "cds_testcases",
        +  "dumps",
        +  "traces",
        +  "trace_start",
        +  "trace_requests",
        +  "trace_cancel",
        +  "system_messages",
        +  "gateway_errors",
        +  "object_state",
        +  "quickfix",
        +  "apply_quickfix",
        +  "odata_perf",
        +  "cds_sql",
        +  "sql_trace_state",
        +  "set_sql_trace_state",
        +  "sql_trace_directory"
        +]
      • addedInput schema / properties / aggregate
        Added value: +{
        +  "description": "For trace_start: aggregate the trace (default true).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / coverage
        Added value: +{
        +  "description": "For action=\"unittest\": also return statement/branch/procedure coverage for the object, plus methodsBelowFull — the methods below 100% statement coverage, worst first (what to test next) — in one extra round-trip. If the coverage endpoint or measurement is unavailable, returns the tests without coverage. Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "For trace_start: optional label for the trace request.",
        +  "type": "string"
        +}
      • addedInput schema / properties / expiresHours
        Added value: +{
        +  "description": "For trace_start: hours until the armed request auto-expires (default 24).",
        +  "type": "number"
        +}
      • changedInput schema / properties / id / description
        Previous value: -"Dump or trace ID (for dumps/traces actions). Omit to list, provide to get details."New value: +"Dump or trace ID (for dumps/traces actions); also the trace-request id to cancel (for trace_cancel). Omit to list, provide to get details."
      • addedInput schema / properties / maxExecutions
        Added value: +{
        +  "description": "For trace_start: how many matching executions to capture before the request is consumed (default 1).",
        +  "type": "number"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Object name (for syntax/unittest/atc/object_state); the CDS entity / DDLS source name for cds_testcases"New value: +"Object name (for syntax/unittest/atc/object_state); the CDS entity / DDLS source name for cds_testcases and cds_sql"
      • addedInput schema / properties / objectType
        Added value: +{
        +  "description": "For trace_start: what to match within the process. Defaults to the valid type for the process type (http→url, dialog→transaction, batch→report, rfc→functionModule).",
        +  "enum": [
        +    "any",
        +    "url",
        +    "transaction",
        +    "report",
        +    "functionModule"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / processType
        Added value: +{
        +  "description": "For trace_start: the kind of work process to capture. Default \"http\" (OData/Gateway). dialog = SAP GUI transaction, batch = background job, rfc = RFC call.",
        +  "enum": [
        +    "any",
        +    "http",
        +    "dialog",
        +    "batch",
        +    "rfc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sqlOn
        Added value: +{
        +  "description": "For action=\"set_sql_trace_state\": true to arm the ST05 SQL trace, false to disarm. Combine with user to filter the trace to one SAP user.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sqlTrace
        Added value: +{
        +  "description": "For trace_start: capture SQL/DB accesses (default true — required for analysis=\"dbAccesses\").",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / traceUser
        Added value: +{
        +  "description": "For trace_start/trace_requests: the SAP user whose matching execution is traced/listed. Defaults to the connected user.",
        +  "type": "string"
        +}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "For action=\"odata_perf\": the host-relative OData path to probe, copied from the Fiori app's Network tab (e.g. \"/sap/opu/odata4/sap/.../Entity?$filter=...\" or \"/sap/opu/odata/sap/<SRV>/<EntitySet>?$top=20\"). Must be a path on the SAP system ARC-1 connects to — absolute URLs are rejected.",
        +  "type": "string"
        +}
    • ChangedSAPManage4 fields changed
      • addedInput schema / properties / apiState
        Added value: +{
        +  "description": "For set_api_state: target state of the object's API release contract — RELEASED (mark released for ABAP Cloud / Clean Core) or NOT_RELEASED (revoke). Default RELEASED. Visibility (ABAP Cloud / Key User Apps) follows the contract's defaults. Read the current state first with SAPRead(type=\"API_STATE\").",
        +  "enum": [
        +    "RELEASED",
        +    "NOT_RELEASED"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / contract
        Added value: +{
        +  "description": "For set_api_state: which release contract to set. Default C1 (Key-User/Cloud — the common clean-core contract). Object types support different contracts: e.g. service definitions (SRVD) only support C0, classic DDIC views only C3, behavior definitions and tables support C0+C1. If the object does not support the chosen contract, the error lists the ones it does.",
        +  "enum": [
        +    "C0",
        +    "C1",
        +    "C2",
        +    "C3",
        +    "C4"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / objectType / description
        Previous value: -"ADT object type (e.g., CLAS/OC, DDLS/DF, PROG/P). Required for change_package."New value: +"ADT object type (e.g., CLAS/OC, DDLS/DF, PROG/P). Required for change_package. For set_api_state: object type of \"name\" when objectUri is omitted (e.g. CLAS, INTF, DDLS, TABL)."
      • changedInput schema / properties / objectUri / description
        Previous value: -"ADT URI of the object to move (e.g., /sap/bc/adt/oo/classes/zcl_my_class). If not provided, resolved automatically from objectName + objectType via search."New value: +"ADT URI of the object to move (e.g., /sap/bc/adt/oo/classes/zcl_my_class). If not provided, resolved automatically from objectName + objectType via search. For set_api_state: the object whose API release contract to set (or pass name + objectType instead)."
    • ChangedSAPRead1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "KTD",
        -  "TABL",
        -  "VIEW",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "TABLE_QUERY",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MSAG",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FEATURE_TOGGLE",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE",
        -  "DESD",
        -  "DTSC",
        -  "CSNM",
        -  "EVTB",
        -  "EVTO",
        -  "COTA"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "KTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TTYP",
        +  "TABLE_CONTENTS",
        +  "TABLE_QUERY",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE",
        +  "DESD",
        +  "DTSC",
        +  "CSNM",
        +  "EVTB",
        +  "EVTO",
        +  "COTA"
        +]
  6. 2 tool updatesv0.9.20
    • ChangedSAPContext2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = forward dependency context — \"what does <object> depend on?\". Returns public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead."New value: +"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = object understanding / forward dependency context — \"what does <object> do?\" or \"what does <object> depend on?\". Returns the object KTD when available plus public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead."
      • addedInput schema / properties / includeKtd
        Added value: +{
        +  "description": "Only for action=\"deps\". When true/default, prepend the object Knowledge Transfer Document (KTD/SKTD) when one exists. Set false to skip the KTD lookup.",
        +  "type": "boolean"
        +}
    • ChangedSAPRead3 fields changed
      • changedInput schema / properties / grep / description
        Previous value: -"Regex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex."New value: +"Regex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD/KTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex."
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (ABAP Platform 2025 / SAP_BASIS 8.16+, discovery-gated, return JSON metadata + AFF JSON source): DESD (CDS Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (CDS Static Cache), CSNM (Core Schema Notation Model), COTA (Communication Target). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD or KTD (Knowledge Transfer Documents), TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (ABAP Platform 2025 / SAP_BASIS 8.16+, discovery-gated, return JSON metadata + AFF JSON source): DESD (CDS Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (CDS Static Cache), CSNM (Core Schema Notation Model), COTA (Communication Target). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "TABL",
        -  "VIEW",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "TABLE_QUERY",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MSAG",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FEATURE_TOGGLE",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE",
        -  "DESD",
        -  "DTSC",
        -  "CSNM",
        -  "EVTB",
        -  "EVTO",
        -  "COTA"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "KTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TABLE_CONTENTS",
        +  "TABLE_QUERY",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE",
        +  "DESD",
        +  "DTSC",
        +  "CSNM",
        +  "EVTB",
        +  "EVTO",
        +  "COTA"
        +]
  7. 2 tool updatesv0.9.18
    • ChangedSAPRead3 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "description": "Set to \"diff\" for a unified diff between two source versions (uses from/to) — cheaper than fetching both sources. Source types only: PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, BDEF, SRVD, DDLX, TABL.",
        +  "enum": [
        +    "diff"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / from
        Added value: +{
        +  "description": "action=\"diff\" OLD side: \"active\" (default), \"inactive\", a revision id from SAPRead(type=\"VERSIONS\"), or a /sap/bc/adt/ revision URI.",
        +  "type": "string"
        +}
      • addedInput schema / properties / to
        Added value: +{
        +  "description": "action=\"diff\" NEW side (default \"inactive\" = pending unactivated changes). Same values as from.",
        +  "type": "string"
        +}
    • ChangedSAPTransport6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list: show transports (defaults to current user, modifiable only). get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. Uses the package value-help endpoint (NW 7.52+); older releases report it's unavailable. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Uses the official ADT target value-help; available only on releases whose ADT stack supports explicit targets (NW 7.50/7.51 report it's unavailable). Read-only."New value: +"list: show transports (defaults to current user, modifiable only). Pass summary=true for a headers-only overview that omits each transport's object lists (keeps an objectCount) — far cheaper when many transports are open. get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). remove_object: remove one object from a request, keeping the request — needs the full key pgmid+type+name. reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. Uses the package value-help endpoint (NW 7.52+); older releases report it's unavailable. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Uses the official ADT target value-help; available only on releases whose ADT stack supports explicit targets (NW 7.50/7.51 report it's unavailable). Read-only."
      • changedInput schema / properties / id / description
        Previous value: -"Transport request ID, e.g. A4HK900123 (required for get/release/delete/reassign/release_recursive)"New value: +"Transport request ID, e.g. A4HK900123 (required for get/release/delete/reassign/release_recursive/remove_object)"
      • changedInput schema / properties / name / description
        Previous value: -"Object name (for check or history actions)"New value: +"Object name (for check, history, or remove_object actions)"
      • addedInput schema / properties / pgmid
        Added value: +{
        +  "description": "Program ID for remove_object: \"R3TR\" (whole object) or \"LIMU\" (sub-object). Required — object type alone does not determine pgmid.",
        +  "type": "string"
        +}
      • addedInput schema / properties / summary
        Added value: +{
        +  "description": "For list only. Headers-only overview: omit each transport's (and task's) object lists, keeping id/description/owner/status/target plus an objectCount. Use it to scan many open transports cheaply, then action=\"get\" the one you want in full.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Object type for check/history actions (PROG, CLAS, DDLS, etc.). Not used by create — the SAP backend infers transport type (K/W/T) from the package's TADIR route on the CreateCorrectionRequest endpoint."New value: +"Object type for check/history/remove_object actions (PROG, CLAS, DDLS, etc.). Not used by create — the SAP backend infers transport type (K/W/T) from the package's TADIR route on the CreateCorrectionRequest endpoint."
  8. 1 tool updatev0.9.14
    • ChangedSAPRead1 field changed
      • addedInput schema / properties / grep / maxLength
        Added value: +512
  9. 4 tool updatesv0.9.13
    • ChangedSAPDiagnose2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "syntax",
        -  "unittest",
        -  "atc",
        -  "dumps",
        -  "traces",
        -  "system_messages",
        -  "gateway_errors",
        -  "object_state",
        -  "quickfix",
        -  "apply_quickfix"
        -]New value: +[
        +  "syntax",
        +  "unittest",
        +  "atc",
        +  "cds_testcases",
        +  "dumps",
        +  "traces",
        +  "system_messages",
        +  "gateway_errors",
        +  "object_state",
        +  "quickfix",
        +  "apply_quickfix"
        +]
      • changedInput schema / properties / name / description
        Previous value: -"Object name (for syntax/unittest/atc/object_state)"New value: +"Object name (for syntax/unittest/atc/object_state); the CDS entity / DDLS source name for cds_testcases"
    • ChangedSAPManage1 field changed
      • addedInput schema / properties / recordChanges
        Added value: +{
        +  "description": "Whether the created package records object changes in transport requests. Defaults to true for non-LOCAL software components or when a transport layer is set; false for literal LOCAL packages.",
        +  "type": "boolean"
        +}
    • ChangedSAPRead4 fields changed
      • changedInput schema / properties / expand_includes / description
        Previous value: -"For FUGR type only. When true, expands all INCLUDE statements and returns the full source of each include inline."New value: +"For FUGR type only. When true, recursively expands the function group include tree — the main source plus all nested INCLUDEs (the FUNCTION...ENDFUNCTION bodies live in nested LZ<grp>U01/U02 includes, so a flat one-level walk misses them). Each block is prefixed with a \"=== name ===\" marker; depth/count-capped. Dynpros and GUI status are not included (ADT does not expose them over REST)."
      • changedInput schema / properties / grep / description
        Previous value: -"Regex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, DDLX, TABL, PROG, FUNC, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex."New value: +"Regex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex."
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Server-driven objects (ABAP Platform 2025 / SAP_BASIS 8.16+, discovery-gated, return JSON metadata + AFF JSON source): DESD (CDS Logical External Schema), EVTB (RAP Event Binding), EVTO (RAP Event Object), DTSC (CDS Static Cache), CSNM (Core Schema Notation Model), COTA (Communication Target). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "TABL",
        -  "VIEW",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "TABLE_QUERY",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MSAG",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FEATURE_TOGGLE",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TABLE_CONTENTS",
        +  "TABLE_QUERY",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE",
        +  "DESD",
        +  "DTSC",
        +  "CSNM",
        +  "EVTB",
        +  "EVTO",
        +  "COTA"
        +]
    • ChangedSAPTransport5 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list: show transports (defaults to current user, modifiable only). get: fetch transport details including tasks and objects. create: create a new transport request (description required; package optional, defaults to $TMP — pass an explicit package to influence the transport route/type). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first). reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES)."New value: +"list: show transports (defaults to current user, modifiable only). get: fetch transport details including tasks and objects. create: create a new transport request (description required). To target another system, pass target=<system | system.client | /group/> (the Transportziel / TR_TARGET, e.g. \"/TRG/\" or \"C11\"; the group and system.client forms require extended transport control to be active). Otherwise omit target and pass an optional package to let SAP infer the route (defaults to $TMP). The response reports the resolved transport target; an empty target means a LOCAL request (cannot be transported onward). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first; removeLockedObjects=true to strip locked objects that otherwise block deletion with \"...contains locked objects\"). reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES). layers: list the transport layers this system offers (name + description + resolved target where any) — the valid values for create's transportLayer. Use this to discover a real value instead of guessing; works without SAP_ALLOW_TRANSPORT_WRITES. Uses the package value-help endpoint (NW 7.52+); older releases report it's unavailable. targets: list the valid transport targets (Transportziel / TR_TARGET) this system offers — the valid values for create's target. Use this to discover a real target (e.g. before create with target=). Uses the official ADT target value-help; available only on releases whose ADT stack supports explicit targets (NW 7.50/7.51 report it's unavailable). Read-only."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "list",
        -  "get",
        -  "check",
        -  "history"
        -]New value: +[
        +  "list",
        +  "get",
        +  "check",
        +  "history",
        +  "layers",
        +  "targets"
        +]
      • addedInput schema / properties / removeLockedObjects
        Added value: +{
        +  "description": "For delete only. Strip locked objects from each task before deleting, so a request that still holds a locked object (e.g. a deleted object's lingering record → HTTP 400 \"...contains locked objects\") can be removed.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / target
        Added value: +{
        +  "description": "Explicit transport target (Transportziel / TR_TARGET) for create — what the user means by \"create a transport with target X\". Forms: a system (\"C11\"), system.client (\"C11.021\"), or target group (\"/TRG/\"). The group and system.client forms require extended transport control (CTC) to be active. Created via the tm:root/newrequest endpoint (the only ADT path that sets the target directly) — this needs a newer ABAP Platform / S/4HANA; SAP_BASIS 7.50 rejects it with \"user action is not supported\" (an ADT-stack limitation, so set the target in SE09/SE10 there instead). SAP validates the target — an unknown target is rejected. Pass the exact value the user gives; do not invent one.",
        +  "type": "string"
        +}
      • addedInput schema / properties / transportLayer
        Added value: +{
        +  "description": "Transport layer for create (optional, advanced). Sent as the ?transportLayer= query param to override which consolidation route — and therefore which target — SAP resolves. OMIT IT by default: SAP resolves the target from the package automatically, which is correct for almost all cases. Never invent a value — if you need a specific layer, obtain it from action=\"layers\" or from the user. Only effective when that layer has a classic STMS consolidation route; otherwise the request is local regardless.",
        +  "type": "string"
        +}
  10. 1 tool updatev0.9.7
    • ChangedSAPRead6 fields changed
      • addedInput schema / properties / columns
        Added value: +{
        +  "description": "For TABLE_QUERY: columns to SELECT (default: all). Example: [\"MATNR\",\"BWART\",\"BUDAT\",\"MENGE\"].",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / grep
        Added value: +{
        +  "description": "Regex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, DDLX, TABL, PROG, FUNC, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex.",
        +  "type": "string"
        +}
      • changedInput schema / properties / maxRows / description
        Previous value: -"For TABLE_CONTENTS: max rows to return (default 100)"New value: +"For TABLE_CONTENTS and TABLE_QUERY: max rows to return (default 100)"
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, TABLE_QUERY, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "TABL",
        -  "VIEW",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MSAG",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FEATURE_TOGGLE",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TABLE_CONTENTS",
        +  "TABLE_QUERY",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE"
        +]
      • addedInput schema / properties / where
        Added value: +{
        +  "description": "For TABLE_QUERY: structured WHERE conditions, ANDed together. Each item: {field, op, value?}. Allowed ops: =, !=, <>, <, <=, >, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL. For IN/NOT IN: value must be a comma-separated list of single-quoted literals, e.g. \"'261','262'\". Subqueries are not allowed. Example: [{\"field\":\"MATNR\",\"op\":\"=\",\"value\":\"300006888\"},{\"field\":\"BUDAT_MKPF\",\"op\":\">=\",\"value\":\"20250101\"}].",
        +  "items": {
        +    "properties": {
        +      "field": {
        +        "description": "SAP field name (uppercase)",
        +        "type": "string"
        +      },
        +      "op": {
        +        "description": "Comparison operator",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Value to compare (omit for IS NULL / IS NOT NULL)",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "field",
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  11. 8 tool updatesv0.9.6
    • AddedSAPContext
    • AddedSAPDiagnose
    • AddedSAPLint
    • AddedSAPManage
    • AddedSAPNavigate
    • AddedSAPRead
    • AddedSAPSearch
    • AddedSAPTransport
  12. 8 tool updatesv0.9.3
    • RemovedSAPContext
    • RemovedSAPDiagnose
    • RemovedSAPLint
    • RemovedSAPManage
    • RemovedSAPNavigate
    • RemovedSAPRead
    • RemovedSAPSearch
    • RemovedSAPTransport
  13. 1 tool updatev0.9.2
    • ChangedSAPRead1 field changed
      • addedInput schema / properties / maxResults
        Added value: +{
        +  "description": "For DEVC: max number of objects to list (default 200, clamped to [1, 1000]). Larger packages may be silently truncated by SAP at this limit; raise it if needed.",
        +  "type": "number"
        +}
  14. 3 tool updatesv0.9.0
    • ChangedSAPNavigate1 field changed
      • changedInput schema / properties / objectType / description
        Previous value: -"For references action: filter where-used results by ADT object type in slash format (e.g., PROG/P, CLAS/OC, FUNC/FM, INTF/OI). On systems supporting the scope endpoint, only returns references from objects of the specified type. On older systems, the filter is ignored and all references are returned with a note."New value: +"For references action: filter where-used results by ADT object type in slash format (e.g., PROG/P, CLAS/OC, FUGR/FF, INTF/OI). On systems supporting the scope endpoint, only returns references from objects of the specified type. On older systems, the filter is ignored and all references are returned with a note."
    • ChangedSAPRead2 fields changed
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL, VIEW, STRU, DOMA, DTEL, TRAN, TABLE_CONTENTS, DEVC, SOBJ, SYSTEM, COMPONENTS, MESSAGES, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FTG2, ENHO, VERSIONS, VERSION_SOURCE."New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL (transparent tables and DDIC structures), VIEW, DOMA, DTEL, MSAG, TRAN, TABLE_CONTENTS, DEVC, SOBJ, SYSTEM, COMPONENTS, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DCLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "SKTD",
        -  "TABL",
        -  "VIEW",
        -  "STRU",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS",
        -  "AUTH",
        -  "FTG2",
        -  "ENHO",
        -  "VERSIONS",
        -  "VERSION_SOURCE"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "TABL",
        +  "VIEW",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TABLE_CONTENTS",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MSAG",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FEATURE_TOGGLE",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE"
        +]
    • ChangedSAPTransport3 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list: show transports (defaults to current user, modifiable only). get: fetch transport details including tasks and objects. create: create a new transport request. release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first). reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES)."New value: +"list: show transports (defaults to current user, modifiable only). get: fetch transport details including tasks and objects. create: create a new transport request (description required; package optional, defaults to $TMP — pass an explicit package to influence the transport route/type). release: release a single transport or task. delete: delete a transport (use recursive=true to delete tasks first). reassign: change transport owner (use recursive=true for tasks too). release_recursive: release all unreleased tasks first, then the transport itself. check: check if a transport is needed for a package/object (requires type, name, package). history: list transports referencing an object (reverse lookup; requires type, name; works without SAP_ALLOW_TRANSPORT_WRITES)."
      • changedInput schema / properties / package / description
        Previous value: -"Package name (for check action)"New value: +"Package name. For create: optional — defaults to $TMP, pass an explicit package to influence the transport route (SAP infers K/W/T from the package's TADIR route). For check: required."
      • changedInput schema / properties / type / description
        Previous value: -"For create: transport type K=Workbench (default), W=Customizing, T=Transport of Copies. For check/history: object type (PROG, CLAS, DDLS, etc.)"New value: +"Object type for check/history actions (PROG, CLAS, DDLS, etc.). Not used by create — the SAP backend infers transport type (K/W/T) from the package's TADIR route on the CreateCorrectionRequest endpoint."
  15. 6 tool updatesv0.7.2
    • ChangedSAPContext6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action: \"deps\" (default, can be omitted) = get dependency context. \"usages\" = reverse dependency lookup — find all objects that depend on the given name. Requires cache warmup (--cache-warmup). Only \"name\" is needed for usages."New value: +"Action:\n\"impact\" = CDS blast-radius analysis (DDLS only). USE THIS for any question like \"what breaks if I change <view>\", \"who consumes <I_*>\", \"impact analysis on <CDS>\", \"downstream of <view>\". Returns upstream AST dependencies + downstream where-used classified into RAP buckets (projectionViews, bdefs, serviceDefinitions, serviceBindings, accessControls, metadataExtensions, abapConsumers, documentation, tables, other), plus additive sibling-consistency diagnostics (consistencyHints + siblingExtensionAnalysis) when related DDLS siblings show asymmetric DDLX coverage. ALWAYS prefer over SAPQuery against DDDDLSRC/ACMDCLSRC/DDLXSRC_SRC/SRVDSRC_SRC (those text-scans produce noise this classifier filters out). Non-DDLS input returns a guardrail error.\n\"deps\" (default, can be omitted) = forward dependency context — \"what does <object> depend on?\". Returns public API contracts of dependencies.\n\"usages\" = reverse dependency lookup — \"who calls <object>?\". Requires cache warmup (--cache-warmup). Only \"name\" is needed. For CDS entities prefer action=\"impact\" instead."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "deps",
        -  "usages"
        -]New value: +[
        +  "impact",
        +  "deps",
        +  "usages"
        +]
      • addedInput schema / properties / includeIndirect
        Added value: +{
        +  "description": "Only for action=\"impact\". Include indirect (transitive) downstream where-used entries. Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / siblingCheck
        Added value: +{
        +  "description": "Only for action=\"impact\". Enable sibling metadata-extension consistency analysis. Default true.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / siblingMaxCandidates
        Added value: +{
        +  "description": "Only for action=\"impact\". Maximum sibling DDLS candidates to compare. Default 4; hard cap 10.",
        +  "type": "number"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Object type (required for deps action)"New value: +"Object type. Required for action=\"deps\" and action=\"usages\". Optional for action=\"impact\" — defaults to DDLS (the only supported type for impact)."
    • ChangedSAPDiagnose14 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "syntax",
        -  "unittest",
        -  "atc",
        -  "dumps",
        -  "traces"
        -]New value: +[
        +  "syntax",
        +  "unittest",
        +  "atc",
        +  "dumps",
        +  "traces",
        +  "system_messages",
        +  "gateway_errors",
        +  "quickfix",
        +  "apply_quickfix"
        +]
      • addedInput schema / properties / column
        Added value: +{
        +  "description": "Source column number for quickfix evaluation (default 0 for quickfix actions).",
        +  "type": "number"
        +}
      • addedInput schema / properties / detailUrl
        Added value: +{
        +  "description": "ADT detail URL for gateway_errors detail mode (preferred over id+errorType). Accepts absolute or /sap/bc/adt/... path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / errorType
        Added value: +{
        +  "description": "Gateway error type for gateway_errors detail by id (for example \"Frontend Error\"). Required when using id without detailUrl.",
        +  "type": "string"
        +}
      • addedInput schema / properties / from
        Added value: +{
        +  "description": "Optional lower time boundary for feed-based diagnostics actions (system_messages/gateway_errors).",
        +  "type": "string"
        +}
      • addedInput schema / properties / includeFullText
        Added value: +{
        +  "description": "For dumps detail mode only: include full formattedText blob. Default false to reduce token usage.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / line
        Added value: +{
        +  "description": "Source line number for quickfix evaluation (required for quickfix/apply_quickfix).",
        +  "type": "number"
        +}
      • changedInput schema / properties / maxResults / description
        Previous value: -"Maximum results to return (for dumps action, default 50)"New value: +"Maximum results to return for dumps/system_messages/gateway_errors (default 50, bounded to a safe cap)."
      • addedInput schema / properties / proposalUri
        Added value: +{
        +  "description": "Quickfix proposal URI from quickfix action (required for apply_quickfix).",
        +  "type": "string"
        +}
      • addedInput schema / properties / proposalUserContent
        Added value: +{
        +  "description": "Opaque userContent from quickfix action (required for apply_quickfix).",
        +  "type": "string"
        +}
      • addedInput schema / properties / sections
        Added value: +{
        +  "description": "Dump chapter IDs to include for dumps detail mode (for example [\"kap0\",\"kap3\",\"kap8\"]). Omit to use focused defaults.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Current source code (required for quickfix/apply_quickfix).",
        +  "type": "string"
        +}
      • addedInput schema / properties / to
        Added value: +{
        +  "description": "Optional upper time boundary for feed-based diagnostics actions (system_messages/gateway_errors).",
        +  "type": "string"
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Source version for syntax check (default \"active\"). Use \"inactive\" to validate pending changes.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedSAPLint4 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "lint",
        -  "lint_and_fix",
        -  "list_rules"
        -]New value: +[
        +  "lint",
        +  "lint_and_fix",
        +  "list_rules",
        +  "format",
        +  "get_formatter_settings",
        +  "set_formatter_settings"
        +]
      • addedInput schema / properties / indentation
        Added value: +{
        +  "description": "PrettyPrinter: indent source (for set_formatter_settings)",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / source / description
        Previous value: -"ABAP source code to lint (not needed for list_rules)"New value: +"ABAP or CDS source code to lint/format (not needed for list_rules/get_formatter_settings)"
      • addedInput schema / properties / style
        Added value: +{
        +  "description": "PrettyPrinter: keyword casing (for set_formatter_settings)",
        +  "enum": [
        +    "keywordUpper",
        +    "keywordLower",
        +    "keywordAuto",
        +    "none"
        +  ],
        +  "type": "string"
        +}
    • AddedSAPManage
    • ChangedSAPRead9 fields changed
      • addedInput schema / properties / force_refresh
        Added value: +{
        +  "description": "For source reads: bypass cached source and inactive-list state before reading. Use when you know the object changed outside ARC-1.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / group / description
        Previous value: -"For FUNC type. The function group containing the function module. Optional — auto-resolved via SAPSearch if omitted."New value: +"For FUNC/VERSIONS type. The function group containing the function module. Optional for FUNC — auto-resolved via SAPSearch if omitted. Required for VERSIONS when querying a function module revision feed."
      • changedInput schema / properties / include / description
        Previous value: -"For CLAS: DO NOT use this to read the main class — omit include entirely to get the full class source (CLASS DEFINITION + CLASS IMPLEMENTATION). This parameter reads class-LOCAL auxiliary files only: definitions (local type definitions, NOT the main class definition), implementations (local helper class implementations), macros, testclasses (ABAP Unit). Comma-separated. Not all classes have these sections — missing ones return a note instead of an error. For DDLS: use include=\"elements\" to get a structured field list extracted from the CDS DDL source — shows key fields, aliases, associations, and expression types (calculated, case, cast). Useful for understanding CDS entity structure without parsing raw DDL."New value: +"For CLAS: DO NOT use this to read the main class — omit include entirely to get the full class source (CLASS DEFINITION + CLASS IMPLEMENTATION). This parameter reads class-LOCAL auxiliary files only: definitions (local type definitions, NOT the main class definition), implementations (local helper class implementations), macros, testclasses (ABAP Unit). Comma-separated. Not all classes have these sections — missing ones return a note instead of an error. For DDLS: use include=\"elements\" to get a structured field list extracted from the CDS DDL source — shows key fields, aliases, associations, and expression types (calculated, case, cast). Useful for understanding CDS entity structure without parsing raw DDL. For VERSIONS (CLAS): include selects the class include history to query (main, definitions, implementations, macros, testclasses)."
      • changedInput schema / properties / objectType / description
        Previous value: -"For API_STATE: SAP object type (CLAS, INTF, PROG, FUGR, TABL, DDLS, etc.) — auto-detected from name if omitted"New value: +"For API_STATE and VERSIONS: SAP object type (CLAS, INTF, PROG, FUNC, INCL, DDLS, DCLS, BDEF, SRVD, etc.). For API_STATE: auto-detected from name if omitted. For VERSIONS: required to pick the correct revisions endpoint (e.g., \"FUNC\" + group for function modules); inferred from CL_/IF_/CX_ name prefixes when possible, defaults to PROG."
      • changedInput schema / properties / sqlFilter / description
        Previous value: -"For TABLE_CONTENTS: SQL WHERE clause filter"New value: +"For TABLE_CONTENTS: condition expression only (no WHERE, no SELECT), e.g. \"MANDT = '100'\" or \"MATNR LIKE 'Z%'\"."
      • changedInput schema / properties / type / description
        Previous value: -"Object type to read"New value: +"Object type to read (on-prem): PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL, VIEW, STRU, DOMA, DTEL, TRAN, TABLE_CONTENTS, DEVC, SOBJ, SYSTEM, COMPONENTS, MESSAGES, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE, INACTIVE_OBJECTS, AUTH, FTG2, ENHO, VERSIONS, VERSION_SOURCE."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "PROG",
        -  "CLAS",
        -  "INTF",
        -  "FUNC",
        -  "FUGR",
        -  "INCL",
        -  "DDLS",
        -  "DDLX",
        -  "BDEF",
        -  "SRVD",
        -  "SRVB",
        -  "TABL",
        -  "VIEW",
        -  "STRU",
        -  "DOMA",
        -  "DTEL",
        -  "TRAN",
        -  "TABLE_CONTENTS",
        -  "DEVC",
        -  "SOBJ",
        -  "SYSTEM",
        -  "COMPONENTS",
        -  "MESSAGES",
        -  "TEXT_ELEMENTS",
        -  "VARIANTS",
        -  "BSP",
        -  "BSP_DEPLOY",
        -  "API_STATE",
        -  "INACTIVE_OBJECTS"
        -]New value: +[
        +  "PROG",
        +  "CLAS",
        +  "INTF",
        +  "FUNC",
        +  "FUGR",
        +  "INCL",
        +  "DDLS",
        +  "DCLS",
        +  "DDLX",
        +  "BDEF",
        +  "SRVD",
        +  "SRVB",
        +  "SKTD",
        +  "TABL",
        +  "VIEW",
        +  "STRU",
        +  "DOMA",
        +  "DTEL",
        +  "TRAN",
        +  "TABLE_CONTENTS",
        +  "DEVC",
        +  "SOBJ",
        +  "SYSTEM",
        +  "COMPONENTS",
        +  "MESSAGES",
        +  "TEXT_ELEMENTS",
        +  "VARIANTS",
        +  "BSP",
        +  "BSP_DEPLOY",
        +  "API_STATE",
        +  "INACTIVE_OBJECTS",
        +  "AUTH",
        +  "FTG2",
        +  "ENHO",
        +  "VERSIONS",
        +  "VERSION_SOURCE"
        +]
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Source version to read. \"active\" (default) returns the last activated version. \"inactive\" returns the user's unactivated draft or active if no draft exists. \"auto\" returns the draft if one exists, else active.",
        +  "enum": [
        +    "active",
        +    "inactive",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / versionUri
        Added value: +{
        +  "description": "For VERSION_SOURCE: URI of a specific revision from SAPRead(type=\"VERSIONS\") response (.revisions[].uri). Must start with /sap/bc/adt/.",
        +  "type": "string"
        +}
    • AddedSAPTransport

TDQS

A4.1/5.0
Disambiguation3/5

The 8 tools are largely distinct in purpose, but there are overlaps. SAPRead and SAPContext both read object information, though they differ in orientation (raw source vs intent-level context). Similarly, SAPSearch and SAPContext both perform searches/usages - SAPContext's 'usages' action overlaps with SAPNavigate's references. SAPDiagnose also has syntax-checking while SAPLint covers linting, which could cause misselection.

Naming Consistency4/5

Tool names follow a consistent SAP-prefix pattern (SAPTransport, SAPRead, SAPSearch, SAPManage, SAPNavigate, SAPLint, SAPDiagnose, SAPContext). All use CamelCase with the cognate verb as the suffix. Minor inconsistency: SAPRead/SAPSearch are noun-focused while SAPManage/SAPNavigate are verb-focused, but the pattern is coherent and predictable.

Tool Count4/5

8 tools is a reasonable count for an SAP development server covering transport management, object reading, searching, capability probe, navigation, linting, diagnostics, and context analysis. Each tool has a substantial surface area, though one could argue SAPContext and SAPNavigate/SAPRead have enough overlap to consolidate.

Completeness4/5

The coverage is quite thorough for an ABAP development workflow: transport management (SAPTransport), reading (SAPRead), searching (SAPSearch), writing is implied via references to SAPWrite, diagnostics (SAPDiagnose), linting (SAPLint), and context/impact analysis (SAPContext). Notable gaps: SAPWrite itself is referenced but not included as a tool, and activation (SAPActivate) is mentioned but absent, creating dead ends for write workflows.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/arc-mcp/arc-1'

If you have feedback or need assistance with the MCP directory API, please join our Discord server