把 Claude Code 的模型通道指向 TaoToken 之后,VS Code 里的 ABAP MCP Server 就能建 ZCL_SORT_TOOL
2026/9/18 23:17:16 网站建设 项目流程

Claude Code 写 ABAP 时 AI 看不到包结构。TaoToken https://taotoken.net/?utm_source=taotoken_aicg_blog_end 把模型通道统一之后,这件事的解法反而清楚了:模型负责理解与生成,SAP 官方 ABAP MCP Server 负责把远端开发系统的真实上下文递过来。这套三件套——VS Code、MCP Server、Claude Code——本身不新鲜,麻烦的从来不是装扩展,而是两段配置:一段是把 Claude Code 的模型通道指向一个能长期用的入口,另一段是在 VS Code 里勾上 Enable ADT MCP Server,并让 Claude Code 认识那个叫 adt-official 的本地 MCP 服务。

我按实际配的顺序写一遍。前半段解决「模型从哪里出」,后半段解决「上下文从哪里来」,两段都通了之后,才能在远端开发系统里真的建出 ZCL_SORT_TOOL,并让它跑一遍单元测试。中间穿插几个我踩过的坑,尤其是端口 2236 和模型 ID 这两处,配错了现象很迷惑人。

1. VS Code 里的 ABAP 工程,Claude Code 隔着一层什么

1.1 远端开发系统和本地工作区之间的信息断层

在 VS Code 里打开的 ABAP 项目,代码本体存在远端开发系统(dev client)上,本地那一份更像是 ADT 拉过来的镜像。你能在编辑器里跳转、能看语法高亮,是因为 ADT 在替你翻译。而 Claude Code 跑在本地终端里,它读到的只是你打开的那几个 .abap 文件文本,读不到包层级结构、读不到 $TMP 里的临时对象、读不到某个类挂在哪个传输请求下,也读不到语法检查的具体报错行。

结果就是你在对话框里说「照着 ZCL_XXX 再写一个排序工具类」,它给出来的方法签名、参数命名、异常处理风格,很可能和你们包里的既有约定对不上。你越补提示词,它越像在猜,因为缺的那部分信息根本不在它的上下文里,你再怎么描述也只是转述。

1.2 换更大的模型也补不上 ADT 的上下文

这地方特别容易误判。现象是「AI 写出来的 ABAP 不太对」,第一反应往往是模型不够聪明,于是换个更强的模型再来一次。换完之后你会发现,它对 ABAP 语法确实更熟了,但它依然不知道你的传输请求号,也不知道激活时是哪一行报的错。问题不在语言能力,在上下文来源。

SAP 官方 VS Code 扩展里带了一个 ADT MCP Server,它做的事情就是把 ADT 的能力包装成 MCP 工具暴露出来,让本地跑的 AI 客户端通过一个本地端口去调用。开启它之后,Claude Code 就能自己去查包结构、去看语法检查结果、去触发激活,而不是全靠你在提示词里手打。

提示:MCP Server 是跟着 VS Code 扩展进程跑的,VS Code 窗口一关,本地那个服务就没了。别在关掉编辑器的终端里排查「为什么连不上 MCP」。

2. 先把 Claude Code 的模型通道指到 TaoToken

2.1 创建 Key 并确认模型 ID

这一步和 ABAP 没关系,但它是后面所有事情的前提。打开 TaoToken 注册并登录,进控制台创建一把 API Key。Key 值一般只在创建时完整显示一次,复制出来先放到安全的地方,别等配到一半再回去找。

接着去模型广场挑一个适合写代码的模型,把模型 ID 原样复制下来。这里有个硬性要求:模型 ID 以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 模型广场当时列表为准,不要自己拼版本号,也不要凭记忆写一个带日期后缀的名字。文档里没有的 ID,填进去只会换来一个模型不存在的报错。

2.2 写进 ~/.claude/settings.json 的 env 段

Claude Code 读的是配置文件里的 env 块,最稳的写法是直接改~/.claude/settings.json

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "以模型广场当时列表为准" } }

