ARC-1
ARC-1 is an SAP ADT MCP server that lets AI/MCP clients inspect, understand, diagnose, and manage SAP ABAP systems through intent-based tools.
Read ABAP source, metadata, table data (opt-in), CDS, revisions, syntax, BSP/Fiori, and more via
SAPRead.Search ABAP objects, TADIR entries, and source code via
SAPSearch.Navigate definitions, references, completions, hierarchies, and dependency relations via
SAPNavigate.Understand context such as dependencies, live usages, CDS impact/blast radius, and table include structure via
SAPContext.Lint and format ABAP/CDS with local abaplint rules, auto-fix, and ADT PrettyPrint via
SAPLint.Diagnose syntax, ABAP Unit, ATC, CDS test suggestions, dumps, traces, system/gateway messages, quickfixes, object state, and authorization traces via
SAPDiagnose.Manage feature probing, cache stats, package lifecycle, FLP catalogs/groups/tiles, and API release state via
SAPManage.Handle CTS transports including list/get/diff/create/release/delete/reassign/check/history/layers/targets via
SAPTransport.Use Git workflows for reads and gated abapGit/gCTS operations via
SAPGit.Operate safely with read-only defaults, explicit opt-ins, package restrictions, deny lists, and transport/Git write gates.
Deployable as a Cloud Foundry app on SAP BTP with full platform integration including Destination Service, Cloud Connector, Principal Propagation, XSUAA OAuth proxy, and BTP Audit Log Service.
Available as a Docker image for containerized deployment, supporting various authentication methods and enterprise security configurations.
Connects AI assistants including GitHub Copilot to SAP systems via the ADT REST API, enabling AI-assisted SAP development with enterprise security controls and guardrails.
Supports OIDC/JWT authentication via Keycloak or any OpenID Connect provider for secure enterprise authentication to SAP systems.
Supports OIDC/JWT authentication via Entra ID, Keycloak, or any OpenID Connect provider for secure enterprise authentication to SAP systems.
Enterprise-ready MCP server for SAP ABAP systems connecting to SAP via the ADT REST API, providing 11 intent-based tools for reading/writing ABAP source, table data, CDS views, executing SQL, managing transports, and performing code analysis with enterprise security controls.
Uses SQLite for object caching in http-streamable deployments, enabling automatic source caching and dependency graph caching for improved performance.
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.
Full Documentation | Quickstart | Security Review | 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_*flagsAction deny list — block specific tool actions with
SAP_DENY_ACTIONS(for exampleSAPWrite.delete), without exposing low-level operation codes to adminsPackage 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 controlData access control (off by default) — table previews, saved SAPscript texts and SLG1 messages require
SAP_ALLOW_DATA_PREVIEW=true; freestyle SQL separately requiresSAP_ALLOW_FREE_SQL=true. Review enabled uses 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-writesand--allow-transport-writes. Update/delete operations auto-use the lock correction number when no explicit transport is providedGit workflow safety — Git operations are disabled by default. Enable explicitly with
--allow-git-writes/SAP_ALLOW_GIT_WRITES=trueAPI-key profiles — multi-key HTTP deployments can assign
viewer,viewer-data,viewer-sql,developer,developer-data,developer-sql, oradminper keyWrites restricted to
$TMPwhen enabled — only local/throwaway objects; writing to transportable packages requires explicit--allowed-packagesHTTP 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 clients —
ARC1_ALLOWED_ORIGINS(comma-separated, exact match). Off by default; native MCP clients don't need itLayered 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_LIMIToverrides it), per-user MCP quota (Layer 2, off by default — multi-user deployments opt in viaARC1_RATE_LIMIT=60), and a server-wide SAP-bound semaphore (Layer 3, default 10, on). HonorsRetry-Afteron 429/503 from SAP / BTP gateways. See the Rate Limiting GuideDependency and release evidence — Dependabot, npm audit and Dependency Review checks, CodeQL, Trivy container scanning, npm provenance, and a best-effort CycloneDX SBOM for the release's production npm lockfile graph. Section 13 of the security guide lists what each artifact covers, how to verify it, and the gaps. Vulnerability response targets are best-effort and non-contractual.
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
OAuth2UserTokenExchangefor 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 BTP mode discovers destinations marked
arc1.enabled=trueand exposes pinned SID/client plus read-only aggregate endpoints; scoped pinned PP writes require separate destination/IAM opt-ins (setup, administration)Optional target filtering — for shared multi-system gateways where teams need different target lists. Assign systems/clients through XSUAA roles; IAS changes are optional. This filters IAM-assigned targets, not automatically discovered SAP accounts.
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)
Focused source and dependency context — use targeted
SAPReadfor exact implementation behavior. For business purpose, reviews or test design, start withSAPContext(action="deps", type=..., name=...)for available Knowledge Transfer Documents (SKTD/KTD) and dependency contracts, then compare requirements with source. Without documented requirements, intent is unverified.
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 confirms304 Not Modified.Dependency parsing reuse — unchanged, authorized source can reuse parsed dependencies and contracts in memory. Aggregate dependency graphs are not cached; SAP authorization and source validation still apply.
KTD-aware context — Knowledge Transfer Documents use the source cache and are revalidated when composed into
SAPContext(action="deps").Live where-used —
SAPContext(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 views —
SAPReadacceptsversion="active" | "inactive" | "auto"and warns when the active source has an unactivated draft.Write invalidation — when
SAPWriteorSAPActivatemutates 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 (
104unit 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
22and24; live SAP integration + E2E run on internal PRs and manual dispatch, with SAP jobs gated off for docs/chore PRs and external forksReliability 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 ( |
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 ( |
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 | Read saved SAPscript long texts or execute ABAP SQL; each path requires its own opt-in |
SAPTransport | CTS transport management (list/get/create/release/delete/reassign/release-recursive), transport layer/target lookup, package transport requirement checks, and reverse lookup history ( |
SAPGit | Git-based ABAP workflows across gCTS and abapGit (list/clone/pull/push/commit/branch/unlink) with backend auto-selection and safety gating ( |
SAPContext | Dependency APIs ( |
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 ( |
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
For a custom MCP server such as ARC-1, SAP's Third-Party MCP Access reference architecture is the primary design and control baseline we recommend. For a shared service, start with BTP Cloud Foundry, XSUAA and strict principal propagation. SAP's API Policy FAQ Q56 allows custom MCP servers under conditions; Q32 confirms that Integration Suite is not mandatory.
SAP API Policy & Architecture Alignment explains that path, the controls ARC-1 already supports, and the remaining gaps. FAQ Q33 classifies ADT APIs as internal and limits them to endorsed development channels; ARC-1's direct TypeScript ADT client is not specifically identified as one. Clarify that channel and the intended AI-assisted development use with SAP before adoption, including dev/test. BTP hosting and security controls alone do not establish full policy adherence. Per-user SAP identity applies to PP; shared Basic modes retain a shared SAP identity.
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 |
Table previews ( |
|
| Reads application data; authenticated callers also need |
Freestyle ABAP SQL ( |
|
| Executes ad-hoc ABAP SQL; authenticated callers also need |
Exact source blocklist (experimental) |
| 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. FAQ Q33 excludes application-table reads, business-data export and backend SQL from ADT's intended development-tooling scope. Keep these flags off unless the specific use has a documented allowance or SAP authorization under the applicable agreements; internal approval or a technical opt-in alone is insufficient. Use Published business APIs for business-data integration.
ARC-1 combines capability discovery with conservative defaults and centralized authorization. Discovery establishes technical availability, not API-policy permission. Follow the reference architecture and verify both the API-specific allowance and the deployed controls.
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-1Agent 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-*.mcpbfrom Releases and double-click it (or Settings → Extensions). Claude prompts for your SAP connection. (The.mcpbis 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-1Any MCP client / manual — run it directly:
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USERTrying 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:
Introducing ARC-1: A Secure ADT MCP Server for Enterprise SAP Development
ARC-1 on SAP BTP: Secure ABAP Agentic Development Beyond the Laptop
ARC-1 with Copilot Studio: SAP System Context Beyond Developers
ARC-1 with Joule Studio: Bringing Real ABAP System Context into Joule
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 |
5-minute npx + Claude Desktop setup | |
Portable server + all skills for Copilot, VS Code, Cursor, Codex, and compatible clients | |
Desktop | |
Full local dev — all install methods, MCP client configs, SSO cookie extractor | |
Multi-user deployment — Docker, BTP Cloud Foundry, BTP ABAP | |
Choose the BTP topology and follow the correct deployment, auth, destination, and operations guides | |
MTA deployment, topology decision, role handoffs, and safe acceptance | |
Changes, roles, secrets, scaling, upgrades, rollback, and customer handover | |
BTP multi-target deployment, destinations, roles, and scoped pinned PP writes | |
Every flag and env var, one table | |
Update procedures per install method | |
Layer A / Layer B auth internals, coexistence matrix | |
Complete reference for all 12 tools | |
Add your own | |
System architecture with diagrams | |
Agent workflow patterns and best practices | |
Reusable ARC-1 agent skills, including GitHub Copilot in Eclipse and VS Code ADT setup | |
Long-form posts on AI for ABAP development, ARC-1 internals, and real-world walkthroughs |
Development
npm ci && npm run build && npm testSee CLAUDE.md for codebase structure, testing commands, and contribution guidelines.
Credits
Project | Author | Contribution |
oisee | Original Go MCP server — ARC-1's starting point | |
Marcello Urbani | TypeScript ADT library, definitive API reference | |
Mario Andreschak | First MCP server for ABAP ADT | |
Lars Hvam | ABAP parser/linter (used via @abaplint/core) |
License
MIT
Available Tools
9 toolsSAPContextARead-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); type+name required.
"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: target KTD when available + selected dependency contracts, derived from source (not SAP-native relationships or a complete inventory). Counts distinguish root candidates from recursive attempts. Standard helper names are filtered. For CDS, includes dependency DDL/field catalogs for cl_cds_test_environment. structure (TABL only): the DDIC include/append tree.
Non-CDS reverse-lookup: SAPNavigate(references); CDS: impact. Full detail: docs_page SAPContext.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Object name (e.g., ZCL_ORDER) | |
| type | No | Root type. deps requires type+name, even with source. Optional for action="impact" (defaults to DDLS) or usages (unique name lookup); structure requires TABL. | |
| depth | No | Dependency depth: 1 = direct deps only (default), 2 = deps of deps, 3 = maximum. Higher depth = more context but more SAP calls. | |
| group | No | Required for FUNC type. The function group containing the function module. | |
| action | No | Action: "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) = source-derived dependency contracts plus KTD when available. Requires type+name, even with source. Not a complete inventory; read source for behavior. "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. | |
| source | No | Optional: provide source directly instead of fetching from SAP. Saves one round-trip if you already have the source from SAPRead. | |
| maxDeps | No | Max dependencies to resolve (default 20). Lower = faster + fewer tokens. | |
| includeKtd | No | deps: When true/default, prepend the object Knowledge Transfer Document (KTD/SKTD) when one exists. Set false to skip the KTD lookup. | |
| maxResults | No | usages: max entries (default 100); impact: max per downstream bucket (default 50). Max 1000. "usageCount"/"summary" stay true totals, not page sizes. | |
| siblingCheck | No | impact: Enable sibling metadata-extension consistency analysis. Default true. | |
| includeIndirect | No | impact: Include indirect (transitive) downstream where-used entries. Default false. | |
| siblingMaxCandidates | No | impact: Maximum sibling DDLS candidates to compare. Default 4; hard cap 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that dependencies are 'derived from source (not SAP-native relationships or a complete inventory)', notes that 'Standard helper names are filtered', warns of a 'guardrail error' for non-DDLS impact input, and explains that higher depth costs more SAP calls. This level of behavioral detail far exceeds what the annotation provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening purpose, a decision-rule table, and per-action details, front-loading the most important guidance. It is long, but that length is justified by the tool's complexity (12 parameters, 4 actions). It loses a point because some information is redundant with the action parameter description, which could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool without an output schema, the description compensates thoroughly: it explains the conceptual return content per action (KTD, RAP buckets, dependency contracts, includes/appends), outlines limitations, names alternative tool routes, and covers parameter usage contexts. This is complete enough for an agent to decide and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter description coverage, including detailed constraints, enums, and defaults for all 12 parameters (e.g., action's full explanation, structure's TABL requirement). The tool description largely recaps this information rather than adding new semantic insight, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose ('Primary tool for understanding ABAP/CDS objects') with a clear verb and resource, and explicitly distinguishes itself from sibling SAPRead ('use instead of SAPRead when the user asks what an object does'). It also summarizes the output format ('Returns intent first ... then compressed dependency contracts'), leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: it directs users to SAPRead for exact source/method bodies, to SAPNavigate for non-CDS reverse-lookup, and states a preference over SAPQuery for CDS text-scans ('ALWAYS prefer over SAPQuery'). It even offers a decision rule mapping user questions to specific actions, which is exemplary routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPDiagnoseA
ABAP diagnostics:
"syntax": check objects[] (CLAS/INTF/PROG/DDLS; version active/inactive). Single: prefer SAPRead SYNTAX.
"unittest": harmless ABAP Unit for CLAS/PROG/FUGR or DEVC (exact; includeSubpackages recurses).
"unittest_ci": harmless package tests with source reconciliation; empty/incomplete runs fail.
"atc": ATC (name+type or objects [{type,name}], max 20). Omit variant for system default; unknown variant errors. "atc_variants": read variants/default, optional variant name filter.
"atc_ci": package ATC CI; requires available API and verified selection.
"cds_testcases": read suggested CDS Unit tests (name; SAP_BASIS 8.16+).
"object_state": active/inactive ETags/hashes/divergence (name+type; CLAS includes). No server-driven types.
"quickfix": proposals: name+type+source+line; optional column/sourceUri.
"apply_quickfix": text deltas, no save; quickfix inputs + proposalUri/proposalUserContent.
"dumps": ST22, newest: user/from/to/maxResults/filters; id=detail.
"feed_schema": optional dump filters; action only.
"traces": list profiler traces; id+analysis analyzes one.
"trace_start": arm NEXT matching execution (write; defaults HTTP, SQL on); reproduce, then read "traces".
"trace_requests": list armed traces. "trace_cancel": cancel by id (write).
"system_messages": list SM02 messages. "gateway_errors": list /IWFND/ERROR_LOG (on-prem; detailUrl or id+errorType for detail).
"odata_perf": read OData timing (url: host-relative; DB/ABAP/framework/auth); needs allowDataPreview.
"authorization_trace": read STUSERTRACE/SUAUTHVALTRC (on-prem; needs SAP_ALLOW_DATA_PREVIEW).
"cds_sql": read CDS native SQL (name).
"sql_trace_state" / "set_sql_trace_state" (sqlOn; needs SAP_ALLOW_WRITES) / "sql_trace_directory": ST05 SQL-trace control. Quickfix: syntax/ATC → quickfix → apply_quickfix → SAPWrite.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | dumps/traces: omit to list, supply for detail. trace_cancel: request ID. | |
| to | No | Inclusive upper time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS. | |
| url | No | odata_perf: host-relative OData path from the app network request (e.g. /sap/opu/odata4/sap/.../Entity?$filter=…). Absolute URLs rejected. | |
| from | No | Inclusive lower time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS. | |
| line | No | Required quickfix/apply_quickfix source line. | |
| name | No | syntax/unittest/atc/object_state object name; cds_testcases/cds_sql CDS entity or DDLS name. | |
| type | No | Object type; unittest accepts CLAS, PROG, FUGR, or DEVC. | |
| user | No | SAP-user filter for dumps, feeds, or authorization_trace. | |
| sqlOn | No | set_sql_trace_state: true arms ST05 SQL trace, false disarms; user filters the SAP user. | |
| action | Yes | ||
| column | No | Quickfix source column (default 0). | |
| source | No | Current source code (required for quickfix/apply_quickfix). | |
| filters | No | AND ≤8 incl. user: [{attribute:"runtimeError",operator:"equals",values:["MESSAGE_TYPE_X"]}]. | |
| objects | No | ATC/syntax list instead of name/type/url. ATC may verify once. Missing reports stay incomplete. No packages. | |
| variant | No | atc/atc_ci variant; atc_variants name filter (*=all) | |
| version | No | syntax source version (default active); inactive checks pending changes. | |
| analysis | No | traces with id: hitlist=hot spots, statements=call tree, dbAccesses=DB access stats. | |
| coverage | No | unittest only: collect statement/branch/procedure coverage and methodsBelowFull. Unavailable measurements do not discard test results. Default false. | |
| packages | No | CI exact packages; 1–50 total with packageTrees. | |
| sections | No | dumps detail chapter IDs, e.g. ["kap0","kap3","kap8"]; omit for focused defaults. | |
| sqlTrace | No | trace_start SQL capture (default true; required for analysis="dbAccesses"). | |
| aggregate | No | trace_start aggregation (default true). | |
| detailUrl | No | Detail path: canonical /sap/bc/adt/gw/errorlog/...; no absolute URLs. | |
| errorType | No | gateway_errors: required with id instead of detailUrl, e.g. "Frontend Error". | |
| sourceUri | No | quickfix/apply_quickfix source URI; default type/name main source. Set for includes, e.g. /includes/definitions. | |
| traceUser | No | trace_start/trace_requests SAP user (default connected user). | |
| authObject | No | Authorization object filter, e.g. S_TCODE. | |
| maxResults | No | Result limit (default 50; authorization_trace 100). Caps: dumps 500, system_messages/gateway_errors 200, authorization_trace 10000. | |
| objectType | No | trace_start match type; defaults: http→url, dialog→transaction, batch→report, rfc→functionModule. | |
| description | No | trace_start label. | |
| processType | No | trace_start work process (default http/OData): dialog=SAP GUI, batch=background job, rfc=RFC. | |
| proposalUri | No | Quickfix proposal URI from quickfix action (required for apply_quickfix). | |
| expiresHours | No | trace_start expiry in hours (default 24). | |
| onlyFailures | No | authorization_trace: only denied checks (RC<>0), like SU53. | |
| packageTrees | No | CI packages including subpackages. | |
| resultFormat | No | unittest: legacy|structured|junit; atc: legacy|structured; other actions reject it. | |
| configuration | No | atc_ci: optional configuration. | |
| maxExecutions | No | trace_start executions to capture (default 1). | |
| failOnSeverity | No | atc_ci failure threshold (default error). | |
| timeoutSeconds | No | Timeout 1–3600s: unittest/atc default 300; CI overall default 600. | |
| includeFullText | No | dumps detail: include full formattedText (default false). | |
| includeReportXml | No | CI XML reports (default false; 256 KiB total cap). | |
| includeSubpackages | No | ||
| proposalUserContent | No | Opaque userContent from quickfix action (required for apply_quickfix). May be an empty string; pass through exactly. | |
| proposalAffectedObjects | No | quickfix affectedObjects; provide current content for each source unit when applying multi-object fixes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description goes further by marking specific mutating actions as (write) (trace_start, trace_cancel), stating apply_quickfix produces 'text deltas, no save', naming the permission gates (SAP_ALLOW_WRITES, SAP_ALLOW_DATA_PREVIEW), and disclosing failure semantics ('empty/incomplete runs fail', 'ATC may verify once. Missing reports stay incomplete'). It doesn't uniformly flag writes across all actions (e.g. tc_ci, set_sql_trace_state is covered only via the permission note), so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded by action name with a terse 'key: params' notation, no filler sentences, and the quickfix workflow distilled into one closing line. The extreme density and unexplained abbreviations (ST22, SM02, SU53) cost it a perfect score, since a reader must already know SAP transaction codes to parse some entries.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 24-action, 45-parameter tool with no output schema, the description covers every action's purpose, key inputs, permission requirements, and write/no-save behavior, which is enough to select and invoke correctly. The remaining gap is that return shapes (e.g. what 'dumps' detail or 'object_state' divergence actually yields) are neither described nor backed by an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 96%, so the schema carries most definitions; the description's real contribution is the action→parameter mapping ('quickfix: name+type+source+line; optional column/sourceUri', 'dumps: user/from/to/maxResults/filters; id=detail', 'atc: name+type or objects [...], max 20'), which tells an agent which of 45 fields are legal per action. It also adds constraints not in the schema text ("No server-driven types" for object_state).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the category (ABAP diagnostics) and then defines each of the 24 actions with a specific verb+resource ("syntax": check objects, "dumps": ST22 newest, "trace_start": arm NEXT matching execution). This makes the multiplexed tool legible and separates it from siblings with an explicit pointer ("Single: prefer SAPRead SYNTAX"). The one weakness is that the tool as a whole has no single-sentence purpose statement, only a per-action enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete routing and prerequisites: prefer SAPRead for single-object syntax checks, requires SAP_ALLOW_WRITES for set_sql_trace_state, needs allowDataPreview for odata_perf, requires 'available API and verified selection' for atc_ci, and sketches a workflow 'syntax/ATC → quickfix → apply_quickfix → SAPWrite'. What's missing is any general statement of when not to use the tool or how to choose between near-duplicates like unittest vs unittest_ci beyond the 'harmless'/'reconciled' hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPGitCDestructive
Git reads and gated abapGit workflows. gCTS mutations are quarantined. abapGit mutations need write/Git gates and allowedPackages ROOT/** or *; clone/pull evidence is unverified. external_info is gated HTTPS SAP egress.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | HTTPS remote for clone/external_info; embedded credentials are rejected. | |
| user | No | Remote repository username. | |
| limit | No | Optional limit for history queries. | |
| token | No | Remote repository access token. abapGit sends it as basic auth user "x-access-token". | |
| action | Yes | ||
| branch | No | Branch name for switch_branch/create_branch. | |
| commit | No | Commit SHA for history/pull-by-commit actions. | |
| repoId | No | ||
| backend | No | Backend override; omit to auto-select (gCTS preferred). | |
| message | No | Commit message required for abapGit push. | |
| objects | No | For abapGit push, the changed objects to commit; omit to select every local change. | |
| package | No | abapGit clone package. Mutations require an allowedPackages ROOT/** or * grant; not gCTS evidence. | |
| password | No | Remote repository password/token secret. | |
| transport | No | Optional transport request where supported by the backend. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows it mutates and is destructive. The description adds that gCTS mutations are quarantined and abapGit mutations require write/Git gates, but it does not specify exactly which actions are quarantined, what 'gates' entail, or the scope of destruction — leaving meaningful behavioral gaps beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense, jargon-heavy sentence fragment that is not front-loaded with the primary purpose. It prioritizes constraints over clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 14 parameters and no output schema, the description is incomplete. It fails to outline which actions are available, the differences between backends, or the expected outcomes, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 86% schema description coverage, the schema already documents most parameters. The description adds little: it implies ROOT/** or * for allowedPackages but doesn't explain many action-specific parameters or their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description mentions 'Git reads and gated abapGit workflows' but doesn't clearly state the core action or distinguish this tool from siblings like SAPManage or SAPRead. The focus on gating constraints obscures the actual purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes constraints on mutations but doesn't say when an agent should choose this tool over SAPManage or SAPRead, nor provide any explicit usage scenarios or alternatives.
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. Syntax: SAPRead(type="SYNTAX"); ATC/unit tests: SAPDiagnose.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object name (used for filename detection) | |
| rules | No | Rule overrides: { "rule_name": false } to disable, { "rule_name": { "severity": "Warning" } } to configure. Overrides system defaults. | |
| style | No | PrettyPrinter: keyword casing (for set_formatter_settings) | |
| action | Yes | Check type | |
| source | No | ABAP or CDS source code to lint/format (not needed for list_rules/get_formatter_settings) | |
| indentation | No | PrettyPrinter: indent source (for set_formatter_settings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, which is ambiguous across six actions. The description resolves that by disclosing which actions are local vs remote calls, that lint_and_fix returns fixed source, and that set_formatter_settings is blocked in read-only mode. It stops short of describing fix reversibility or the shape of diagnostics, so it adds real value but not full coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then the six actions are bulleted with one-line semantics each, followed by the local/SAP split and sibling routing. Dense and scannable, though the bullet list is long enough to border on enumeration-heavy rather than prose-minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-action, nested-object tool with no output schema, the description covers action semantics, parameter applicability, and sibling alternatives. It mentions that lint returns errors+warnings and that lint_and_fix returns fixed source, but says nothing about diagnostic formatting for lint or behavior on unparseable source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description goes further by mapping parameters to actions (source required for lint/format, not for list_rules/get_formatter_settings) and restating the formatter fields (indentation bool, style casings). It clarifies applicability rather than merely repeating schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('Run local abaplint rules on ABAP/CDS source') plus a scope qualifier (auto-selects cloud or on-prem rules by system type). Each action is enumerated with its exact function, so an agent can distinguish lint vs format vs formatter-settings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routing is explicit: lint/lint_and_fix/list_rules run locally, format and formatter-settings call SAP, and 'set is blocked read-only'. It also names the correct alternatives for adjacent needs ('Syntax: SAPRead(type="SYNTAX"); ATC/unit tests: SAPDiagnose'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPManageADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Package name (required for create_package and delete_package). | |
| tile | No | Tile definition for flp_create_tile. | |
| title | No | Title — required for flp_create_catalog and flp_create_group. | |
| action | Yes | Action 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. | |
| groupId | No | FLP group/page identifier (required for flp_create_group, flp_add_tile_to_group). | |
| apiState | No | RELEASED | |
| contract | No | set_api_state: contract (default C1); SRVD uses C0, classic VIEW uses C3. Unsupported choices report supported contracts. SAP validates contract requirements. | |
| domainId | No | Domain ID — required for flp_create_catalog (e.g., ZARC1_SALES). | |
| catalogId | No | FLP 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. | |
| objectUri | No | 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). | |
| transport | No | Optional transport request (corrNr) for create_package, delete_package, or change_package. | |
| newPackage | No | Target package to move the object to. Required for change_package. | |
| objectName | No | Object name to move (e.g., ZCL_MY_CLASS). Required for change_package. | |
| objectType | No | 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). | |
| oldPackage | No | Current package of the object. Required for change_package. | |
| description | No | Package description (required for create_package). | |
| packageType | No | Package type for create_package (default: development). | |
| responsible | No | 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. | |
| superPackage | No | Parent package for create_package (defaults to empty root package). | |
| apiVisibility | No | set_api_state RELEASED: complete visibility selection; [] means none. Omit for SAP defaults. Read API_STATE first. | |
| recordChanges | No | 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. | |
| tileInstanceId | No | Tile instance ID in the source catalog (required for flp_add_tile_to_group). | |
| transportLayer | No | Transport layer for create_package (optional; required by some transportable landscapes). | |
| softwareComponent | No | Software component for create_package (default: LOCAL on-prem, ZLOCAL on BTP). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true. The description adds meaningful behavioral context beyond that: features is cached (fast, no round-trip), probe performs re-probe and auth/discovery refresh, set_api_state defaults to RELEASED/C1, and the 'available: false' rule governs dependent operations. It doesn't explicitly state that delete_package is destructive or its permanence, but overall it adds substantial operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the primary purpose followed by an action list. It is dense but well organized; the FLP deprecation note is relevant but somewhat verbose. Still, every part earns its place given the tool's breadth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 24-parameter multi-action tool with no output schema, the description covers the main behaviors, defaults, and critical safety rule ('available: false' => do not attempt). It doesn't detail return shapes for package/FLP mutations or delete_package destructiveness, but overall it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 96%, so the schema already documents nearly all 24 parameters thoroughly, including defaults and enums. The description adds some cross-parameter context (e.g., set_api_state via objectUri or name+objectType, package name required for create/delete), but mostly the schema does the heavy lifting. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific multi-purpose tool: probing/reporting SAP capabilities and managing DEVC package lifecycle and FLP catalogs/tiles, plus set_api_state. The action list enumerates what it can do. It doesn't explicitly contrast with siblings like SAPRead or SAPDiagnose, though it does reference SAPRead(type=...) to route read counterparts elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use it BEFORE operations depending on optional features and that 'available: false' means do NOT attempt dependent operations. It also notes the FLP classic model is deprecated since S/4HANA 2023 and that Work Zone v2 needs LADIs via SAPRead, which is useful routing. It doesn't cover package/FLP action alternative choices or when to use cache_stats vs probe beyond implied names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPReadARead-only
Read SAP ABAP source, metadata and syntax results. For source purpose, explanations, specs, reviews or pre-change context, prefer SAPContext first. DDIC metadata: omit format (default text); structured is CLAS-only for ordinary reads. TABLE_QUERY: multi-column filters, data preview required; CDS needs SAP_BASIS 752+. TABLE_CONTENTS: single-column filter. INACTIVE_OBJECTS: no name. TABL/DTT: technical settings. SYNTAX: read-only SAP check (objectType+name, optional source for unsaved text). CLAS: method="*" for signatures, method="NAME" for one body, or grep. Global class declaration/implementation: MAIN (omit include). definitions/implementations contain local helpers.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | action="diff" NEW side (default "inactive" = pending unactivated changes). Same values as from. | |
| from | No | action="diff" OLD side: "active" (default), "inactive", a revision id from SAPRead(type="VERSIONS"), or a /sap/bc/adt/ revision URI. | |
| grep | No | Case-insensitive source regex: matching lines, 1-based numbers and ±3 context; invalid regex becomes literal. CLAS adds owning class/method; include scopes a section. Never combine with method. Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD/KTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). | |
| name | No | Object name (e.g., ZTEST_PROGRAM, ZCL_ORDER, MARA) | |
| type | Yes | Repository or metadata type. TABL includes structures. KTD aliases SKTD; MESSAGES aliases MSAG. FTG2 aliases FEATURE_TOGGLE. SYNTAX requires objectType+name. Server-driven: discovery-gated XML metadata, AFF JSON source; DTSC/DSFD/DTDC/DRTY use DDL text. ENQU: JSON. TABL/DTI: TABLE~INDEX, prefers pending JSON. DESD external schema; EVTB/EVTO event binding/object; CSNM CSN model; COTA communication target; DTSC/DTDC static/dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template. | |
| group | No | Function group of the function module for FUNC, VERSIONS, or API_STATE with objectType=FUNC. Auto-resolved via SAPSearch if omitted. | |
| where | No | 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; STARTS_WITH: literal prefix. Use <>; 758 rejects !=. IN/NOT IN: bare comma-separated values, e.g. "261,262". ARC-1 quotes/escapes them; no subqueries. Example: [{"field":"MATNR","op":"=","value":"300006888"},{"field":"BUDAT_MKPF","op":">=","value":"20250101"}]. | |
| action | No | 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. | |
| format | No | Default text; DEVC returns array then listing metadata, diff a patch. structured: CLAS metadata+includes, DEVC {objects,listing}, diff JSON. editable: fresh {source,sourceHash} for guarded SAPWrite; omit version/method/grep, select CLAS include. | |
| method | No | For CLAS: read a method (e.g., "get_name", "zif_order~process", "lhc_travel~accept") or use "*" to list methods. Without include=, lhc_*/lcl_* use implementations, ltc_* uses testclasses, and others use MAIN; explicit include= wins. For SOBJ: BOR method name to read. If omitted, returns the full BOR method catalog. Not used with other types. | |
| source | No | SYNTAX only: proposed source to check without saving. Omit to check stored version (default active; inactive checks draft). Object must exist; version=auto is unsupported. | |
| columns | No | For TABLE_QUERY: columns to SELECT (default: all). Example: ["MATNR","BWART","BUDAT","MENGE"]. | |
| include | No | TABL: indexes. CLAS: omit include or use main for global class; definitions/implementations are local helpers; macros/testclasses as named. Explicit include wins over method routing. DDLS: elements returns field catalog (keys, aliases, associations, types). VERSIONS CLAS: selects include history. BSP: case-sensitive path; name also accepts APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols). | |
| lineEnd | No | Last source line (inclusive); requires lineStart. Clamped to the source end; a start beyond the source is an error. | |
| maxRows | No | Returned row cap for TABLE_CONTENTS/TABLE_QUERY (default 100, max 10,000; byte limit may apply sooner). | |
| toLabel | No | Diff NEW-side display label; does not change source resolution. | |
| version | No | Source defaults active; inactive requests a draft (SAP may return active if none); auto selects developer view. DTEL/ENQU/server-driven types default to developer view. Server-driven types return an error if SAP cannot confirm an explicit version (e.g. no draft). | |
| fromLabel | No | Diff OLD-side display label; does not change source resolution. | |
| lineStart | No | First source line (1-based, inclusive); requires lineEnd. Text reads only: CLAS, INTF, DDLS, DCLS, BDEF, SRVD, DDLX, TABL, PROG, FUNC, INCL. Supports CLAS include; incompatible with grep, method, diff, structured/editable output and signature/element extraction. | |
| sqlFilter | No | TABLE_CONTENTS condition expression only (no WHERE, no SELECT); broken on 758 (SAP expects SELECT). Use TABLE_QUERY where. | |
| maxResults | No | DEVC output cap: default 200, clamp 1–1000. Metadata reports possible truncation; total/completeness unknown. Direct mode does not cap SAP responses. | |
| objectType | No | DEVC direct: exact folder (CLAS/OC, TABL/DS). SYNTAX: required type (CLAS, PROG, DDLS). API_STATE: inferred. VERSIONS: endpoint type; inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR. | |
| versionUri | No | VERSION_SOURCE: canonical source/revision URI from VERSIONS .revisions[].uri; rejects unrelated ADT endpoints, absolute URLs, traversal, queries, and fragments. | |
| packageScope | No | DEVC direct contents, no recursion/descriptions (16 folders/2 MiB/10s). Omit for indexed search. | |
| force_refresh | No | For source reads: bypass cached source and inactive-list state before reading. Use when you know the object changed outside ARC-1. | |
| expand_includes | No | PROG/INCL/FUGR: add nested includes as "=== name ===" blocks; bounded, a closing note reports omissions. With grep: search all (FUGR: implied). No dynpros. | |
| includeSignature | No | FUNC: JSON {source,signature,processingType?,updateTaskKind?}. Signature and descriptions come from source. Default false: raw source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring safety, the description still adds real behavior: version defaults (active vs inactive vs auto), server-driven types erroring when SAP cannot confirm a version, TABLE_QUERY rows/byte caps, and the 752+/758 operator restrictions. It never mentions return shape or caching semantics beyond the force_refresh hint, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly half a dozen front-loaded sentences with sibling routing first and type-specific notes after; no filler. The telegraphic fragments ('INACTIVE_OBJECTS: no name.', 'TABL/DTT: technical settings.') are efficient but require the reader to already know the surrounding mechanics, which is acceptable for a dispatcher of this size.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 27-parameter mega-dispatcher with no output schema, the description covers the high-traffic modes (source reads, CLAS method/include routing, DDIC metadata, TABLE_QUERY vs TABLE_CONTENTS, SYNTAX, diff) and the rest are documented in the fully-covered type enum. An agent can construct a correct call for common cases without opening anything else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries parameter meaning and the baseline is 3. The description echoes a few constraints (omit format for DDIC, method='*' lists signatures, MAIN for global class declaration) but adds little cross-parameter insight not already present in the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource set ('Read SAP ABAP source, metadata and syntax results') and immediately routes source-explanation use cases to the SAPContext sibling. The scope is genuinely broad (50+ enum types), so an agent still needs the type enum to know what it can read, but the core read purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing for the sibling ('For source purpose, explanations, specs, reviews or pre-change context, prefer SAPContext first') and disambiguates internal modes: TABLE_QUERY for multi-column filters/data preview vs TABLE_CONTENTS for single-column filters, SYNTAX as a read-only check, CLAS method='*' vs method='NAME' vs grep. No guidance covers the long tail of repository types, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPSearchARead-only
Search for ABAP objects, exact object-directory entries, or source code. Modes:
Object search (default): name pattern with wildcards (*); returns type, name, package, description, ADT URI.
TADIR lookup (searchType="tadir_lookup"): exact cross-package lookup of one or more names (prefer over long SAPQuery TADIR IN-lists).
Source code search (searchType="source_code"): full-text search across source (SAP_BASIS ≥ 7.51). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | For tadir_lookup: exact object names to resolve across packages. Prefer this over long SAPQuery TADIR IN-lists. | |
| query | No | Search pattern. For object search: name pattern with wildcards (e.g., ZCL_ORDER*, Z*TEST*). For tadir_lookup: exact name or comma/whitespace-separated names. For source_code search: text string to find in source (e.g., cl_lsapi_manager, CALL FUNCTION). | |
| source | No | For 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). | |
| maxResults | No | Maximum results (default 100 for object, 50 for source_code) | |
| objectType | No | Object search: SAP-side type filter before the result limit (e.g., UIAC, CLAS, CLAS/OC). Source search: type filter (e.g., PROG, CLAS, FUNC). For tadir_lookup: single type filter; use objectTypes for multiple. | |
| searchType | No | Search mode: "object" (default) searches by object name, "source_code" searches within ABAP source code, "tadir_lookup" does exact cross-package object lookup. | |
| objectTypes | No | For tadir_lookup: optional ADT/TADIR type filters (e.g., TABL, DDLS, BDEF, SRVB, CLAS/OC). | |
| packageName | No | For source_code search: filter by package name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds real prerequisite context the annotations cannot: source_code search requires SAP_BASIS >= 7.51, and the 'db' source needs sql scope plus SAP_ALLOW_FREE_SQL=true. It also discloses the splitBrain/warnings output for 'both'. Minor gap: no pagination or result-shape detail beyond the per-mode return fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The default mode is front-loaded, the numbered mode list is scannable, and the Tips section is culled to actionable pointers. No sentence is filler despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, zero-required read tool with no output schema, the description covers all three modes, prerequisites, return fields, and hand-off to sibling tools. Nothing material to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% so the baseline is 3, but the description adds mode-to-parameter mapping (which params apply to object vs tadir_lookup vs source_code) and cross-tool flow guidance (uri feeds SAPNavigate, objectType feeds SAPRead/SAPWrite/SAPActivate) that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search ABAP objects, TADIR entries, or source code) and enumerates three distinct modes with what each returns (type, name, package, description, ADT URI). It also names sibling tools (SAPNavigate, SAPRead, SAPWrite, SAPActivate, SAPQuery) so an agent can differentiate it from the rest of the family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'prefer over long SAPQuery TADIR IN-lists' for tadir_lookup, and a Tips section directs field-name searches away to SAPRead(DDLS, include='elements') or SAPQuery on DD03L. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SAPTransportADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Transport request ID, e.g. A4HK900123 (required for get/diff/release/delete/reassign/release_recursive/remove_object) | |
| name | No | Object name (for check, history, or remove_object actions) | |
| type | No | Object type for check/history/remove_object actions (PROG, CLAS, DDLS, etc.). Not used by create, which creates a Workbench (K) request. | |
| user | No | List user (default: current SAP user; "*" means all visible owners). | |
| group | No | check/history: parent group for INCL L<group>… or a new FUNC; existing FUNC auto-resolves. | |
| limit | No | diff: objects per call (default 20, max 40); page with offset. | |
| owner | No | New owner SAP username (required for reassign) | |
| pgmid | No | Program ID for remove_object: "R3TR" (whole object) or "LIMU" (sub-object). Required — object type alone does not determine pgmid. | |
| action | Yes | 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: source review. Released requests need attributed snapshots; open requests use active source, never drafts. baselineStatus: prior-revision=attributed pair; prior-revision-unverified=unattributed candidate; no-prior-snapshot=missing history, NOT creation; baseline-ambiguous=uncertain predecessor; baseline-unavailable=no comparison, NOT unchanged. Non-source gaps are explicit. Follow nextOffset; pages are not snapshots. 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. | |
| offset | No | diff: first object to diff (default 0). | |
| status | No | Transport status filter (for list). D=modifiable (default), R=released, "*"=all statuses. | |
| target | No | 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. | |
| package | No | 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. | |
| summary | No | diff: true omits hunks, retaining counts and evidence (same SAP reads). For list, 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). | |
| operation | No | Check mode: create (default) or modify. | |
| recursive | No | Apply recursively to child tasks (for delete/reassign). release_recursive always recurses. | |
| maxResults | No | Maximum list rows or check/history assignment candidates (defaults: list/history 50, check 10; max 1000). | |
| description | No | Transport description text (required for create) | |
| resultFormat | No | release actions: legacy (default) or structured JSON. | |
| timeoutSeconds | No | release timeout seconds: 1-1800; default 300. | |
| transportLayer | No | 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. | |
| removeLockedObjects | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=true; the description adds far more — which actions are read-only and need no SAP_ALLOW_TRANSPORT_WRITES (history, layers, targets), that remove_object keeps the request, release ordering (tasks first, then parent), the locked-object HTTP 400 failure mode and its removeLockedObjects remedy, and the SAP_BASIS 7.50 rejection of tm:root/newrequest. No contradiction with the annotation profile: mutation/destruction is disclosed rather than hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then action catalogue, and nearly every clause carries operational information (target forms, page limits, status codes). Density is high and the action block reads as a wall of run-on clauses, but there is little pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 22 parameters and no output schema, the definition still explains return-relevant cues (resolved transport target, empty target = local request, objectCount, baselineStatus codes, nextOffset paging). What is missing is any statement of what list/get actually return, and the action-enum mismatch leaves the agent without an accurate picture of which operations are callable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds real value for target forms, transportLayer warnings and summary defaults. However, it describes thirteen actions (create, release, delete, remove_object, reassign, release_recursive, diff, …) while the action enum only permits list, get, diff, check, history, layers, targets — an agent following the prose would call an invalid action and get a validation error. That is a substantive parameter-semantics defect on the single required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Manage CTS transport requests (SE09/SE10)") and then enumerates the concrete operations, including the create-request nuance that it is always a Workbench (K) request. No sibling tool (SAPRead, SAPManage, SAPGit, etc.) plausibly covers transport management, so differentiation is effectively established by domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing per action: use summary=true for a cheap overview, "use action=\"get\" for one in full", use layers/targets "to discover a real value instead of guessing", and "OMIT IT by default" for transportLayer. It also states when-not and the fallback path ("set the target in SE09/SE10 there instead" on 7.50), which is well beyond typical guidance.
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.
4 tool updates
v1.9.0- Changed
SAPDiagnose4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "syntax", - "unittest", - "unittest_ci", - "atc", - "atc_ci", - "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" -]New value: +[ + "syntax", + "unittest", + "unittest_ci", + "atc", + "atc_ci", + "atc_variants", + "cds_testcases", + "dumps", + "feed_schema", + "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" +] - added
Input schema / properties / filtersAdded value: +{ + "description": "AND ≤8 incl. user: [{attribute:\"runtimeError\",operator:\"equals\",values:[\"MESSAGE_TYPE_X\"]}].", + "items": { + "additionalProperties": false, + "properties": { + "attribute": { + "maxLength": 40, + "type": "string" + }, + "operator": { + "maxLength": 40, + "type": "string" + }, + "values": { + "items": { + "maxLength": 128, + "type": "string" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "attribute", + "operator", + "values" + ], + "type": "object" + }, + "maxItems": 8, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / id / descriptionPrevious 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."New value: +"dumps/traces: omit to list, supply for detail. trace_cancel: request ID." - changed
Input schema / properties / objects / descriptionPrevious value: -"ATC only, instead of name/type/url. One batch + at most one verification. Returns coverage; unreported objects stay incomplete. No packages."New value: +"ATC/syntax list instead of name/type/url. ATC may verify once. Missing reports stay incomplete. No packages."
- Changed
SAPNavigate2 fields changed- added
Input schema / properties / detailAdded value: +{ + "description": "references: objects (default), or expand at most 10 native nodes for positions/snippets. Method positions can be component-relative; inspect usageDetails limits.", + "enum": [ + "objects", + "positions", + "snippets" + ], + "type": "string" +} - added
Input schema / properties / packagesAdded value: +{ + "description": "references: exact package names (e.g. [\"$TMP\"]); no wildcards or implicit subpackages. Native scope when available, otherwise local filtering.", + "items": { + "maxLength": 30, + "type": "string" + }, + "maxItems": 20, + "minItems": 1, + "type": "array" +}
- Changed
SAPRead13 fields changed- changed
Input schema / properties / expand_includes / descriptionPrevious 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)."New value: +"PROG/INCL/FUGR: add nested includes as \"=== name ===\" blocks; bounded, a closing note reports omissions. With grep: search all (FUGR: implied). No dynpros." - changed
Input schema / properties / format / descriptionPrevious value: -"Default text. editable: fresh {source, sourceHash} for guarded SAPWrite; omit version/method/grep, select CLAS include. structured: CLAS metadata+includes, DEVC {objects,listing}, or action=diff JSON. DEVC text returns the array then listing metadata; diff text returns a patch."New value: +"Default text; DEVC returns array then listing metadata, diff a patch. structured: CLAS metadata+includes, DEVC {objects,listing}, diff JSON. editable: fresh {source,sourceHash} for guarded SAPWrite; omit version/method/grep, select CLAS include." - changed
Input schema / properties / fromLabel / descriptionPrevious value: -"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."New value: +"Diff OLD-side display label; does not change source resolution." - changed
Input schema / properties / grep / descriptionPrevious 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."New value: +"Case-insensitive source regex: matching lines, 1-based numbers and ±3 context; invalid regex becomes literal. CLAS adds owning class/method; include scopes a section. Never combine with method. Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD/KTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW)." - changed
Input schema / properties / include / descriptionPrevious value: -"TABL: indexes lists native secondary indexes. CLAS: omit include or use main for the global declaration + implementation; definitions/implementations select local helper classes, macros/testclasses their own sections. Explicit include wins over method auto-routing. 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). BSP: case-sensitive path; name may also be APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols)."New value: +"TABL: indexes. CLAS: omit include or use main for global class; definitions/implementations are local helpers; macros/testclasses as named. Explicit include wins over method routing. DDLS: elements returns field catalog (keys, aliases, associations, types). VERSIONS CLAS: selects include history. BSP: case-sensitive path; name also accepts APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols)." - changed
Input schema / properties / includeSignature / descriptionPrevious 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)."New value: +"FUNC: JSON {source,signature,processingType?,updateTaskKind?}. Signature and descriptions come from source. Default false: raw source." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"DEVC object limit (default 200, clamped to [1, 1000]). Listing metadata reports the effective limit and possible truncation. Total and full repository completeness remain unknown."New value: +"DEVC output cap: default 200, clamp 1–1000. Metadata reports possible truncation; total/completeness unknown. Direct mode does not cap SAP responses." - changed
Input schema / properties / maxRows / descriptionPrevious value: -"Row cap for TABLE_CONTENTS/TABLE_QUERY (default 100, max 10,000; byte limit may apply sooner). On 758, TABLE_CONTENTS returns N+1; use TABLE_QUERY for exact caps."New value: +"Returned row cap for TABLE_CONTENTS/TABLE_QUERY (default 100, max 10,000; byte limit may apply sooner)." - changed
Input schema / properties / objectType / descriptionPrevious value: -"SYNTAX: required repository type (e.g. CLAS, PROG, DDLS). API_STATE: inferred if omitted. VERSIONS: type selects the endpoint; inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR."New value: +"DEVC direct: exact folder (CLAS/OC, TABL/DS). SYNTAX: required type (CLAS, PROG, DDLS). API_STATE: inferred. VERSIONS: endpoint type; inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR." - added
Input schema / properties / packageScopeAdded value: +{ + "description": "DEVC direct contents, no recursion/descriptions (16 folders/2 MiB/10s). Omit for indexed search.", + "enum": [ + "direct" + ], + "type": "string" +} - changed
Input schema / properties / toLabel / descriptionPrevious value: -"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."New value: +"Diff NEW-side display label; does not change source resolution." - changed
Input schema / properties / type / descriptionPrevious value: -"Object or metadata type. TABL includes DDIC structures; KTD aliases SKTD (Knowledge Transfer Documents). SYNTAX checks objectType+name. Server-driven objects use discovery-gated XML metadata and AFF JSON source (DTSC/DSFD/DTDC/DRTY use DDL text). DESD logical external schema; EVTB event binding; EVTO event object; CSNM CSN model; COTA communication target; DTSC static cache; DTDC dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template; TABL/DTI secondary index named TABLE~INDEX (read prefers pending JSON). Deprecated: MESSAGES→MSAG. FTG2→FEATURE_TOGGLE. ENQU lock object as JSON."New value: +"Repository or metadata type. TABL includes structures. KTD aliases SKTD; MESSAGES aliases MSAG. FTG2 aliases FEATURE_TOGGLE. SYNTAX requires objectType+name. Server-driven: discovery-gated XML metadata, AFF JSON source; DTSC/DSFD/DTDC/DRTY use DDL text. ENQU: JSON. TABL/DTI: TABLE~INDEX, prefers pending JSON. DESD external schema; EVTB/EVTO event binding/object; CSNM CSN model; COTA communication target; DTSC/DTDC static/dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template." - changed
Input schema / properties / where / descriptionPrevious 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\"}]."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; STARTS_WITH: literal prefix. Use <>; 758 rejects !=. IN/NOT IN: bare comma-separated values, e.g. \"261,262\". ARC-1 quotes/escapes them; no subqueries. Example: [{\"field\":\"MATNR\",\"op\":\"=\",\"value\":\"300006888\"},{\"field\":\"BUDAT_MKPF\",\"op\":\">=\",\"value\":\"20250101\"}]."
- Changed
SAPTransport2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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."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: source review. Released requests need attributed snapshots; open requests use active source, never drafts. baselineStatus: prior-revision=attributed pair; prior-revision-unverified=unattributed candidate; no-prior-snapshot=missing history, NOT creation; baseline-ambiguous=uncertain predecessor; baseline-unavailable=no comparison, NOT unchanged. Non-source gaps are explicit. Follow nextOffset; pages are not snapshots. 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." - changed
Input schema / properties / summary / descriptionPrevious 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)."New value: +"diff: true omits hunks, retaining counts and evidence (same SAP reads). For list, 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)."
5 tool updates
v1.6.0- Added
SAPGit - Changed
SAPManage4 fields changed- added
Input schema / properties / apiState / defaultAdded value: +"RELEASED" - removed
Input schema / properties / apiState / descriptionRemoved value: -"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\")." - added
Input schema / properties / apiVisibilityAdded value: +{ + "description": "set_api_state RELEASED: complete visibility selection; [] means none. Omit for SAP defaults. Read API_STATE first.", + "items": { + "enum": [ + "cloudDevelopment", + "keyUserApps" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array", + "uniqueItems": true +} - changed
Input schema / properties / contract / descriptionPrevious value: -"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."New value: +"set_api_state: contract (default C1); SRVD uses C0, classic VIEW uses C3. Unsupported choices report supported contracts. SAP validates contract requirements."
- Changed
SAPNavigate1 field changed- changed
Input schema / properties / uri / descriptionPrevious value: -"Definition needs source URI, line, column and source; references also accepts type+name."New value: +"Definition/completion: source URI with line, column, source. References: uri or type+name."
- Changed
SAPRead7 fields changed- changed
Input schema / properties / group / descriptionPrevious 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."New value: +"Function group of the function module for FUNC, VERSIONS, or API_STATE with objectType=FUNC. Auto-resolved via SAPSearch if omitted." - changed
Input schema / properties / include / descriptionPrevious value: -"CLAS: omit include or use main for the global declaration + implementation; definitions/implementations select local helper classes, macros/testclasses their own sections. Explicit include wins over method auto-routing. 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). BSP: case-sensitive path; name may also be APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols)."New value: +"TABL: indexes lists native secondary indexes. CLAS: omit include or use main for the global declaration + implementation; definitions/implementations select local helper classes, macros/testclasses their own sections. Explicit include wins over method auto-routing. 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). BSP: case-sensitive path; name may also be APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols)." - added
Input schema / properties / lineEndAdded value: +{ + "description": "Last source line (inclusive); requires lineStart. Clamped to the source end; a start beyond the source is an error.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / lineStartAdded value: +{ + "description": "First source line (1-based, inclusive); requires lineEnd. Text reads only: CLAS, INTF, DDLS, DCLS, BDEF, SRVD, DDLX, TABL, PROG, FUNC, INCL. Supports CLAS include; incompatible with grep, method, diff, structured/editable output and signature/element extraction.", + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / objectType / descriptionPrevious value: -"SYNTAX: required repository type (e.g. CLAS, PROG, DDLS). API_STATE: inferred if omitted. VERSIONS: type selects the endpoint (FUNC needs group); inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR."New value: +"SYNTAX: required repository type (e.g. CLAS, PROG, DDLS). API_STATE: inferred if omitted. VERSIONS: type selects the endpoint; inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR." - changed
Input schema / properties / type / descriptionPrevious value: -"Object or metadata type. TABL includes DDIC structures; KTD aliases SKTD (Knowledge Transfer Documents). SYNTAX checks objectType+name. Server-driven objects use discovery-gated XML metadata and AFF JSON source (DTSC/DSFD/DTDC/DRTY use DDL text). DESD logical external schema; EVTB event binding; EVTO event object; CSNM CSN model; COTA communication target; DTSC static cache; DTDC dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template. Deprecated: MESSAGES→MSAG. FTG2→FEATURE_TOGGLE. ENQU lock object as JSON."New value: +"Object or metadata type. TABL includes DDIC structures; KTD aliases SKTD (Knowledge Transfer Documents). SYNTAX checks objectType+name. Server-driven objects use discovery-gated XML metadata and AFF JSON source (DTSC/DSFD/DTDC/DRTY use DDL text). DESD logical external schema; EVTB event binding; EVTO event object; CSNM CSN model; COTA communication target; DTSC static cache; DTDC dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template; TABL/DTI secondary index named TABLE~INDEX (read prefers pending JSON). Deprecated: MESSAGES→MSAG. FTG2→FEATURE_TOGGLE. ENQU lock object as JSON." - changed
Input schema / properties / type / enumPrevious value: -[ - "PROG", - "CLAS", - "INTF", - "FUNC", - "FUGR", - "INCL", - "DDLS", - "DCLS", - "DDLX", - "BDEF", - "SRVD", - "SRVB", - "SKTD", - "KTD", - "TABL", - "VIEW", - "DOMA", - "DTEL", - "TRAN", - "TTYP", - "ENQU", - "TABLE_CONTENTS", - "TABLE_QUERY", - "DEVC", - "SOBJ", - "SYSTEM", - "COMPONENTS", - "MSAG", - "MESSAGES", - "TEXT_ELEMENTS", - "VARIANTS", - "BSP", - "BSP_DEPLOY", - "API_STATE", - "INACTIVE_OBJECTS", - "SYNTAX", - "AUTH", - "FEATURE_TOGGLE", - "FTG2", - "ENHO", - "VERSIONS", - "VERSION_SOURCE", - "DESD", - "DTSC", - "CSNM", - "EVTB", - "EVTO", - "COTA", - "DSFD", - "DTDC", - "UIAD", - "DRTY", - "APLO", - "SAJC", - "SAJT" -]New value: +[ + "PROG", + "CLAS", + "INTF", + "FUNC", + "FUGR", + "INCL", + "DDLS", + "DCLS", + "DDLX", + "BDEF", + "SRVD", + "SRVB", + "SMBC", + "SKTD", + "KTD", + "TABL", + "TABL/DTT", + "VIEW", + "DOMA", + "DTEL", + "TRAN", + "TTYP", + "ENQU", + "TABLE_CONTENTS", + "TABLE_QUERY", + "DEVC", + "SOBJ", + "SYSTEM", + "COMPONENTS", + "MSAG", + "MESSAGES", + "TEXT_ELEMENTS", + "VARIANTS", + "BSP", + "BSP_DEPLOY", + "API_STATE", + "INACTIVE_OBJECTS", + "SYNTAX", + "AUTH", + "FEATURE_TOGGLE", + "FTG2", + "ENHO", + "VERSIONS", + "VERSION_SOURCE", + "DESD", + "DTSC", + "CSNM", + "EVTB", + "EVTO", + "COTA", + "DSFD", + "DTDC", + "UIAD", + "DRTY", + "APLO", + "SAJC", + "SAJT", + "TABL/DTI" +]
- Changed
SAPSearch5 fields changed- changed
Input schema / properties / maxResults / descriptionPrevious value: -"Maximum results (default 100)"New value: +"Maximum results (default 100 for object, 50 for source_code)" - added
Input schema / properties / packageNameAdded value: +{ + "description": "For source_code search: filter by package name", + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Search pattern for object search, or comma/whitespace-separated names for tadir_lookup."New value: +"Search pattern. For object search: name pattern with wildcards (e.g., ZCL_ORDER*, Z*TEST*). For tadir_lookup: exact name or comma/whitespace-separated names. For source_code search: text string to find in source (e.g., cl_lsapi_manager, CALL FUNCTION)." - changed
Input schema / properties / searchType / descriptionPrevious value: -"Search mode: \"object\" (default) searches by object name, \"tadir_lookup\" does exact cross-package object lookup."New value: +"Search mode: \"object\" (default) searches by object name, \"source_code\" searches within ABAP source code, \"tadir_lookup\" does exact cross-package object lookup." - changed
Input schema / properties / searchType / enumPrevious value: -[ - "object", - "tadir_lookup" -]New value: +[ + "object", + "source_code", + "tadir_lookup" +]
1 tool update
v1.5.1- Changed
SAPNavigate4 fields changed- changed
Input schema / properties / column / descriptionPrevious value: -"Column number (1-based)"New value: +"Column (0-based integer)" - changed
Input schema / properties / line / descriptionPrevious value: -"Line number (1-based)"New value: +"Line (1-based integer)" - changed
Input schema / properties / source / descriptionPrevious value: -"Current source code (for definition/completion)"New value: +"Current source for definition/completion" - changed
Input schema / properties / uri / descriptionPrevious value: -"Source URI of the object. Optional for references if type+name are provided."New value: +"Definition needs source URI, line, column and source; references also accepts type+name."
2 tool updates
v1.5.0- Changed
SAPRead7 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Default \"text\" (TABL/TTYP/DTEL/DOMA/INTF metadata included). DEVC: array in first text block + listing metadata in second; \"structured\" returns {objects, listing}. CLAS \"structured\": metadata + all includes; prefer method/grep for targeted reads. action=\"diff\": \"structured\" returns JSON {hasDifferences, identical, added, removed, diff, version labels}; default is a patch."New value: +"Default text. editable: fresh {source, sourceHash} for guarded SAPWrite; omit version/method/grep, select CLAS include. structured: CLAS metadata+includes, DEVC {objects,listing}, or action=diff JSON. DEVC text returns the array then listing metadata; diff text returns a patch." - changed
Input schema / properties / format / enumPrevious value: -[ - "text", - "structured" -]New value: +[ + "text", + "structured", + "editable" +] - changed
Input schema / properties / objectType / descriptionPrevious 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. TEXT_ELEMENTS: PROG (default), CLAS or FUGR."New value: +"SYNTAX: required repository type (e.g. CLAS, PROG, DDLS). API_STATE: inferred if omitted. VERSIONS: type selects the endpoint (FUNC needs group); inferred from CL_/IF_/CX_, else PROG. TEXT_ELEMENTS: PROG (default), CLAS or FUGR." - added
Input schema / properties / sourceAdded value: +{ + "description": "SYNTAX only: proposed source to check without saving. Omit to check stored version (default active; inactive checks draft). Object must exist; version=auto is unsupported.", + "type": "string" +} - changed
Input schema / properties / type / descriptionPrevious 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/DRTY): 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), DRTY (CDS Type). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)."New value: +"Object or metadata type. TABL includes DDIC structures; KTD aliases SKTD (Knowledge Transfer Documents). SYNTAX checks objectType+name. Server-driven objects use discovery-gated XML metadata and AFF JSON source (DTSC/DSFD/DTDC/DRTY use DDL text). DESD logical external schema; EVTB event binding; EVTO event object; CSNM CSN model; COTA communication target; DTSC static cache; DTDC dynamic cache; DSFD scalar function; UIAD launchpad descriptor; DRTY CDS type; APLO log object; SAJC/SAJT job catalog/template. Deprecated: MESSAGES→MSAG. FTG2→FEATURE_TOGGLE. ENQU lock object as JSON." - changed
Input schema / properties / type / enumPrevious 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", - "DRTY" -]New value: +[ + "PROG", + "CLAS", + "INTF", + "FUNC", + "FUGR", + "INCL", + "DDLS", + "DCLS", + "DDLX", + "BDEF", + "SRVD", + "SRVB", + "SKTD", + "KTD", + "TABL", + "VIEW", + "DOMA", + "DTEL", + "TRAN", + "TTYP", + "ENQU", + "TABLE_CONTENTS", + "TABLE_QUERY", + "DEVC", + "SOBJ", + "SYSTEM", + "COMPONENTS", + "MSAG", + "MESSAGES", + "TEXT_ELEMENTS", + "VARIANTS", + "BSP", + "BSP_DEPLOY", + "API_STATE", + "INACTIVE_OBJECTS", + "SYNTAX", + "AUTH", + "FEATURE_TOGGLE", + "FTG2", + "ENHO", + "VERSIONS", + "VERSION_SOURCE", + "DESD", + "DTSC", + "CSNM", + "EVTB", + "EVTO", + "COTA", + "DSFD", + "DTDC", + "UIAD", + "DRTY", + "APLO", + "SAJC", + "SAJT" +] - changed
Input schema / properties / version / descriptionPrevious value: -"Version to read. Source: \"active\" (default); \"inactive\" requests the draft (SAP may return active if none); \"auto\" uses the developer view. DTEL: omitted/\"auto\" uses its developer view; explicit values pass through."New value: +"Source defaults active; inactive requests a draft (SAP may return active if none); auto selects developer view. DTEL/ENQU/server-driven types default to developer view. Server-driven types return an error if SAP cannot confirm an explicit version (e.g. no draft)."
- Changed
SAPTransport1 field changed- added
Input schema / properties / groupAdded value: +{ + "description": "check/history: parent group for INCL L<group>… or a new FUNC; existing FUNC auto-resolves.", + "type": "string" +}
2 tool updates
v1.4.0- Changed
SAPDiagnose3 fields changed- changed
Input schema / properties / from / descriptionPrevious value: -"system_messages/gateway_errors lower time bound."New value: +"Inclusive lower time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"Result limit: dumps/system_messages/gateway_errors default 50; authorization_trace 100. Capped."New value: +"Result limit (default 50; authorization_trace 100). Caps: dumps 500, system_messages/gateway_errors 200, authorization_trace 10000." - changed
Input schema / properties / to / descriptionPrevious value: -"system_messages/gateway_errors upper time bound."New value: +"Inclusive upper time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS."
- Changed
SAPRead2 fields changed- changed
Input schema / properties / type / descriptionPrevious 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)."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/DRTY): 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), DRTY (CDS Type). Deprecated aliases: MESSAGES (use MSAG), FTG2 (use FEATURE_TOGGLE)." - changed
Input schema / properties / type / enumPrevious 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" -]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", + "DRTY" +]
5 tool updates
v1.3.0- Changed
SAPContext2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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."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) = source-derived dependency contracts plus KTD when available. Requires type+name, even with source. Not a complete inventory; read source for behavior.\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." - changed
Input schema / properties / type / descriptionPrevious value: -"Object type. Optional for action=\"impact\" (defaults to DDLS) or action=\"usages\"; required otherwise."New value: +"Root type. deps requires type+name, even with source. Optional for action=\"impact\" (defaults to DDLS) or usages (unique name lookup); structure requires TABL."
- Changed
SAPDiagnose34 fields changed- changed
Input schema / properties / action / enumPrevious 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" -]New value: +[ + "syntax", + "unittest", + "unittest_ci", + "atc", + "atc_ci", + "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" +] - changed
Input schema / properties / aggregate / descriptionPrevious value: -"For trace_start: aggregate the trace (default true)."New value: +"trace_start aggregation (default true)." - changed
Input schema / properties / analysis / descriptionPrevious value: -"Trace analysis type (for traces action with id). hitlist = execution hot spots, statements = call tree, dbAccesses = database access stats."New value: +"traces with id: hitlist=hot spots, statements=call tree, dbAccesses=DB access stats." - changed
Input schema / properties / column / descriptionPrevious value: -"Source column number for quickfix evaluation (default 0 for quickfix actions)."New value: +"Quickfix source column (default 0)." - added
Input schema / properties / configurationAdded value: +{ + "description": "atc_ci: optional configuration.", + "maxLength": 128, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / description / descriptionPrevious value: -"For trace_start: optional label for the trace request."New value: +"trace_start label." - changed
Input schema / properties / detailUrl / descriptionPrevious value: -"Canonical host-relative /sap/bc/adt/gw/errorlog/... path for detail mode; absolute URLs are rejected."New value: +"Detail path: canonical /sap/bc/adt/gw/errorlog/...; no absolute URLs." - changed
Input schema / properties / errorType / descriptionPrevious value: -"Gateway error type for gateway_errors detail by id (for example \"Frontend Error\"). Required when using id without detailUrl."New value: +"gateway_errors: required with id instead of detailUrl, e.g. \"Frontend Error\"." - changed
Input schema / properties / expiresHours / descriptionPrevious value: -"For trace_start: hours until the armed request auto-expires (default 24)."New value: +"trace_start expiry in hours (default 24)." - added
Input schema / properties / failOnSeverityAdded value: +{ + "description": "atc_ci failure threshold (default error).", + "enum": [ + "error", + "warning", + "info" + ], + "type": "string" +} - changed
Input schema / properties / from / descriptionPrevious value: -"Optional lower time boundary for feed-based diagnostics actions (system_messages/gateway_errors)."New value: +"system_messages/gateway_errors lower time bound." - changed
Input schema / properties / includeFullText / descriptionPrevious value: -"For dumps detail mode only: include full formattedText blob. Default false to reduce token usage."New value: +"dumps detail: include full formattedText (default false)." - added
Input schema / properties / includeReportXmlAdded value: +{ + "description": "CI XML reports (default false; 256 KiB total cap).", + "type": "boolean" +} - changed
Input schema / properties / line / descriptionPrevious value: -"Source line number for quickfix evaluation (required for quickfix/apply_quickfix)."New value: +"Required quickfix/apply_quickfix source line." - changed
Input schema / properties / maxExecutions / descriptionPrevious value: -"For trace_start: how many matching executions to capture before the request is consumed (default 1)."New value: +"trace_start executions to capture (default 1)." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"Maximum results for dumps/system_messages/gateway_errors (default 50) or authorization_trace (default 100); bounded to a safe cap."New value: +"Result limit: dumps/system_messages/gateway_errors default 50; authorization_trace 100. Capped." - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (for syntax/unittest/atc/object_state); the CDS entity / DDLS source name for cds_testcases and cds_sql"New value: +"syntax/unittest/atc/object_state object name; cds_testcases/cds_sql CDS entity or DDLS name." - changed
Input schema / properties / objectType / descriptionPrevious value: -"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)."New value: +"trace_start match type; defaults: http→url, dialog→transaction, batch→report, rfc→functionModule." - added
Input schema / properties / objectsAdded value: +{ + "description": "ATC only, instead of name/type/url. One batch + at most one verification. Returns coverage; unreported objects stay incomplete. No packages.", + "items": { + "additionalProperties": false, + "properties": { + "name": { + "maxLength": 40, + "minLength": 1, + "pattern": "^(?:/[A-Za-z0-9_]+/)?[A-Za-z0-9_]+$", + "type": "string" + }, + "type": { + "enum": [ + "CLAS", + "INTF", + "PROG", + "FUGR", + "DDLS", + "DCLS", + "BDEF", + "DDLX", + "SRVD", + "SRVB", + "TABL", + "DTEL", + "DOMA" + ], + "type": "string" + } + }, + "required": [ + "type", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / onlyFailures / descriptionPrevious value: -"For authorization_trace: return only denied checks (RC<>0), similar to the SU53 failure view."New value: +"authorization_trace: only denied checks (RC<>0), like SU53." - added
Input schema / properties / packageTreesAdded value: +{ + "description": "CI packages including subpackages.", + "items": { + "maxLength": 40, + "minLength": 1, + "pattern": "^[A-Za-z0-9_/$]+$", + "type": "string" + }, + "maxItems": 50, + "type": "array" +} - added
Input schema / properties / packagesAdded value: +{ + "description": "CI exact packages; 1–50 total with packageTrees.", + "items": { + "maxLength": 40, + "minLength": 1, + "pattern": "^[A-Za-z0-9_/$]+$", + "type": "string" + }, + "maxItems": 50, + "type": "array" +} - changed
Input schema / properties / processType / descriptionPrevious value: -"For trace_start: the kind of work process to capture. Default \"http\" (OData/Gateway). dialog = SAP GUI transaction, batch = background job, rfc = RFC call."New value: +"trace_start work process (default http/OData): dialog=SAP GUI, batch=background job, rfc=RFC." - changed
Input schema / properties / proposalAffectedObjects / descriptionPrevious value: -"Optional affectedObjects array from quickfix action. Include content for each affected source unit when applying multi-object quickfixes."New value: +"quickfix affectedObjects; provide current content for each source unit when applying multi-object fixes." - changed
Input schema / properties / sections / descriptionPrevious value: -"Dump chapter IDs to include for dumps detail mode (for example [\"kap0\",\"kap3\",\"kap8\"]). Omit to use focused defaults."New value: +"dumps detail chapter IDs, e.g. [\"kap0\",\"kap3\",\"kap8\"]; omit for focused defaults." - changed
Input schema / properties / sourceUri / descriptionPrevious value: -"Exact ADT source URI for quickfix/apply_quickfix. Defaults to the type/name main source; use this for class includes such as /includes/definitions."New value: +"quickfix/apply_quickfix source URI; default type/name main source. Set for includes, e.g. /includes/definitions." - changed
Input schema / properties / sqlOn / descriptionPrevious value: -"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."New value: +"set_sql_trace_state: true arms ST05 SQL trace, false disarms; user filters the SAP user." - changed
Input schema / properties / sqlTrace / descriptionPrevious value: -"For trace_start: capture SQL/DB accesses (default true — required for analysis=\"dbAccesses\")."New value: +"trace_start SQL capture (default true; required for analysis=\"dbAccesses\")." - changed
Input schema / properties / timeoutSeconds / descriptionPrevious value: -"unittest/atc timeout: 1-3600s; default 300."New value: +"Timeout 1–3600s: unittest/atc default 300; CI overall default 600." - changed
Input schema / properties / to / descriptionPrevious value: -"Optional upper time boundary for feed-based diagnostics actions (system_messages/gateway_errors)."New value: +"system_messages/gateway_errors upper time bound." - changed
Input schema / properties / traceUser / descriptionPrevious value: -"For trace_start/trace_requests: the SAP user whose matching execution is traced/listed. Defaults to the connected user."New value: +"trace_start/trace_requests SAP user (default connected user)." - changed
Input schema / properties / url / descriptionPrevious 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."New value: +"odata_perf: host-relative OData path from the app network request (e.g. /sap/opu/odata4/sap/.../Entity?$filter=…). Absolute URLs rejected." - changed
Input schema / properties / variant / descriptionPrevious value: -"atc: check variant; atc_variants: name filter (*=all)"New value: +"atc/atc_ci variant; atc_variants name filter (*=all)" - changed
Input schema / properties / version / descriptionPrevious value: -"Source version for syntax check (default \"active\"). Use \"inactive\" to validate pending changes."New value: +"syntax source version (default active); inactive checks pending changes."
- Changed
SAPNavigate7 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "definition", - "references", - "completion", - "hierarchy" -]New value: +[ + "definition", + "references", + "completion", + "hierarchy", + "relations" +] - added
Input schema / properties / depthAdded value: +{ + "description": "relations: native steps (default 1), not source-call hops.", + "maximum": 3, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / directionAdded value: +{ + "description": "relations: incoming=users; outgoing=dependencies (default).", + "enum": [ + "incoming", + "outgoing" + ], + "type": "string" +} - added
Input schema / properties / expandPackagesAdded value: +{ + "description": "relations: expand exact packages beyond root; others visible. Not authorization.", + "items": { + "maxLength": 120, + "minLength": 1, + "pattern": "^(?:/[A-Za-z0-9_]+/)?[A-Za-z0-9_$]+$", + "type": "string" + }, + "maxItems": 8, + "type": "array" +} - changed
Input schema / properties / maxResults / descriptionPrevious value: -"references: max entries (default 100, max 1000). \"total\" counts every match of the filter."New value: +"references: max entries (default 100, max 1000). \"total\" counts every match of the filter. relations: node cap incl. root, 1–100 (default 50); may stop earlier." - changed
Input schema / properties / objectType / descriptionPrevious value: -"references: keep only results of this ADT type, slash format (CLAS/OC, PROG/P, FUGR/FF). A bare prefix (\"CLAS\") matches every subtype."New value: +"references RESULT filter, not the root type: CLAS/OC, PROG/P, FUGR/FF. Omit for all consumer types. A bare prefix (\"CLAS\") matches every subtype." - changed
Input schema / properties / type / descriptionPrevious value: -"Object type (PROG, CLAS, INTF, FUNC, etc.) — alternative to uri for references."New value: +"Root object type, paired with name instead of uri (e.g. type=\"INTF\"). Not the result-type filter. relations: CLAS, INTF, DDLS, DCLS, BDEF, SRVD, TABL, TTYP, DTEL, DOMA, PROG, INCL, FUGR, FUNC, VIEW, ENHO, MSAG, TRAN, SHLP, SKTD, ENHS, ENQU, TYPE, EVTB, DSFD. ENHO/XHB, ENHS/XSB only; TTYP=table type; MSAG=message class."
- Changed
SAPRead7 fields changed- changed
Input schema / properties / format / descriptionPrevious 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=."New value: +"Default \"text\" (TABL/TTYP/DTEL/DOMA/INTF metadata included). DEVC: array in first text block + listing metadata in second; \"structured\" returns {objects, listing}. CLAS \"structured\": metadata + all includes; prefer method/grep for targeted reads. action=\"diff\": \"structured\" returns JSON {hasDifferences, identical, added, removed, diff, version labels}; default is a patch." - changed
Input schema / properties / include / descriptionPrevious 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)."New value: +"CLAS: omit include or use main for the global declaration + implementation; definitions/implementations select local helper classes, macros/testclasses their own sections. Explicit include wins over method auto-routing. 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). BSP: case-sensitive path; name may also be APP/path. TEXT_ELEMENTS: symbols|selections|headings; omit for pool (CLAS: symbols)." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"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."New value: +"DEVC object limit (default 200, clamped to [1, 1000]). Listing metadata reports the effective limit and possible truncation. Total and full repository completeness remain unknown." - changed
Input schema / properties / maxRows / descriptionPrevious value: -"Row cap (default 100). On 758, TABLE_CONTENTS returns N+1; use TABLE_QUERY or cap client-side."New value: +"Row cap for TABLE_CONTENTS/TABLE_QUERY (default 100, max 10,000; byte limit may apply sooner). On 758, TABLE_CONTENTS returns N+1; use TABLE_QUERY for exact caps." - changed
Input schema / properties / method / descriptionPrevious value: -"For 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."New value: +"For CLAS: read a method (e.g., \"get_name\", \"zif_order~process\", \"lhc_travel~accept\") or use \"*\" to list methods. Without include=, lhc_*/lcl_* use implementations, ltc_* uses testclasses, and others use MAIN; explicit include= wins. For SOBJ: BOR method name to read. If omitted, returns the full BOR method catalog. Not used with other types." - changed
Input schema / properties / objectType / descriptionPrevious 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."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. TEXT_ELEMENTS: PROG (default), CLAS or FUGR." - changed
Input schema / properties / version / descriptionPrevious value: -"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."New value: +"Version to read. Source: \"active\" (default); \"inactive\" requests the draft (SAP may return active if none); \"auto\" uses the developer view. DTEL: omitted/\"auto\" uses its developer view; explicit values pass through."
- Changed
SAPSearch2 fields changed- changed
Input schema / properties / objectType / descriptionPrevious value: -"For source_code search: filter by object type (e.g., PROG, CLAS, FUNC). For tadir_lookup: single type filter; use objectTypes for multiple."New value: +"Object search: SAP-side type filter before the result limit (e.g., UIAC, CLAS, CLAS/OC). Source search: type filter (e.g., PROG, CLAS, FUNC). For tadir_lookup: single type filter; use objectTypes for multiple." - added
Input schema / properties / objectType / maxLengthAdded value: +64
3 tool updates
v1.1.0- Changed
SAPDiagnose7 fields changed- removed
Input schema / properties / action / descriptionRemoved value: -"Diagnostic action" - changed
Input schema / properties / coverage / descriptionPrevious 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." - changed
Input schema / properties / detailUrl / descriptionPrevious 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." - added
Input schema / properties / includeSubpackagesAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / resultFormatAdded value: +{ + "description": "unittest: legacy|structured|junit; atc: legacy|structured; other actions reject it.", + "enum": [ + "legacy", + "structured", + "junit" + ], + "type": "string" +} - added
Input schema / properties / timeoutSecondsAdded value: +{ + "description": "unittest/atc timeout: 1-3600s; default 300.", + "type": "number" +} - changed
Input schema / properties / type / descriptionPrevious value: -"Object type (PROG, CLAS, etc.) (for syntax/unittest/atc/object_state)"New value: +"Object type; unittest accepts CLAS, PROG, FUGR, or DEVC."
- Changed
SAPRead5 fields changed- changed
Input schema / properties / format / descriptionPrevious 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=." - changed
Input schema / properties / maxRows / descriptionPrevious 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." - changed
Input schema / properties / sqlFilter / descriptionPrevious 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." - changed
Input schema / properties / versionUri / descriptionPrevious 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." - changed
Input schema / properties / where / descriptionPrevious 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\"}]."
- Changed
SAPTransport8 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "check", - "history", - "layers", - "targets" -]New value: +[ + "list", + "get", + "diff", + "check", + "history", + "layers", + "targets" +] - changed
Input schema / properties / id / descriptionPrevious 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)" - added
Input schema / properties / limitAdded value: +{ + "description": "diff: objects per call (default 20, max 40); page with offset.", + "type": "number" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "diff: first object to diff (default 0).", + "type": "number" +} - added
Input schema / properties / resultFormatAdded value: +{ + "description": "release actions: legacy (default) or structured JSON.", + "enum": [ + "legacy", + "structured" + ], + "type": "string" +} - added
Input schema / properties / timeoutSecondsAdded value: +{ + "description": "release timeout seconds: 1-1800; default 300.", + "type": "number" +} - changed
Input schema / properties / user / descriptionPrevious value: -"SAP user for list (default: current user; \"*\" means all users)."New value: +"List user (default: current SAP user; \"*\" means all visible owners)."
8 tool updates
v1.0.2- Changed
SAPContext7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / includeIndirect / descriptionPrevious 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." - changed
Input schema / properties / includeKtd / descriptionPrevious 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." - changed
Input schema / properties / maxDeps / descriptionPrevious value: -"Maximum dependencies to resolve (default 20). Lower = faster + fewer tokens."New value: +"Max dependencies to resolve (default 20). Lower = faster + fewer tokens." - added
Input schema / properties / maxResultsAdded 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" +} - changed
Input schema / properties / siblingCheck / descriptionPrevious value: -"Only for action=\"impact\". Enable sibling metadata-extension consistency analysis. Default true."New value: +"impact: Enable sibling metadata-extension consistency analysis. Default true." - changed
Input schema / properties / siblingMaxCandidates / descriptionPrevious 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."
- Changed
SAPDiagnose3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / action / enumPrevious 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" +] - changed
Input schema / properties / variant / descriptionPrevious value: -"ATC check variant (for atc action)"New value: +"atc: check variant; atc_variants: name filter (*=all)"
- Changed
SAPLint1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
SAPManage2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / responsible / descriptionPrevious 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."
- Changed
SAPNavigate3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / maxResultsAdded value: +{ + "description": "references: max entries (default 100, max 1000). \"total\" counts every match of the filter.", + "type": "number" +} - changed
Input schema / properties / objectType / descriptionPrevious 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."
- Changed
SAPRead6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / format / descriptionPrevious 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=." - changed
Input schema / properties / include / descriptionPrevious 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)." - changed
Input schema / properties / includeSignature / descriptionPrevious 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)." - changed
Input schema / properties / type / descriptionPrevious 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)." - changed
Input schema / properties / type / enumPrevious 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" +]
- Changed
SAPSearch1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
SAPTransport8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / action / descriptionPrevious 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." - added
Input schema / properties / maxResultsAdded value: +{ + "description": "Maximum list rows or check/history assignment candidates (defaults: list/history 50, check 10; max 1000).", + "type": "number" +} - added
Input schema / properties / operationAdded value: +{ + "description": "Check mode: create (default) or modify.", + "enum": [ + "create", + "modify" + ], + "type": "string" +} - changed
Input schema / properties / package / descriptionPrevious 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." - changed
Input schema / properties / summary / descriptionPrevious 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)." - changed
Input schema / properties / type / descriptionPrevious 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." - changed
Input schema / properties / user / descriptionPrevious 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)."
2 tool updates
v0.9.27- Changed
SAPContext2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / type / descriptionPrevious 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."
- Changed
SAPDiagnose5 fields changed- changed
Input schema / properties / action / enumPrevious 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" +] - added
Input schema / properties / authObjectAdded value: +{ + "description": "Authorization object filter, e.g. S_TCODE.", + "type": "string" +} - changed
Input schema / properties / maxResults / descriptionPrevious 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." - added
Input schema / properties / onlyFailuresAdded value: +{ + "description": "For authorization_trace: return only denied checks (RC<>0), similar to the SU53 failure view.", + "type": "boolean" +} - changed
Input schema / properties / user / descriptionPrevious value: -"Filter dumps by SAP user (for dumps action)"New value: +"SAP-user filter for dumps, feeds, or authorization_trace."
4 tool updates
v0.9.23- Changed
SAPContext4 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / action / enumPrevious value: -[ - "impact", - "deps", - "usages" -]New value: +[ + "impact", + "deps", + "usages", + "structure" +] - changed
Input schema / properties / type / descriptionPrevious 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." - changed
Input schema / properties / type / enumPrevious value: -[ - "CLAS", - "INTF", - "PROG", - "FUNC", - "DDLS" -]New value: +[ + "CLAS", + "INTF", + "PROG", + "FUNC", + "DDLS", + "TABL" +]
- Changed
SAPDiagnose1 field changed- changed
Input schema / properties / url / descriptionPrevious 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."
- Changed
SAPManage4 fields changed- changed
Input schema / properties / domainId / descriptionPrevious value: -"Domain ID for FLP catalog creation (e.g., ZARC1_SALES)."New value: +"Domain ID — required for flp_create_catalog (e.g., ZARC1_SALES)." - added
Input schema / properties / responsibleAdded 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" +} - changed
Input schema / properties / softwareComponent / descriptionPrevious value: -"Software component for create_package (default: LOCAL)."New value: +"Software component for create_package (default: LOCAL on-prem, ZLOCAL on BTP)." - changed
Input schema / properties / title / descriptionPrevious value: -"Title for FLP catalog/group creation."New value: +"Title — required for flp_create_catalog and flp_create_group."
- Changed
SAPRead2 fields changed- added
Input schema / properties / fromLabelAdded 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" +} - added
Input schema / properties / toLabelAdded 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" +}
3 tool updates
v0.9.21- Changed
SAPDiagnose14 fields changed- changed
Input schema / properties / action / enumPrevious 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" +] - added
Input schema / properties / aggregateAdded value: +{ + "description": "For trace_start: aggregate the trace (default true).", + "type": "boolean" +} - added
Input schema / properties / coverageAdded 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" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "For trace_start: optional label for the trace request.", + "type": "string" +} - added
Input schema / properties / expiresHoursAdded value: +{ + "description": "For trace_start: hours until the armed request auto-expires (default 24).", + "type": "number" +} - changed
Input schema / properties / id / descriptionPrevious 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." - added
Input schema / properties / maxExecutionsAdded value: +{ + "description": "For trace_start: how many matching executions to capture before the request is consumed (default 1).", + "type": "number" +} - changed
Input schema / properties / name / descriptionPrevious 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" - added
Input schema / properties / objectTypeAdded 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" +} - added
Input schema / properties / processTypeAdded 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" +} - added
Input schema / properties / sqlOnAdded 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" +} - added
Input schema / properties / sqlTraceAdded value: +{ + "description": "For trace_start: capture SQL/DB accesses (default true — required for analysis=\"dbAccesses\").", + "type": "boolean" +} - added
Input schema / properties / traceUserAdded value: +{ + "description": "For trace_start/trace_requests: the SAP user whose matching execution is traced/listed. Defaults to the connected user.", + "type": "string" +} - added
Input schema / properties / urlAdded 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" +}
- Changed
SAPManage4 fields changed- added
Input schema / properties / apiStateAdded 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" +} - added
Input schema / properties / contractAdded 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" +} - changed
Input schema / properties / objectType / descriptionPrevious 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)." - changed
Input schema / properties / objectUri / descriptionPrevious 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)."
- Changed
SAPRead1 field changed- changed
Input schema / properties / type / enumPrevious 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" +]
2 tool updates
v0.9.20- Changed
SAPContext2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - added
Input schema / properties / includeKtdAdded 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" +}
- Changed
SAPRead3 fields changed- changed
Input schema / properties / grep / descriptionPrevious 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." - changed
Input schema / properties / type / descriptionPrevious 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)." - changed
Input schema / properties / type / enumPrevious 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" +]
2 tool updates
v0.9.18- Changed
SAPRead3 fields changed- added
Input schema / properties / actionAdded 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" +} - added
Input schema / properties / fromAdded 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" +} - added
Input schema / properties / toAdded value: +{ + "description": "action=\"diff\" NEW side (default \"inactive\" = pending unactivated changes). Same values as from.", + "type": "string" +}
- Changed
SAPTransport6 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / id / descriptionPrevious 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)" - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (for check or history actions)"New value: +"Object name (for check, history, or remove_object actions)" - added
Input schema / properties / pgmidAdded value: +{ + "description": "Program ID for remove_object: \"R3TR\" (whole object) or \"LIMU\" (sub-object). Required — object type alone does not determine pgmid.", + "type": "string" +} - added
Input schema / properties / summaryAdded 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" +} - changed
Input schema / properties / type / descriptionPrevious 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."
1 tool update
v0.9.14- Changed
SAPRead1 field changed- added
Input schema / properties / grep / maxLengthAdded value: +512
4 tool updates
v0.9.13- Changed
SAPDiagnose2 fields changed- changed
Input schema / properties / action / enumPrevious 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" +] - changed
Input schema / properties / name / descriptionPrevious 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"
- Changed
SAPManage1 field changed- added
Input schema / properties / recordChangesAdded 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" +}
- Changed
SAPRead4 fields changed- changed
Input schema / properties / expand_includes / descriptionPrevious 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)." - changed
Input schema / properties / grep / descriptionPrevious 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." - changed
Input schema / properties / type / descriptionPrevious 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)." - changed
Input schema / properties / type / enumPrevious 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" +]
- Changed
SAPTransport5 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "check", - "history" -]New value: +[ + "list", + "get", + "check", + "history", + "layers", + "targets" +] - added
Input schema / properties / removeLockedObjectsAdded 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" +} - added
Input schema / properties / targetAdded 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" +} - added
Input schema / properties / transportLayerAdded 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" +}
1 tool update
v0.9.7- Changed
SAPRead6 fields changed- added
Input schema / properties / columnsAdded value: +{ + "description": "For TABLE_QUERY: columns to SELECT (default: all). Example: [\"MATNR\",\"BWART\",\"BUDAT\",\"MENGE\"].", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / grepAdded 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" +} - changed
Input schema / properties / maxRows / descriptionPrevious value: -"For TABLE_CONTENTS: max rows to return (default 100)"New value: +"For TABLE_CONTENTS and TABLE_QUERY: max rows to return (default 100)" - changed
Input schema / properties / type / descriptionPrevious 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)." - changed
Input schema / properties / type / enumPrevious 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" +] - added
Input schema / properties / whereAdded 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" +}
8 tool updates
v0.9.6- Added
SAPContext - Added
SAPDiagnose - Added
SAPLint - Added
SAPManage - Added
SAPNavigate - Added
SAPRead - Added
SAPSearch - Added
SAPTransport
TDQS
Scored across 9 tools
SAPRead, SAPContext, and SAPNavigate all cover code understanding; SAPContext action=usages overlaps with SAPNavigate references, and SAPRead SYNTAX overlaps with SAPDiagnose syntax. The descriptions provide decision rules that mitigate this, but boundary selection still requires careful reading.
All tool names use a consistent SAP prefix with PascalCase suffixes. The suffixes mix verbs (Read, Navigate, Diagnose) with nouns (Context, Git, Transport), which is a minor inconsistency but still readable and predictable.
Nine tools is well within the appropriate 3-15 range for a broad SAP ABAP assistant. Each major capability has a tool home, even though several tools bundle many sub-actions.
Read, navigation, diagnostics, lint, search, transport, git, and management coverage are present, but descriptions reference SAPWrite and SAPActivate that are absent from the set. The quickfix flow ends with text deltas and no save path, leaving a significant gap for editing and activating ABAP objects.
Maintenance
Related MCP Connectors
MCP server for Support & Service Management
MCP server for Product Management
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP Server for Nutanix Prism Central13MIT
- MIT
- AlicenseBqualityAmaintenanceABAP Development Tools MCP server with comprehensive tooling and documentation for SAP systems2562,053 npm102Apache 2.0
- AlicenseBqualityDmaintenanceMCP server for SAP ABAP development that enables AI assistants and code editors to interact with SAP systems via ABAP Developer Toolkit (ADT) APIs, supporting read, create, update, and delete of ABAP objects.100756 npmMIT