Token导航 LogoToken导航

MCP Server · 运维云端

MCP Abap Connection

为MCP ABAP ADT服务器提供统一的SAP ABAP系统连接接口,支持多种认证方式和会话管理。

stdio官方级别未说明来源级核验工具 1sap-abap-auth
会话管理TypeScript云端部署

快速开始

作者 / 组织
fr0ster
提供方
fr0ster
运行时
Node.js

工具数量

1

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

1

仓库热度

收录来源

1 个

MCP World

选型结论

MCP Abap Connection 属于运维云端类 MCP Server,公开资料标注 1 个工具,通过stdio 本地进程接入,客户端适配情况以官方文档为准,有可以直接复制的安装命令;接入前要先准备 访问 Token。

分类

运维云端

传输方式

stdio

认证方式

访问 Token

部署方式

公开资料未说明

安装与配置

安装命令

npx sap-abap-auth auth -k path/to/service-key.json

客户端配置示例

{
  "mcpServers": {
    "mcp-abap-connection": {
      "command": "npx",
      "args": [
        "sap-abap-auth",
        "auth",
        "-k",
        "path/to/service-key.json"
      ]
    }
  }
}

按公开安装命令拼出来的示例,字段名和参数以仓库 README 为准;带 YOUR_API_KEY 这类占位符的位置记得换成自己的值。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 Node.js,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 1 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

@mcp-abap-adt/连接

MCP ABAP ADT服务器的ABAP连接层。提供了一个统一的接口,用于通过ADT(ABAP开发工具)协议连接到SAP ABAP系统,支持内部(基本身份验证)和云(JWT/OAuth2)身份验证方法。

主要特点

  • 🔐 多种身份验证方法:

- 本地SAP系统的基本身份验证 - 用于SAP BTP ABAP环境的JWT/OAuth2 - 用于预认证企业流的SAML会话Cookie

  • 🔄 许可证管理:

- 令牌刷新由处理 @mcp-abap-adt/auth-broker 包裹 - 连接包仅关注HTTP通信

  • 💾 会话管理:

- 会话头管理(Cookie、CSRF令牌) - 会话状态持久性由处理 @mcp-abap-adt/auth-broker 包裹

  • 🏗️ 清洁建筑:

- 通用HTTP/会话逻辑的抽象基类 - 特定于身份验证类型的实现(BaseAbapConnection、JwtAbapConnections、SamlAbapConnection) - 适当的关注点分离——基类中没有JWT逻辑

  • 🔌 实时运输脚手架:

- 通用的 GenericWebSocketTransport 使用可插拔的WS工厂 - 可用于调试器/跟踪和其他事件驱动流

  • 📝 自定义日志记录:可插拔的记录仪接口,可与任何记录仪系统集成
  • 🛠️ CLI工具:参见 JWT身份验证工具 用于获取SAP BTP令牌
  • 📦 TypeScript:完全支持TypeScript,包括类型定义
  • ⚡ 超时管理:不同操作类型的可配置超时

建筑

该包使用了清晰的关注点分离:

  • AbstractAbapConnection (摘要,仅限内部):

- 通用HTTP请求逻辑 - 会话管理(Cookie、CSRF令牌) - 重新尝试CSRF令牌获取 - 身份不可知-对Basic或JWT一无所知

  • BaseAbapConnection (混凝土,出口):

- 基本身份验证实现 - 简单连接()-获取CSRF令牌 - 适用于本地SAP系统

  • JwtAbapConnection (混凝土,出口):

- JWT/OAuth2身份验证实现 - Simple connect()-使用JWT令牌建立连接 - 适用于SAP BTP ABAP环境 - 由身份验证代理包处理的令牌刷新

  • SamlAbapConnection (混凝土,出口):

- 基于会话cookie的身份验证(authType: "saml") - 使用现有的SSO/SAML会话Cookie - 获取CSRF令牌并在相同的HTTP模型中执行ADT请求

  • GenericWebSocketTransport (混凝土,出口):

- 实时WS消息流的传输抽象 - 可插拔的工厂,基于信封的发送/接收 - 用于更高级别的调试器/跟踪会话编排

责任和设计原则

核心开发原则

仅接口通信该方案遵循一个基本的发展原则: 所有与外部依赖关系的交互都只能通过接口进行代码知道 没有超出接口中定义的内容.

这意味着:

  • 不知道其他包中的具体实现类
  • 不了解接口中未定义的内部数据结构或方法
  • 不假设接口契约之外的实现行为
  • 不访问接口中未明确定义的属性或方法

这一原则确保:

  • 松散结合:连接类与其他包中的具体实现解耦
  • 灵活性:可以添加新的实现,而无需修改连接类
  • 可测试性:易于模拟测试依赖关系
  • 可维护性:对实现的更改不会影响连接类