几个容易写错的地方:Base URL 填https://taotoken.net/api,末尾不要加/v1;Token 用你刚创建的 Key 替换掉YOUR_API_KEY这个占位符;模型 ID 那一行换成你从模型广场复制出来的真实值。JSON 的引号和逗号也要留意,多一个逗号 Claude Code 可能直接忽略整段 env,然后你会在排障时怀疑人生。

2.3 不想动配置文件就导出环境变量

临时试一下、或者在容器里跑的时候,用环境变量更快:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="以模型广场当时列表为准"

想长期生效就写进~/.zshrc~/.bashrc,再重开一个终端。注意一点:配置文件的 env 和环境变量不要同时生效,否则你会分不清到底哪一份在起作用,出问题的时候没法二分定位。改完用claude起一个新会话,让它随便说点什么,能正常回话就说明模型通道这一段通了。

2.4 换模型通道和 MCP 注册是两件独立的事

很多人把这两件事混在一起调,结果越调越乱。模型通道决定的是「Claude Code 的请求发到哪里」,MCP 注册决定的是「Claude Code 能调用哪些本地工具」。前者错了,你会看到鉴权失败或模型不存在;后者错了,你会看到工具列表是空的。它们互不影响,所以配置也应该分开验证:先确认 Claude Code 能正常对话,再去折腾 adt-official。

把 Claude Code 挂到统一入口上的好处也在这里——以后换模型、换额度方案,只动 env 那三行,.claude.json里那套 MCP 配置一个字都不用改。

3. 勾上 Enable ADT MCP Server 并注册 adt-official

3.1 扩展侧的开关和本地 2236 端口

在 VS Code 设置里搜 ABAP,找到Enable ADT MCP Server,勾上。勾完之后扩展会在本地起一个监听服务,端口是 2236,Claude Code 接下来要连的就是它。这一步做完先别急着配客户端,确认一下 VS Code 窗口是开着的、连的 ABAP 项目是你要开发的那个开发系统,而不是随手连上的别的环境。

如果你的公司环境有本地端口管控,2236 被占用或被拦的情况也是有的。表现是扩展看起来勾上了,但客户端死活连不上,后面第 5 节会讲怎么判断。

3.2 在 .claude.json 里加入 adt-official

MCP 服务注册写在~/.claude.json(项目级可以放.claude.json.mcp.json,看你的版本约定)里,加一段 mcpServers:

{ "mcpServers": { "adt-official": { "type": "http", "url": "http://127.0.0.1:2236/mcp" } } }

名字保持adt-official,一是和原文、扩展提示里的叫法一致,二是以后你再加别的 MCP Server 时不容易混。地址里的路径部分,以扩展输出面板里给出的 endpoint 提示为准,有的版本会带/sse之类的后缀,照抄即可,不要凭感觉改。这里填的是本地回环地址,不是远端 ABAP 系统的地址,也不是模型通道的地址,三者别搞混。

3.3 重启会话,用 /mcp 看连接状态

配置改完必须重启 Claude Code 会话,热加载不生效。新会话里敲/mcp,能看到adt-official显示 connected,工具列表里出现若干和 ADT 相关的条目,这段才算通了。如果它显示 failed、或者一直卡在 connecting,先别怀疑配置写错,八成是 VS Code 那边的问题,按第 5 节的顺序排。

提示:先claude单独跑一次确认模型通道正常,再开 VS Code 跑 MCP,两段分开验,出错时能立刻定位到是哪一半。

4. 让 Claude Code 建出 ZCL_SORT_TOOL 的完整回合

4.1 第一句话别要代码,先要上下文

通道打通之后,最容易犯的错是上来就说「帮我写一个排序工具类」。这时候它对包结构一无所知,写出来的东西照样对不上。正确的起手是先让它做侦察:读一下目标包下已有的类清单、看看命名规范、确认当前开发系统里有没有可用的传输请求。

一段可以照着改的提示词:

先用 adt-official 读取开发系统里 Z 开头的工具类清单,重点看和排序、转换相关的类, 总结它们的命名规范和异常处理方式。然后告诉我:如果要新建一个排序工具类, 应该放在哪个包里、挂到哪个传输请求下。先不要写代码。

这几句的作用是把 ADT 里的真实信息拉进对话,后面生成的代码才有参照。

