Skip to main content
Glama

ARC-1 — SAP ADT MCP Server

ARC-1 (произносится arc one [ɑːrk wʌn]) — готовый к промышленной эксплуатации MCP-сервер для систем SAP ABAP. Безопасен по умолчанию, развертывается в BTP или локально (on-premise), усилен обширным покрытием модульными, интеграционными и E2E-тестами.

ARC-1 подключает ИИ-ассистентов (Claude, GitHub Copilot, Copilot Studio и любой MCP-клиент) к системам SAP через ADT REST API. Поставляется как npm-пакет и Docker-образ.

Полная документация | Руководство по настройке | Справочник инструментов

Почему ARC-1?

Создан для организаций, которым необходима разработка в SAP с помощью ИИ и встроенными средствами контроля. Вдохновлен новаторскими работами abap-adt-api, mcp-abap-adt и vibing-steampunk — ARC-1 добавляет функции, необходимые для работы в продакшене:

Безопасность и административный контроль

  • Безопасность по умолчанию — только чтение, никакого произвольного SQL, предварительного просмотра таблиц или переносов «из коробки». Используйте --profile developer или явные флаги для включения возможностей.

  • Списки разрешенных/запрещенных операций — точный контроль того, какие типы операций (чтение, запись, поиск, запрос, активация, перенос) разрешены.

  • Ограничения пакетов — ограничение операций записи ИИ (создание, обновление, удаление) конкретными пакетами с использованием масок (--allowed-packages "Z*,$TMP"). Операции чтения не ограничиваются пакетами — используйте встроенную авторизацию SAP для контроля доступа на уровне чтения.

  • Контроль доступа к данным — включение предварительного просмотра данных таблиц (--block-data=false) или произвольного SQL (--block-free-sql=false).

  • Безопасность переносов — требование назначения переносов, ограничение конкретными переносами или перевод переносов в режим «только чтение». Операции обновления/удаления автоматически используют номер коррекции блокировки, если не указан явный перенос.

  • Профили безопасности — предустановленные роли: viewer, viewer-data, viewer-sql, developer, developer-data, developer-sql.

  • Запись ограничена $TMP при включении — только локальные/временные объекты; запись в переносимые пакеты требует явного указания --allowed-packages.

Аутентификация

  • API-ключ — простой Bearer-токен для внутренних развертываний.

  • OIDC / JWT — Entra ID, Keycloak или любой провайдер OpenID Connect.

  • OAuth 2.0 — вход через браузер для BTP ABAP Environment.

  • XSUAA — нативная аутентификация SAP BTP с автоматическим проксированием токенов для MCP-клиентов.

  • Principal Propagation — идентификация пользователя передается через Cloud Connector (каждое действие в SAP выполняется от имени реального пользователя, а не технической учетной записи).

Развертывание в BTP Cloud Foundry

Развертывайте ARC-1 как приложение Cloud Foundry в SAP BTP с полной интеграцией с платформой:

  • Destination Service — подключение к системам SAP через управляемые назначения (destinations).

  • Cloud Connector — доступ к локальным системам через прокси-сервер соединений.

  • Principal Propagation — идентификация пользователя передается сквозным образом через сертификаты X.509.

  • XSUAA OAuth proxy — MCP-клиенты проходят аутентификацию через стандартный OAuth, ARC-1 обрабатывает обмен токенами BTP.

  • Журналирование аудита — структурированные события в stderr, файл или службу аудита BTP.

Эффективность токенов

  • 11 инструментов на основе намерений (~5 тыс. токенов схемы) вместо 200+ отдельных инструментов — это позволяет поддерживать небольшое контекстное окно LLM.

  • Чтение/редактирование на уровне методов — чтение или обновление одного метода класса, а не всего исходного кода (до 20 раз меньше токенов).

  • Сжатие контекста — SAPContext возвращает контракты публичных API всех зависимостей за один вызов (сжатие в 7-30 раз).

