mcp-bw-adt-api
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BW_CLIENT | No | SAP logon client, e.g. '100'. | |
| BW_DEFAULT | No | Startup profile name (default = first in BW_PROFILES). | |
| BW_BASE_URL | No | BW server URL (legacy single-env mode). | |
| BW_LANGUAGE | No | Language key, e.g. 'ZH'. | |
| BW_PASSWORD | No | Password (legacy single-env mode). | |
| BW_PROFILES | No | Comma-separated profile names, e.g. 'test,prod'. Required for multi-profile mode. | |
| BW_READONLY | No | 'true' to reject mutating tools on this profile. | |
| BW_USERNAME | No | SAP logon user (legacy single-env mode). | |
| BW_MCP_WORKDIR | No | Root directory for file buffering (default = <cwd>/.mcp-bw-out). | |
| BW_ALLOW_UNAUTHORIZED | No | 'true' to accept self-signed certificates. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| bw_system_statusA | Report MCP server status: current environment profile (name, baseUrl, username, client, language, readOnly), whether a live BW session exists for it, all configured profiles, and workdir for file buffering. No network call. Use this first to confirm the server is wired to the right BW system. |
| bw_env_listA | List configured BW environment profiles and which one is active. Each profile includes name, baseUrl, username, client, language, and readOnly. No network call. Prefer this (or bw_system_status) before bw_env_switch. |
| bw_env_switchA | Switch the active BW environment profile (e.g. test → prod). Subsequent tools use the new profile. Does not log in until the next tool that needs a client; existing sessions for other profiles are kept. When switching to/from a read-only profile, mutating tools are hidden/shown and a tools/list_changed notification is sent (host support varies; mutating calls are always rejected on read-only profiles). |
| bw_system_infoA | Query BW system info and capabilities for the current environment (auto-logs in on first call). Use outputPath for the full document. For a single property or capability check, read the returned document (or buffered file) rather than separate tools. |
| bw_disconnectA | Drop the current environment's BW session/client so the next call reconnects. Other profiles' sessions are left intact. Useful after errors or to force a fresh login. |
| bw_search_objectsA | Advanced BW object search with filters (type, dates, name/description). Returns a list of { objectName, objectType, title, uri, ... }. Use outputPath for large result sets. |
| bw_adso_transformationsA | Get Transformations related to an ADSO (via name search). Each TRFN title carries a 'SOURCE -> TARGET' relation. |
| bw_adso_dtpsA | Get DTPs related to an ADSO (via name search). Each DTP title carries a 'SOURCE -> TARGET' relation. |
| bw_dataflow_getB | Get the dataflow/lineage graph around an object (nodes + relations). levels=-1 expands fully; positive N limits depth. Use outputPath for deep graphs. |
| bw_dataflow_lineageB | Find transformations and DTPs linking a source object to a target object (typical: 'which TRFN/DTP connect ZL_FID01 → ZL_FID40'). |
| bw_object_deleteA | Delete any BW object. Irreversible. For InfoArea (area), pass a lock handle; for other types, pass a transport request number. |
| bw_adso_detailsC | Get parsed ADSO metadata (fields, indexes, partitioning). Prefer outputPath. May include configuration, associated DDIC tables, and related DDIC links when the enriched client path is available; otherwise returns the standard details projection. |
| bw_adso_versionsC | Get ADSO version history. |
| bw_adso_get_xmlA | Get the raw ADSO XML used for PUT updates. ALWAYS prefer outputPath — payloads are 15–80 KB. With outputPath, the full XML is written to disk (reuse as xmlPath in bw_adso_save_and_activate) and the MCP response is only a summary envelope. Without outputPath, format='summary' (default) returns a small overview; format='xml' returns the raw XML inline. Step 1 of read-modify-write. |
| bw_adso_checkC | Check ADSO consistency. |
| bw_adso_save_and_activateA | One-stop: lock → PUT → (optional) activate → unlock. Prefer xmlPath (from bw_adso_get_xml + outputPath) over inline xmlContent for large bodies. When a transport is required: pass transport= OR createTransport=true (use bw_transport_check to list available requests). Do not omit both. Returns a compact projection; set outputPath to keep the full update/activate detail. |
| bw_adso_add_fieldA | Atomic edit: add a local 'field'-type field to an ADSO and save (activate optional via autoActivate, default true). success reflects save/activate outcome; activated only means activation was attempted. Internally reads current XML, inserts the field, and saves — no large XML handling by the caller. |
| bw_adso_createB | Create an empty ADSO shell (fields are added afterwards via bw_adso_add_field). Required: name, description, infoArea. |
| bw_adso_validate_info_areaA | Validate that an InfoArea exists (pre-create check for ADSO). Prefer bw_area_validate_exists for InfoArea workflows. |
| bw_adso_validate_templateC | Validate that a template ADSO exists. |
| bw_adso_validate_new_nameC | Validate that a new ADSO name is available. |
| bw_area_validate_existsA | Validate that an InfoArea exists (AREA). Prefer this over bw_adso_validate_info_area. |
| bw_area_validate_new_nameC | Validate that a new InfoArea name is available. |
| bw_area_get_xmlA | Get InfoArea raw XML (active version /a). Prefer outputPath. Reuse as xmlPath only if a future save tool is added; create uses structured params. |
| bw_area_createA | Create an InfoArea under a parent InfoArea. Flow: validate parent → validate name → lock → POST → unlock (no activate). $TMP packages typically need no transport. |
| bw_area_deleteA | Delete an InfoArea. Locks, DELETE /a?lockHandle=…, then unlocks. Irreversible. |
| bw_trfn_createA | Create a transformation via the 8TRANSIENT transient flow (Eclipse wizard equivalent). Server mints the id, hydrates all source/target elements and default rules from the two providers. Returns trfnId + hydrated XML. packageName defaults to $TMP; pass a real package together with transport to register in a workbench request. Then use bw_trfn_auto_map_and_save / bw_trfn_add_rules_and_save / bw_trfn_check to finish. |
| bw_trfn_detailsA | Get parsed transformation details. Prefer outputPath. |
| bw_trfn_versionsC | Get transformation version history. |
| bw_trfn_get_xmlA | Get raw transformation XML for PUT updates. ALWAYS prefer outputPath. With outputPath, full XML is written to disk (reuse as xmlPath in bw_trfn_save_and_activate). Without it, format='summary' returns an overview; format='xml' returns raw XML inline. Step 1 of read-modify-write. |
| bw_trfn_checkC | Check transformation consistency. |
| bw_trfn_save_and_activateA | One-stop: lock → PUT → (optional) activate → unlock. Prefer xmlPath (from bw_trfn_get_xml + outputPath) over inline xmlContent. When a transport is required: pass transport= OR createTransport=true. Returns a compact projection; set outputPath for full detail. |
| bw_trfn_set_end_routine_fieldsC | Check a list of target field names into the transformation's end routine and save+activate. |
| bw_trfn_add_rules_and_saveA | Atomic edit: add DIRECT mapping rules (source→target pairs) to a transformation and save+activate. target omitted means same-name mapping. |
| bw_trfn_auto_map_and_saveC | Atomic edit: auto-map same-named source→target fields in a transformation and save+activate. |
| bw_trfn_switch_runtimeC | Switch a transformation between HANA and ABAP runtime. Requires an existing lockHandle. |
| bw_trfn_class_sourceB | Get the routine's ABAP source code. Prefer outputPath. |
| bw_trfn_class_save_sourceB | Save+activate the routine's ABAP class source. Prefer sourcePath over inline sourceContent. |
| bw_dtp_createA | Create a DTP via the generic object POST flow (CREA lock + collection POST). Body is minimal (extractionSettings + overview TRFN binding + source/target); the server hydrates filter fields and program flow. Created DTP is inactive — configure (extractionMode/filter via get_xml → edit → save_and_activate) then activate. Note: DTP filters cannot express empty-value comparisons; encode them as selections without a element ( = not-initial). |
| bw_dtp_detailsB | Get parsed-and-projected DTP details (fields, filter, program flow extracted from the XML tree). Prefer outputPath. |
| bw_dtp_get_xmlA | Get the raw DTP XML string for PUT updates. ALWAYS prefer outputPath. With outputPath, the full XML is written to disk (reuse as xmlPath in bw_dtp_save_and_activate) and the MCP response is only a summary envelope. Without outputPath, format='summary' (default) returns a small overview; format='xml' returns the raw XML inline. Step 1 of read-modify-write. |
| bw_dtp_versionsC | Get DTP version history. |
| bw_dtp_checkA | Check DTP consistency (READ-ONLY, does NOT activate). Use bw_dtp_activate to (re)activate a DTP. |
| bw_dtp_activateA | Activate a DTP — typically to re-activate a DTP that a transformation change deactivated. Locks → activates → unlocks; the DTP content is NOT changed. Use bw_dtp_save_and_activate only when the DTP XML was actually modified. |
| bw_dtp_executeC | Execute a DTP (triggers data transfer). Irreversible action. |
| bw_dtp_save_and_activateA | One-stop: lock → PUT → (optional) activate → unlock. Prefer xmlPath (from bw_dtp_get_xml + outputPath) over inline xmlContent. When a transport is required: pass transport= OR createTransport=true. Compact projection returned; set outputPath for full detail. |
| bw_datasource_detailsA | Get parsed DataSource details. Prefer outputPath. |
| bw_datasource_get_xmlA | Get raw DataSource XML for PUT updates. ALWAYS prefer outputPath. With outputPath, full XML is written to disk (reuse as xmlPath in bw_datasource_save_and_activate). Without it, format='summary' returns an overview; format='xml' returns raw XML inline. |
| bw_datasource_fieldsC | Get parsed DataSource field list. |
| bw_datasource_versionsC | Get DataSource version history. |
| bw_datasource_merge_proposalA | Merge an ODP proposal (field sync after adapter change) into the current DataSource XML. Prefer xmlPath over inline xmlContent; returns the merged XML — write it back via save_and_activate. |
| bw_datasource_save_and_activateA | One-stop: lock → PUT → (optional) activate → unlock. Prefer xmlPath (from bw_datasource_get_xml + outputPath) over inline xmlContent. When a transport is required: pass transport= OR createTransport=true. Compact projection returned. |
| bw_replication_infoC | Replication pre-check for a DataSource. |
| bw_replication_replicateC | Trigger DataSource replication with explicit pre-check tasks. activate is a strategy string (not a boolean). |
| bw_replication_replicate_fullC | One-stop: pre-check → trigger replication. |
| bw_processchain_detailsC | Get parsed process chain details (steps). Prefer outputPath. |
| bw_processchain_checkC | Check process chain consistency. |
| bw_processchain_executeA | Execute a process chain. Irreversible action. |
| bw_processchain_stopA | Stop a running process chain. Irreversible action. |
| bw_processchain_logsA | Get process chain execution logs and current run status. Defaults to the most recent log entries; use limit/offset to page, or outputPath for the full log set. Response shape: { logs, status, ...paging }. |
| bw_infoobject_getC | Get InfoObject details including metadata. Prefer outputPath. |
| bw_infoobject_validate_existsC | Validate that an InfoObject exists. |
| bw_infoobject_validate_new_nameC | Validate that a new InfoObject name is available. |
| bw_table_describeA | Describe a DDIC table in one call: merges metadata, info, fields, and data-preview metadata. Prefer outputPath when you need the full snapshot. |
| bw_table_get_dataA | Query DDIC table data via the ADT data-preview service (OpenSQL SELECT). maxRows defaults to a small value and is capped to avoid huge inline payloads; for large reads set outputPath to dump the full result to a file. |
| bw_table_query_sqlA | Run an arbitrary OpenSQL statement via ADT Data Preview freestyle (POST /sap/bc/adt/datapreview/freestyle — same as ADT SQL Console). Pass the statement inline (sqlStatementContent) or from a file (sqlStatementPath). Prefer outputPath for non-trivial results. ⚠️ Runs with the configured BW credentials — treat as a privileged data-plane operation; prefer SELECT-only statements. |
| bw_reporting_initial_viewA | GET BICS initial reporting view for an ADSO / InfoObject / Composite Provider (compid !NAME). Returns metadata (characteristics, key figures, ids), default axes, and result set. Prefer outputPath — payloads are large. For axis remapping use bw_reporting_preview instead. |
| bw_reporting_update_viewA | POST updated BICS axes and refresh the result set. Pass the full infoObject state (name/id/axis/pos) from bw_reporting_initial_view. Prefer bw_reporting_preview when you only need to set row/column characteristic names. |
| bw_reporting_previewA | Convenience BICS preview: GET metadata → put named characteristics on ROWS (optional COLUMNS) → POST refresh. Same as Eclipse Dashboard Preview for ADSO / characteristic / Composite Provider. Inline response is flatRows (paginated); set outputPath for the full QueryView. |
| bw_transport_checkA | Check whether saving an object requires a transport request. Returns recording flag (X = transport mandatory) and the current dev class. |
| bw_transport_createC | Create a new transport request for a referenced object. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 71 tools
Most object types have clearly separated read/edit/activate/check operations, but several overlapping pairs exist: bw_system_status vs bw_env_list, bw_adso_validate_info_area vs bw_area_validate_exists, bw_replication_replicate vs bw_replication_replicate_full, and the reporting preview/update tools. Descriptions help, but an agent could still misselect.
Tools follow a mostly consistent bw_<object>_<action> snake_case pattern with predictable verbs like get_xml, details, check, create, save_and_activate, and versions. Minor deviations such as bw_system_status, bw_env_list, bw_reporting_initial_view, and bw_datasource_merge_proposal keep it from being fully uniform.
71 tools is far beyond a typical well-scoped set and includes multiple near-duplicates: validation helpers, env status/list, and replication variants. While the broad BW domain explains some volume, the redundancy makes the surface feel heavier than necessary.
The set covers full lifecycles for ADSO, transformations, DTPs, and DataSources, plus process chain execution, transport handling, table queries, and reporting. Gaps like missing InfoArea update and InfoObject create/edit are workable via generic object delete or XML routes, so coverage is strong but not perfect.