包装责任

该包负责:

  1. 与SAP系统的HTTP通信:通过ADT协议向SAP ABAP系统发出HTTP请求
  2. 身份验证处理:支持基本身份验证和JWT/OAuth2身份验证方法
  3. 会话管理:管理Cookie、CSRF令牌和会话状态
  4. 错误处理:处理HTTP错误和连接问题
这个包有什么作用
  • 提供连接抽象: AbapConnection 与SAP系统交互的界面
  • 处理HTTP请求:使用适当的标头和身份验证向SAP ADT端点发出请求
  • 管理会话:处理Cookie、CSRF令牌和会话状态持久性
此软件包不做什么
  • 未获得令牌:代币获取由以下人员处理 @mcp-abap-adt/auth-providers 和 @mcp-abap-adt/auth-broker
  • 不存储令牌:令牌存储由以下人员处理 @mcp-abap-adt/auth-stores
  • 不刷新令牌:令牌刷新由处理 @mcp-abap-adt/auth-broker
  • 不编排身份验证:令牌生命周期管理由以下人员处理 @mcp-abap-adt/auth-broker
  • 不知道目的地:基于目标的身份验证由消费者处理
  • 不处理OAuth2流:OAuth2流由令牌提供者处理

外部依赖项

此包与外部包交互 仅通过接口:

  • 记录器界面:用途 ILogger 日志记录接口-不了解具体的日志记录器实现
  • 不直接依赖于auth包:所有与令牌相关的操作都是通过配置处理的(SapConfig)通过消费者

文档

特性

  • 🔐 多种身份验证方法:本地系统的基本身份验证,SAP BTP ABAP环境的JWT/OAuth2
  • 💾 会话管理:HTTP通信的会话头管理(Cookie、CSRF令牌)
  • 📝 自定义日志记录:可插拔记录器接口,可与任何日志系统集成(可选)
  • 📦 TypeScript:完全支持TypeScript,包括类型定义
  • ⚡ 超时管理:不同操作类型的可配置超时
  • 🌐 网络错误检测:自动检测和正确处理网络级错误(连接被拒绝、超时、DNS故障)

安装

npm install @mcp-abap-adt/connection

有关详细的安装说明,请参阅 安装指南.

快速开始

基本用途(内部)

import { createAbapConnection, SapConfig } from "@mcp-abap-adt/connection";

const config: SapConfig = {
  url: "https://your-sap-system.com",
  client: "100",
  authType: "basic",
  username: "your-username",
  password: "your-password",
};

// Create a simple logger
const logger = {
  info: (msg: string, meta?: any) => console.log(msg, meta),
  error: (msg: string, meta?: any) => console.error(msg, meta),
  warn: (msg: string, meta?: any) => console.warn(msg, meta),
  debug: (msg: string, meta?: any) => console.debug(msg, meta),
};

// Create connection
const connection = createAbapConnection(config, logger);

// Make ADT request
const response = await connection.makeAdtRequest({
  method: "GET",
  url: "/sap/bc/adt/programs/programs/your-program",
});

云使用情况(JWT/OAuth2)

import { createAbapConnection, SapConfig } from "@mcp-abap-adt/connection";

// JWT configuration
const config: SapConfig = {
  url: "https://your-instance.abap.cloud.sap",
  client: "100", // Optional
  authType: "jwt",
  jwtToken: "your-jwt-token-here", // Obtained via OAuth2 flow
};

const logger = {
  info: (msg: string, meta?: any) => console.log(msg, meta),
  error: (msg: string, meta?: any) => console.error(msg, meta),
  warn: (msg: string, meta?: any) => console.warn(msg, meta),
  debug: (msg: string, meta?: any) => console.debug(msg, meta),
};

// Logger is optional - if not provided, no logging output
const connection = createAbapConnection(config, logger);

// Note: Token refresh is handled by @mcp-abap-adt/auth-broker package
const response = await connection.makeAdtRequest({
  method: "GET",
  url: "/sap/bc/adt/programs/programs/your-program",
});

SSO使用(SAML会话Cookie)

import { createAbapConnection, SapConfig } from "@mcp-abap-adt/connection";

const config: SapConfig = {
  url: "https://your-sap-system.com",
  authType: "saml",
  sessionCookies: "MYSAPSSO2=...; SAP_SESSIONID=...",
};

const connection = createAbapConnection(config, logger);
const response = await connection.makeAdtRequest({
  method: "GET",
  url: "/sap/bc/adt/programs/programs/your-program",
});

自动令牌刷新的云使用情况

对于401/403错误的自动令牌刷新,请注入 ITokenRefresher:

import { JwtAbapConnection, SapConfig } from "@mcp-abap-adt/connection";
import type { ITokenRefresher } from "@mcp-abap-adt/interfaces";

