Skip to main content
Glama
xiaoliang2

dsh-abap-mcp

by xiaoliang2

dsh-abap-mcp

⚠️ 실험 단계 · EXPERIMENTAL

이 플러그인은 아직 실험 단계(Experimental)이며, 개발/테스트(Dev/Test) 환경 전용입니다.

  • 프로덕션 시스템에 직접 연결하지 마십시오. 기본적으로 읽기 전용이라 하더라도, 읽기 전용 도구로도 프로덕션 시스템의 소스 코드와 비즈니스 데이터를 읽을 수 있습니다.

  • 최소 권한(least-privilege)의 SAP 계정으로 연결하십시오.

  • 쓰기 권한 스위치(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)는 기본적으로 모두 꺼져 있으며, 개발 시스템에서만 필요에 따라 신중하게 켜십시오.

  • 비밀번호는 로컬 settings.yaml평문으로 기록되므로, 자격 증명 보안에 유의하십시오.

이 플러그인을 사용하면 위험을 인지하고 그 결과를 스스로 부담하는 것으로 간주됩니다.

DeepSeek Harness 플러그인: MCP를 통해 SAP ABAP ADT에 연결하여, DSH 내에서 SAP의 ABAP 객체를 직접 조회/열람합니다. 기본적으로 엄격한 읽기 전용이며, 7가지 쓰기 권한은 구성 가능한 스위치로 제공됩니다.

업스트림 서버: mario-andreschak/mcp-abap-abap-adt-api 이 플러그인은 server/ 안에 권한 계층이 추가된 서버 사본(기본 읽기 전용 + 스위치)을 내장하고 있으며, 연결, 도구 등록, 설정 변경 시 재연결을 담당합니다.


아키텍처

DSH 设置页卡片(ABAP MCP)
        │  settingsScope.set(...)   ←→  settings/updated
        ▼
Host 插件 lib/index.js
  1. settings.register("abap-mcp", schema)   # 连接配置 + 7 类权限开关 + 状态
  2. spawn `node server/dist/index.js`(StdioClientTransport,env=SAP_* + MCP_ABAP_PERMISSIONS)
  3. MCP Client 连接,把服务器工具注册为 mcp__abap__<tool>
  4. 配置变更 → 去抖重连;连接断开 → 有界退避重试
        ▼
server/dist/index.js(MCP 服务器,权限在这里强制生效)
  - MCP_ABAP_PERMISSIONS 未设置 → 默认只读(约 75 个只读工具)
  - 7 类写权限通过 MCP_ABAP_PERMISSIONS 的 JSON 开关启用
  • 권한의 단일 진실 공급원은 서버 측에 있습니다: Host는 스위치 값을 서버에 전달만 할 뿐, 도구 목록과 호출은 모두 권한에 따라 필터링/거부됩니다. 누군가 DSH를 우회하여 서버에 직접 연결하더라도 권한은 여전히 적용됩니다.

  • 도구 명명: mcp__abap__<도구명>(예: mcp__abap__searchObject).

Related MCP server: vibing-steampunk

권한 모델(기본 = 엄격한 읽기 전용)

권한 모델은 서버 측에서 강제됩니다(server/src/permissions.tsdist/permissions.js). 기본 읽기 전용 코어는 항상 켜져 있으며, 7가지 쓰기 권한은 기본적으로 모두 꺼져 있고 MCP_ABAP_PERMISSIONS 환경 변수를 통해 카테고리별로 켤 수 있습니다. 등록되지 않은 모든 도구는 일괄 거부(deny-by-default)되므로, 새로 추가된 handler가 조용히 권한을 열어주지 않습니다.

읽기 전용 코어(약 75개 도구, 항상 켜짐)

하위 그룹

도구

설명

인증 / 세션

login logout dropSession

로그인 / 로그아웃 / 로컬 세션 캐시 삭제

객체 검색

objectStructure searchObject findObjectPath objectTypes reentranceTicket

객체 구조 조회 / 검색 / 경로 찾기 / 객체 유형 / 재진입 티켓

클래스 내부 구조

classIncludes classComponents

클래스의 include 구성 / 컴포넌트 목록

코드 분석(읽기 전용)

syntaxCheckCode syntaxCheckCdsUrl codeCompletion findDefinition usageReferences syntaxCheckTypes codeCompletionFull codeCompletionElement usageReferenceSnippets fixProposals fixEdits fragmentMappings abapDocumentation

구문 검사 / 자동 완성 / 정의 이동 / 참조 조회 / 수정 제안 / 문서(읽기 전용)

소스 코드 읽기

getObjectSource

객체 소스 코드 읽기

비활성 객체

inactiveObjects

비활성화된 객체 목록

등록 / 검증

