Skip to main content
Glama
abap0917

abap-adt-mcp

ABAP ADT MCP Server 设计文档

基于 ABAP ADT(ABAP Development Tools)REST API 构建的 Model Context Protocol (MCP) 服务器。 让 AI Agent(Claude Desktop / Cline / VS Code Copilot Agent / 任意 MCP 客户端)无需 SAP GUI 即可 读取、检查、编写、激活、传输 ABAP 代码,覆盖完整开发生命周期。


1. 设计定位与决策

社区已有成熟实现,本项目的定位不是重复造轮子,而是采用"AI 友好"的高层工具设计

现有项目

定位

本项目的取舍

mario-andreschak/mcp-abap-abap-adt-api

abap-adt-api 的薄封装,暴露 lock/unlock 等底层步骤

✅ 复用其底层库 abap-adt-api 作为传输层

mario-andreschak/mcp-abap-adt

偏向只读的高层工具(GetProgram/GetClass…)

✅ 借鉴其"高层工具"思路

abap-adt-mcp(himcp.ai)

AI 友好工作流、安全优先、审计日志

主要设计蓝本:把 lock 编排、错误翻译、只读/白名单封装进工具内部

结论:底层通信直接建立在业界验证的 abap-adt-api(v3.1.2)之上, 避免自己重写脆弱的 ADT REST 协议(CSRF、XML 解析、对象元数据)。 在其之上构建一层安全优先、面向 Agent 的高层工具,使 Agent 通过工具名即可理解能力,且不会留下悬空锁、不会误改 SAP 标准对象。


Related MCP server: abap-adt-mcp

2. 架构分层

┌─────────────────────────────────────────────────────────────┐
│  MCP Client (Claude / Cline / VS Code Agent / FLUJO)         │
└───────────────────────────┬─────────────────────────────────┘
                            │  JSON-RPC over stdio
┌───────────────────────────▼─────────────────────────────────┐
│  MCP Server (this project, TypeScript)                        │
│                                                               │
│  ├─ tools/read.ts     只读/检查工具 (11)                       │
│  ├─ tools/write.ts    写入编排工具 (4) — 仅非只读模式注册       │
│  ├─ tools/ddic.ts     DDIC 创建工具 (2) — 域 / 数据元素        │
│  ├─ tools/table.ts    DDIC 创建工具 (1) — 透明表               │
│  ├─ tools/package.ts  DDIC 创建工具 (1) — 包 DEVC/K            │
│  ├─ tools/textelements.ts 文本元素读写 (1读+1写)               │
│  ├─ tools/functions.ts 函数模块读写 (2读+3写, SE37)             │
│  ├─ tools/edit.ts     surgical edit 工具 (1) — token 优化      │
│  ├─ tools/decisions.ts 统一 包/请求 决策(澄清 vs 直接绑定)    │
│  ├─ resources/        可浏览资源 (system info / package)       │
│  ├─ adt/security.ts   安全层:只读、Z*/Y* 白名单、审计日志      │
│  ├─ adt/errors.ts     错误翻译(可行动的错误信息)              │
│  └─ adt/client.ts     连接生命周期 + 每个 ADT 操作的薄封装      │
└───────────────────────────┬─────────────────────────────────┘
                            │  HTTPS + CSRF (abap-adt-api)
┌───────────────────────────▼─────────────────────────────────┐
│  SAP ABAP System  (SICF: /sap/bc/adt 已激活, 用户具 S_DEVELOP) │
└─────────────────────────────────────────────────────────────┘

关键原则(对应 MCP Builder 准则)

  1. 描述性工具名adt_write_source 而非 tool1;Agent 靠名字选工具。

  2. Zod 类型化参数 — 每个输入都校验,可选参数有默认值。

  3. 结构化输出 — 数据返回 JSON,源码类内容返回带行号的文本。

  4. 优雅失败 — 所有工具经 safe() 包裹,错误转为 isError 文本,服务器永不崩溃。

  5. 无状态工具 — 每次调用独立;SAP 会话由单例 ADTClient 维护。

  6. 安全优先 — 见第 4 节。


3. 工具清单(24 个:11 只读 + 13 写入)

只读 / 检查(始终注册,含只读模式)

工具

说明

关键参数

adt_ping

连通性 + 会话/角色信息诊断

adt_search_objects

按名称模式搜索对象(支持 */+ 通配)

query, objectType?, maxResults?

adt_browse_package

列出包(DEVCLASS)内对象

package

adt_read_source

读取源码,支持行范围切片、行号前缀、截断保护;attachContext=true 附加 DDIC 引用压缩 prologue(token 优化)

objectUri, startLine?, endLine?, attachContext?

adt_get_object_structure

对象结构大纲;类返回每个 include 的 sourceUri + 方法/属性清单(方法级定位)

objectUri

adt_syntax_check

语法检查(不锁、不写)

objectUri, source

adt_list_transports

列出用户传输请求

user

adt_get_table_data

读 DDIC 表 / CDS 视图数据(WHERE + 行数限制)

entity, where?, maxRows?

adt_read_textelements

读程序文本元素(文本符号 / 选择文本 / 列表标题三类),支持语言覆盖

programName, language?

adt_read_function_module

读函数模块(SE37):完整源码 + 解析出的参数接口(IMPORTING/EXPORTING/CHANGING/TABLES/EXCEPTIONS)。不传 functionGroup 时经仓库搜索自动解析所属函数组

functionModule, functionGroup?

adt_list_function_group

列函数组的函数模块/包含程序:返回每个模块名、URI、描述,便于调用/读取前先发现组里有什么

functionGroup

写入(仅非只读模式注册)

工具

说明

关键参数

adt_write_source

AI 安全编辑编排:冲突检查 → 语法检查 → 锁 → 写 → 解锁(finally) → 可选激活

objectUri, source, transport?, syntaxCheck?, activate?, expectedCurrentSource?

adt_activate_object

激活对象(含未激活部分)

objectUri

adt_create_object

创建对象壳(无源码),返回 URI 供后续写入

objectType, name, description?, package?, transport?

adt_manage_transport

传输请求:create / release / list

action, objectUri?, description?, transport?, user?

adt_create_package

创建开发包(DEVC/K):包必须嵌套在真实父包下并继承其父包的软件组件+传输层,故必传 superPackage(真实客户包,如 ZRAP_TEST_192637,非 $TMP);softwareComponent/transportLayer 缺省从父包自动派生。abap-adt-apicreateObject 不支持包(且 createBodyPackage 硬编码 YMU_RAP),本工具改用 createObject 完整 options 实现。这是"统一包/请求决策流"的"创建包"分支——当某写入工具因未给包而返回澄清时,用本工具建包后回填。必填项确认name / superPackage / description 任一缺失时,本工具不报错、不猜测,而是返回 topic:"package_creation" 的结构化澄清(missingFields 列出缺项),Agent 与用户确认后携完整参数重调

name, superPackage, description, packageType?, softwareComponent?, transportLayer?, transport?

adt_create_domain

