dsh-abap-mcp
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.ts → dist/permissions.js). 기본 읽기 전용 코어는 항상 켜져 있으며, 7가지 쓰기 권한은 기본적으로 모두 꺼져 있고 MCP_ABAP_PERMISSIONS 환경 변수를 통해 카테고리별로 켤 수 있습니다. 등록되지 않은 모든 도구는 일괄 거부(deny-by-default)되므로, 새로 추가된 handler가 조용히 권한을 열어주지 않습니다.
읽기 전용 코어(약 75개 도구, 항상 켜짐)
하위 그룹 | 도구 | 설명 |
인증 / 세션 |
| 로그인 / 로그아웃 / 로컬 세션 캐시 삭제 |
객체 검색 |
| 객체 구조 조회 / 검색 / 경로 찾기 / 객체 유형 / 재진입 티켓 |
클래스 내부 구조 |
| 클래스의 include 구성 / 컴포넌트 목록 |
코드 분석(읽기 전용) |
| 구문 검사 / 자동 완성 / 정의 이동 / 참조 조회 / 수정 제안 / 문서(읽기 전용) |
소스 코드 읽기 |
| 객체 소스 코드 읽기 |
비활성 객체 |
| 비활성화된 객체 목록 |
등록 / 검증 |
| 객체 등록 정보 / 새 객체 매개변수 검증(읽기 전용) |
전송 읽기 |
| 전송 요청 정보 / 사용자 전송 / 구성 / 시스템 사용자(읽기 전용) |
저장소 탐색 |
| 객체 트리 탐색 / include 메인 프로그램 |
기능 / 검색 |
| ADT 기능 검색 / 특성 조회 |
단위 테스트 결과 읽기 |
| 단위 테스트 결과 평가 / 마커 위치(읽기 전용) |
포맷터 설정 읽기 |
| 포맷터 설정 읽기(수정하지 않음) |
Git 읽기 |
| 저장소 목록 / 원격 정보 / 확인(읽기 전용) |
DDIC 읽기 |
| 어노테이션 / DDIC 요소 / 패키지 검색(읽기 전용) |
서비스 바인딩 상세 |
| 서비스 바인딩 상세(읽기 전용) |
데이터 읽기 |
| 테이블 데이터 / SQL 쿼리(읽기 전용) |
Feeds / Dumps |
| 동적 객체 목록 / 짧은 덤프(dump) 목록 |
이름 변경 분석 |
| 이름 변경 평가 / 미리보기(실행만 하고 저장하지 않음) |
ATC 읽기 |
| ATC 검사 구성 / 변형 / 작업 목록 / 사용자 / 연락처(읽기 전용) |
추적 읽기 |
| 추적 목록 / 요청 / 히트 / DB 액세스 / 문장(읽기 전용) |
개정 / 상태 |
| 객체 개정 이력 / 연결 상태 확인 |
7가지 쓰기 권한(기본 모두 꺼짐)
스위치 | 하위 분류 | 도구 | 설명 |
| 소스 코드 쓰기 |
| 소스 코드 쓰기 / 객체 삭제 / 활성화 / 객체 생성 / 테스트 include 생성 / 잠금 및 잠금 해제 |
| 전송 요청 |
| 생성 / 구성 / 삭제 / 릴리스 / 담당자 변경 / 사용자 추가 |
| 리팩토링 |
| 이름 변경 실행 / 메서드 추출(평가/미리보기/실행) / 포맷팅(읽기/쓰기) |
| 실행류 |
| ABAP 클래스 실행 / 단위 테스트 실행 |
ATC 쓰기 작업 |
| ATC 검사 시작 / 면제 제안 / 면제 요청 / 담당자 변경 | |
추적 구성 |
| 추적 파라미터 설정 / 구성 생성 / 구성 삭제 / 레코드 삭제 | |
| Git 쓰기 작업 |
| 저장소 생성 / 풀 / 링크 해제 / 스테이징 / 푸시 / 브랜치 전환 |
| 디버깅 |
| 리스너 / 중단점 / 연결 / 단계 실행 / 스택 / 변수 읽기/쓰기 |
| 서비스 바인딩 |
| OData 서비스 바인딩 게시 / 게시 취소 |
설명: 읽기 전용 코어의 「ATC 읽기」「추적 읽기」「Git 읽기」「전송 읽기」는 읽기만 가능합니다. 해당 분류의 쓰기 도구(검사 시작, 구성 변경, 코드 푸시, 서비스 게시 등)는 권한이 있어야 합니다. 이름 변경 전 미리보기(
renameEvaluate/renamePreview)는 읽기 전용이며, 실제 실행(renameExecute)만refactor권한이 필요합니다.
권한 수동 확인(AI가 스스로 권한을 켜는 것 방지)
임의의 권한 스위치를 켤 때, 플러그인은 수동 확인을 요구합니다: 설정 페이지 카드에서 체크 시 일회성 확인 자격 증명(confirm-<타임스탬프>-<난수>)이 생성되어 구성에 기록되며, Host 측은 자격 증명이 유효(60초 이내)하고 형식이 올바른 경우에만 해당 모드로 연결을 허용합니다. 그렇지 않으면 강제로 읽기 전용으로 전환되고 상태에 「설정 카드에서 수동 확인 필요」가 표시됩니다. 이 메커니즘은 전체 7개 권한 스위치(sourceWrite / transports / refactor / exec / git / debug / serviceBinding)에 동일하게 적용됩니다.
설정 페이지 카드를 통해서만 권한을 켤 수 있습니다.
settingsAPI /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」 카드가 나타납니다.
구성(설정 페이지 카드)
사전 준비(연결 전 확인)
SAP 측에서 트랜잭션 코드 SICF에서 ADT 서비스 노드를 활성화해야 합니다: 플러그인은 ABAP Development Tools (ADT)의 HTTP(S) 서비스를 통해 SAP에 접속하므로, 관련 ADT 서비스 노드가 활성화되지 않으면 연결이 실패합니다. 일반적으로 SICF에서
default_host/sap/bc/adt및 하위 노드를 활성화하면 됩니다(구체적인 노드는 시스템 버전에 따라 약간 다릅니다).SAP 주소 형식: 대부분
http://주소:포트또는https://주소:포트입니다(일부 상위 버전/게이트웨이 구성은http://주소:포트/sap/bc/adt전체 경로). 실제 시스템에 따라 프로토콜과 포트를 확인하세요(예:http://10.0.0.1:8000또는https://sap.example.com:44300).
필드 | 설명 |
연결 활성화 | 전체 스위치; 꺼짐 시 연결하지 않고 어떤 도구도 등록하지 않음 |
SAP 주소 | 예: |
사용자 이름 / 비밀번호 | 연결 자격 증명 |
클라이언트 / 언어 | 예: |
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_status의mode가read-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)에게 있으며, 본 플러그인은 그 위에 권한 계층을 추가했습니다.
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.448MIT
- AlicenseAqualityCmaintenanceEnables 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.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
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.
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/xiaoliang2/dsh-abap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server