Встроенное кэширование объектов

  • Автоматическое кэширование исходного кода — каждое чтение объекта SAP кэшируется в памяти (stdio) или SQLite (http-streamable). Повторные чтения возвращаются мгновенно без обращения к SAP.

  • Кэширование графа зависимостей — разрешение зависимостей SAPContext по хешу исходного кода; неизмененные объекты пропускают все вызовы ADT при последующих запусках.

  • Предварительный прогрев — запустите с ARC1_CACHE_WARMUP=true для предварительной индексации всех пользовательских объектов при старте, что позволит выполнять обратный поиск зависимостей (SAPContext(action="usages")).

  • Инвалидация при записи — когда SAPWrite изменяет объект, его запись в кэше автоматически удаляется; следующее чтение получает свежий исходный код.

См. docs/caching.md для получения полной документации.

Тестирование

  • 1367+ модульных тестов (53 файла модульных тестов, мокирование HTTP).

  • ~160 интеграционных тестов против реальных систем SAP с явными причинами пропуска, если отсутствуют учетные данные или фикстуры.

  • ~70 E2E-тестов, которые выполняют реальные вызовы инструментов MCP к работающему серверу ARC-1 и реальной системе SAP.

  • Жизненный цикл CRUD и дымовые тесты BTP включены (test:integration:crud, test:integration:btp:smoke).

  • CI-матрица на Node 22 и 24; интеграционные + E2E-тесты запускаются при push в main и внутренних PR.

  • Телеметрия надежности + покрытие публикуются как информационные сигналы CI (не блокирующие).

Инструменты, адаптированные для реального использования

11 инструментов разработаны на основе обратной связи от реального взаимодействия с LLM:

Инструмент

Что он делает

SAPRead

Чтение исходного кода ABAP, данных таблиц, CDS-представлений, расширений метаданных (DDLX), привязок сервисов (SRVB), классов сообщений, объектов BOR, развернутых приложений UI5/Fiori (BSP, BSP_DEPLOY). Структурированный формат для классов возвращает метаданные + декомпозированные инклюды в виде JSON

SAPSearch

Поиск объектов + полнотекстовый поиск исходного кода по всей системе

SAPWrite

Создание/обновление/удаление исходного кода ABAP и метаданных DDIC с автоматической блокировкой/разблокировкой (PROG, CLAS, INTF, FUNC, INCL, DDLS, DDLX, BDEF, SRVD, DOMA, DTEL). Пакетное создание для рабочих процессов с несколькими объектами (например, стек RAP или домен+элемент данных за один вызов)

SAPActivate

Активация объектов ABAP — одиночная или пакетная (необходимо для стеков RAP). Публикация/отмена публикации привязок OData-сервисов (SRVB)

SAPNavigate

Переход к определению, поиск ссылок, автодополнение кода

SAPQuery

Выполнение ABAP SQL с предложениями при отсутствии таблицы

SAPTransport

Управление переносами CTS (список, создание, выпуск)

SAPContext

Сжатый контекст зависимостей — один вызов заменяет N вызовов SAPRead

SAPLint

Локальный линтинг ABAP (пресеты с учетом системы, автоисправление, проверка перед записью)

SAPDiagnose

Проверка синтаксиса, модульные тесты ABAP, качество кода ATC, дампы, профилировщик

SAPManage

Зондирование функций — определение того, что поддерживает система, перед выполнением действий

Определения инструментов автоматически адаптируются к целевой системе (BTP или on-premise), удаляя недоступные типы и корректируя описания, чтобы LLM никогда не пыталась выполнить неподдерживаемые операции.

Определение функций

ARC-1 опрашивает систему SAP при запуске и адаптирует свое поведение:

  • Обнаруживает HANA, abapGit, RAP/CDS, AMDP, UI5 и доступность переносов.

  • Автоматически определяет системы BTP или on-premise.

  • Сопоставляет версию SAP_BASIS с правильной версией языка ABAP.

  • Каждую функцию можно принудительно включить/выключить или оставить в режиме автоопределения.

Related MCP server: mcp-server-wazuh

Быстрый старт

npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER

Информацию о Docker, развертывании в BTP, настройке клиентов (Claude Desktop, Claude Code, VS Code, Copilot Studio) и всех методах аутентификации см. в Руководстве по настройке.

