diff --git a/2.2.2.202608231050/artifacts.jar b/2.2.2.202608231050/artifacts.jar deleted file mode 100644 index 83d1a89..0000000 Binary files a/2.2.2.202608231050/artifacts.jar and /dev/null differ diff --git a/2.2.2.202608231050/artifacts.xml.xz b/2.2.2.202608231050/artifacts.xml.xz deleted file mode 100644 index b6d2199..0000000 Binary files a/2.2.2.202608231050/artifacts.xml.xz and /dev/null differ diff --git a/2.2.2.202608231050/content.jar b/2.2.2.202608231050/content.jar deleted file mode 100644 index 7793115..0000000 Binary files a/2.2.2.202608231050/content.jar and /dev/null differ diff --git a/2.2.2.202608231050/content.xml.xz b/2.2.2.202608231050/content.xml.xz deleted file mode 100644 index a546527..0000000 Binary files a/2.2.2.202608231050/content.xml.xz and /dev/null differ diff --git a/2.2.2.202608231050/features/com.epod.adt.mcp.feature_2.2.2.202608231050.jar b/2.2.2.202608231050/features/com.epod.adt.mcp.feature_2.2.2.202608231050.jar deleted file mode 100644 index ed5f180..0000000 Binary files a/2.2.2.202608231050/features/com.epod.adt.mcp.feature_2.2.2.202608231050.jar and /dev/null differ diff --git a/2.2.2.202608231259/artifacts.jar b/2.2.2.202608231259/artifacts.jar new file mode 100644 index 0000000..6fea838 Binary files /dev/null and b/2.2.2.202608231259/artifacts.jar differ diff --git a/2.2.2.202608231259/artifacts.xml.xz b/2.2.2.202608231259/artifacts.xml.xz new file mode 100644 index 0000000..25189f8 Binary files /dev/null and b/2.2.2.202608231259/artifacts.xml.xz differ diff --git a/2.2.2.202608231259/content.jar b/2.2.2.202608231259/content.jar new file mode 100644 index 0000000..8aca6b4 Binary files /dev/null and b/2.2.2.202608231259/content.jar differ diff --git a/2.2.2.202608231259/content.xml.xz b/2.2.2.202608231259/content.xml.xz new file mode 100644 index 0000000..7bb0f57 Binary files /dev/null and b/2.2.2.202608231259/content.xml.xz differ diff --git a/2.2.2.202608231259/features/com.epod.adt.mcp.feature_2.2.2.202608231259.jar b/2.2.2.202608231259/features/com.epod.adt.mcp.feature_2.2.2.202608231259.jar new file mode 100644 index 0000000..d14c02b Binary files /dev/null and b/2.2.2.202608231259/features/com.epod.adt.mcp.feature_2.2.2.202608231259.jar differ diff --git a/2.2.2.202608231050/p2.index b/2.2.2.202608231259/p2.index similarity index 82% rename from 2.2.2.202608231050/p2.index rename to 2.2.2.202608231259/p2.index index 6517483..0b1bc42 100644 --- a/2.2.2.202608231050/p2.index +++ b/2.2.2.202608231259/p2.index @@ -1,4 +1,4 @@ -#Sun Aug 23 12:50:54 CEST 2026 +#Sun Aug 23 14:59:16 CEST 2026 artifact.repository.factory.order=artifacts.xml.xz,artifacts.xml,\! metadata.repository.factory.order=content.xml.xz,content.xml,\! version=1 diff --git a/2.2.2.202608231050/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231050.jar b/2.2.2.202608231259/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231259.jar similarity index 88% rename from 2.2.2.202608231050/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231050.jar rename to 2.2.2.202608231259/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231259.jar index ada8323..7030791 100644 Binary files a/2.2.2.202608231050/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231050.jar and b/2.2.2.202608231259/plugins/com.epod.adt.mcp.plugin_2.2.2.202608231259.jar differ diff --git a/README.md b/README.md index a6a42f5..c82731e 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,19 @@ AI Client --(HTTP/JSON-RPC)--> Eclipse Plugin --(ADT REST API / SNC)--> SAP ``` +## Token-efficient by design + +AI assistants are billed by tokens, and most of the bill is not the prompt. Measured on a real ABAP task, 63% of the cost was cache write — everything a tool returns enters the model context — and 29% was cache read, the context re-read on every tool call. The prompt was 3%. + +The server therefore keeps tool responses small and call counts low: + +- **Member lists without source.** `sap_object_members` returns the members of a 2,000-line class in about 300 tokens. +- **Element-level read and write.** Pull one `METHOD` block instead of the class. Push one method back — the server merges it into the full source and sends it to ADT. The model never holds the class. +- **One-call edit.** `sap_push_source` runs the full lock → write → unlock → activate pipeline in a single call. +- **Compact checks.** `sap_check_object` runs syntax check, ATC, and ABAP Unit in one call and returns findings only — no long text. +- **No silent fallbacks.** A tool never falls back to the full source in silence. It states the fallback in the response, or it returns an error. + + ## Installation ### Via Eclipse Update Site @@ -85,9 +98,9 @@ Check the health endpoint in your browser or with curl: GET http://127.0.0.1:3000/health ``` -### Port configuration +### Preferences -**Window > Preferences > ABAP MCP Server** — change the server port or enable auto-start when you connect to a project. +**Window > Preferences > ABAP MCP Server** — change the server port, enable auto-start when you connect to a project, or set the full-source line threshold for element reads (default: 200 lines). ## Multi-System Support @@ -107,7 +120,7 @@ The `systemId` description in every tool's schema is dynamically populated from ## MCP Tools -The plugin exposes 25 tools covering the full ABAP development workflow: +The plugin exposes 28 tools covering the full ABAP development workflow: ### Search & Navigation @@ -115,6 +128,7 @@ The plugin exposes 25 tools covering the full ABAP development workflow: |------|-------------| | `sap_search_object` | Search for ABAP objects by name pattern and/or type | | `sap_object_structure` | Get the structure and metadata of an object (includes, links, source URLs) | +| `sap_object_members` | List the members of a class, interface, program, or function group — name, kind, visibility, include — without source. `includeLocal=true` also lists local and test classes | | `sap_usage_references` | Find all where-used references for an object (parsed JSON) | | `sap_element_info` | Resolve an element to its signature, type, and documentation | | `sap_inactive_objects` | List objects that are currently inactive (not yet activated) | @@ -123,10 +137,11 @@ The plugin exposes 25 tools covering the full ABAP development workflow: | Tool | Description | |------|-------------| -| `sap_pull_source` | Read source code of an ABAP object directly into the AI context | -| `sap_pull_source_to_file` | Fetch source from SAP and write it to a local file (preferred for large objects) | -| `sap_push_source` | Write source code from context to an ABAP object in SAP | -| `sap_push_source_from_file` | Save a local file back to SAP (lock → write → unlock → activate pipeline) | +| `sap_pull_source` | Read source code of an ABAP object into the AI context. `element=` returns one `METHOD` block (`part=definition` for the declaration); `includeType` selects a class include — `main` (Global Class, default), `definitions`, `implementations`, `macros`, `testclasses`, `all` | +| `sap_pull_source_to_file` | Fetch source from SAP and write it to a local file (preferred for large objects). Same `element` and `includeType` parameters | +| `sap_push_source` | Write source code from context to an ABAP object in SAP — runs the full lock → write → unlock → activate pipeline in one call | +| `sap_push_source_from_file` | Save a local file back to SAP through the same one-call pipeline | +| `sap_push_element` | Write one member block. The server merges the block into the current full source and pushes it — the model never holds the class. CLAS, INTF, PROG, FUGR | | `sap_pretty_print` | Format (pretty-print) ABAP source via the server formatter | ### Lifecycle @@ -154,6 +169,7 @@ The plugin exposes 25 tools covering the full ABAP development workflow: | `sap_syntax_check` | Run a syntax check and return errors and warnings with line numbers | | `sap_run_unit_test` | Execute ABAP Unit tests and return pass/fail results | | `sap_atc_run` | Run ATC (ABAP Test Cockpit) checks and return quality findings | +| `sap_check_object` | Syntax check, ATC, and ABAP Unit in one call. One line per step, findings only — severity, object, method, line, short message | | `sap_run_class` | Run a class implementing IF_OO_ADT_CLASSRUN (ABAP console / F9) | | `sap_short_dumps` | List recent ABAP runtime errors / short dumps (ST22) | @@ -192,4 +208,4 @@ The plugin exposes 25 tools covering the full ABAP development workflow: ## License -Copyright 2025 Erhan Keseli. Licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). +Copyright 2025-2026 Erhan Keseli. Licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/compositeArtifacts.xml b/compositeArtifacts.xml index 1694552..d2f8f11 100644 --- a/compositeArtifacts.xml +++ b/compositeArtifacts.xml @@ -4,10 +4,10 @@ type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'> - + - + diff --git a/compositeContent.xml b/compositeContent.xml index 2568596..dca8758 100644 --- a/compositeContent.xml +++ b/compositeContent.xml @@ -4,10 +4,10 @@ type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'> - + - +