创建 DDIC 域(DOMA):骨架 → 锁 → PUT 技术属性(类型/长度/小数) → 解锁 → 可选激活。abap-adt-api 原生不支持域,本工具直接驱动 ADT REST 实现。传输绑定细节(已真机验证)$TMP(本地) 域全程不需 corrNr;非 $TMP必须绑定传输,且 POST 创建 / LOCK / PUT 三步都要带 corrNr=tr(因 AdtClient.lock 会丢弃第 3 个 corrNr 参数,故 LOCK/UNLOCK 走原始 h.requestcorrNr)。域的 XML 根类型须用 DOMA/DD(非 DOMA

name, description, datatype, length, decimals?, package?($TMP), transport?, activate?

adt_create_dataelement

创建 DDIC 数据元素(DTEL):引用已有域,技术类型(CHAR/长度/小数)自动从域派生;骨架 → 锁 → setObjectSource(XML) → 解锁 → 可选激活。字段标签长度默认 短10/中20/长40/标题55;传入文本更长时按实际长度(不截断),均不超过 SAP 物理上限

name, domain, description, package?($TMP), shortLabel?, mediumLabel?, longLabel?, headingLabel?, activate?

adt_create_table

创建 DDIC 透明表(TABL):ABAP 字典 DDL 源(define table { key 字段 : 类型; });骨架 → 锁 → setObjectSource(DDL, 端点 <uri>/source/main) → 解锁 → 可选激活。字段支持数据元素引用(推荐)、基本类型(CHAR/NUMC→char<len>、INT4/DATS…)、.INCLUDE 结构包含(include:true + type=结构名如 EMARA)、以及外键(foreignKey:{checkTable,...} 生成 with foreign key 子句)。默认自动补客户端字段 MANDT(数据元素 MANDT、外键检查表 T000、首个主键;autoClient:false 可关)。含基本类型 include 时增强类别自动升级为 EXTENSIBLE_ANY;全数据元素时默认 NOT_EXTENSIBLE。至少一个主键字段

name, description, package?($TMP), deliveryClass?, enhancementCategory?, dataMaintenance?, fields[](name,type,length?,decimals?,key?,notNull?,label?,include?,foreignKey?), autoClient?, activate?

adt_write_textelements

写程序文本元素:锁 textelements 资源 → PUT 三类(symbols/selections/headings) → 解锁 → 激活文本池。symbols 用 @MaxLength:N + key=value 格式;selections/headings 用纯 key=value。完整替换指定类别的文本池。⚠️ 文本池是 SAP 子对象 PROG/PX必须激活 textelements URI 自身(激活程序主对象 URI 激活不到它),否则运行时读不到文本——本工具默认已处理(activate 默认 true)

programName, entries[](category,key,text,maxLength?), language?, transport?, description?, activate?(默认 true)

adt_edit_source

surgical edit(token 优化):Agent 只发 {oldString,newString} 改动片段,工具读当前源码 → 逐个唯一性替换 → lock → write → unlock → 可选激活。对标 VSP EditSource,大对象改一处可省 90%+ 请求载荷

objectUri, edits[](oldString,newString), transport?, syntaxCheck?, activate?

adt_create_function_group

创建函数组(FUGR):在包(默认 $TMP)中建组并可选激活。函数模块必须属于某个函数组,故先建组。名需匹配 Z*/Y* 前缀

name, package?($TMP), description, transport?, activate?

adt_create_function_module

创建函数模块(FUGR/FF):在已存在函数组中建模块、写源码、可选激活。源码接受经典 FUNCTION z_fm. ... ENDFUNCTION. 形式(含可含 "* Local Interface 注释块)或归一化形式,自动归一化为 ADT 接受格式。建前守卫:组须存在

name, functionGroup, description, source, transport?, activate?

adt_write_function_module_source

编辑已有函数模块源码(lock → write → unlock → 可选激活)。接受经典或归一化源码,自动归一化。只读模式禁用,名需匹配 Z*/Y* 前缀。首次创建请用 adt_create_function_module

functionModule, source, functionGroup?, transport?, activate?

资源(Resources)

  • adt://system/info — 连接与角色信息

  • adt://packages/{pkg} — 包内容清单(JSON)


4. 安全模型(最重要)

ABAP 系统里误改 SAP 标准对象或留下悬空锁是真实风险。本设计内建四道防线:

  1. 只读模式ABAP_MCP_READONLY=true 时,13 个写入工具根本不注册(Agent 看不到),其余工具拒绝变更。

  2. 生产系统强制只读ABAP_MCP_SYSTEM_ROLE=prod 时,无论 READONLY 如何,一律只读。

  3. Z/Y 前缀白名单**:assertPrefixAllowed() 校验对象名,默认仅允许 Z,Y 前缀,杜绝误改 SAP 交付对象。

  4. 审计日志:每次写入追加 JSON 行到 ABAP_MCP_AUDIT_LOG,含时间、工具、对象、传输号、状态。

adt_write_source 的锁编排保证 try/finally 释放锁;即使写入失败也不会留下悬空锁。

4.1 统一「包 / 请求」决策流(所有写入工具共用)

每个写入工具在创建对象前,都要先决定目标开发包传输请求。逻辑统一由 tools/decisions.tsresolvePackageInput() / resolveTransportInput() 实现,规则如下:

包(package)决策

  1. 调用方显式给了 package → 直接绑定到该包(已大写上送)。

  2. 调用方没给 package → 工具返回一条结构化澄清needsClarification:truetopic:"package"),列出两个动作让 Agent 转问用户:

    • create_package — 调用 adt_create_package 新建一个真实包(需指定 superPackage 父包);该选项额外携带 requiredInputs:[name, superPackage, description],提示 Agent 必须先从用户处确认这三项必填信息再调建包工具。

    • keep_local — 落到本地包 $TMP(无需传输)。

传输请求(transport)决策(同样逻辑)

  1. 调用方显式给了 transport → 直接绑定。

  2. 包是 $TMP → 本地对象,不需要传输(resolveTransportInput 返回空串,后续调用不传 corrNr)。

  3. 包是非 $TMP 且没给 transport → 返回结构化澄清(topic:"transport"action:create_transport),由 Agent 经 adt_manage_transport(create) 建请求后回填。

设计要点:工具绝不静默默认到 $TMP 或自动建包——缺参数时一律返回 needsClarification,把选择权交还给用户,避免 Agent 在用户不知情的情况下把对象塞进本地包或误建包。澄清对象结构为 { needsClarification, topic, message, options:[{action,label,description,requiredInputs?}], missingFields?, tool, object }

  • topic:"package" / "transport" 的澄清:options 列出可行动作,Agent 转述给用户、回收选择后重新调用同一工具并补上 package / transport

  • topic:"package_creation" 的澄清(由 adt_create_package 自身返回):当 name / superPackage / description 任一缺失时返回,missingFields 列出缺哪些包必填项,Agent 与用户确认后用完整参数重新调用 adt_create_package。这一层保证「创建包前必与用户确认必填信息」,缺项时绝不猜测或崩溃。

  • 通用 topic:"missing_inputs" 澄清(仅「重型创建」类工具保留)adt_create_function_group(需 name/description)、adt_create_domain(需 name/description/datatype/length)、adt_create_dataelement(需 name/domain/description)、adt_create_table(需 name/description/fields)——这类工具自身有多个必填项、且参数结构较复杂,缺项时返回 missing_inputs 澄清missingFields 列出缺什么 + 中文 label + hint),由 decisions.tsinputClarification() 工厂统一生成,缺项检查在 handler 顶部、任何 SAP 调用之前完成。

  • 其余 8 个写入工具已还原为 Zod 必填校验(不再返回 missing_inputs 澄清):adt_write_sourceadt_activate_objectadt_create_objectadt_manage_transportadt_create_function_moduleadt_write_function_module_sourceadt_write_textelementsadt_edit_source。它们的必填字段(如 objectUri/source/edits/name/action 等)在 Zod schema 中声明为必填,缺项时由 MCP SDK 返回标准校验错误,而非结构化澄清。其中 adt_manage_transportaction=createobjectUriaction=releasetransport 仍由 handler 内显式 throw 校验(create/release 的条件性必填)。

真机验证结论verify_packages.mjsVERDICT: PASS):

  • 缺包 → 返回 topic=package 澄清;缺传输(非 $TMP)→ 返回 topic=transport 澄清;$TMP 路径无需传输。

  • adt_create_packageZRAP_TEST_192637 下建包,自动继承 softwareComponent=HOMEtransportLayer=ZS4C

  • adt_create_dataelement / adt_create_domain / adt_create_table 在显式 transport 下创建时,对象均正确绑定到该传输请求(域通过 POST/LOCK/PUT 全程带 corrNr 实现)。

  • ⚠️ 已知 SAP 限制:通过 ADT 创建的包(DEVC/K)因携带 SAP 自动生成的子对象,ADT 删除端点会报「仍然包含开发对象或其它包」而拒绝删除——这是 SAP 行为,非本 server 缺陷;验证脚本对包做尽力删除(不计入功能结论),残留测试包可在 SE21/SE80 手动清理。


5. 错误处理哲学

底层错误(ADT 业务异常 / 网络 / TLS / 锁冲突)被 translateError() 翻译成可让 Agent 自我纠正的中文信息,例如:

  • 证书错误 → 提示设置 SAP_SSL_REJECT_UNAUTHORIZED=false

  • 401/403 → 提示检查账号/客户端/是否被锁

  • 锁冲突 → 提示去 SM12 释放或重试

  • 语法错误 → 在 adt_write_source写前拦截并返回行号,不真正写入


6. 安装与配置

前置条件

  • Node.js ≥ 20(本项目用 22 验证)

  • 一个启用了 ADT 的 SAP ABAP 系统(SICF/sap/bc/adt 已激活,用户具 S_DEVELOP

步骤

git clone <this-repo> abap-adt-mcp && cd abap-adt-mcp
npm install
cp .env.example .env        # 填入 SAP_URL / SAP_USER / SAP_PASSWORD / SAP_CLIENT
npm run build               # 产出 dist/

配置文件名:服务器按以下优先级加载(后者不覆盖前者已设的值):

  1. MCP 客户端 env 块中直接传入的变量(最高优先级)

  2. 项目根目录的 .env

  3. 项目根目录的 MCP.env(本项目的约定文件名,便于与客户端配置共存)

所以把配置放在项目根的 MCP.env 即可被自动加载,无需改名。

.env / MCP.env 关键项:

SAP_URL=https://s4h.example.com:44300
SAP_USER=DEVELOPER
SAP_PASSWORD=*****
SAP_CLIENT=100
SAP_SSL_REJECT_UNAUTHORIZED=true     # 自签名证书开发环境设为 false
ABAP_MCP_SYSTEM_ROLE=dev             # prod 会强制只读
ABAP_MCP_READONLY=false
ABAP_MCP_ALLOWED_PREFIXES=Z,Y
ABAP_MCP_AUDIT_LOG=./abap-mcp-audit.log

接入 MCP 客户端(任选其一)

a) 任意客户端(npx,无需构建)