Документация

Полная документация доступна по адресу marianfoo.github.io/arc-1.

Руководство

Описание

Руководство по настройке

Варианты развертывания, методы аутентификации, настройка клиента

Справочник инструментов

Полный справочник по всем 11 инструментам

Архитектура

Архитектура системы со схемами

Руководство по Docker

Справочник по развертыванию Docker

Корпоративная аутентификация

Все методы аутентификации

Развертывание в BTP

Развертывание Cloud Foundry в SAP BTP

Паттерны использования ИИ

Паттерны рабочих процессов агентов и лучшие практики

Разработка

npm ci && npm run build && npm test

См. CLAUDE.md для ознакомления со структурой кодовой базы, командами тестирования и правилами внесения вклада.

Авторы

Проект

Автор

Вклад

vibing-steampunk

oisee

Оригинальный Go MCP-сервер — отправная точка ARC-1

abap-adt-api

Marcello Urbani

TypeScript ADT-библиотека, эталонный справочник API

mcp-abap-adt

Mario Andreschak

Первый MCP-сервер для ABAP ADT

abaplint

Lars Hvam

Парсер/линтер ABAP (используется через @abaplint/core)

Лицензия

MIT

Available Tools

8 tools
SAPContextA
Read-only

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

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

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

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

  • "What does do?" / "Explain" / "deps before editing" → action="deps" (default); 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.

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

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description provides explicit when-to-use 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 and runtime analysis. Actions:

  • "syntax": compatibility check; when available prefer SAPRead(type="SYNTAX", objectType, name, version?, source?).

  • "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": run ATC checks (name+type or objects [{type,name}], max 20; omit variant to bind the system default; unknown variant = error). "atc_variants": list variants + that default (variant = name filter; read-only).

  • "atc_ci": package ATC CI; requires available API and verified selection.

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

  • "object_state": active/inactive ETags, hashes and divergence (name+type; CLAS: all includes). Server-driven types unsupported.

  • "quickfix": proposals at name+type+source+line (optional column/sourceUri).

  • "apply_quickfix": return proposal text deltas without writing; needs quickfix inputs + proposalUri/proposalUserContent.

  • "dumps": list/read ST22 short dumps (no id = list, newest first, user/from/to/maxResults; id = read; includeFullText, sections).

  • "traces": list profiler traces; id+analysis analyzes one.

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

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

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

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

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

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

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoDump or trace ID (for dumps/traces actions); also the trace-request id to cancel (for trace_cancel). Omit to list, provide to get details.
toNoInclusive upper time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS.
urlNoodata_perf: host-relative OData path from the app network request (e.g. /sap/opu/odata4/sap/.../Entity?$filter=…). Absolute URLs rejected.
fromNoInclusive lower time bound for dumps/system_messages/gateway_errors; ISO or YYYYMMDDHHMMSS.
lineNoRequired quickfix/apply_quickfix source line.
nameNosyntax/unittest/atc/object_state object name; cds_testcases/cds_sql CDS entity or DDLS name.
typeNoObject type; unittest accepts CLAS, PROG, FUGR, or DEVC.
userNoSAP-user filter for dumps, feeds, or authorization_trace.
sqlOnNoset_sql_trace_state: true arms ST05 SQL trace, false disarms; user filters the SAP user.
actionYes
columnNoQuickfix source column (default 0).
sourceNoCurrent source code (required for quickfix/apply_quickfix).
objectsNoATC only, instead of name/type/url. One batch + at most one verification. Returns coverage; unreported objects stay incomplete. No packages.
variantNoatc/atc_ci variant; atc_variants name filter (*=all)
versionNosyntax source version (default active); inactive checks pending changes.
analysisNotraces with id: hitlist=hot spots, statements=call tree, dbAccesses=DB access stats.
coverageNounittest only: collect statement/branch/procedure coverage and methodsBelowFull. Unavailable measurements do not discard test results. Default false.
packagesNoCI exact packages; 1–50 total with packageTrees.
sectionsNodumps detail chapter IDs, e.g. ["kap0","kap3","kap8"]; omit for focused defaults.
sqlTraceNotrace_start SQL capture (default true; required for analysis="dbAccesses").
aggregateNotrace_start aggregation (default true).
detailUrlNoDetail path: canonical /sap/bc/adt/gw/errorlog/...; no absolute URLs.
errorTypeNogateway_errors: required with id instead of detailUrl, e.g. "Frontend Error".
sourceUriNoquickfix/apply_quickfix source URI; default type/name main source. Set for includes, e.g. /includes/definitions.
traceUserNotrace_start/trace_requests SAP user (default connected user).
authObjectNoAuthorization object filter, e.g. S_TCODE.
maxResultsNoResult limit (default 50; authorization_trace 100). Caps: dumps 500, system_messages/gateway_errors 200, authorization_trace 10000.
objectTypeNotrace_start match type; defaults: http→url, dialog→transaction, batch→report, rfc→functionModule.
descriptionNotrace_start label.
processTypeNotrace_start work process (default http/OData): dialog=SAP GUI, batch=background job, rfc=RFC.
proposalUriNoQuickfix proposal URI from quickfix action (required for apply_quickfix).
expiresHoursNotrace_start expiry in hours (default 24).
onlyFailuresNoauthorization_trace: only denied checks (RC<>0), like SU53.
packageTreesNoCI packages including subpackages.
resultFormatNounittest: legacy|structured|junit; atc: legacy|structured; other actions reject it.
configurationNoatc_ci: optional configuration.
maxExecutionsNotrace_start executions to capture (default 1).
failOnSeverityNoatc_ci failure threshold (default error).
timeoutSecondsNoTimeout 1–3600s: unittest/atc default 300; CI overall default 600.
includeFullTextNodumps detail: include full formattedText (default false).
includeReportXmlNoCI XML reports (default false; 256 KiB total cap).
includeSubpackagesNo
proposalUserContentNoOpaque userContent from quickfix action (required for apply_quickfix). May be an empty string; pass through exactly.
proposalAffectedObjectsNoquickfix affectedObjects; provide current content for each source unit when applying multi-object fixes.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only give readOnlyHint=false / destructiveHint=false; the description adds far more: which actions need write scope (trace_start, trace_cancel) or SAP_ALLOW_WRITES (set_sql_trace_state), which need SAP_ALLOW_DATA_PREVIEW (odata_perf, authorization_trace), which are read-only, that 'unknown variant = error' and incomplete CI runs fail, and batch limits ('max 20', cap values). This is exactly the kind of behavioral disclosure the annotations cannot carry, and it is consistent with readOnlyHint=false.

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

