ABAPilot
This MCP server lets you query and explore SAP data and metadata, inspect ABAP code, and monitor system activity.
Query SAP table data with optional WHERE filters and row limits (
sap_read_table_data)Retrieve table/field structure definitions before querying (
sap_read_table_structure)Search the SAP Data Dictionary for tables by keyword (
sap_search_tables)Read ABAP source code for programs, classes, function groups, includes, and interfaces (
sap_read_code)Find cross-references: what uses an object or what an object uses (
sap_read_where_used)Validate ABAP syntax against the connected system's rules without saving (
sap_syntax_check)Read ABAP runtime errors/short dumps from ST22 (
sap_read_dumps)Check background job status and scheduling info from SM37 (
sap_read_jobs)
Provides tools for querying SAP tables, reading table structures, searching the Data Dictionary, reading ABAP code, performing where-used lookups, syntax checks, and reading dumps and background jobs in SAP ECC and on-premise S/4HANA systems.
ABAPilot — AI & MCP Server for SAP ECC and On-Premise S/4HANA
ABAPilot is an in-system AI platform for SAP: natural-language business queries and AI-assisted ABAP development on the systems you already run — SAP ECC 6.0 through on-premise S/4HANA (any ABAP-based SAP instance). No BTP, no ADT, no RISE prerequisites. Deploys in ~2 hours.
Install the connector: npx -y abapilot · requires a licensed ABAPilot backend
Website: https://crimsonconsultingsl.com/abapilot/
Architecture deep-dive: ARCHITECTURE.md
Watch a real session (4 min): https://youtu.be/r9mg-gxKQQ0
2026 guide — AI for SAP ECC: https://crimsonconsultingsl.com/ai-for-sap-ecc/
Engineering write-up (SAP Community): Running AI agents against SAP ECC 6.0 — lessons from building an in-system MCP server
vs SAP's ABAP MCP Server: https://crimsonconsultingsl.com/abapilot-vs-sap-abap-mcp-server/
Quick start
{
"mcpServers": {
"abapilot": {
"command": "npx",
"args": ["-y", "abapilot"],
"env": {
"ABAPILOT_URL": "http://<sap-host>:<port>/sap/bc/ZABAPilot",
"ABAPILOT_USER": "<sap-user>",
"ABAPILOT_PASSWORD": "<sap-password>",
"ABAPILOT_CLIENT": "100"
}
}
}
}Your SAP credentials go only to your SAP system — never to us or any third party.
Related MCP server: vibing-steampunk
How it works
Inside SAP: pure-ABAP add-on delivered as a transport into the registered
/ABAPILOT/namespace, attached to a single SICF (ICF) node with dynamic per-endpoint dispatch. No kernel changes, no Gateway, no BTP, no ADT/Eclipse dependency.On your network: this MCP connector (
npx abapilot) links any MCP client — Claude, Claude Code, Cursor, ChatGPT — to the SAP-side endpoints.Your model: BYOK for Claude, OpenAI, Gemini, Amazon Bedrock — or fully local via Ollama for zero-data-retention deployments.
Tools
49 tools, each mapping 1:1 to an endpoint of the ABAPilot dispatcher inside your SAP system.
Business data
sap_read_table_data— Reads actual data from a SAP table with optional WHERE clause filtering and metadata inclusionsap_read_table_data_enhanced— Query data from an SAP table with optional WHERE clause filteringsap_read_table_paginated— Read table data with pagination support for large result setssap_stream_table_data— Streams large table data using offset-based paginationsap_smart_table_query— Execute a table query with automatic metadata-driven enhancementssap_multi_table_query— Execute a multi-table query with proper joins and optional aggregationsap_count_rows— Estimate row count for a table BEFORE fetching datasap_analyze_query— Analyze a natural language query and return intelligent guidance for building the SAP querysap_search_tables— Search the Data Dictionary for tables matching a keyword
Data Dictionary & metadata
sap_read_table_structure— Retrieves the metadata of a Data Dictionary table including field definitions, data types, keys, and descriptionssap_read_object_details— Read comprehensive details about any SAP repository or DDIC objectsap_read_object_info— Get metadata about an ABAP object including creation date, last changed date, author, and packagesap_check_type_exists— Checks whether a type exists in the SAP Data Dictionary and returns its kindsap_read_domain_values— Retrieves the fixed values defined for a domainsap_read_field_domain_values— Get domain fixed values for a specific table fieldsap_read_foreign_keys— Read foreign key relationships for a table from Data Dictionary (DD08L)sap_infer_joins— Automatically detect join keys between two tables based on domain matchingsap_get_field_metadata— Get enriched metadata for SAP table fields with semantic classificationsap_list_package_objects— List all ABAP repository objects in a development package (DEVCLASS)
ABAP code
sap_read_code— Retrieves the source code of an ABAP object (program, class, or function group)sap_read_includes— Retrieves all include files for a program with their source codesap_read_dynpros— Retrieves screen definitions for a program including field listssap_read_texts— Retrieves text elements (selection texts, text symbols) for a programsap_read_where_used— Queries SAP's cross-reference tables (WBCROSSGT/WBCROSSI) to find what objects use a given object (forward) or what a given object uses (inverse)sap_get_enhancements— List ALL enhancements for a SAP transaction or program in one callsap_syntax_check— Validates ABAP source code for syntax errors without creating or activating itsap_write_code— Low-level ABAP write endpointsap_write_code_safe— Write ABAP code to SAP with validation and optional ECC 6.0 auto-fixingsap_patch_code— Apply delta modifications to existing ABAP programs or classes without sending full source
Operations & troubleshooting
sap_read_dumps— Query ABAP runtime errors (short dumps) from SAP's ST22 transactionsap_read_dump_details— Get detailed information for a specific short dump including full error texts, cause, and solutionsap_read_syslog— Query system log entries from SAP's SM21 transactionsap_read_jobs— Query background job information from SAP's SM37 transactionsap_run_program— Execute an ABAP report program (SUBMIT) and return its list output as text linessap_run_transaction— Run the ABAP report behind a report transaction code, optionally with a selection-screen variant, and return its list outputsap_save_variant— Create or overwrite an ABAP selection-screen VARIANT for a report, so it can be reused by sap_run_program (and the performance trace / headless…sap_read_user_locks— Query user lock status from USR02 tablesap_diagnose_message— Diagnose a SAP error/warning/info message end-to-endsap_lookup_t100— Look up a specific SAP T100 message by message class and numbersap_lookup_error— Analyze a SAP error message using all available external knowledge sources
Audit & compliance
sap_read_change_docs— Query change documents from CDHDR/CDPOS tablessap_read_change_docs_v2— Optimized change document query using function modulessap_discover_change_object— Find the change document OBJECTCLAS for a table by querying TCDOBsap_scan_security_notes— Discover ABAP Security/HotNews notes for a SAP patch-day month and rank them by relevancy to this systemsap_check_notes_relevancy— Check relevancy of one or more SAP Note numbers against this system (component/SP levels, download state, implementation readiness)
Translation
sap_read_translations— Reads translatable texts from a SAP object in source and optionally target languagesap_write_translations— Writes translated texts back to a SAP objectsap_translate— Composite tool: reads translatable texts from a SAP object, translates them using AI, and optionally writes them back
Knowledge
sap_search_knowledge— Search SAP documentation and community for information on any SAP topic
The catalog is gated in two places. In your system, the /ABAPILOT/CONFIG (or /TSRA/CONFIG) endpoint registry decides which endpoints are live — switch one off and the tool stops working, with no client change. On the client side, ABAPILOT_TOOLS narrows what a given MCP client sees:
"env": { "ABAPILOT_TOOLS": "sap_read_table_data,sap_read_code,sap_syntax_check" }The licensed backend serves more than this connector exposes — 90+ active endpoints on a current ECC install, including transports and CTS, PFCG roles and SU24, SAP Note download and implementation, customizing writes, ABAP Unit, ATC, and SPAU/SPDD adjustment replay. The tools above are the subset with stable public schemas.
Security model
Every call runs under the SAP user's own authorizations (S_TABU_DIS, S_DEVELOP, …) — enforced, not reimplemented
Exposure limited to the
/ABAPILOT/CONFIGwhitelist table; anything not whitelisted is unreachableFull audit trail in
/ABAPILOT/AUDIT(user, timestamp, parameters)Write endpoints (
sap_write_code,sap_patch_code,sap_write_translations, …) ship switched off; a customer administrator activates them per endpoint in the registry
Getting access
ABAPilot is a commercial product by Crimson Consulting SL (Valencia, Spain). The npm connector is free (MIT); the in-system backend is licensed.
Book a demo: https://crimsonconsultingsl.com/demo/ — 30 minutes on a live system, you pick the task. POC deployment on your dev system takes about two hours.
Why not SAP's ABAP MCP Server?
Different jobs: SAP's server (inside ADT for Eclipse/VS Code) is excellent for developer assistance on systems with modern ADT services. ABAPilot adds what it doesn't cover: business-user queries, systems without ADT services (most real-world ECC 6.0), governed whitelist+audit access, and model choice including fully local. Many teams run both — full comparison here.
Available Tools
8 toolssap_read_codeA
Read ABAP source code from the connected system — programs, classes, function groups, includes, interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes | Object name, e.g. ZREPORT01, ZCL_MY_CLASS | |
| object_type | Yes | Object type: PROG, CLAS, FUGR, INCL or INTF |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The verb 'Read' implies a non-destructive operation, and 'from the connected system' provides environmental context. However, it does not disclose output format, behavior on invalid objects, or any permissions/limitations beyond what the name itself suggests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and resource. Every word adds meaning, with no redundancy or filler. It earns a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with only two parameters and no output schema, the description sufficiently covers the main purpose and object types. It lacks explicit mention of return value structure, but the operation 'read source code' inherently implies returning the source. Given the low complexity and full schema coverage, the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds modest value by mapping object_type codes (PROG, CLAS, FUGR, INCL, INTF) to the human-readable list (programs, classes, etc.), but it does not provide additional detail on parameter formats or constraints beyond the schema examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Read') and resource ('ABAP source code'), and enumerates the object types (programs, classes, function groups, includes, interfaces). This differentiates it well from sibling tools that read table data, dumps, jobs, or syntax checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context ('from the connected system') but does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it. Usage is implied for reading ABAP source code, but no sibling tool comparisons or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_read_dumpsA
Read ST22 ABAP runtime errors (short dumps). Dates are YYYYMMDD; defaults to today when no dates are given.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Filter by SAP user | |
| date_to | No | End date YYYYMMDD | |
| max_rows | No | Maximum rows (default 100) | |
| date_from | No | Start date YYYYMMDD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses date defaults behavior ('defaults to today'), which is useful. However, it omits other behavioral aspects like authorization requirements, whether results are limited by max_rows (though schema covers that), or pagination. Since no annotations exist, a score of 3 reflects that the description adds some value but not comprehensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, very concise. Front-loaded purpose, then a single key detail about date defaults. No wasted words; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema and no annotations, the description covers the essentials: what it reads and date defaults. However, it does not describe return format or typical usage context, which is a minor gap. Sibling tools exist but no guidance, so completeness is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already described in the schema. The description does not add much beyond the schema, but it clarifies date format and default behavior, which supplements the schema. Baseline is 3 given high schema coverage and no extra parameter details needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description specifies clear verb+resource: 'Read ST22 ABAP runtime errors (short dumps)'. It distinguishes from siblings by naming ST22 runtime errors specifically, which differs from reading tables, code, jobs, etc. However, it does not explicitly contrast with 'sap_read_table_data' or others, but the ST22 reference is sufficiently unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage: it's for reading runtime errors, but does not explicitly state when to use versus when not to use alternatives. It mentions date defaults, but no explicit alternatives or exclusions. With several sibling tools for similar operations, the lack of explicit guidance on when to choose this over others is a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_read_jobsA
Read SM37 background jobs — status, runtime, scheduling. Status codes: F=Finished, A=Aborted, R=Running, S=Scheduled, P=Ready. Dates YYYYMMDD.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Filter by scheduling user | |
| status | No | F, A, R, S or P | |
| date_to | No | End date YYYYMMDD | |
| job_name | No | Job name prefix filter | |
| max_rows | No | Maximum rows (default 100) | |
| date_from | No | Start date YYYYMMDD (default last 7 days) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context such as status code meanings and date format, but it does not describe the return format, pagination behavior, or any access-related requirements. The term 'runtime' is ambiguous without further explanation of what runtime data is returned or how it is calculated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of just two sentences. It front-loads the primary purpose ('Read SM37 background jobs') and immediately follows with essential supporting details (status codes and date format). Every word earns its place; there is no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a simple read-only tool with no output schema. It provides the necessary value codes and date format to invoke parameters correctly. However, it could be slightly more complete by explaining what 'runtime' and 'scheduling' refer to in the response, but this is a minor gap given the simplicity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already provides 100% parameter coverage, the description adds significant meaning by explaining the status code values (F, A, R, S, P) and the date format (YYYYMMDD). These enrich the schema definitions for 'status' and 'date_from/date_to', guiding the agent to use correct input formats. This goes beyond merely repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Read SM37 background jobs — status, runtime, scheduling.' It uses a specific verb (Read), a specific resource (SM37 background jobs), and outlines the key data aspects (status, runtime, scheduling). This distinguishes it from sibling tools, which all focus on other SAP artifacts like tables, code, and dumps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to read background jobs with status, runtime, and scheduling info. It also includes critical usage details like status code meanings (F=Finished, A=Aborted, etc.) and date format (YYYYMMDD). However, it does not explicitly mention alternatives or when-not-to-use, though sibling tools make the differentiation obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_read_table_dataA
Query rows from an SAP table with optional WHERE filtering. Use sap_search_tables / sap_read_table_structure first if unsure of the table or field names. WHERE uses ABAP operators: EQ NE GE LE GT LT LIKE IN, values in single quotes. Dates are YYYYMMDD. Numeric keys carry leading zeros (vendor 1000 = LIFNR EQ '0000001000', material = 18 digits). Example: "MTART EQ 'FERT' AND ERSDA GE '20260101'"
| Name | Required | Description | Default |
|---|---|---|---|
| max_rows | No | Maximum rows to return (default 100) | |
| table_name | Yes | SAP table name, e.g. LFA1, EKKO, MARA | |
| where_clause | No | ABAP-style WHERE condition (see tool description) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the ABAP operator set (EQ NE GE LE GT LT LIKE IN), single-quote value rule, date format YYYYMMDD, leading zero treatment for vendor/material keys, and gives a full example. This goes well beyond the bare schema. It would be improved by explicitly stating this is a read-only, no side-effect operation, but 'Query rows' implies a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight, focused paragraph. It front-loads the purpose in one short line, then layers in contextual guidance (when to use sibling tools), syntax rules, format tips, and an example. Every sentence contributes to practical use and there is no fluff or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description offers enough context for a 3-parameter tool with no output schema: the where-clause syntax, data formats, key leading zeros, and the example make it usable. It does not explicitly describe the return shape or output, but the intent of 'query rows' and the max_rows parameter cover the main expectations. Since output schema is absent, describing observed row keys or response structure would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Though schema coverage is 100%, the description adds crucial meaning for the where_clause parameter: allowed operators, quoted values, date formats, leading-zero semantics, and an example. The schema's where_clause description only says 'ABAP-style WHERE condition (see tool description)' and defers to the tool description, so the description absolutely compensates and is essential. It also adds context for table_name with numeric key conventions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Query rows from an SAP table with optional WHERE filtering.' It clearly identifies what the tool does and is easily distinguished from siblings like sap_search_tables (finding tables) and sap_read_table_structure (reading table metadata). The mention of using those tools when unsure of table/field names reinforces this differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit prerequisite: 'Use sap_search_tables / sap_read_table_structure first if unsure of the table or field names.' It names the alternative tools and tells the agent when to consult them, which is strong usage guidance. However, it doesn't enumerate when NOT to use this tool, such as when reading code or dumps, so it is not a full exclusion list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_read_table_structureA
Get the field definitions of an SAP table or structure — names, types, lengths, key fields, descriptions. Call this before querying a table you are not sure about.
| Name | Required | Description | Default |
|---|---|---|---|
| table_name | Yes | SAP table or structure name, e.g. EKKO |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It accurately states the tool reads field definitions without mentioning side effects. It doesn't contradict any annotations (none exist) and gives a clear behavioral summary, though it doesn't mention potential permissions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, directly stating the purpose and suggesting a usage context. It is structured with a clear action (Get), resource (field definitions of an SAP table), and outcome. No unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It includes a usage hint and the required parameter, making it sufficient for basic selection. It doesn't provide output schema details, but that's not always necessary. It leverages sibling tool names to imply alternatives. Slightly missing explicit outputs, but it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, table_name, is required and well-described with an example (EKKO). The schema coverage is 100% and the parameter is clearly named and explained. No ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool retrieves field definitions of an SAP table or structure, specifying the types of information provided (names, types, lengths, key fields, descriptions). It clearly distinguishes itself from sibling tools like sap_read_table_data (data) and sap_read_code (code) by focusing on structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'Call this before querying a table you are not sure about.' This indicates a clear use case. It doesn't explicitly state when not to use it, but the context implies it's for structure discovery, not data retrieval, which is covered by sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_read_where_usedA
Cross-reference lookup (like SE84): direction 'forward' answers 'what programs/classes use this object?', direction 'inverse' answers 'what does this program use?'.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | 'forward' (what uses X, default) or 'inverse' (what X uses) | |
| max_results | No | Maximum results (default 100) | |
| object_name | Yes | Object name, e.g. MARA, ZCL_MY_CLASS | |
| object_type | No | TABL, VIEW, DTEL, DOMA, STRU, PROG, INCL, FUNC, CLAS or FUGR (default TABL) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the non-obvious direction parameter semantics (forward/inverse) which is a critical behavioral trait. While it doesn't mention side effects or errors, the tool appears to be a read-only lookup and the description covers the primary gotchas.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core concept ('Cross-reference lookup') and immediately clarifies the ambiguous 'direction' parameter with parallel phrasing. Every word earns its place, and the SE84 reference adds immediate recognition for SAP-savvy users.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (four parameters, no output schema), the description effectively explains the core behavior and the key parameter that affects results. It doesn't discuss max_results defaults, but the schema already documents it. The description feels complete for the main use case without being verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema already describes all parameters (100% coverage), the description adds valuable meaning to the 'direction' parameter by clarifying the forward/inverse distinction with concrete examples. It also provides realistic example values for object_name and object_type in the schema, reducing ambiguity beyond a simple list of allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a cross-reference lookup and distinguishes it from typical read operations by explaining the two direction semantics: 'forward' finds users of an object and 'inverse' finds dependencies of a program. It effectively disambiguates the tool from siblings like sap_read_table_data or sap_read_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use each direction with explicit examples ('what programs/classes use this object?' vs. 'what does this program use?'). It does not explicitly mention when not to use the tool or name alternatives, though the sibling list contains no directly competing tool, so this is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_search_tablesA
Search the SAP Data Dictionary for tables by keyword, matching table names and descriptions, e.g. 'vendor' finds LFA1/LFB1. Use this to discover the right table before querying.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Search term, e.g. 'vendor', 'purchase' | |
| max_results | No | Maximum results (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description bears the full burden of behavioral disclosure. It transparently explains that the search matches both table names and descriptions, and it implies a read-only operation. However, it does not mention any potential side effects, error behavior, or limitations (e.g., case sensitivity, wildcards), leaving some ambiguity about the exact behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, containing just two sentences, yet it packs in the action, the resource, a clarifying example, and a usage directive. Every word adds value, and the structure front-loads the core purpose before amplifying with the example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with only two parameters, no output schema, and no nesting, the description adequately covers the essential context: what it searches, how it matches, and the primary use case. There are no missing critical details that would impede correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description enriches the 'keyword' parameter with a concrete example ('vendor' finds LFA1/LFB1) that goes beyond the schema's terse 'Search term' description. This helps the agent understand the intended semantic context, though it doesn't discuss max_results beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching the SAP Data Dictionary for tables by keyword, with a specific, illustrative example ('vendor' finds LFA1/LFB1). It distinctly separates this search/discovery function from sibling tools like sap_read_table_structure or sap_read_table_data, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use this to discover the right table before querying' provides clear context on when to use this tool (as a preliminary discovery step). While it doesn't explicitly mention alternatives or exclusions, the context is strong enough to infer appropriate usage relative to the sibling tools that handle reading structure/data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap_syntax_checkA
Validate ABAP source code against the connected system's syntax rules (release-accurate, e.g. ECC 6.0 restrictions) without saving anything.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ABAP source code as an array of lines | |
| program_name | No | Optional program name for context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It explicitly says 'without saving anything' and adds state context with 'release-accurate' and 'connected system's syntax rules.' This conveys non-persistence and system-version sensitivity, though it does not mention permissions or whether any server-side state might be affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every clause adds meaningful detail: validation, syntax rules, release accuracy, and non-persistence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage and no output schema, the description is largely complete. It covers the primary function and side effects, though it could explicitly state what the check returns (e.g., errors/warnings) to fully support invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (source and program_name), so the description adds little parameter-level detail. It does provide useful contextual framing about ABAP source and syntax rules, but does not go beyond the schema in terms of parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Validate'), resource ('ABAP source code'), and validation target ('the connected system's syntax rules'). This is sufficiently specific and distinct from the sibling read/search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: validate ABAP source code before or without persisting it. However, the description does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites, exclusions, 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.
8 tool updates
v0.1.0- First observed
sap_read_code - First observed
sap_read_dumps - First observed
sap_read_jobs - First observed
sap_read_table_data - First observed
sap_read_table_structure - First observed
sap_read_where_used - First observed
sap_search_tables - First observed
sap_syntax_check
TDQS
Each tool targets a distinct SAP resource or action: table metadata, table search, table data, code reading, cross-references, syntax check, dumps, and jobs. No two tools overlap in purpose, so an agent can choose correctly based on the task.
All tool names follow the pattern 'sap_<verb>_<noun>', using snake_case consistently. The verbs (read, search, check) and nouns (table_structure, code, dumps) are clear, making the naming predictable and readable.
With 8 tools, the set is well-scoped for an SAP analysis/debugging assistant. Each tool serves a distinct common task, and the count is neither too thin nor overwhelming.
The set covers core SAP inspection workflows: data dictionary discovery, code reading, syntax validation, and runtime monitoring (dumps/jobs). A minor gap is the lack of a tool to search for ABAP code or programs by name, but this can be worked around with read_code if the name is known.
Maintenance
Related MCP Connectors
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
Read-only MCP connector serving the Run It on AI book; index and Implementation Blocks are free.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn AI-powered server that provides comprehensive coding assistance for SAP ABAP development, including tools for code generation, analysis, and refactoring. It integrates with various LLMs and the SAP ADT REST API to enable intelligent interaction with ABAP repository objects and best practices.820MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.456MIT

dassian-adtofficial
AlicenseNot gradedqualityDmaintenanceMCP server for SAP ABAP development via the ADT API. Connect AI assistants to your SAP system — read, write, test, and deploy ABAP code without SAP GUI.9MIT- FlicenseAqualityCmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.424-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/NicoHern/abapilot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server