{
  "mcpServers": {
    "abap-adt-mcp": {
      "command": "npx",
      "args": ["-y", "abap-adt-mcp"],
      "env": {
        "SAP_URL": "https://...:44300",
        "SAP_USER": "DEVELOPER",
        "SAP_PASSWORD": "*****",
        "SAP_CLIENT": "100"
      }
    }
  }
}

b) 本地构建后(stdio)

{
  "mcpServers": {
    "abap-adt-mcp": {
      "command": "node",
      "args": ["/绝对路径/abap-adt-mcp/dist/index.js"],
      "env": { "SAP_URL": "...", "SAP_USER": "...", "SAP_PASSWORD": "...", "SAP_CLIENT": "100" }
    }
  }
}

调试可用:npm run inspect 启动官方 MCP Inspector。


7. 端到端使用示例

你: 读取 ZCL_INVOICE 的源码并加一个方法,然后激活。

Agent 内部流程:
1. adt_search_objects  query="ZCL_INVOICE"        → 拿到 objectUri
2. adt_read_source     objectUri=...              → 当前源码
3. adt_syntax_check    source=<新源码>             → 预校验(写前拦截错误)
4. adt_write_source    objectUri=... source=<新> activate=true
      内部: 解析传输 → 语法检查 → lock → setObjectSource → unlock(finally) → activate
5. 返回 { written:true, transport:"NPLK900123", activated:true, success:true }

8. AI Token 优化

三类策略降低 Agent 与 SAP 交互时的 token 开销(对标 VSP 的方法级手术 + 上下文压缩):