Conciseness4/5

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

Purpose is front-loaded and the body is organized as one bulleted line per action, which is the right structure for a 23-action, 44-parameter mega-tool. Lines are dense semicolon runs that occasionally pack three ideas together (e.g., the atc/atc_variants line), and there is mild repetition, but with a docs_page pointer as the escape hatch almost every clause earns its place.

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

Completeness4/5

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

For a tool of this complexity the description is unusually complete: it maps all enum actions, notes defaults, prerequisites (API availability, verification), caps, and failure semantics, and links a workflow. With 95% schema coverage and a docs pointer the remaining gap is minor: most actions' return shapes (dump list vs detail, trace analysis output) are not characterized, and there is no output schema to fall back on.

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

Parameters4/5

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

Schema description coverage is 95%, so the baseline is 3 and the schema already carries most parameter meaning. The description still adds value the schema does not: cross-parameter constraints ('name+type or objects [...], max 20', 'requires quickfix inputs + proposalUri/proposalUserContent'), the multi-step quickfix contract, and action-to-parameter binding that ties otherwise generic params (id, name, type) to a specific action.

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

Purpose4/5

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

The description opens with a specific domain statement ('ABAP diagnostics and runtime analysis') and then enumerates 23 concrete actions with verb+resource pairs (e.g., 'list/read ST22 short dumps', 'run ATC checks', 'arm a profiler trace'), so an agent knows exactly what capability surface this tool exposes. It explicitly routes one sibling away ('when available prefer SAPRead(type="SYNTAX")') but never distinguishes itself from SAPLint or SAPContext, which plausibly overlap with the ATC/syntax checks, so sibling differentiation is only partial.

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