// Token refresher provides token acquisition and refresh
// (created by @mcp-abap-adt/auth-broker or custom implementation)
const tokenRefresher: ITokenRefresher = {
  getToken: async () => { /* return current token */ },
  refreshToken: async () => { /* refresh and return new token */ },
};

// JWT configuration
const config: SapConfig = {
  url: "https://your-instance.abap.cloud.sap",
  authType: "jwt",
  jwtToken: await tokenRefresher.getToken(), // Get initial token
};

// Create connection with token refresher - 401/403 handled automatically
const connection = new JwtAbapConnection(config, logger, undefined, tokenRefresher);

// Requests automatically retry with refreshed token on auth errors
const response = await connection.makeAdtRequest({
  method: "GET",
  url: "/sap/bc/adt/programs/programs/your-program",
});

有意义的会议

对于需要会话状态的操作(例如,对象修改),您可以启用有状态会话:

import { createAbapConnection } from "@mcp-abap-adt/connection";

const connection = createAbapConnection(config, logger);

// Enable stateful session mode (adds x-sap-adt-sessiontype: stateful header)
connection.setSessionType("stateful");

// Make requests - SAP will maintain session state
await connection.makeAdtRequest({
  method: "POST",
  url: "/sap/bc/adt/objects/domains",
  data: { /* domain data */ },
});

// Note: Session state persistence is handled by @mcp-abap-adt/auth-broker package

自定义记录器

import { ILogger } from "@mcp-abap-adt/connection";

class MyLogger implements ILogger {
  info(message: string, meta?: any): void {
    // Your logging implementation
  }

  error(message: string, meta?: any): void {
    // Your logging implementation
  }

  warn(message: string, meta?: any): void {
    // Your logging implementation
  }

  debug(message: string, meta?: any): void {
    // Your logging implementation
  }

  csrfToken(action: "fetch" | "retry" | "success" | "error", message: string, meta?: any): void {
    // CSRF token specific logging
  }

  tlsConfig(rejectUnauthorized: boolean): void {
    // TLS configuration logging
  }
}

const logger = new MyLogger();
const connection = createAbapConnection(config, logger);

CLI工具

该软件包包括一个CLI工具,用于使用服务密钥与SAP BTP进行身份验证:

安装选项

  • 本地项目安装
  npm install @mcp-abap-adt/connection --save-dev
  npx sap-abap-auth auth -k path/to/service-key.json
  • 全局安装
  npm install -g @mcp-abap-adt/connection
  sap-abap-auth auth -k path/to/service-key.json
  • 按需(npx)
  npx @mcp-abap-adt/connection sap-abap-auth auth -k path/to/service-key.json

用法

# Show help
sap-abap-auth --help

# Authenticate with service key
sap-abap-auth auth -k service-key.json

# Specify browser
sap-abap-auth auth -k service-key.json --browser chrome

# Custom output file
sap-abap-auth auth -k service-key.json --output .env.production

选项

  • `-k, --key

` -服务密钥JSON文件的路径(必需)

  • -b, --browser -要打开的浏览器(chrome、edge、firefox、system、none)
  • `-o, --output

` -输出.env文件的路径(默认值:.env)

  • -h, --help -显示帮助消息

使用via npx (无全局安装)

如果 @mcp-abap-adt/connection 如果项目中列出了依赖项,则可以直接调用CLI:

npx sap-abap-auth auth -k service-key.json

即使您没有全局安装该软件包,这也能正常工作。对于一次性使用,您还可以运行:

npx @mcp-abap-adt/connection sap-abap-auth auth -k service-key.json

这将按需下载包并执行CLI。

API 参考

类型

SapConfig

SAP ABAP连接的配置。

type SapConfig = {
  url: string;
  client?: string;
  authType: "basic" | "jwt" | "saml";
  // For basic auth
  username?: string;
  password?: string;
  // For JWT auth
  jwtToken?: string;
  // For SAML session cookies
  sessionCookies?: string;
};
AbapConnection

ABAP连接的主界面。

interface AbapConnection {
  makeAdtRequest(options: AbapRequestOptions): Promise;
  reset(): void;
  setSessionType(type: "stateless" | "stateful"): void; // Switch session type
  getSessionMode(): "stateless" | "stateful"; // Get current session mode
  getSessionId(): string | null; // Get current session ID
}

会话管理:

  • setSessionType(type):以编程方式在有状态和无状态模式之间切换
  • getSessionMode():返回当前会话模式
  • getSessionId():返回当前会话ID(自动生成的UUID)
ILogger

用于自定义日志记录实现的记录器接口。

interface ILogger {
  info(message: string, meta?: any): void;
  error(message: string, meta?: any): void;
  warn(message: string, meta?: any): void;
  debug(message: string, meta?: any): void;
  csrfToken?(action: "fetch" | "retry" | "success" | "error", message: string, meta?: any): void;
  tlsConfig?(rejectUnauthorized: boolean): void;
}