8.1 Surgical edit(写入侧,adt_edit_source

Agent 只发 {oldString, newString} 改动片段,不发整个对象源码。工具内部读当前源码 → 逐个替换(要求 oldString 唯一匹配,否则报错并提示加上下文消歧)→ 走 lock/write/unlock/activate 编排。对 2000 行类改一个 5 行方法,请求载荷省 90%+。

8.2 方法级读取定位(读取侧,adt_get_object_structure 增强)

对类返回每个 include(definitions/implementations/main/testclasses)的 sourceUri + 方法/属性清单(name + visibility)。Agent 拿到 include sourceUri 后用 adt_read_source 只读单个 include(如只读实现部分),配合行范围切片定位到具体方法,避免读整个类。

8.3 源码压缩 prologue(读取侧,adt_read_sourceattachContext

attachContext=true 时,解析源码中 TYPE/LIKE 引用的 DDIC 对象名(排除 ABAP 内置类型),逐个查 domain/data element 端点取一行摘要(NAME DATATYPE(LENGTH)),附加为 prologue。上限 12 个对象,避免过多调用。Agent 一次读源码即可获得所有引用类型的概要,省去逐个查 DDIC 的往返。


9. 扩展点

  • ATC 质量门禁:调用 abap-adt-api 的 ATC 接口,在 adt_write_source 中加一道 run_atc_check

  • 单元测试runUnitTest(url) 接入 adt_activate_object 之后的 CI 流。

  • BTP OAuth2 + PKCEabap-adt-api 支持传入 BearerFetcher,可替换账号密码登录(参考 @abapify/adt-cli 的 service-key 流程)。

  • Streamable HTTP:用 FLUJO 或 mcp-proxy 把 stdio 服务暴露为 HTTP,供远程 Agent 调用。

  • Git/abapGitabap-adt-api 已支持 gitRepos / stageRepo / pushRepo,可加 adt_git_* 工具。


10. 目录结构

abap-adt-mcp/
├─ package.json
├─ tsconfig.json
├─ .env.example
├─ README.md
└─ src/
   ├─ index.ts              # 入口:建 McpServer、注册、连接 stdio
   ├─ config.ts             # 环境变量 + 安全默认值
   ├─ adt/
   │  ├─ client.ts          # ADTClient 单例 + 每操作封装
   │  ├─ errors.ts          # 错误翻译
   │  └─ security.ts        # 只读/白名单/审计
   ├─ tools/
   │  ├─ index.ts           # 聚合注册(按只读模式决定写入工具)
   │  ├─ read.ts            # 11 个只读工具(含 attachContext prologue + 方法级定位增强)
   │  ├─ write.ts           # 4 个写入工具(含 lock 编排)
   │  ├─ ddic.ts            # 2 个 DDIC 创建工具(域 / 数据元素)
   │  ├─ table.ts           # 1 个 DDIC 创建工具(透明表)
   │  ├─ package.ts         # 1 个 DDIC 创建工具(包 DEVC/K,含父包属性继承)
   │  ├─ textelements.ts    # 文本元素读写(adt_read_textelements + adt_write_textelements)
   │  ├─ edit.ts            # surgical edit 工具(adt_edit_source, token 优化)
   │  ├─ decisions.ts       # 统一 包/请求 决策(resolvePackageInput / resolveTransportInput + 澄清结构)
   │  ├─ util.ts            # safe() / textResult / jsonResult 公共工具
   │  └─ util.ts            # 结果格式化 + safe() 包裹
   └─ resources/
      └─ index.ts           # system info / package 资源

10. 验证状态

  • npm run build 通过(TypeScript 严格模式,零错误)

  • ✅ stdio 冒烟测试通过:MCP initializetools/list 返回 24 个工具(11 只读 + 13 写入);adt_ping 在未配置 SAP 时返回 isError 而非崩溃

  • ✅ 真实 S/4HANA 联调:adt_create_dataelement 创建引用 YTEST_192637 的数据元素成功并激活(datatype=CHAR, length=11);存在性守卫与坏域守卫均优雅报错

  • ✅ 真实 S/4HANA 联调(函数模块):verify_functions.mjs 全绿(VERDICT: PASS)——读 BAPI_USER_GET_DETAIL(44 参数)、列 ZAIRFC_TOOLS(5 模块)、建组 ZFMCPV2_192637 并激活、建模块 ZFMCPV2_FM(经典含 "* 注释块源码被自动归一化并激活)、读回解析出 IV_NAME/EV_GREETING、编辑加 CHANGING CV_COUNTER 并激活、清理删除成功。关键结论:ADT 拒绝经典 FUNCTION z_fm. 尾点形式与 "* Local Interface 注释块,本 server 的 normalizeFmSource() 已将其转换/重写为 ADT 接受的 function name + 小写接口块 + 独立 . + endfunction. 形式

  • ✅ 真实 S/4HANA 联调(统一包/请求决策流):verify_packages.mjs 功能全绿(FUNCTIONAL VERDICT: PASS)——24 工具齐全且含 adt_create_package;缺包→返回 topic=package 澄清、缺传输(非$TMP)→返回 topic=transport 澄清、$TMP 路径无需传输;adt_create_package 缺必填项时返回 topic=package_creation 澄清并列出 missingFields(name/superPackage/description),创建包前必与用户确认必填信息adt_create_packageZRAP_TEST_192637 下建包继承 HOME/ZS4Cadt_create_dataelement / adt_create_domain / adt_create_table 在显式 transport 下均正确绑定该请求。清理阶段子对象可正常删除,包本身因 SAP「自动子对象」限制无法经 ADT 删除(已知限制,不计入功能结论)


11. 部署到其他电脑(便携分发)

本服务器源码可移植config.tsfileURLToPath(import.meta.url) 解析项目根绝对路径读取凭证,不依赖启动时的 cwd,因此放到任意目录、任意电脑都能自定位。跨机器只需处理三件事:依赖、路径、凭证

一键打包脚本 deploy.bat(推荐,零手敲命令)

仓库根目录已提供 deploy.bat,双击或命令行运行即可自动完成「重建 dist → 打包为 abap-adt-mcp-dist.zip」,且自动排除凭证与日志MCP.env / .env / *.log / *.err / *.mjs),保留 node_modules/ + dist/,对方免装免构建。

deploy.bat        :: 在本机项目根目录运行;产物 abap-adt-mcp-dist.zip 自动生成

实现要点:用 %~dp0 自定位项目根(不硬编码路径),robocopy /XF 排除敏感文件后 Compress-Archive 压缩,兼容老版本 PowerShell(不依赖 -Exclude 参数)。对方拿到 zip 后从下方「方式 A 第 2 步」继续即可。

方式 A:零安装便携包(推荐给同事,最直接)

  1. 打包:在本机把整个项目目录压缩,排除 MCP.env*.log(含真实密码,切勿外传)。已带的 node_modules/(≈54M) 和 dist/ 让对方免安装、免构建。

    # Git Bash / PowerShell
    zip -r abap-adt-mcp.zip abap-adt-mcp -x "abap-adt-mcp/MCP.env" -x "*.log"
  2. 对方解压到任意目录,例如 D:/tools/abap-adt-mcp

  3. 填凭证:复制 .env.exampleMCP.env,填入对方自己的 SAP 账号:

    cp .env.example MCP.env   # 编辑 MCP.env,填 SAP_URL/SAP_USER/SAP_PASSWORD/SAP_CLIENT
  4. 加 MCP 配置:在对方机器的 ~/.workbuddy/mcp.json(或其他客户端配置)加:

    {
      "mcpServers": {
        "abap-adt-mcp": {
          "command": "node",
          "args": ["D:/tools/abap-adt-mcp/dist/index.js"],
          "cwd": "D:/tools/abap-adt-mcp",
          "env": { "ABAP_MCP_READONLY": "false" }
        }
      }
    }
    • commandnode(要求对方 node 在 PATH,Node ≥ 20);若想彻底免装 node,把 node.exe 也放进包、command 指向 ./node.exe

    • 必须把路径改成对方机器上的实际位置(本项目 mcp.json 里硬编码的绝对路径在别的电脑不存在)。

    • 凭证不必写进 env——服务器会自动读项目根下的 MCP.env

  5. 启用:在 WorkBuddy 连接器管理页右上角「自定义连接器」点新 server 的 Trust

方式 B:源码分发(目标机自行安装,包体最小)

对方拿到 src/ + package.json + .env.example,然后:

cd abap-adt-mcp
npm install          # 拉取依赖
npm run build        # 产出 dist/
cp .env.example MCP.env   # 填凭证

之后同方式 A 第 4–5 步配置并 Trust。

其他 MCP 客户端

配置结构相同,只是文件位置不同:

  • Claude Desktop%APPDATA%/Claude/claude_desktop_config.json

  • Cursor / VS Code:对应 mcp.json

  • npx 一行版(无需本地构建,但每次拉包):

    { "mcpServers": { "abap-adt-mcp": { "command": "npx", "args": ["-y", "abap-adt-mcp"], "env": { "SAP_URL":"...", "SAP_USER":"...", "SAP_PASSWORD":"...", "SAP_CLIENT":"100" } } } }

安全提醒

  • 永远不要分发 MCP.env:它含明文 SAP 密码。用 .env.example 作模板,让每台机器填自己的凭证。

  • 生产系统把 ABAP_MCP_SYSTEM_ROLE=prod(强制只读)或 ABAP_MCP_READONLY=true,写工具会被隐藏且拒绝变更。

Available Tools

24 tools
adt_activate_objectA

Activate an ABAP object (and its inactive parts). Use after adt_write_source with activate=false, or to activate a manually edited object. Blocked in read-only mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectUriYesObject URI (base)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description discloses the core action (activation including inactive parts) and the read-only restriction. However, it lacks details on side effects or error states.

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?

Two concise sentences with no waste, front-loaded with the action and essential usage context.

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 single-parameter tool with no output schema, the description covers what it does, when to use, and a key restriction. It is adequate but does not explain return values or nuances of 'inactive parts'.

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 coverage is 100% and the description does not add extra meaning to the objectUri parameter beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action 'Activate an ABAP object' and distinguishes it from siblings by specifying usage after adt_write_source or manual editing.

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?

Explicitly states when to use ('after adt_write_source with activate=false, or to activate a manually edited object') and when not ('Blocked in read-only mode').

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

adt_browse_packageA

List the objects contained in an ABAP package (DEVCLASS), e.g. ZMY_PKG. Returns object type, name and URI for each child.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageYesPackage/DEVCLASS name, e.g. ZMY_PKG

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions what is returned but does not specify read-only nature, error conditions, or side effects. This is adequate but not thorough.

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 a single concise sentence immediately stating the purpose, followed by a brief note on return values. No redundant information.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers the main purpose and returns. It could mention read-only nature or whether subpackages are included, but it is largely 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 coverage is 100%, so the baseline is 3. The description adds only a simple example (e.g., ZMY_PKG) which does not significantly enhance the schema description.

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

Purpose5/5

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

The description clearly states the verb (list), resource (objects in an ABAP package), and return values (object type, name, URI). It is specific and differentiates from sibling tools like adt_create_package.

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

Usage Guidelines3/5

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

The description implies usage (list objects in a package) but does not explicitly state when to use this tool vs alternatives like adt_get_object_structure or adt_search_objects. No when-not-to-use guidance is provided.

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

adt_create_dataelementA

Create a DDIC data element (DTEL) that references an existing domain. The technical type (CHAR/length/decimals) is derived automatically from the referenced domain. Field-label lengths default to short 10 / medium 20 / long 40 / heading 55; a longer supplied label uses its actual length. Created in the given package (default $TMP, local/no transport) and optionally activated. Name must match Z*/Y* prefix. Returns the object URI, referenced domain, derived type and activation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoData element name, e.g. YTESTDE_192637. Must match Z*/Y* prefix.
domainNoExisting domain to reference, e.g. YTEST_192637.
packageNoTarget devclass. Omit to be asked (create new package | use $TMP).
activateNoActivate after creation. Default true.
longLabelNoLong field label. Default length 40; a longer supplied text keeps its actual length. Defaults to description.
transportNoTransport request. Omit + non-$TMP package -> asked to create one.
shortLabelNoShort field label. Default length 10; a longer supplied text keeps its actual length. Defaults to description.
descriptionNoShort text / description, e.g. 'AI测试用数据元素'.
mediumLabelNoMedium field label. Default length 20; a longer supplied text keeps its actual length. Defaults to description.
headingLabelNoHeading label. Default length 55; text keeps its actual length (SAP cap). Defaults to description.

TDQS

A4.3/5.0
Behavior4/5

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

Without annotations, the description effectively discloses key behaviors: type derivation, label length handling, package and activation defaults, and return values. It does not cover error scenarios or authentication, but the core behavioral traits are well explained.

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

Conciseness4/5

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

The description is a single, dense paragraph that efficiently conveys purpose, behavior, and key parameter nuances. It is front-loaded with the core action and follows with relevant details. While not structured with bullet points, it remains concise and scannable.

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

Completeness4/5

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

Given the complexity (10 parameters, no output schema, no annotations), the description covers purpose, behavioral details, label defaults, return values, and naming constraints. Missing are explicit error conditions and prerequisites (e.g., domain existence), but the overall completeness is high.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3. The description adds valuable context beyond schema descriptions, particularly the default label lengths and behavior when longer labels are supplied. This helps an agent understand parameter constraints without relying solely on the schema.

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

Purpose5/5

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

The description clearly states the verb 'create', the resource 'DDIC data element (DTEL)', and key differentiators like referencing an existing domain and automatic type derivation. It distinguishes well from sibling tools like adt_create_domain by specifying the reliance on a pre-existing domain.

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

Usage Guidelines4/5

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

The description implies usage when needing a data element based on a domain, mentioning the package default ($TMP) and naming convention. It lacks an explicit statement of when not to use or direct comparison to alternatives, but the context is sufficiently clear for an agent.

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

adt_create_domainA

Create a DDIC domain (DOMA) with a technical type (CHAR/NUMC/DEC/...), length and decimals. The domain is created in the given package (default $TMP, local/no transport) and optionally activated. Name must match the allowed Z*/Y* prefix. Returns the object URI and activation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDomain name, e.g. YTEST_192637. Must match Z*/Y* prefix.
lengthNoField length (number of characters/positions).
packageNoTarget devclass. Omit to be asked (create new package | use $TMP).
activateNoActivate after creation. Default true.
datatypeNoABAP elementary data type.
decimalsNoDecimal places (DEC/CURR/QUAN/FLTP only). Default 0.
transportNoTransport request. Omit + non-$TMP package -> asked to create one.
descriptionNoShort text / description, e.g. 'AI测试用'.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses key behaviors: creation in a package (default $TMP), optional activation, naming constraints, and return of object URI and activation status. It does not cover auth or rate limits, but for a creation tool this is sufficient.

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?

Three sentences front-loading the main action, concise with no filler. Every sentence provides essential information (purpose, parameters, constraints, return values).

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 8 parameters and no output schema, the description covers creation, defaults, naming, activation, and return values. It does not explain error handling or side effects, but is adequate for selecting and using the tool.

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 coverage is 100%, so baseline is 3. The description adds context like 'default $TMP' and 'local/no transport' and clarifies activation is optional, but largely rephrases schema descriptions. It adds moderate value beyond the schema.

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

Purpose5/5

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

The description clearly states it creates a DDIC domain with specific technical attributes (type, length, decimals) and mentions the naming constraint (Z*/Y* prefix). This distinguishes it from sibling tools like adt_create_dataelement or adt_create_table.

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

Usage Guidelines3/5

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

The description explains what the tool does but does not explicitly indicate when to use it versus alternatives or provide exclusion criteria. The context is implied through the object name (domain), but no direct guidance on selecting this tool over siblings like adt_create_dataelement or adt_create_table.

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

adt_create_function_groupA

Create a function group (FUGR) in a package (default $TMP, local/no transport) and optionally activate it. Function modules must live inside a function group, so create this first. Name must match the Z*/Y* prefix. Returns the group URI and activation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFunction group name, e.g. ZMY_GROUP. Must match Z*/Y* prefix.
packageNoTarget devclass. Omit to be asked (create new package | use $TMP).
activateNoActivate after creation. Default true.
transportNoTransport request. Omit + non-$TMP package -> asked to create one.
descriptionNoShort text / description.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states that the tool creates a function group, optionally activates it, and returns the group URI and activation status. However, it does not disclose side effects (e.g., overwriting existing groups), permissions needed, or what happens if the name already exists.

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 three sentences, each providing essential information: main action, prerequisite, naming constraint, and output. No unnecessary words. It is front-loaded with the core purpose.

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

Completeness4/5

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

Given 5 parameters, no output schema, and no annotations, the description covers most key aspects: action, naming, default package, activation, output. It could be more explicit about the transport behavior (e.g., 'if omitted and package is $TMP, no transport; otherwise you'll be asked'), but the schema already provides this detail.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying the default behavior for package ($TMP, local/no transport) and indicating output (URI and activation status). It reinforces the naming constraint already in the schema.

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

Purpose5/5

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

The description clearly states 'Create a function group (FUGR) in a package' and mentions activation. It distinguishes from sibling tools by specifying that function modules must live inside a function group, establishing this as a prerequisite for other operations.

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

Usage Guidelines4/5

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

The description provides usage context by noting the naming convention (Z*/Y* prefix) and the default package ($TMP, local/no transport). It advises that this tool should be used before creating function modules. However, it does not explicitly state when not to use this tool or mention alternatives.

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

adt_create_function_moduleA

Create a function module (FUGR/FF) inside an existing function group, write its source and optionally activate it. The function group must already exist (create it first with adt_create_function_group). Provide the full FM source in either the classic FUNCTION z_fm. ... ENDFUNCTION. form (with or without the "* Local Interface comment block) or the normalized form — it is auto-normalized to what ADT accepts. Name must match the Z*/Y* prefix. Returns the FM URI, activation status and the normalized source that was written.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFunction module name, e.g. ZMY_FM. Must match Z*/Y* prefix.
sourceYesFull function module ABAP source (FUNCTION ... ENDFUNCTION).
activateNoActivate after writing. Default true.
transportNoTransport request. Omit + non-$TMP group package -> asked to create one.
descriptionYesShort text / description.
functionGroupYesExisting function group, e.g. ZMY_GROUP.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool writes source, optionally activates, auto-normalizes source, and returns URI, activation status, and normalized source. It mentions transport handling. Lacks details on error handling or side effects.

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?

Two sentences, front-loaded with purpose and precondition. Every sentence adds essential information without fluff. Highly efficient.

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?

Despite no output schema, the description covers purpose, precondition, source format, return info (URI, activation status, normalized source), and transport handling. It lacks detailed error scenarios but is mostly complete for a create tool.

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%, baseline 3. The description adds value by clarifying the auto-normalization of source and the two accepted forms (classic with/without local interface), and that activation defaults to true. This enhances understanding beyond schema descriptions.

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

Purpose5/5

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

The description clearly states that the tool creates a function module inside an existing function group, writes its source, and optionally activates it. It distinguishes from sibling tools like adt_create_function_group by explicitly requiring the function group to already exist.

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

Usage Guidelines4/5

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

The description explicitly says the function group must exist and should be created with adt_create_function_group. It also specifies that the name must match a Z*/Y* prefix. It does not explicitly state when not to use this tool, but the context is clear.

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

adt_create_objectA

Create a new ABAP object shell (no source yet) in a package (default $TMP). Returns the new object's URI so you can follow up with adt_write_source. Name must match the Z*/Y* prefix whitelist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew object name, e.g. ZCL_MY_CLASS
packageNoTarget package / DEVCLASS. Omit to be asked (create new package | use $TMP).
transportNoTransport request for the creation. Omit + non-$TMP package -> asked to create one.
objectTypeYesCreatable type id, e.g. CLAS, PROG, INTF, FUGR, TABL, DTEL
descriptionNoCreated via ABAP ADT MCP

TDQS

A4.2/5.0
Behavior3/5

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

No annotations, but description discloses that the object is created without source, returns URI, and names must match prefix. It does not mention authorization needs, rate limits, or side effects like transport request creation.

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?

Two sentences, front-loaded with verb and resource. Every sentence adds essential information with no redundancy.

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?

Covers creation intent, follow-up step, naming rules, and default package. Lacks details on transport handling or error scenarios, but sufficient for a shell creation tool with a clear output.

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?

Adds value beyond schema by stating default package ($TMP), required name prefix (Z*/Y*), and return URI. Schema coverage is 80%, but the description enriches the meaning of parameters.

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?

Description clearly states the action (create an ABAP object shell), the resource (object in a package), the outcome (returns URI), and adds a constraint (name prefix whitelist). It distinguishes from siblings like adt_write_source and other create tools.

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?

Explicitly says to follow up with adt_write_source, indicating a two-step workflow. Lacks explicit when-not-to-use or alternative tools, but the purpose is clear enough to guide selection.

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

adt_create_packageA

Create a development package (DEVC/K). A package must nest under an existing parent package and inherit that parent's software component + transport layer, so pass superPackage (a real customer package, e.g. ZRAP_TEST_192637 — NOT $TMP). softwareComponent/transportLayer are derived from the parent automatically; pass them explicitly only to override. Name must match the Z*/Y* prefix. Returns the package URI and the resolved attributes. NOTE: this is the 'create package' branch of the package/transport decision flow — use it when a write tool returns a package clarification.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPackage (devclass) name, e.g. ZMY_PKG. Must match Z*/Y* prefix. REQUIRED — if omitted, the tool returns a clarification listing what to collect from the user.
transportNoTransport request for the creation (parent is non-$TMP, so usually required).
descriptionNoShort text / description. REQUIRED.
packageTypeNoPackage type. Default 'development'.
superPackageNoParent package to nest under, e.g. ZRAP_TEST_192637. Must be a real package (not $TMP); its softwareComponent/transportLayer are inherited. REQUIRED.
transportLayerNoOverride transport layer (e.g. ZS4C). Default: inherited from superPackage.
softwareComponentNoOverride software component (e.g. HOME). Default: inherited from superPackage.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses nesting inheritance, automatic derivation of software component/transport layer, option to override, and return value (URI + resolved attributes). No mention of destructive behavior or auth, but appropriate for a create tool.

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?

Approximately 5 sentences, well-structured with main action first, then constraints, then parameter clarifications. Slightly dense but not overly verbose; a minor simplification could improve conciseness.

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

Completeness5/5

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

Given no output schema, description explains return value. All 7 parameters are covered with context. Sibling tools are diverse (ABAP development), and this description clearly differentiates the package creation step. Complete for agent use.

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% (baseline 3). Description adds meaning beyond schema: clarifies superPackage must be real, softwareComponent/transportLayer inheritance, and naming prefix requirement. This adds value for agent understanding.

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

Purpose5/5

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

The description clearly states the tool creates a development package (DEVC/K) with specific verb 'Create' and resource 'development package'. It distinguishes from siblings by referencing the 'package/transport decision flow' and specifying it's the 'create package' branch.

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?

Explicit guidance on when to use: when a write tool returns a package clarification. Provides constraints: parent must be real (not $TMP), naming prefix Z*/Y*, and clarifies inheritance and override conditions.

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

adt_create_tableA

Create a DDIC transparent table (TABL) using ABAP Dictionary DDL. Each field references a data element (e.g. MANDT, YTSTDE2_192637) or a built-in type (CHAR/NUMC/DEC/CURR/QUAN/INT4/DATS/TIMS/... with optional length/decimals). Technical attributes use SAP-recommended defaults (enhancement category, delivery class, data maintenance). By default a key MANDT field (data element MANDT, foreign key to check table T000) is auto-prepended as the first key; disable via autoClient=false or supply your own MANDT. Fields may carry a foreignKey. Created in the given package (default $TMP, local/no transport) and optionally activated. Name must match Z*/Y* prefix. Returns the object URI, field count, the generated DDL source and activation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTable name, e.g. YTSTTBL_192637. Must match Z*/Y* prefix. ADT create limit is 16 chars.
fieldsNoTable fields (at least one; transparent tables need >=1 key field). Each field may carry a 'foreignKey' (checkTable, optional keyType/cardinality/label/screenCheck) to emit a `with foreign key` clause.
packageNoTarget devclass. Omit to be asked (create new package | use $TMP).
activateNoActivate after creation. Default true.
transportNoTransport request. Omit + non-$TMP package -> asked to create one.
autoClientNoAuto-prepend the client field MANDT (data element MANDT, foreign key to check table T000) as the first key. Default true. Set false to omit it or to supply your own MANDT.
descriptionNoTable description, e.g. 'AI测试用透明表'.
deliveryClassNoDelivery class. A=application table (default), C=customizing, G=customizing+custom, L=transaction data, S=system table, E=control table, W=system copy, X=handover.
dataMaintenanceNoData maintenance allowed in SM30/SE16. Default ALLOWED.
enhancementCategoryNoEnhancement category. Default NOT_EXTENSIBLE for data-element-only tables; auto-upgraded to EXTENSIBLE_ANY when the table uses built-in types.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full disclosure burden. It transparently discloses auto-prepend of MANDT, default technical attributes (delivery class, enhancement category), field foreign key support, and naming constraints. Minor omissions around error handling and side effects are acceptable for a creation tool of this complexity.

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

Conciseness4/5

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

The description is a single coherent paragraph that front-loads the primary action and progressively adds details. Every sentence adds value, covering core functionality, defaults, exceptions (autoClient), constraints, and return values. No redundant or filler content.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, no output schema), the description is remarkably complete. It explains the creation process, field types, foreign keys, default behaviors, naming rules, optional activation, and return information (URI, field count, DDL source, activation status). Only minor details like error scenarios are omitted, which is acceptable.

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. The description adds significant value beyond the schema by explaining autoClient behavior ('Auto-prepend... disable via autoClient=false'), naming convention, and default technical attributes. This extra context compensates well for the schema's already complete descriptions.

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 'Create a DDIC transparent table (TABL) using ABAP Dictionary DDL' – a specific verb and resource, distinguishing it from siblings like adt_create_domain and adt_create_dataelement. It also clarifies key behaviors such as auto-prepending MANDT and naming constraints, leaving no ambiguity.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool (creating transparent tables) and covers default behaviors (auto-client, package, activation), naming requirements (Z*/Y* prefix), and optional features. While it does not explicitly list when not to use or compare with siblings, the detail is sufficient for appropriate selection.

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

adt_edit_sourceA

AI-token-optimised precise edit of an ABAP object. Send only the fragments to change as {oldString, newString} pairs; the tool reads the current source, applies each replacement (oldString must match exactly once), then runs lock -> write -> unlock -> optional activate. Use this instead of adt_write_source when you only need to change a few spots — it can cut the request payload by ~90%+ for large objects. Each oldString must be unique; if not, include more surrounding context to disambiguate. Blocked in read-only mode; object name must match the Z*/Y* prefix whitelist.

ParametersJSON Schema
NameRequiredDescriptionDefault
editsYesOne or more {oldString, newString} replacements, applied in order
activateNoActivate after writing
objectUriYesObject URI (base, not .../source/main)
transportNoExisting transport request; if omitted, one is auto-created
descriptionNoTransport description when auto-creatingEdited via ABAP ADT MCP
syntaxCheckNoRun syntax check before writing

TDQS

A4.6/5.0
Behavior4/5

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

Describes the process: reads source, applies replacements, lock->write->unlock->optional activate. Mentions blocked in read-only mode and whitelist. Lacks error handling details but is quite transparent.

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?

Efficient description: one sentence for purpose, one for key benefit, two for constraints and process. No wasted words.

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

Completeness4/5

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

With no annotations or output schema, the description covers purpose, usage, behavior, and parameters well. Missing error scenarios or return value, but overall adequate for an edit tool.

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 3. Description adds context: explains oldString uniqueness requirement, deletion via empty newString, and sequential application. Provides meaningful usage guidance beyond schema.

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

Purpose5/5

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

Clear verb+resource: 'precise edit of an ABAP object'. Distinguishes from sibling adt_write_source by noting it is more efficient for few changes.

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?

Explicitly states when to use (instead of adt_write_source for few changes) and constraints (oldString must be unique, blocked in read-only mode, Z*/Y* prefix whitelist).

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

adt_get_object_structureA

Get the structure/outline of an ABAP object (methods, attributes, includes, metadata). For classes, returns each include's sourceUri (definitions/implementations/main/testclasses) and the method/attribute outline (name + visibility). Use the include sourceUri with adt_read_source to read a single include, and the method names to request method-level edits. This is the token-optimised entry point for navigating large objects without reading their full source.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectUriYesObject URI from adt_search_objects

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Describes what it returns (includes sourceUri, method/attribute outline with name+visibility) and that it's token-optimized, but does not explicitly state it is read-only or disclose any side effects, permissions, or rate limits. Adequate but not fully transparent.

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?

Four well-structured sentences: purpose, return content, usage guidance, strategic positioning. No redundant words, each sentence adds value. Highly efficient.

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

Completeness4/5

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

No output schema, but description compensates by detailing the return structure (includes sourceUri, method/attribute outline with name+visibility). Connects to sibling tools for next steps. Could specify more about the outline format, but overall complete for navigating large objects.

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?

Only one parameter (objectUri) with schema description 'Object URI from adt_search_objects'. Schema coverage is 100%, but description adds context by specifying the source of the URI, which helps the agent understand how to obtain it. Baseline 3 with added value.

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?

Description clearly states it gets the structure/outline of an ABAP object, listing specific components (methods, attributes, includes, metadata). It distinguishes from sibling tools like adt_read_source (full source) and adt_search_objects, making the purpose unmistakable.

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

Usage Guidelines4/5

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

Explicitly advises using the include sourceUri with adt_read_source for reading includes and method names for edits. Positions itself as a token-optimized entry point for navigating large objects, implicitly telling when to use it (to avoid full source reads). Lacks explicit when-not-to-use conditions but provides clear context.

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

adt_get_table_dataA

Read rows from a DDIC table or CDS view (read-only). Supports an optional WHERE clause and a row limit. Values are decoded to human-readable form.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNoOptional SQL WHERE clause, e.g. SPRSL = 'E' AND ARBGB = '00'
entityYesDDIC table or CDS view name, e.g. T100 or ZI_SALES
maxRowsNoRow limit (1-1000)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It states the tool is read-only and that values are decoded to human-readable form, which are key behavioral traits. It does not mention performance, timeouts, or error handling, but these are less critical for a simple read operation.

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?

Two sentences, zero wasted words. The first sentence front-loads the primary purpose and read-only nature. Every sentence 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?

Given the tool's low complexity and full schema coverage, the description adequately covers behavior (read-only, decoding) and options (WHERE, limit). No output schema needed. Could mention that the entity is required, but that is in the schema.

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 covers 100% of parameters with descriptions. The description adds no new semantic information beyond summarizing the where clause and row limit, which are already clear from the schema. Baseline 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 clearly states 'Read rows from a DDIC table or CDS view (read-only)', specifying the verb (Read), resource (DDIC table or CDS view), and the read-only nature. This distinguishes it from sibling tools that handle activation, creation, or transport management.

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

Usage Guidelines4/5

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

The description implies usage for reading table data without side effects, but lacks explicit when-to-use or when-not-to-use guidance. It does not mention alternatives among siblings, though the read-only hint provides context.

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

adt_list_function_groupA

List the function modules (and includes) contained in a function group (SE37). Returns each module's name, URI and description. Useful for discovering what a group offers before calling/reading a module.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionGroupYesFunction group name, e.g. ZAIRFC_TOOLS

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It describes the operation as listing and returning data, implicitly safe, but does not explicitly state it is read-only or mention any constraints like authorization or rate limits. Adequate but could be more explicit.

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?

Two sentences: first sentence states action and output, second provides usage context. No unnecessary words, front-loaded with key information.

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

Completeness4/5

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

For a simple list operation with one parameter, the description adequately explains what the tool does, what it returns, and when to use it. No output schema, but return values are described. Slightly more detail on potential limitations (e.g., if large groups) could be added.

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?

Only one parameter (functionGroup) with 100% schema coverage already describing it as a function group name. The description reinforces that the parameter is the group to list, but adds minimal new meaning beyond the schema.

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

Purpose5/5

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

Description clearly states the tool lists function modules and includes in a function group, with specific verb 'list' and resource 'function modules'. It also mentions returning name, URI, and description, distinguishing it from siblings like adt_read_function_module.

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?

Explicitly states it is useful for discovering what a group offers before calling/reading a module, giving clear when-to-use context. However, it does not list alternatives or exclusions, which would improve guidance.

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

adt_list_transportsA

List open transport requests owned by a user, split into workbench and customizing targets (modifiable / released).

ParametersJSON Schema
NameRequiredDescriptionDefault
userYesSAP user to list transports for

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must convey behavioral traits. It only states the action without mentioning side effects, permissions, or read-only nature. Minimal behavioral context.

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 a single, clear sentence that efficiently conveys the core purpose and output categorization. No wasted words.

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

Completeness3/5

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

Given the lack of output schema and annotations, the description provides reasonable context (split into categories) but lacks details on output format or what 'open transport requests' entails. Adequate for a simple tool.

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 coverage is 100% and the parameter 'user' has a description. The tool description adds that it lists transports 'owned by a user', which aligns with the schema but does not add significant new meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it lists open transport requests owned by a user, with a specific split into workbench/customizing targets and modifiable/released status. This distinguishes it from siblings like adt_manage_transport which likely manages transports.

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

Usage Guidelines3/5

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

The description implies when to use (to list transports for a user) but does not explicitly state when not to use or provide alternatives among sibling tools. No comparative guidance.

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

adt_manage_transportB

Transport request operations: create a new request, release one, or list a user's requests. Blocked in read-only mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoUser for 'list'
actionYesOperation to perform
objectUriNoObject URI (required for 'create' to resolve the package)
transportNoTransport number for 'release'
descriptionNoText for 'create'Created via ABAP ADT MCP

TDQS

B3.4/5.0
Behavior3/5

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

Discloses read-only mode blocking, but no annotations exist, so description carries burden. Does not explain side effects (e.g., release implications), but the actions are straightforward.

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?

Single sentence with no wasted words. Efficiently covers purpose and a key constraint.

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

Completeness2/5

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

No output schema and no description of return values. Lacks information on what each action returns (e.g., list returns transport numbers, create returns new request ID).

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 coverage is 100%, so baseline 3 applies. Description adds no extra meaning beyond schema descriptions for each parameter.

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

Purpose5/5

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

The description clearly states the verb 'Transport request operations' and lists three specific actions (create, release, list), distinguishing it from sibling tools like adt_list_transports which only lists.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. Only mentions 'Blocked in read-only mode' as a constraint, but no comparison with sibling tools or prerequisite context.

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

adt_pingA

Test connectivity to the SAP ABAP system and report session/role info. Call this first to verify the MCP server can reach SAP via ADT.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations exist, so the description must disclose behavior. It accurately describes the tool as a connectivity test that reports session/role info, implying no destructive side effects. However, it could mention potential errors or timeout behavior, but for a simple ping, this is adequate.

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?

Two concise, front-loaded sentences with no unnecessary words. Every sentence adds value: the first defines the action, the second provides usage guidance.

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

Completeness4/5

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

Given no parameters and no output schema, the description is sufficiently complete. It explains the tool's purpose and when to use it. Minor gap: it doesn't specify the format of the session/role info, but that's acceptable for a connectivity test.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is 100%. The description doesn't need to add parameter details. The baseline for zero parameters is 4, and the description meets that.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Test connectivity' and 'report session/role info'. This is a specific verb+resource combination that distinguishes it from sibling tools like adt_search_objects or adt_read_source, which are about SAP object operations.

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?

Explicit guidance is provided: 'Call this first to verify the MCP server can reach SAP via ADT.' This tells the agent when to use it (as an initial check) and implies it's a prerequisite for other ADT operations.

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

adt_read_function_moduleA

Read a function module (SE37): its full source and its parsed parameter interface (IMPORTING / EXPORTING / CHANGING / TABLES / EXCEPTIONS). Optionally pass functionGroup to skip the lookup; otherwise the group is resolved from a repository search. Returns the normalized source (which you can edit and feed back to adt_write_function_module_source) plus a structured 'parameters' array for reasoning about the signature.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionGroupNoOwning function group, e.g. ZAIRFC_TOOLS. Omit to auto-resolve via search.
functionModuleYesFunction module name, e.g. ZRFC_CREATE_CLASS

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It mentions read operation and return of source and parameters, but does not disclose error handling, prerequisites, permissions, or side effects. Basic transparency but lacks depth.

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 two sentences long, front-loaded with the core purpose, and contains no unnecessary words. Every sentence earns its place.

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

Completeness3/5

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

Given the tool's relative simplicity (2 params, no output schema), the description covers the key outputs (source, parameters) and notes the write tool for editing. However, it does not detail the structure of the parameters array or error handling, which may be needed for agent reasoning.

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% (baseline 3). The description adds meaning for functionGroup by explaining it can be omitted for auto-resolution, which goes beyond the schema description. For functionModule, no extra semantic value is added.

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

Purpose5/5

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

The description clearly states it reads a function module, including full source and parsed parameter interface. It specifies SE37 context and distinguishes from generic read tools like adt_read_source.

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

Usage Guidelines3/5

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

The description provides guidance on the optional functionGroup parameter to skip lookup, but does not explicitly state when to use this tool versus alternatives like adt_read_source or adt_create_function_module. Usage context is implied but not formally framed.

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

adt_read_sourceA

Read the ABAP source of an object. Accept either the object URI (e.g. /sap/bc/adt/oo/classes/zcl_x) or its /source/main URI. Supports line-range slicing and line-number prefixes. Large sources are truncated with a warning unless a range is given. Set attachContext=true to prepend a compressed prologue of the DDIC objects (domains/data elements) referenced by TYPE/LIKE clauses — saves the agent from issuing one lookup per referenced type (token optimisation).

ParametersJSON Schema
NameRequiredDescriptionDefault
endLineNo1-based end line
objectUriYesObject URI or .../source/main URI from adt_search_objects
startLineNo1-based start line
attachContextNoPrepend a compressed prologue of referenced DDIC objects (token optimisation)

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description bears full burden. It discloses truncation with a warning for large sources, the effect of attachContext (prepends compressed prologue of referenced DDIC objects), and that URIs can be two forms. No contradictions. Minor gaps: doesn't explicitly state whether it modifies anything or if authentication is required.

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?

Well-structured: starts with core purpose, then details. Each sentence adds value. Could trim 'token optimisation' redundancy, but otherwise efficient. Slightly verbose in the attachContext explanation.

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

Completeness4/5

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

No output schema, but description implies return value (source code with optional prologue and truncation warning). Covers essential usage aspects. Could mention error handling or format of warning, but sufficient for a read-only tool with good parameter documentation.

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%, baseline 3. Description adds meaning: objectUri can be object URI or source/main URI; startLine and endLine are 1-based; attachContext saves agent from one lookup per referenced type (token optimisation). These go beyond schema definitions.

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?

Description clearly states it reads ABAP source of an object, accepts specific URI forms (object URI or /source/main URI), and lists features like line-range slicing and line-number prefixes. It distinguishes from siblings like adt_search_objects (which returns URIs) and adt_write_source (which writes).

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?

Provides explicit guidance: URI must come from adt_search_objects; recommends using line-range for large sources to avoid truncation; suggests setting attachContext=true for token optimization. Lacks explicit when-not-to-use but implies alternatives for different tasks (e.g., adt_read_function_module for function modules).

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

adt_read_textelementsA

Read the text elements (text pool) of an ABAP program: text symbols, selection texts and heading texts. Supports a language override to read translations. Useful for i18n audits and before editing texts.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoOptional SAP language key (e.g. EN, ZH). Defaults to the session language.
programNameYesProgram name, e.g. ZMMR001_192637

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full behavioral burden. It states 'Read' (non-destructive) and language override, but does not detail side effects, behavior on missing language, or whether it reads active or all texts.

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?

Two sentences with no fluff: first sentence states what it reads, second sentence adds features and use cases. Every word 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?

Given no output schema, the description hints at return content (text symbols, etc.) but not structure. It covers input well but lacks output format details. Still fairly complete for a simple read tool.

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 parameters already have descriptions. The description adds value by explaining the language parameter as enabling 'language override to read translations', which supplements the schema.

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

Purpose5/5

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

The description explicitly states it reads 'text elements (text pool)' and lists the types: text symbols, selection texts, heading texts. This clearly distinguishes it from siblings like adt_read_source (source code) or adt_write_textelements (writing).

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

Usage Guidelines4/5

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

The description mentions usefulness for i18n audits and before editing texts, providing clear context. However, it does not explicitly state when to avoid this tool or name alternatives beyond implication.

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

adt_search_objectsA

Search ABAP repository objects by name pattern (wildcards * and + are supported by ADT). Returns name, type, package and URI for each match. Use the URI with adt_read_source / adt_get_object_structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch pattern, e.g. ZCL_*_INVOICE or ZIF_MY_IF
maxResultsNoMax results (1-200)
objectTypeNoOptional object type filter, e.g. CLAS, PROG, TABL, DTEL

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses wildcard support and return fields, but does not mention pagination behavior, error handling, or authorization requirements. This is adequate for a search tool but could be more comprehensive.

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 two sentences long, front-loading the action and supported wildcards, then specifying return values and usage guidance. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the tool has 3 parameters, no output schema, and no annotations, the description covers the primary function, return information, and ties to sibling tools. It lacks details on pagination or result ordering, but the maxResults parameter addresses the limit. Overall, it is sufficient for effective use.

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 coverage is 100% with clear descriptions for all three parameters (query with example, maxResults with range, objectType as optional filter). The description adds only the context of wildcard support and URI usage, which is already implied by the schema examples. Thus the description adds minimal extra meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool searches ABAP repository objects by name pattern with wildcard support, and specifies the returned fields (name, type, package, URI). This distinguishes it from sibling tools like adt_browse_package or adt_read_source by focusing on search rather than browsing or reading.

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

Usage Guidelines4/5

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

The description explains when to use the tool (searching by name pattern) and provides guidance on next steps by mentioning to use the URI with adt_read_source or adt_get_object_structure. It does not explicitly exclude other use cases or mention alternatives, but the context is sufficient for an AI agent to decide.

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

adt_syntax_checkA

Run an ABAP syntax check on provided source without locking or writing. Returns a list of errors/warnings with line numbers. Use before adt_write_source to pre-validate.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesABAP source to check
objectUriYesObject URI (base, not /source/main)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden and discloses key behaviors: it does not lock or write (non-destructive), and returns errors/warnings with line numbers. It lacks details on authorization requirements or rate limits but covers the most important aspects for safe invocation.

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?

Three concise sentences, each adding essential information: the core action, the non-destructive nature, the return format, and usage guidance. No fluff or redundancy.

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

Completeness4/5

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

Given the tool's simplicity (two parameters, clear output), the description is fairly complete, covering purpose, behavior, and usage. It does not address edge cases like empty results or invalid URIs, but these are minor for a syntax check tool.

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 coverage is 100% with clear parameter descriptions. The description adds a minor clarification on objectUri format ('base, not /source/main'), but does not significantly enhance understanding beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool runs an ABAP syntax check, specifies the resource as 'provided source', and distinguishes itself by noting it does so 'without locking or writing'. It also explicitly contrasts with adt_write_source, providing clear differentiation among siblings.

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

Usage Guidelines4/5

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

The description explicitly advises to use the tool before adt_write_source for pre-validation, which is a clear usage guideline. It does not cover when not to use, but the context of many siblings makes this selective suggestion helpful.

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

adt_write_function_module_sourceA

Edit an existing function module's source (lock -> write -> unlock -> optional activate). Accepts the classic FUNCTION z_fm. ... ENDFUNCTION. form or the normalized form; it is auto-normalized to what ADT accepts. Blocked in read-only mode; name must match the Z*/Y* prefix. For a first-time create use adt_create_function_module instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesNew full function module ABAP source (FUNCTION ... ENDFUNCTION).
activateNoActivate after writing. Default true.
transportNoTransport request. Omit + non-$TMP object -> asked to create one.
functionGroupNoOwning function group. Omit to auto-resolve via search.
functionModuleYesFunction module name, e.g. ZMY_FM

TDQS

A4.5/5.0
Behavior4/5

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

No annotations, so description carries full burden. Discloses the lock-write-unlock-activate process, auto-normalization, and read-only blocking. Does not detail transport handling or error states.

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?

Concise paragraph covering purpose, process, constraints, and sibling reference. No redundant sentences. Efficiently communicates key points.

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?

Covers core behavior but lacks mention of return values or output (no output schema). Adequate for an edit tool, but could be more complete for an AI agent expecting result confirmation.

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%, and description adds practical context: source format normalization, transport auto-creation, function group auto-resolve. Enhances understanding beyond schema descriptions.

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?

Clearly states the purpose: edit an existing function module's source. Distinguishes from create tool (adt_create_function_module). Describes the process and constraints.

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?

Explicitly advises using adt_create_function_module for first-time create. Mentions read-only blocking. Lacks comparison to sibling adt_write_source but provides clear context for when to use this tool.

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

adt_write_sourceA

AI-safe edit of an ABAP object. Orchestrates: optional conflict check → optional syntax check → lock → write (with transport) → unlock (always) → optional activate. Never leaves a dangling lock. Blocked in read-only mode; object name must match the allowed Z*/Y* prefix whitelist.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesComplete, new ABAP source for the object
activateNoActivate after writing
objectUriYesObject URI (base, not .../source/main)
transportNoExisting transport request; if omitted, one is auto-created
descriptionNoTransport description when auto-creatingChanged via ABAP ADT MCP
syntaxCheckNoRun syntax check before writing
expectedCurrentSourceNoIf provided, write only if the current source still equals this (concurrency guard)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully discloses the orchestration steps: optional conflict check, optional syntax check, lock, write with transport, mandatory unlock, and optional activate. It explicitly states that locks are never left dangling. This is comprehensive behavioral transparency.

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 very concise: four sentences that front-load the core purpose, then enumerate the workflow, emphasize safety, and list restrictions. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given 7 parameters and no output schema, the description covers the essential flow, safety guarantees, and constraints. It does not describe return values (e.g., success message or errors), but for a write tool with no output schema, this is acceptable. Slight omission of parameter formats or error handling prevents a 5.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that 'expectedCurrentSource' serves as a concurrency guard and that 'description' is used only when auto-creating a transport. This clarifies parameter usage beyond the schema.

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

Purpose5/5

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

The description clearly states this tool is for editing an ABAP object with a safe orchestration workflow. It distinguishes itself from siblings by outlining the multi-step process (conflict check, syntax check, lock, write, unlock, activate) and emphasizes 'AI-safe' behavior, which is unique among the listed sibling tools.

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

Usage Guidelines4/5

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

The description explicitly notes that the tool is blocked in read-only mode and requires object names to match a Z*/Y* whitelist, providing clear conditions for use. However, it does not explicitly compare to alternative tools like 'adt_edit_source' or 'adt_create_object', leaving some ambiguity about when to choose this over others.

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

adt_write_textelementsA

Write/replace the text elements (text pool) of an ABAP program. Orchestrates: transport resolution -> lock -> PUT text pool -> unlock (always) -> activate the text-pool sub-object (textelements URI, NOT the program URI — the latter does NOT reach the text pool). The provided entries fully replace the text pool for the (program, language). Blocked in read-only mode; program name must match the Z*/Y* prefix whitelist.

ParametersJSON Schema
NameRequiredDescriptionDefault
entriesYesText elements to write (replaces the pool)
activateNoActivate the text pool after writing (required for the runtime to see the texts). Default true.
languageNoTarget SAP language. Defaults to the session language.
transportNoExisting transport. Omit + non-$TMP program -> asked to create one.
descriptionNoTransport description when creating oneText elements changed via ABAP ADT MCP
programNameYesProgram name, e.g. ZMMR001_192637

TDQS

A4.3/5.0
Behavior5/5

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

No annotations, so description carries full burden. Discloses replacement behavior, orchestration steps (lock, unlock always, activate), blocking in read-only mode, and prefix whitelist. Rich behavioral detail.

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?

Description is packed with information but efficiently structured. Could be slightly more concise, but every sentence serves a purpose and it 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?

Covers behavioral aspects, constraints, and process well. Lacks mention of error handling or return values, but given no output schema, completeness is good.

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 coverage is 100% with detailed parameter descriptions. The description does not add meaning beyond the schema, so baseline 3 is appropriate.

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?

Describes writing/replacing the text pool of an ABAP program with specific verb and resource. Clearly distinguishes from sibling tools like adt_read_textelements (read) and adt_write_source (source code).

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?

Provides context on the orchestration process and constraints (read-only mode, prefix whitelist) but does not explicitly state when to use this tool versus alternatives or when not to use it.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv1.0.0
    • First observedadt_activate_object
    • First observedadt_browse_package
    • First observedadt_create_dataelement
    • First observedadt_create_domain
    • First observedadt_create_function_group
    • First observedadt_create_function_module
    • First observedadt_create_object
    • First observedadt_create_package
    • First observedadt_create_table
    • First observedadt_edit_source
    • First observedadt_get_object_structure
    • First observedadt_get_table_data
    • First observedadt_list_function_group
    • First observedadt_list_transports
    • First observedadt_manage_transport
    • First observedadt_ping
    • First observedadt_read_function_module
    • First observedadt_read_source
    • First observedadt_read_textelements
    • First observedadt_search_objects
    • First observedadt_syntax_check
    • First observedadt_write_function_module_source
    • First observedadt_write_source
    • First observedadt_write_textelements

TDQS

A4.1/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is potential confusion between the generic adt_create_object and the specific create tools (e.g., adt_create_domain, adt_create_table). The descriptions help clarify, but the overlap slightly reduces disambiguation.

Naming Consistency5/5

All tools follow a consistent adt_verb_noun pattern in snake_case. Verbs are imperative and nouns are descriptive, making the naming predictable and intuitive.

Tool Count5/5

With 24 tools, the set covers the main ABAP development workflows without being overwhelming. The count is well-scoped for the complexity of the domain.

Completeness4/5

The tool set covers creation, reading, editing, activation, syntax check, transport, and browsing for ABAP objects, DDIC, and function modules. Minor gaps like delete or rename operations are absent but reasonable for an ADT-focused server.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants like Claude Code to directly connect to SAP ABAP systems via the ADT REST API with read/write capabilities, featuring AI-friendly high-level tools and built-in safety measures such as read-only mode, prefix whitelisting, and automatic locking.
    9
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/abap0917/abap-adt-mcp'

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