Usage Guidelines4/5

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

Per-action usage context is strong: 'unittest_ci: empty/incomplete runs fail', 'trace_start: arm ... for the NEXT matching execution, then reproduce and read via "traces"', and the closing 'Quickfix workflow: syntax/ATC → quickfix → apply_quickfix → write via SAPWrite' give a usable decision path. It also states the SAPRead alternative for syntax. However there is no top-level statement of when to pick SAPDiagnose over SAPLint/SAPContext/SAPManage, and no explicit 'when not to use'.

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.

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

TDQS

A4.5/5.0
Behavior4/5

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

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

SAPManageA
Destructive

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

Actions:

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

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

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

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

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness4/5

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

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

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

Completeness5/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

SAPNavigateA
Read-only

Navigate code: definitions, references, completion, hierarchy. references: scope-based where-used with lines/snippets/package; objectType filters results (e.g. CLAS/OC, PROG/P); type+name replaces uri. hierarchy queries SEOMETAREL for superclass/interfaces/direct subclasses: requires data/SQL opt-in + matching scope; otherwise inspect class MAIN with SAPRead. CDS (DDLS) impact: SAPContext(action="impact") classifies where-used into RAP buckets. Experimental relations: dependency maps or package neighborhoods, then selected reads. Consumer locations: references; objectType="CLAS/OC" for class-only; otherwise omit. Active metadata, not source-call/runtime proof. Coverage unknown. type+name required, no uri/source.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoDefinition needs source URI, line, column and source; references also accepts type+name.
lineNoLine (1-based integer)
nameNoObject name — alternative to uri for references.
typeNoRoot 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.
depthNorelations: native steps (default 1), not source-call hops.
actionYesNavigation action
columnNoColumn (0-based integer)
sourceNoCurrent source for definition/completion
directionNorelations: incoming=users; outgoing=dependencies (default).
maxResultsNoreferences: 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.
objectTypeNoreferences RESULT filter, not the root type: CLAS/OC, PROG/P, FUGR/FF. Omit for all consumer types. A bare prefix ("CLAS") matches every subtype.
expandPackagesNorelations: expand exact packages beyond root; others visible. Not authorization.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint, so the description carries most of the burden and delivers useful caveats the annotations cannot: 'Active metadata, not source-call/runtime proof' and 'Coverage unknown' set honest expectations about result reliability, and 'may stop earlier' qualifies the relations node cap. It also discloses that hierarchy needs a data/SQL opt-in. What it omits is any note on latency/cost or error behavior for the experimental relations path.

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

Conciseness3/5

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

For a 5-action, 12-parameter tool the density is defensible and nothing looks purely decorative, but the telegraphic clause-per-semicolon style and unglossed identifiers (SEOMETAREL, RAP buckets, CLAS/OC) make it hard to scan and easy to misparse. The action list is front-loaded, yet the cross-cutting constraints are interleaved rather than grouped.

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

Completeness4/5

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

With 12 parameters, no output schema, and only a readOnlyHint annotation, the description does substantial work: it documents scope limitations, the opt-in prerequisite, result-filter semantics, and the metadata-not-runtime caveat. Gaps remain around what definition/completion return and how the experimental relations path behaves on failure, but given the tool's complexity the coverage is reasonably complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 12 parameters and the baseline is 3. The description reinforces key distinctions (objectType is a result filter not the root type; type+name replaces uri; depth is native steps not source-call hops), but these largely restate the schema rather than adding format, default or interaction detail beyond it.

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

Purpose4/5

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

Opens with a specific verb+resource+action list: 'Navigate code: definitions, references, completion, hierarchy' plus relations. It goes further than most by routing one sub-case away from itself ('otherwise inspect class MAIN with SAPRead') and deflecting CDS impact to SAPContext(action="impact"), so the agent can partly distinguish it from siblings. The remaining weakness is that it never states in plain terms what the tool is overall beyond a per-action menu, and jargon like SEOMETAREL and RAP buckets assumes SAP fluency.

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