objectRegistrationInfo validateNewObject

객체 등록 정보 / 새 객체 매개변수 검증(읽기 전용)

전송 읽기

transportInfo hasTransportConfig transportConfigurations getTransportConfiguration userTransports transportsByConfig systemUsers transportReference

전송 요청 정보 / 사용자 전송 / 구성 / 시스템 사용자(읽기 전용)

저장소 탐색

nodeContents mainPrograms

객체 트리 탐색 / include 메인 프로그램

기능 / 검색

featureDetails collectionFeatureDetails findCollectionByUrl loadTypes adtDiscovery adtCoreDiscovery adtCompatibiliyGraph

ADT 기능 검색 / 특성 조회

단위 테스트 결과 읽기

unitTestEvaluation unitTestOccurrenceMarkers

단위 테스트 결과 평가 / 마커 위치(읽기 전용)

포맷터 설정 읽기

prettyPrinterSetting

포맷터 설정 읽기(수정하지 않음)

Git 읽기

gitRepos gitExternalRepoInfo checkRepo remoteRepoInfo

저장소 목록 / 원격 정보 / 확인(읽기 전용)

DDIC 읽기

annotationDefinitions ddicElement ddicRepositoryAccess packageSearchHelp

어노테이션 / DDIC 요소 / 패키지 검색(읽기 전용)

서비스 바인딩 상세

bindingDetails

서비스 바인딩 상세(읽기 전용)

데이터 읽기

tableContents runQuery

테이블 데이터 / SQL 쿼리(읽기 전용)

Feeds / Dumps

feeds dumps

동적 객체 목록 / 짧은 덤프(dump) 목록

이름 변경 분석

renameEvaluate renamePreview

이름 변경 평가 / 미리보기(실행만 하고 저장하지 않음)

ATC 읽기

atcCustomizing atcCheckVariant atcWorklists atcUsers isProposalMessage atcContactUri

ATC 검사 구성 / 변형 / 작업 목록 / 사용자 / 연락처(읽기 전용)

추적 읽기

tracesList tracesListRequests tracesHitList tracesDbAccess tracesStatements

추적 목록 / 요청 / 히트 / DB 액세스 / 문장(읽기 전용)

개정 / 상태

revisions healthcheck

객체 개정 이력 / 연결 상태 확인

7가지 쓰기 권한(기본 모두 꺼짐)

스위치

하위 분류

도구

설명

sourceWrite

소스 코드 쓰기

setObjectSource deleteObject activateObjects activateByName createObject createTestInclude lock unLock

소스 코드 쓰기 / 객체 삭제 / 활성화 / 객체 생성 / 테스트 include 생성 / 잠금 및 잠금 해제

transports

전송 요청

createTransport setTransportsConfig createTransportsConfig transportDelete transportRelease transportSetOwner transportAddUser

생성 / 구성 / 삭제 / 릴리스 / 담당자 변경 / 사용자 추가

refactor

리팩토링

renameExecute extractMethodEvaluate extractMethodPreview extractMethodExecute prettyPrinter setPrettyPrinterSetting

이름 변경 실행 / 메서드 추출(평가/미리보기/실행) / 포맷팅(읽기/쓰기)

exec

실행류

runClass unitTestRun

ABAP 클래스 실행 / 단위 테스트 실행

ATC 쓰기 작업

createAtcRun atcExemptProposal atcRequestExemption atcChangeContact

ATC 검사 시작 / 면제 제안 / 면제 요청 / 담당자 변경

추적 구성

tracesSetParameters tracesCreateConfiguration tracesDeleteConfiguration tracesDelete

추적 파라미터 설정 / 구성 생성 / 구성 삭제 / 레코드 삭제

git

Git 쓰기 작업

gitCreateRepo gitPullRepo gitUnlinkRepo stageRepo pushRepo switchRepoBranch

저장소 생성 / 풀 / 링크 해제 / 스테이징 / 푸시 / 브랜치 전환

debug

디버깅

debuggerListeners debuggerListen debuggerDeleteListener debuggerSetBreakpoints debuggerDeleteBreakpoints debuggerAttach debuggerSaveSettings debuggerStackTrace debuggerVariables debuggerChildVariables debuggerStep debuggerGoToStack debuggerSetVariableValue

리스너 / 중단점 / 연결 / 단계 실행 / 스택 / 변수 읽기/쓰기

serviceBinding

서비스 바인딩

publishServiceBinding unPublishServiceBinding

OData 서비스 바인딩 게시 / 게시 취소