4.2 生成骨架,激活和单测由工具链接住

上下文到位之后,再让它出 ZCL_SORT_TOOL 的骨架就靠谱多了:

CLASS zcl_sort_tool DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES: BEGIN OF ty_item, key TYPE string, value TYPE string, END OF ty_item. TYPES ty_items TYPE STANDARD TABLE OF ty_item WITH EMPTY KEY. METHODS sort_by_key IMPORTING it_items TYPE ty_items RETURNING VALUE(rt_items) TYPE ty_items. ENDCLASS. CLASS zcl_sort_tool IMPLEMENTATION. METHOD sort_by_key. rt_items = it_items. SORT rt_items BY key. ENDMETHOD. ENDCLASS.

骨架出来之后,让 Claude Code 通过 MCP 触发语法检查,再让它生成一个对应的单元测试类,跑一遍FOR TESTING的方法。激活这一步的边界要说清楚:MCP 面向的是开发系统,创建对象、跑检查、触发激活都可以在开发系统里做;但传输请求的释放、往测试系统或生产系统推,仍然要你自己在 ADT 或 STMS 里人工确认。不要让任何自动化流程指向生产系统,这条线守住了,后面怎么折腾都不会出大事。

4.3 一次会话怎么收尾

一个完整的回合大致是:读上下文 → 生成骨架 → 语法检查 → 修掉报错 → 生成单测 → 跑单测 → 激活。每跑到一个卡点就停下来看一眼输出,不要一口气让它做六件事再回头看结果。单测失败的时候,把报错原文贴回对话里让它自己改,比你用自然语言描述「好像有点问题」有效得多。

5. adt-official 连不上、401 和模型名报错的排查顺序

5.1 端口 2236 上什么都没有

/mcp显示 connecting 卡住,或者直接 failed,第一件事是回到 VS Code 确认三样东西:窗口还开着、ABAP 项目连上的是开发系统、Enable ADT MCP Server 是勾选状态。三样都对还连不上,就去看扩展的输出面板,里面会写它到底监听到了哪个地址和路径,照着改.claude.json里的 url。

本地端口被别的程序占了也会是这个现象。有条件的话换个端口再试,或者先关掉占用 2236 的进程。

5.2 401 和「模型不存在」分别是谁的问题

这两个报错指向完全不同的地方,别混着查。401 是鉴权问题,说明请求已经到了统一入口但 Key 不对——回去确认ANTHROPIC_AUTH_TOKEN是不是完整的 Key、有没有混进空格或换行,Key 也可以在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 控制台里重新生成一把再试。

「模型不存在」是模型 ID 写错了。回到模型广场,把 ID 完整复制一遍替换进去,不要手打。还有一种情况是 Base URL 末尾多写了/v1,路径拼出来变成两层,表现为 404 或者奇怪的路径错误,去掉就好。

5.3 改了配置却还在报旧通道的错

环境变量和配置文件同时存在时,优先级容易让人困惑。查一遍env | grep ANTHROPIC看看当前 shell 里有没有残留的旧变量,有就 unset 掉再重启会话。另外 Claude Code 有时会复用旧的会话状态,改完配置记得开新会话,别在原会话里反复试。

6. 跑通之后,去控制台对一下这次 ABAP 会话的消耗

ZCL_SORT_TOOL 建出来、单测跑绿之后,建议回控制台确认一下这次会话的调用有没有正常记账。先去 TaoToken 模型对话 用同一把 Key 发一条测试消息,验证模型 ID 和 Base URL 都没填错;如果你打算长期用 Claude Code 写 ABAP,可以顺手打开 Coding Plan 看看套餐是否够用;Key 的管理和重新生成都在 控制台 API Keys;环境变量和配置文件的完整字段说明,对照 Claude Code 接入文档 更省事。

最后留一句实际体会:这套东西真正的分界线不在模型通道,而在 MCP 那一侧。模型通道配错,现象是干脆不能用;MCP 配错,现象是「好像能用但结果不对」,后者更容易让人在错误的方向上耗时间。分两段验证、每段都有明确的成功标志,比一次性全配完再排障快得多。

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

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

立即咨询