Usage Guidelines4/5

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

Gives concrete when-to-use conditions: hierarchy 'requires data/SQL opt-in + matching scope' else use SAPRead; consumer locations should use references with objectType='CLAS/OC' for class-only or omit otherwise; relations needs type+name with no uri/source. Alternatives (SAPRead, SAPContext) are named with their triggering condition. It stops short of explicit when-NOT to use the tool as a whole.

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

SAPReadA
Read-only

Read SAP ABAP source, metadata or syntax-check results. For purpose, explanations, specs, reviews or pre-change context, prefer SAPContext first. DDIC metadata: omit format (default text); structured is CLAS-only for ordinary reads. Types: PROG, CLAS, INTF, FUNC, FUGR (expand_includes=true for all include sources), INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD/KTD (KTD aliases SKTD), TABL (covers both transparent tables AND DDIC structures — no separate STRU type), TTYP, VIEW, DOMA, DTEL, TRAN, TABLE_CONTENTS (single-column filter), TABLE_QUERY (multi-column WHERE via the freestyle endpoint; gated by allowDataPreview; CDS views need SAP_BASIS 752+), DEVC, SOBJ (BOR — method param reads one method), SYSTEM, COMPONENTS, MSAG, TEXT_ELEMENTS, VARIANTS, BSP, BSP_DEPLOY, API_STATE (contract states C0-C4; objectType for non-class), INACTIVE_OBJECTS (no name; pending-activation list), AUTH, FEATURE_TOGGLE, ENHO, VERSIONS, VERSION_SOURCE. AUTH/FEATURE_TOGGLE/ENHO/VERSIONS/VERSION_SOURCE are on-prem only. 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. grep: case-insensitive regex; returns matching lines, context and line numbers, with owning class/method for CLAS.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoaction="diff" NEW side (default "inactive" = pending unactivated changes). Same values as from.
fromNoaction="diff" OLD side: "active" (default), "inactive", a revision id from SAPRead(type="VERSIONS"), or a /sap/bc/adt/ revision URI.
grepNoRegex pattern (case-insensitive) to search within the object source. Returns only matching lines with 1-based line numbers and ±3 context lines, instead of the full source — token-efficient. For CLAS, matches are annotated with the owning class/method; combine with include= to scope a section, but do NOT combine with method= (use grep to find, then method= to read). Works for source-bearing types (CLAS, INTF, DDLS, DCLS, BDEF, SRVD, SRVB, SKTD/KTD, DDLX, TABL, PROG, FUNC, FUGR, INCL, VIEW). Falls back to a literal search when the pattern is not valid regex.
nameNoObject name (e.g., ZTEST_PROGRAM, ZCL_ORDER, MARA)
typeYesObject 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.
groupNoFor FUNC/VERSIONS type. The function group containing the function module. Optional for FUNC — auto-resolved via SAPSearch if omitted. Required for VERSIONS when querying a function module revision feed.
whereNoFor TABLE_QUERY: structured WHERE conditions, ANDed together. Each item: {field, op, value?}. Ops: =, <>, <, <=, >, >=, LIKE, NOT LIKE, IN, NOT IN, IS NULL, IS NOT NULL; use <> because 758 rejects !=. For IN/NOT IN: use bare comma-separated values; do NOT quote them. ARC-1 quotes and escapes values, e.g. "261,262". No subqueries. Example: [{"field":"MATNR","op":"=","value":"300006888"},{"field":"BUDAT_MKPF","op":">=","value":"20250101"}].
actionNoSet to "diff" for a unified diff between two source versions (uses from/to) — cheaper than fetching both sources. Source types only: PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, BDEF, SRVD, DDLX, TABL.
formatNoDefault 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.
methodNoFor 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.
sourceNoSYNTAX only: proposed source to check without saving. Omit to check stored version (default active; inactive checks draft). Object must exist; version=auto is unsupported.
columnsNoFor TABLE_QUERY: columns to SELECT (default: all). Example: ["MATNR","BWART","BUDAT","MENGE"].
includeNoCLAS: 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).
maxRowsNoRow 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.
toLabelNoaction="diff" optional display label for the NEW side in the summary and patch header, e.g. "active" or "inactive draft". Does not affect source resolution.
versionNoSource 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).
fromLabelNoaction="diff" optional display label for the OLD side in the summary and patch header, e.g. "DNT-6-6: Validate discounts (DS7K900123)". Does not affect source resolution.
sqlFilterNoTABLE_CONTENTS condition expression only (no WHERE, no SELECT); broken on 758 (SAP expects SELECT). Use TABLE_QUERY where.
maxResultsNoDEVC object limit (default 200, clamped to [1, 1000]). Listing metadata reports the effective limit and possible truncation. Total and full repository completeness remain unknown.
objectTypeNoSYNTAX: 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.
versionUriNoVERSION_SOURCE: canonical source/revision URI from VERSIONS .revisions[].uri; rejects unrelated ADT endpoints, absolute URLs, traversal, queries, and fragments.
force_refreshNoFor source reads: bypass cached source and inactive-list state before reading. Use when you know the object changed outside ARC-1.
expand_includesNoFor FUGR type only. When true, recursively expands the function group include tree — the main source plus all nested INCLUDEs (the FUNCTION...ENDFUNCTION bodies live in nested LZ<grp>U01/U02 includes, so a flat one-level walk misses them). Each block is prefixed with a "=== name ===" marker; depth/count-capped. Dynpros and GUI status are not included (ADT does not expose them over REST).
includeSignatureNoFor FUNC type only. When true, response is JSON: {source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}, processingType?, updateTaskKind?} — each parameter parsed into {kind, name, type, byValue?, default?, optional?}; processingType reports rfc/update/normal. Default false (returns plain source body).

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries the rest and does add real context: which types are on-prem only, the allowDataPreview gating and SAP_BASIS 752+ requirement for TABLE_QUERY, version defaulting behavior, force_refresh cache bypass, and the 'draft may silently return active' caveat. It still omits return-shape, error and pagination/rate behavior.

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

