PageSourceSearch

https://erpl.io/assets/js/a8756eac.66d7bc62.js

js erpl.io collected 2026-09-25 20:05:05 UTC 12,284 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkerpl_docusaurus=self.webpackChunkerpl_docusaurus||[]).push([[24],{28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(96540);const a={},r=s.createContext(a);function i(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:n},e.children)}},48102:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"get_started/quickstart-erpl-adt","title":"ERPL-ADT Quick Start (CLI + MCP)","description":"Get up and running with erpl-adt in 5 minutes \u2014 install, log in, search ABAP, read source, and wire MCP into Claude Code.","source":"@site/docs/get_started/quickstart-erpl-adt.md","sourceDirName":"get_started","slug":"/get_started/quickstart-erpl-adt","permalink":"/docs/get_started/quickstart-erpl-adt","draft":false,"unlisted":false,"editUrl":"https://github.com/datazoode/erpl-landingpage/tree/main/docs/get_started/quickstart-erpl-adt.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5,"title":"ERPL-ADT Quick Start (CLI + MCP)","description":"Get up and running with erpl-adt in 5 minutes \u2014 install, log in, search ABAP, read source, and wire MCP into Claude Code.","keywords":["erpl-adt","quickstart","cli","mcp","claude code","sap","abap","tutorial"]},"sidebar":"docs","previous":{"title":"ERPL-Web Quick Start (Cloud/Web)","permalink":"/docs/get_started/quickstart-erpl-web"},"next":{"title":"Troubleshooting","permalink":"/docs/get_started/troubleshooting"}}');var a=t(74848),r=t(28453);const i={sidebar_position:5,title:"ERPL-ADT Quick Start (CLI + MCP)",description:"Get up and running with erpl-adt in 5 minutes \u2014 install, log in, search ABAP, read source, and wire MCP into Claude Code.",keywords:["erpl-adt","quickstart","cli","mcp","claude code","sap","abap","tutorial"]},l="ERPL-ADT Quick Start (CLI + MCP)",d={},c=[{value:"Step 1: Install ERPL-ADT",id:"step-1-install-erpl-adt",level:2},{value:"Step 2: Save Your Connection",id:"step-2-save-your-connection",level:2},{value:"Step 3: Search ABAP Objects",id:"step-3-search-abap-objects",level:2},{value:"Step 4: Read ABAP Source with Syntax Highlighting",id:"step-4-read-abap-source-with-syntax-highlighting",level:2},{value:"Step 5: Plug ERPL-ADT into Claude Code (MCP)",id:"step-5-plug-erpl-adt-into-claude-code-mcp",level:2},{value:"Where to Next",id:"where-to-next",level:2}];function o(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"erpl-adt-quick-start-cli--mcp",children:"ERPL-ADT Quick Start (CLI + MCP)"})}),"\n",(0,a.jsx)(n.p,{children:"In this 5-minute tutorial you'll install erpl-adt, save your SAP credentials, search ABAP objects, read source with syntax highlighting, and wire the MCP server into Claude Code so your AI agent can do all of the above."}),"\n",(0,a.jsx)(n.admonition,{title:"Prerequisites",type:"info",children:(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"A SAP ABAP system reachable by HTTPS (ABAP Cloud Developer Trial, S/4HANA, BW/4HANA, or a partner sandbox \u2014 anything that exposes the ADT REST API)"}),"\n",(0,a.jsx)(n.li,{children:"Login credentials for that system"}),"\n",(0,a.jsx)(n.li,{children:"For Step 5: an MCP-capable client like Claude Code, Cursor, or Gemini CLI"}),"\n"]})}),"\n",(0,a.jsx)(n.h2,{id:"step-1-install-erpl-adt",children:"Step 1: Install ERPL-ADT"}),"\n",(0,a.jsx)(n.p,{children:"The fastest path \u2014 no install:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"uvx erpl-adt --help\n"})}),"\n",(0,a.jsx)(n.p,{children:"Or install permanently:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"pip install erpl-adt\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Or download a static binary from the ",(0,a.jsx)(n.a,{href:"https://github.com/datazooDE/erpl-adt/releases/latest",children:"latest release"})," (Linux x86_64, macOS arm64/x86_64, Windows x64)."]}),"\n",(0,a.jsx)(n.admonition,{title:"Success Check",type:"tip",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"erpl-adt --version"})," prints a date-based version like ",(0,a.jsx)(n.code,{children:"2026.05.16"}),". The binary is statically linked \u2014 no JVM, no SAP NW RFC SDK, no Eclipse."]})}),"\n",(0,a.jsx)(n.h2,{id:"step-2-save-your-connection",children:"Step 2: Save Your Connection"}),"\n",(0,a.jsxs)(n.p,{children:["Run ",(0,a.jsx)(n.code,{children:"login"})," once. It writes ",(0,a.jsx)(n.code,{children:"~/.adt.creds"})," (chmod 600) so you don't have to repeat the connection flags every time."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt login \\\n  --host sap.example.com \\\n  --port 44300 \\\n  --https \\\n  --user DEVELOPER\n# (prompts for the password)\n"})}),"\n",(0,a.jsxs)(n.p,{children:["For CI or one-off calls, skip ",(0,a.jsx)(n.code,{children:"login"})," and pass the password via env:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"SAP_PASSWORD='\u2026' erpl-adt search 'ZCL_*' --host sap.example.com --https\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Want object descriptions in another logon language? Add the global ",(0,a.jsx)(n.code,{children:"--language"})," flag (2-letter ISO, default ",(0,a.jsx)(n.code,{children:"EN"}),") to any command \u2014 it's sent as the SAP logon language, so descriptions come back translated:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt search 'ZCL_*' --language DE\n"})}),"\n",(0,a.jsx)(n.admonition,{title:"Success Check",type:"tip",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"erpl-adt discover services"})," returns a list of ADT services. If you see an authentication error, verify the password; if you see a TLS warning, add ",(0,a.jsx)(n.code,{children:"--insecure"})," for self-signed certificates (dev only)."]})}),"\n",(0,a.jsx)(n.h2,{id:"step-3-search-abap-objects",children:"Step 3: Search ABAP Objects"}),"\n",(0,a.jsx)(n.p,{children:"The smallest useful command: pattern + type + max."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt search 'CL_DEMO_*' --type CLAS --max 8\n"})}),"\n",(0,a.jsx)(n.p,{children:"You'll see a table like this:"}
1),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"erpl-adt search demo",src:t(68710).A+"",width:"1280",height:"520"})}),"\n",(0,a.jsxs)(n.p,{children:["Add ",(0,a.jsx)(n.code,{children:"--json"})," if you want to pipe into ",(0,a.jsx)(n.code,{children:"jq"}),":"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt --json search 'CL_DEMO_*' --type CLAS --max 8 \\\n  | jq '.[] | {name, package}'\n"})}),"\n",(0,a.jsx)(n.admonition,{title:"Success Check",type:"tip",children:(0,a.jsxs)(n.p,{children:["The Name, Type, Package, and Description columns line up and the bold header is rendered correctly. If columns look squashed, your terminal is narrow \u2014 try ",(0,a.jsx)(n.code,{children:"--json"})," instead."]})}),"\n",(0,a.jsx)(n.h2,{id:"step-4-read-abap-source-with-syntax-highlighting",children:"Step 4: Read ABAP Source with Syntax Highlighting"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt source read CL_DEMO_OUTPUT --color\n"})}),"\n",(0,a.jsx)(n.p,{children:"Cyan keywords, green string literals, dimmed comments \u2014 the same defaults the Eclipse editor uses."}),"\n",(0,a.jsx)(n.p,{children:"For data-dictionary inspection:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt ddic table SFLIGHT\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The output resolves the ",(0,a.jsx)(n.code,{children:"AbapType"})," and ",(0,a.jsx)(n.code,{children:"CheckTable"})," columns automatically (one extra lookup per data element). Add ",(0,a.jsx)(n.code,{children:"--no-resolve-types"})," for a fast, offline listing if you only care about field names and types."]}),"\n",(0,a.jsx)(n.p,{children:"For a package walkthrough:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"erpl-adt package tree SABAP_DEMOS_OUTPUT_STREAM --max-depth 2\n"})}),"\n",(0,a.jsx)(n.admonition,{title:"Success Check",type:"tip",children:(0,a.jsxs)(n.p,{children:["Source output is colorized when stdout is a TTY. Piping to a file disables color automatically; force-enable with ",(0,a.jsx)(n.code,{children:"--color"})," or pass ",(0,a.jsx)(n.code,{children:"--editor"})," to open in ",(0,a.jsx)(n.code,{children:"$VISUAL"}),"/",(0,a.jsx)(n.code,{children:"$EDITOR"}),"."]})}),"\n",(0,a.jsx)(n.h2,{id:"step-5-plug-erpl-adt-into-claude-code-mcp",children:"Step 5: Plug ERPL-ADT into Claude Code (MCP)"}),"\n",(0,a.jsxs)(n.p,{children:["Same binary, different entry point. Drop this into ",(0,a.jsx)(n.code,{children:"~/.claude/mcp.json"})," (or your project's ",(0,a.jsx)(n.code,{children:".claude/mcp.json"}),"):"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n  "mcpServers": {\n    "sap": {\n      "command": "erpl-adt",\n      "args": ["mcp", "--host", "sap.example.com", "--port", "44300", "--https"],\n      "env": { "SAP_PASSWORD": "\u2026" }\n    }\n  }\n}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Restart Claude Code. The ",(0,a.jsx)(n.code,{children:"sap"})," tools appear in the tool list \u2014 ",(0,a.jsx)(n.code,{children:"adt_search"}),", ",(0,a.jsx)(n.code,{children:"adt_read_source"}),", ",(0,a.jsx)(n.code,{children:"adt_run_tests"}),", ",(0,a.jsx)(n.code,{children:"bw_lineage_graph"}),", etc. Ask the agent:"]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsx)(n.p,{children:"What flight-related classes exist in this system, and which ones have failing unit tests?"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The agent picks the right MCP tools, calls them in order, and reports back."}),"\n",(0,a.jsxs)(n.p,{children:["For the full MCP setup (Cursor, Gemini, tool catalogue), see the ",(0,a.jsx)(n.a,{href:"/docs/erpl-adt/mcp",children:"MCP guide"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Success Check",type:"tip",children:(0,a.jsxs)(n.p,{children:["In Claude Code's status bar the ",(0,a.jsx)(n.code,{children:"sap"})," MCP server shows a green dot. Type ",(0,a.jsx)(n.code,{children:"/mcp"})," to see the tool list. If the dot is red, run ",(0,a.jsx)(n.code,{children:"erpl-adt mcp --host \u2026"})," manually in a terminal \u2014 startup errors surface immediately."]})}),"\n",(0,a.jsx)(n.h2,{id:"where-to-next",children:"Where to Next"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/docs/erpl-adt/",children:"Overview"})," \u2014 the full feature surface and motivation"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/docs/erpl-adt/catalog",children:"Metadata Catalog"})," \u2014 build a cross-domain DuckDB catalog with search, lineage, and a web explorer"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/docs/erpl-adt/bw",children:"BW/4HANA Modeling"})," \u2014 dataflow export, ADSO inspection, lineage graphs"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/docs/erpl-adt/mcp",children:"MCP Server"}
1)," \u2014 Claude Code / Cursor / Gemini integration deep-dive"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/docs/erpl-adt/reference",children:"Command Reference"})," \u2014 every command, every flag, every exit code"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/blog/introducing-erpl-adt",children:"Announcement post"})," \u2014 narrative intro with a recorded agent session"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},68710:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/search-a45efb2d7888bb582738d7b73ea93f1c.gif"}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.