☰
vibing-steampunk 工程链路配置:用 TaoToken 统一 Key 打通 Claude Code、SAP ADT、ABAP Cloud 与 HANA
2026/9/26 13:21:28 网站建设 项目流程

1. 为什么 SAP 开发者需要一条统一的 AI 工程链路

如果你同时写 ABAP、调 CDS、偶尔还要看 HANA 侧的执行计划,大概率经历过这种割裂:Claude Code 在终端里帮你改 TypeScript 脚本,切到 Eclipse ADT 又要手动搜类、改方法、跑语法检查、激活、看 ATC,再切到 HANA Studio 或 Database Explorer 查 SQL。工具之间没有共享上下文,AI 助手也够不到 SAP 系统里的真实对象。

vibing-steampunk(核心程序叫vsp)想解决的就是这件事。它是一个 ADT ↔ MCP Bridge:把 SAP ADT 的/sap/bc/adt/*接口封装成 MCP 工具,让 Claude Code 这类 coding agent 通过标准 JSON-RPC 调用,完成读代码、改方法、语法检查、激活、跑 ABAP Unit、查 CDS 依赖、看传输历史等动作。它不是 ABAP 示例仓库,而是面向 SAP 系统的 AI Agent 开发网关。

但这里有个现实问题:Claude Code 本身要连模型,vsp 要连 SAP,两条链路各有各的 Key 和配置。如果模型侧用一家、SAP 侧再维护一套凭据,配置会散落在settings.json、.mcp.json、.env好几个文件里。这篇就按“统一 Key + 统一配置骨架”的思路,把 Claude Code、SAP ADT、ABAP Cloud、HANA 这条链路一次性串起来。适合已经在用 Claude Code、手上有 DEV 或 BTP ABAP 环境、想跑通 MCP 接入的 SAP 开发者。

2. TaoToken 前置:统一模型侧 Key 与接入地址

在整条链路里,TaoToken 承担的是模型侧统一入口的角色。Claude Code 需要调用大模型来完成代码理解和生成,TaoToken 提供兼容的 API 地址和 Key,这样你不需要在多个模型供应商之间来回切换配置。SAP 侧的 ADT 连接仍然走你自己的系统凭据,两者职责分开,配置才不会互相污染。

先把模型侧的信息准备好:

  • 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • API 基地址:https://taotoken.net/api
  • 控制台(创建和管理 Key):https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
  • API Keys 管理页:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
  • 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

注意:API 基地址https://taotoken.net/api后面不加 UTM 参数,直接作为base_url使用即可。Key 只在控制台生成,不要写进会提交到 Git 的文件里。

如果你后面要长期跑编码任务或 Agent 流程,可以了解 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。只是想先验证模型通不通,用模型对话页更快:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 。

3. 可复制配置:settings.json 与 config.toml 骨架

这一节是全文的核心。整条链路分两层配置:Claude Code 的模型侧配置,和 vsp 的 SAP 侧配置。先建目录,再分别落文件。

3.1 目录结构约定

建议在项目根目录下这样组织,避免配置散落:

vibing-steampunk-demo/ ├── .claude/ │ └── settings.json ├── .vsp/ │ ├── config.toml │ └── cookies.txt # 仅 cookie 认证时需要 ├── .mcp.json └── .env # 本地凭据,务必加入 .gitignore

.gitignore至少包含:

.env .vsp/cookies.txt .vsp/config.toml

3.2 Claude Code 的 settings.json

Claude Code 通过环境变量读取模型侧配置。把 TaoToken 的地址和 Key 写进settings.json的env段:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-5-haiku-20241022" }, "permissions": { "allow": [ "mcp__vsp__search", "mcp__vsp__read_source", "mcp__vsp__syntax_check" ], "deny": [ "mcp__vsp__delete_object" ] } }

这里permissions.allow只放只读和检查类工具,写入类工具先不放开,等只读链路验证通过再逐步加。ANTHROPIC_MODEL按你实际可用的模型名填,不要照抄。

3.3 vsp 的 config.toml

vsp 的 SAP 侧配置放在config.toml。下面是一个 basic auth 场景的骨架,字段名以你本地vsp config init生成的示例为准:

[sap] url = "https://your-dev-system.example.com:44300" client = "100" language = "ZH" auth_type = "basic" [sap.basic] user = "YOUR_DEV_USER" password = "YOUR_DEV_PASSWORD" [server] mode = "focused" read_only = true allowed_packages = ["$ZAI_SANDBOX", "$ZSD_EXT_AI"] allowed_ops = ["read", "search", "syntax_check", "unit_test"] [logging] level = "info" file = ".vsp/vsp.log"

几个关键点必须说清楚:

  • url是能访问/sap/bc/adt的 Web 地址,从 Fiori Launchpad 或浏览器地址栏拿,不是SAP Logon 里的 message server 或 group server。
  • client是 SAP 客户端号,三位数字。
  • read_only = true是第一道防线,先只读跑通。
  • allowed_packages限定 agent 能碰的包,别一上来就给$TMP之外的正式包。

3.4 .mcp.json 把 vsp 注册给 Claude Code

Claude Code 通过.mcp.json发现 MCP server:

{ "mcpServers": { "vsp": { "command": "/usr/local/bin/vsp", "args": ["serve", "--config", ".vsp/config.toml"], "env": { "SAP_URL": "https://your-dev-system.example.com:44300", "SAP_USER": "YOUR_DEV_USER", "SAP_PASSWORD": "YOUR_DEV_PASSWORD" } } } }

command换成你本地 vsp 二进制的实际路径,Windows 下是vsp.exe的完整路径。env里的凭据也可以只放.env再被 shell 加载,避免明文进 JSON。

4. 验证请求:从连接测试到一次真实读取

配置写完不能直接让 agent 改代码,先分层验证。我一般按“连接层 → 授权层 → 读取层 → 写入层”四步走。

4.1 连接层:确认 ADT 端点可达

先单独跑 vsp 的连接测试,不经过 Claude Code:

vsp -s dev search 'zcl_*' --type CLAS --max 50

如果返回对象列表,说明 HTTPS、证书、认证都通了。如果报连接超时,先确认url是不是 Web 地址,再确认网络能到该主机的 44300 端口。

4.2 授权层:确认用户权限够用

用同一个用户跑一次语法检查,确认有 repository 读权限和检查权限:

vsp -s dev syntax-check 'ZCL_PR_APPROVAL_STATUS' --type CLAS

返回检查结果(哪怕有 warning)就说明授权层没问题。如果报 403,去 SAP 侧确认用户角色里有没有 ADT 相关授权。

4.3 读取层:让 Claude Code 通过 MCP 读真实代码

启动 Claude Code,在会话里发一条只读请求:

用 vsp 的 search 工具找 ZCL_PR_APPROVAL_STATUS,然后读取它的源码, 只输出方法签名列表,不要修改任何东西。

Claude Code 会调用mcp__vsp__search和mcp__vsp__read_source。如果它能准确列出方法签名,说明 MCP 链路通了。这一步是整个配置的验收点。

4.4 写入层:在 sandbox 包做一次最小修改

只读稳定后,把read_only改成false,allowed_ops加上edit,但allowed_packages仍然只留 sandbox 包。然后让 agent 改一个方法内部逻辑:

在 $ZAI_SANDBOX 包里,把 ZCL_PR_APPROVAL_STATUS 的 get_status_text 方法 里 'Pending' 改成 'In Approval',改完跑语法检查和 ABAP Unit。

vsp 的 EditSource 工作流会匹配 old string、确认唯一性、语法检查、lock、update、unlock、activate。返回激活成功和测试结果,写入层就算跑通了。

5. 本篇常见错排查

配置这条链路时,报错基本集中在下面几类。我把踩过的坑按现象、原因、动作整理成表,方便对照。

现象可能原因排查动作
连接超时 / connection refusedurl填成了 message server 或 group server换成浏览器里 Fiori Launchpad 的 Web 地址,确认端口
401 Unauthorized用户名密码错,或 client 号不对核对client三位数,确认用户未被锁定
403 Forbidden用户缺 ADT 授权在 SAP 侧补 ADT 相关角色,重跑 syntax-check
MCP server 未启动.mcp.json里 command 路径错用绝对路径,Windows 下确认.exe后缀
Claude Code 看不到 vsp 工具.mcp.json没被加载重启 Claude Code,确认文件在项目根目录
语法检查报 ABAP SQL 语法错agent 用了标准 SQL 写法明确告诉它用 ABAP SQL,ORDER BY col DESCENDING而非DESC,限行用max_rows而非LIMIT
激活失败提示对象被锁对象已在开放 transport 里先释放或切换 transport,再重试
写入被拒allowed_packages没包含目标包把目标包加进白名单,或换到 sandbox 包测试

几个补充提醒。第一,SAP_URL和SAP_USER这类环境变量如果同时在.env和.mcp.json里出现,以进程实际加载的为准,排查时先确认哪个生效。第二,cookie 认证场景下cookies.txt会过期,报 401 时先重新导出。第三,BTP ABAP environment 用的是__VCAP_ID__和JSESSIONID,和 on-premise 的 cookie 名不一样,别混用。

如果排障时不确定模型侧配置对不对,可以先用模型对话页单独验证 Key 是否可用:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 。确认模型侧没问题,再回头查 SAP 侧。

6. 把链路固定下来:权限、审计与后续接入

链路跑通只是开始,真正决定它能不能长期用的是边界设计。我的建议是把配置分成三档环境:sandbox 允许读写、DEV 只读加白名单写、QAS 和生产只读。read_only、allowed_packages、allowed_ops、allowed_transports这几个开关就是你的防线,别嫌麻烦。

审计方面,把logging.file指向固定路径,定期看 agent 到底调了哪些工具、改了哪些对象。涉及表数据读取的操作,强制max_rows,业务数据输出做脱敏。这些纪律固化进 prompt 模板,比事后追责有用得多。

后续如果你要把这条链路接到更多工具,模型侧继续用 TaoToken 统一 Key 就行,新工具只要读同一套环境变量。Key 管理和文档都在控制台和接入文档里:

  • API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
  • 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
  • 长期编码 / Agent 流程:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

Claude Code 侧如果要接 Anthropic 兼容的编码工作流,可以参考:https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claude-code&utm_campaign=rewrite 。把模型侧和 SAP 侧分开治理,这条 vibing-steampunk 工程链路才能既跑得快,又不失控。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询