Conciseness2/5

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

The first sentence and the SAPContext routing hint are front-loaded and valuable, but they are followed by a single unstructured wall of text whose long type enumeration duplicates the schema's own enum description almost verbatim. Large parts of the paragraph do not earn their place because the schema already provides them.

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

Completeness4/5

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

For a 24-parameter, no-output-schema tool, the description covers type families, format modes, version selection and gating well enough to call it correctly. It is not fully complete on cross-type interaction rules (e.g. how format=editable combines with every type), but the essentials are present.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already carries a rich enum description, so 3 is the baseline. The description largely restates the same type/format/version semantics that the schema already documents rather than adding new meaning beyond it.

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

Purpose5/5

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

The opening sentence states a specific verb and resource set ('Read SAP ABAP source, metadata or syntax-check results'), and the second sentence explicitly routes to the sibling SAPContext for adjacent tasks, so an agent can distinguish this from SAPContext without opening a schema.

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

Usage Guidelines4/5

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

It gives clear usage context and names an alternative priority ('prefer SAPContext first' for purpose/explanations/specs/reviews/pre-change context), plus per-type steering hints like expand_includes for FUGR and TABLE_QUERY vs TABLE_CONTENTS. What is missing is any negative guidance against the other siblings (SAPSearch, SAPNavigate, SAPLint).

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

SAPSearchA
Read-only

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

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

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

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

TDQS

A4.9/5.0
Behavior5/5

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

The readOnlyHint annotation is already present, but the description adds substantial behavioral detail: the two search modes, default behavior, BOR-as-SOBJ mapping, return fields, and the differences among adt/db/both TADIR sources including splitBrain/warnings and the SQL-scope prerequisite. This goes well beyond the annotation.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: mode definitions, output fields, sibling routing, and gotchas are all decision-relevant. The length is justified by seven parameters and multiple modes, and the main purpose is front-loaded.

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