函数

createAbapConnection(config, logger?, sessionId?)

创建ABAP连接实例的工厂函数。

function createAbapConnection(
  config: SapConfig,
  logger?: ILogger | null,
  sessionId?: string
): AbapConnection;
CSRF_CONFIG 和 CSRF_ERROR_MESSAGES

0.1.13+中的新功能: 导出常量,用于跨不同连接实现进行一致的CSRF令牌处理。

import { CSRF_CONFIG, CSRF_ERROR_MESSAGES } from '@mcp-abap-adt/connection';

// CSRF_CONFIG contains:
// - RETRY_COUNT: number (default: 3)
// - RETRY_DELAY: number (default: 1000ms)
// - ENDPOINT: string (default: '/sap/bc/adt/core/discovery')
// - REQUIRED_HEADERS: { 'x-csrf-token': 'fetch', 'Accept': 'application/atomsvc+xml' }

// CSRF_ERROR_MESSAGES contains:
// - FETCH_FAILED(attempts: number, cause: string): string
// - NOT_IN_HEADERS: string
// - REQUIRED_FOR_MUTATION: string

使用案例: 在实现自定义连接类(例如基于Cloud SDK)时,您可以使用这些常量来确保一致的CSRF令牌处理:

import { CSRF_CONFIG, CSRF_ERROR_MESSAGES } from '@mcp-abap-adt/connection';

async function fetchCsrfToken(baseUrl: string): Promise {
  const csrfUrl = `${baseUrl}${CSRF_CONFIG.ENDPOINT}`;
  
  for (let attempt = 0; attempt  setTimeout(resolve, CSRF_CONFIG.RETRY_DELAY));
          continue;
        }
        throw new Error(CSRF_ERROR_MESSAGES.NOT_IN_HEADERS);
      }
      
      return token;
    } catch (error) {
      if (attempt >= CSRF_CONFIG.RETRY_COUNT) {
        throw new Error(
          CSRF_ERROR_MESSAGES.FETCH_FAILED(
            CSRF_CONFIG.RETRY_COUNT + 1,
            error instanceof Error ? error.message : String(error)
          )
        );
      }
      await new Promise(resolve => setTimeout(resolve, CSRF_CONFIG.RETRY_DELAY));
    }
  }
}

看 PR提案 了解更多详情。

需求

  • Node.js>=18.0.0
  • 访问SAP ABAP系统(内部部署或BTP)

更新日志

看 更改日志.md 查看详细的版本历史和突破性更改。

最新版本:0.2.0

  • 已删除令牌刷新功能(由处理 @mcp-abap-adt/auth-broker)
  • 已删除会话存储功能(由处理 @mcp-abap-adt/auth-broker)
  • 记录器现在是可选的
  • 看 更改日志.md 有关完整详细信息

文档

许可证

麻省理工学院

仓库

https://github.com/fr0ster/mcp-abap-adt

相关项目

工具与能力

工具数量

1

资源数量

0

提示词数量

0

能力标签

ABAP开发TypeScript本地部署SAP连接认证管理会话管理

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

看服务状态

查询容器、日志和监控指标,定位异常。

执行部署变更

在权限范围内触发发布、回滚和环境切换。

核对资源用量

汇总用量,找出闲置和超额的部分。

选择建议

值得选的地方

  • 只提供 1 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 Node.js,换机器要重新装一遍。
  • 需要自备访问 Token,没有凭据没法直接试。
  • 公开摘要偏短,具体能力和限制要回到仓库确认。

更适合

  • 需要在运维云端场景里让模型直接调用外部能力的人。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到访问 Token的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
MCP Abap Connection

MCP World · 本页

1stdio有1 个2026-05-17
Ui Tars Desktop 8a825770

MCP World

0stdio有1 个2026-05-17
Elie222 MCP

MCP World

0未说明未标注1 个2026-05-17
Arizeai Phoenix MCP

MCP World

0stdio有3 个2026-05-17
Unity MCP 87ee506e

MCP World

42HTTP有2 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

MCP Abap Connection 怎么安装?

公开资料给出的安装命令是 npx sap-abap-auth auth -k path/to/service-key.json,运行环境为 Node.js。装完后按客户端要求写进 MCP 配置,重启客户端生效。

MCP Abap Connection 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 Node.js;保存后完全退出客户端再打开,配置才会生效。

MCP Abap Connection 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

MCP Abap Connection 需要 API Key 吗?

公开资料标注的认证方式是访问 Token,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

MCP Abap Connection 支持哪些客户端?

公开资料没有标注具体客户端;能配置本地 MCP 命令的客户端都能接,配置方式参照官方文档。

来源信息

继续浏览同类 MCP