설명: 읽기 전용 코어의 「ATC 읽기」「추적 읽기」「Git 읽기」「전송 읽기」는 읽기만 가능합니다. 해당 분류의 쓰기 도구(검사 시작, 구성 변경, 코드 푸시, 서비스 게시 등)는 권한이 있어야 합니다. 이름 변경 전 미리보기(renameEvaluate/renamePreview)는 읽기 전용이며, 실제 실행(renameExecute)만 refactor 권한이 필요합니다.

권한 수동 확인(AI가 스스로 권한을 켜는 것 방지)

임의의 권한 스위치를 켤 때, 플러그인은 수동 확인을 요구합니다: 설정 페이지 카드에서 체크 시 일회성 확인 자격 증명(confirm-<타임스탬프>-<난수>)이 생성되어 구성에 기록되며, Host 측은 자격 증명이 유효(60초 이내)하고 형식이 올바른 경우에만 해당 모드로 연결을 허용합니다. 그렇지 않으면 강제로 읽기 전용으로 전환되고 상태에 「설정 카드에서 수동 확인 필요」가 표시됩니다. 이 메커니즘은 전체 7개 권한 스위치(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)에 동일하게 적용됩니다.

  • 설정 페이지 카드를 통해서만 권한을 켤 수 있습니다. settings API / settings.yaml 직접 수정 / 대화에서 모델이 permissions를 수정하는 방식으로 켜면 유효한 자격 증명이 없어 거부됩니다.

  • 자격 증명은 60초의 유효 기간이 있으며, 재시작 후 자동으로 만료되므로 카드에서 다시 조작해야 합니다.

  • 모든 권한 끄기(전체 꺼짐으로 복귀)는 확인이 필요 없으며 항상 허용됩니다.

설치

npm(정식 패키지)에서

dsh plugin add @xiaobanli/dsh-abap-mcp

로컬 디렉터리(개발/연동)

profile의 package.json에 의존성을 추가하고 pnpm install을 실행합니다:

{
  "dependencies": {
    "@xiaobanli/dsh-abap-mcp": "link:C:/othersoftware/harness/harness/project6/dsh-abap-mcp"
  },
  "dsh": { "profile": { "bundles": [ "...", "dsh-abap-mcp" ] } }
}

DSH를 재시작하면 설정 페이지 왼쪽에 「ABAP MCP」 카드가 나타납니다.

구성(설정 페이지 카드)

사전 준비(연결 전 확인)

  1. SAP 측에서 트랜잭션 코드 SICF에서 ADT 서비스 노드를 활성화해야 합니다: 플러그인은 ABAP Development Tools (ADT)의 HTTP(S) 서비스를 통해 SAP에 접속하므로, 관련 ADT 서비스 노드가 활성화되지 않으면 연결이 실패합니다. 일반적으로 SICF에서 default_host/sap/bc/adt 및 하위 노드를 활성화하면 됩니다(구체적인 노드는 시스템 버전에 따라 약간 다릅니다).

  2. SAP 주소 형식: 대부분 http://주소:포트 또는 https://주소:포트입니다(일부 상위 버전/게이트웨이 구성은 http://주소:포트/sap/bc/adt 전체 경로). 실제 시스템에 따라 프로토콜과 포트를 확인하세요(예: http://10.0.0.1:8000 또는 https://sap.example.com:44300).

필드

설명

연결 활성화

전체 스위치; 꺼짐 시 연결하지 않고 어떤 도구도 등록하지 않음

SAP 주소

예: http://주소:포트 / https://주소:포트(먼저 ADT 서비스 활성화 필요)

사용자 이름 / 비밀번호

연결 자격 증명

클라이언트 / 언어

예: 000 / EN

7개 쓰기 권한 스위치

체크 시 해당 쓰기 기능 활성화

저장 후 Host가 자동으로 재연결됩니다. 대화에서 모델에게 abap_mcp_status를 직접 물어 연결 상태를 확인할 수도 있습니다.

「연결 테스트」 버튼: 먼저 현재 폼을 디스크에 저장한 후, 현재 구성으로 실제 spawn→연결→도구 열거→연결 해제를 한 번 수행하며, 결과(성공/실패, 소요 시간, 도구 수)가 버튼 옆에 표시됩니다. 「연결 활성화」 스위치 상태는 변경하지 않습니다.

  • SAP 주소 / 사용자 이름 / 비밀번호를 입력하지 않은 경우 버튼이 바로 「구성을 먼저 입력하세요」를 표시하며 빈 테스트를 실행하지 않습니다.

  • 테스트 진행 중에는 버튼이 「테스트 중…」으로 표시됩니다. 60초 내에 결과가 없으면 자동으로 타임아웃 처리되고 알림이 표시됩니다.

  • 테스트 결과(status.lastTest)는 버튼 옆에 계속 표시되며, 재연결 상태 새로고침으로 지워지지 않습니다.

  • 테스트는 일회성 동작입니다: 영구 연결이나 자동 재연결을 트리거하지 않으며, 테스트 실패 시 백오프 재시도도 하지 않습니다. 영구 연결과 유한 재연결(최대 5회 후 포기)은 구성 변경(활성화 스위치/연결 필드/권한) 시에만 트리거됩니다.

서버 빌드(server/ 수정 후)

cd server
npm install --ignore-scripts   # 依赖均为纯 JS,无需生命周期脚本
node node_modules/typescript/bin/tsc -p tsconfig.json   # 产出 dist/

문제 해결(Troubleshooting)

「연결 테스트」가 계속 「테스트 중…」으로 표시되거나, 클릭해도 반응이 없음

  • 대부분 설정 쓰기가 디스크에 저장되지 않은 경우입니다. SAP 주소 / 사용자 이름 / 비밀번호가 모두 입력되었는지 확인하세요. 플러그인은 설정을 로컬 settings.yaml에 다시 기록합니다.

  • 반복적으로 멈추는 경우 DSH 로그에 SettingsConflictError(설정 revision 충돌로 쓰기가 버려짐)가 있는지 확인하세요. DSH를 재시작한 후 다시 시도하세요.

연결 시 McpError: Connection closed 오류

  • 데스크톱 버전 호스트는 Electron에서 실행되므로, 하위 프로세스는 Node 모드로 시작해야 합니다(플러그인이 자동으로 ELECTRON_RUN_AS_NODE=1 설정).

  • 그래도 발생하면 server/dist/index.js가 존재하는지 확인하세요(server/ 소스 코드를 수정하지 않았다면 재빌드 불필요). node server/dist/index.js를 직접 실행했을 때 터미널에서 대기 상태가 되면 서버 자체는 정상입니다.

특정 쓰기 권한 스위치를 켰는데 해당 도구가 나타나지 않음

  • 권한의 실제 적용 지점은 서버 측입니다. 스위치 저장 후 플러그인은 재연결하고 도구를 다시 열거합니다(도구 수가 증가해야 함, 예: 75 → 83).

  • 권한 읽기 전용 도구 수가 변하지 않으면 abap_mcp_statusmoderead-only + <카테고리>로 변경되었는지 확인하세요. 여전히 read-only라면 스위치가 저장되지 않은 것입니다.

server/ 소스 코드를 수정했는데 도구 동작이 변하지 않음

  • 재빌드가 필요합니다: cd server && npm install --ignore-scripts && node node_modules/typescript/bin/tsc -p tsconfig.json, 그런 다음 DSH를 재시작하여 플러그인이 새 dist/를 사용하도록 하세요.

실행 중 ABAP에서 STRING_OFFSET_TOO_LARGE 등의 오류 발생

  • 이러한 오류는 SAP 측에서 읽히거나 실행되는 ABAP 프로그램 자체에서 발생하는 것으로 플러그인과 무관합니다. mcp__abap__dumps로 단축 덤프 상세 정보를 확인하거나 SE38에서 해당 프로그램을 수정하세요.

보안 설명

  • 읽기 전용 ≠ 무해: 읽기 전용 도구도 프로덕션 시스템의 소스 코드와 비즈니스 데이터를 읽을 수 있습니다. 개발/테스트 시스템에 연결하고 최소 권한 계정을 사용할 것을 강력히 권장합니다(권한 스위치는 DSH 측의 안전장치일 뿐, SAP 측의 권한을 대체하지 않습니다).

  • 서버는 시작 시 권한 모드와 "개발/테스트 시스템 전용 사용 권장" 알림을 출력합니다(권장 + 알림이며 강제가 아닙니다).

  • 비밀번호는 평문으로 로컬 settings.yaml에 기록됩니다(DSH의 settings 서비스가 영속화). 더 높은 보안 수준이 필요하면 직접 credentials 서비스 저장소로 확장하세요.

  • 서버 하위 프로세스는 SDK 화이트리스트 환경 변수 + 본 플러그인이 명시적으로 주입한 SAP_*MCP_ABAP_PERMISSIONS만 상속하며, 호스트의 나머지 환경 변수는 유출되지 않습니다.

License

MIT. 서버 부분의 저작권은 원저작자 mario-andreschak(MIT)에게 있으며, 본 플러그인은 그 위에 권한 계층을 추가했습니다.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with SAP ABAP systems through ABAP Development Tools (ADT), providing access to repository objects, source code, where-used analysis, and SQL queries with support for both on-premise and BTP systems.
    2
  • A
    license
    A
    quality
    C
    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
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
    4
    24

View all related MCP servers

Related MCP Connectors

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

  • Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.

  • Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.

View all MCP Connectors

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/xiaoliang2/dsh-abap-mcp'

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