Completeness4/5

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

For a tool with no output schema, it does well: object-search return fields are listed, TADIR source divergence is explained, and security prerequisites are mentioned. The main gap is that the first sentence advertises source-code search and objectType references a 'Source search', but the Modes list only defines object and tadir_lookup, leaving the agent to infer how source-code search is triggered.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds real cross-parameter meaning: it explains how searchType selects a mode, how names and query differ by mode, how objectType changes meaning between object and source search, and what source='both' produces. The parameter descriptions alone would not convey this integration.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Search for ABAP objects, exact object-directory entries, or source code') and then names two distinct modes with different inputs and outputs. It also differentiates from siblings behaviorally by explaining that uri feeds SAPNavigate and objectType feeds SAPRead/SAPWrite/SAPActivate.

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

Usage Guidelines5/5

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

The description explicitly says when to prefer TADIR lookup over long SAPQuery TADIR IN-lists, and it redirects field-name searches to SAPRead(type='DDLS', include='elements') or SAPQuery on DD03L. This is concrete when-to-use vs. when-not-to-use guidance, not just a vague hint.

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

SAPTransportA
Destructive

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

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

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructive=true/readOnly=false, and the description adds substantial context beyond them: which actions work without SAP_ALLOW_TRANSPORT_WRITES, the empty-target-means-LOCAL distinction, delete failures from locked objects, resultFormat/timeout knobs, and the SAP_BASIS 7.50 rejection of tm:root/newrequest. No contradiction with 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.

Conciseness4/5

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

Front-loads the domain and action inventory, then drills into per-action caveats; nearly every sentence carries operational information. It is dense and somewhat duplicative (actions appear in both the top line and the action enum), which keeps it just short of ideal.

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

Completeness4/5

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

For a 12-action, 22-param tool with no output schema, the description compensates well — reporting the resolved target, diff baselineStatus meanings, and read-only scoping. It stops short of describing the general list/get response shape, so an agent still learns some return structure only at call time.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the main description still adds meaning the schema lacks — ID format (A4HK900123), status code semantics (D/L, O/P, R/N), and the create/package/target/layer interaction where the package sets route and target rather than request category. Marginal but real value over the schema text.

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

Purpose5/5

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

States a specific verb+resource ('Manage CTS transport requests (SE09/SE10)') and enumerates the full action set with a short gloss for each (list/get/create/release/delete/remove_object/reassign/release_recursive/check/history). An agent can identify the tool's domain and capabilities without opening the schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance per action (e.g., 'use action=get for one in full' after summary=true, 'Use this to discover a real value instead of guessing' for layers/targets) and even where-not-to-use warnings (history is 'not complete transport history'). Defaults and alternatives are spelled out, leaving little to inference.

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.

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

TDQS

A4.1/5.0

Scored across 8 tools

Disambiguation4/5

Each tool has a distinct top-level theme (read, search, navigate, context, diagnose, lint, manage, transport), but there is real overlap: SAPContext explicitly says to use it 'instead of SAPRead', SAPNavigate references overlaps with SAPContext usages, and SAPDiagnose 'syntax' overlaps with SAPRead(type='SYNTAX'). Extensive cross-referencing and decision rules mitigate the confusion, but an agent must read carefully to route correctly.

Naming Consistency5/5

All 8 tools follow a uniform 'SAP' + singular-verb pattern (SAPNavigate, SAPContext, SAPDiagnose, SAPLint, SAPManage, SAPRead, SAPSearch, SAPTransport). Predictable and readable throughout with no deviations.

Tool Count4/5

Eight tools is a good, well-scoped count for an SAP development assistant. However each 'tool' carries a very large action namespace (SAPDiagnose and SAPManage each expose 20+ actions), making the effective surface heavier than the count suggests.

Completeness3/5

The read/search/navigate/diagnose/transport surface is broad, but the write side is missing: descriptions repeatedly reference SAPWrite, SAPActivate, and API_STATE writes that are not present in this set, creating dead-end workflows (e.g. quickfix stops at apply_quickfix with 'write via SAPWrite').

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers