ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

让 Claude Code 和 ABAP 系统真正协作起来:MCP Tools 在 ABAP 落地时把 endpoint 改到 TaoToken

让 Claude Code 和 ABAP 系统真正协作起来:MCP Tools 在 ABAP 落地时把 endpoint 改到 TaoToken 1. ABAP 开发者用 Claude Code 接 MCP 时为什么总卡在 401 和 local proxy failed如果你正在用 Claude Code 配合 ADT MCP Server 做 ABAP 开发大概率遇到过这个场景MCP server 本身能启动abap_lists_destinations也能返回 DEV 系统的 destination但一旦让 Claude Code 去调用模型做工具编排就报401 Unauthorized或者local proxy failed。这不是 ABAP 侧的问题也不是 ADT MCP Server 的 bug而是模型调用通道和 MCP 工具通道被混在了一条链路上。先把链路拆清楚。Claude Code 作为 MCP host它做两件事一是通过 stdio 或 HTTP 连接本地 MCP server让 server 暴露abap_creation-create_object、abap_activate_objects、abap_run_atc这些 tools二是把 tools/list 的结果和用户意图发给背后的 LLM让模型决定调哪个 tool、传什么参数。第一条链路走的是本机进程通信第二条链路走的是模型 API。很多人配置时只改了 MCP server 的 endpoint忘了 Claude Code 自己还有一个独立的模型 endpoint 和鉴权字段结果 MCP 工具能列出来模型请求却打到了错误的地址于是 401 和 local proxy failed 就出现了。local proxy failed这个报错尤其有迷惑性。它通常出现在 Claude Code 尝试通过本地代理转发模型请求、但代理目标不可达或鉴权失败的时候。你以为是 MCP server 挂了其实 MCP server 好好的是模型通道的 Base URL 指向了一个本地不存在的代理端口或者指向了一个需要特定 Key 但没配的服务。ABAP 开发者习惯在 ADT 里配 destination对 HTTP 代理和 API Key 这套东西相对陌生所以这类错误在 ABAP Claude Code 的组合里特别高频。这篇要解决的就是这条分离链路MCP server 继续负责 ADT 工具调用模型调用通道单独指向 TaoToken两边各配各的互不干扰。下面给出 MCP server 配置片段、Claude Code 侧 endpoint 与鉴权字段的可复制改法最后用一次 ABAP 类读取请求验证工具调用是否真正贯通。适合正在做 RAP、CDS、ATC 相关开发、想把 Claude Code 接进 ABAP 工具链的开发者。2. 前置准备TaoToken 在 ABAP MCP 链路里扮演什么角色在动手改配置之前先把 TaoToken 在这条链路里的位置说清楚不然后面配的时候容易又混回去。TaoToken 在这里承担的是模型调用通道也就是 Claude Code 背后那个 LLM 的 API 入口。它不碰 ADT不碰 ABAP backend也不替代 MCP server。MCP server 依然通过 ADT 连你的 DEV 系统TaoToken 只负责让 Claude Code 能稳定地拿到模型响应。为什么要把模型通道单独拎出来指向 TaoToken因为 Claude Code 默认的模型 endpoint 在某些网络环境下不稳定或者需要额外的鉴权配置而 ABAP 开发场景里我们更希望模型通道是一个可控、可切换、Key 管理清晰的入口。TaoToken 提供的就是这样一个入口一个 Base URL一个 API Key加上你要用的 Model ID三件套配好Claude Code 的模型请求就走这条通道和 MCP 工具通道彻底解耦。你需要准备的东西不多。第一是 TaoToken 的 API Key在控制台的 API Keys 页面创建地址是 https://taotoken.net/api-keys 。第二是确认你要用的 Model IDClaude Code 场景下通常选 Claude 系列模型具体可用的模型列表可以在模型对话页面确认 https://taotoken.net/models 。第三是本地 ADT MCP Server 已经能正常启动abap_lists_destinations能返回你 DEV 系统的 destination这一步是 ABAP 侧的前置和 TaoToken 无关但必须确认否则后面验证时会分不清是模型通道的问题还是 ADT 通道的问题。这里有个容易踩的坑有人把 TaoToken 的 Base URL 直接填进了 MCP server 的配置里以为这样 MCP 工具调用也会走 TaoToken。这是错的。MCP server 连的是 ADT endpoint不是模型 API。TaoToken 的 Base URL 只应该出现在 Claude Code 的模型配置里。两边配置字段名很像都是 Base URL Key但语义完全不同填错位置就是 401 的常见来源。另外提醒一点TaoToken 的 API 地址是 https://taotoken.net/api 这个地址不加任何查询参数直接作为 Base URL 使用。控制台、文档、模型列表这些页面地址是给人看的不要填进配置。配置里只认 API 地址。3. 可复制配置MCP server 片段与 Claude Code endpoint 改法这一节是核心给出可以直接复制的配置。分两部分MCP server 侧保持不动Claude Code 侧改模型通道。先看 MCP server 的配置以常见的mcp.json或 Claude Code 的 MCP 配置为例ABAP ADT MCP Server 通常这样配{ mcpServers: { abap-adt: { command: npx, args: [ -y, sap/adt-mcp-server ], env: { ADT_DESTINATION: DEV_100, ADT_BASE_URL: https://your-abap-dev-host:44300, ADT_CLIENT: 100, ADT_USER: your_abap_user, ADT_PASSWORD: your_abap_password } } } }这段配置里没有任何模型相关的字段它只负责让 MCP server 连上 ABAP DEV 系统。ADT_DESTINATION是你在 ADT 里配好的 destination 名称ADT_BASE_URL是 ABAP 系统的 ADT 入口端口通常是 44300 或 8000取决于你的系统配置。这部分配好后Claude Code 应该能列出abap_lists_destinations、abap_creation-get_all_creatable_objects这些 tools。接下来是 Claude Code 侧的模型通道配置。Claude Code 的模型配置通常在~/.claude/settings.json或项目级的.claude/settings.json里关键是env段里的三个字段{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-your-taotoken-api-key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }这三个字段就是三件套Base URL 指向 TaoToken 的 API 地址AUTH_TOKEN 填你在 TaoToken 控制台创建的 API KeyMODEL 填你要用的 Model ID。注意ANTHROPIC_BASE_URL后面不要加/v1或其他路径TaoToken 的 API 地址就是https://taotoken.net/api路径由客户端自己拼接。ANTHROPIC_AUTH_TOKEN的 Key 以sk-开头从控制台复制时注意不要带多余空格。如果你用的是 Claude Code 的 CLI 启动方式也可以通过环境变量临时覆盖export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-your-taotoken-api-key export ANTHROPIC_MODELclaude-sonnet-4-20250514 claude这样启动的 Claude Code 会用 TaoToken 作为模型通道同时读取项目里的 MCP 配置连接 ABAP ADT MCP Server。两条链路各走各的MCP 工具调用不经过 TaoToken模型请求不经过 ADT。如果你同时用 Cline 或 CC Switch 这类工具管理多个 MCP server配置逻辑是一样的MCP server 段只写 ADT 相关字段模型段只写 TaoToken 三件套。CC Switch 里切换的是模型通道不是 MCP server。Cline 的 MCP 配置里如果出现baseUrl字段要确认它指的是 MCP server 的地址还是模型 API 的地址这两个不能混。配好之后建议先单独验证模型通道再验证 MCP 工具通道最后验证两者协同。单独验证模型通道可以用模型对话页面发一条消息确认 Key 和 Model ID 有效。单独验证 MCP 工具通道可以在 Claude Code 里让它列出可用 tools确认abap_*系列工具都出现了。两者都通过后再让它执行一个需要模型决策 工具调用的任务比如读取一个 ABAP 类的源码。4. 验证请求用一次 ABAP 类读取确认工具调用贯通配置改完后怎么确认工具调用真的贯通了最直接的方式是让 Claude Code 执行一次 ABAP 类读取请求。这个请求需要模型理解意图、选择合适的 tool、传对参数、拿到 ADT 返回的结果整条链路任何一环断了都会暴露出来。在 Claude Code 里输入类似这样的指令帮我读取 ABAP 类 ZCL_MCP_DEMO_RUNNER 的源码并告诉我它实现了哪个接口。如果链路正常Claude Code 会先调用abap_creation-get_object_type_details或类似的工具确认类对象类型然后调用读取类源码的工具拿到源码后由模型分析并回答。你会在 Claude Code 的输出里看到 tool invocation 的记录包括调用了哪个 tool、传了什么参数、返回了什么结果。一个正常的工具调用记录大概长这样Tool: abap_get_object_source Arguments: { objectType: CLAS, objectName: ZCL_MCP_DEMO_RUNNER } Result: { source: CLASS zcl_mcp_demo_runner DEFINITION ..., status: success }如果这一步成功说明 MCP 工具通道通了模型通道也通了两者协同正常。如果失败根据报错类型判断是哪条链路的问题报401通常是模型通道的 Key 或 Base URL 有问题报local proxy failed通常是模型通道指向了一个不可达的本地代理报 ADT 相关的错误比如 destination not found、authorization failed则是 MCP 工具通道或 ABAP 侧的问题。再进一步可以验证一个需要多步工具调用的场景比如让 Claude Code 读取一个 CDS View 并检查它的 association读取 CDS View ZC_MCP_DEMO 的定义列出它所有的 association 和对应的 target view。这个任务需要模型先调用工具获取 CDS 源码再解析源码里的 association 定义。如果模型能正确列出 association说明工具返回的结构化数据被模型正确理解了整条链路不仅通了而且可用。验证通过后你可以继续测试更复杂的场景比如让 Claude Code 创建一个 ABAP 类、跑一次 ATC、或者读取一个 transport request 的 diff。每增加一个工具类型就多验证一条能力路径。建议按风险从低到高逐步开放先只读工具读取源码、查询 destination、获取 service metadata再写工具创建对象、激活对象最后是执行类工具跑 ATC、跑 ABAP Unit、执行 quick fix。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最常见的几类报错这里逐一对照排查。每类报错都对应链路里一个具体的断点找到断点就好修。401 Unauthorized。这个报错几乎总是模型通道的问题。检查三件事ANTHROPIC_AUTH_TOKEN是否填了正确的 TaoToken API KeyKey 是否以sk-开头是否有多余空格或换行ANTHROPIC_BASE_URL是否是https://taotoken.net/api有没有误加/v1或其他路径ANTHROPIC_MODEL是否是 TaoToken 支持的 Model ID。如果三个都对还报 401去 TaoToken 控制台确认 Key 是否被禁用或额度是否用完。注意 401 不会来自 MCP 工具通道ADT 的鉴权失败报的是 403 或 ADT 特定的错误码。local proxy failed。这个报错说明 Claude Code 尝试通过一个本地代理转发模型请求但代理目标不可达。常见原因是ANTHROPIC_BASE_URL被设成了http://localhost:xxxx这样的本地地址但本地并没有对应的代理服务在跑。解决办法是把 Base URL 改回https://taotoken.net/api让请求直接走 TaoToken不经过本地代理。如果你确实需要本地代理要确认代理进程在跑、端口对、转发目标正确。ABAP 开发者容易在 ADT 里配了 HTTP 代理后把这个代理地址也填进 Claude Code 的 Base URL这是错的两者不是一回事。reading choices 相关报错。这类报错通常出现在模型返回的响应格式不符合预期时比如返回了空 choices 数组或者 choices 里的结构不对。根因往往是模型通道返回了非标准响应可能是 Base URL 指向了一个不兼容 OpenAI 格式的端点或者 Model ID 填错了导致服务端返回了错误结构。确认 Base URL 是 TaoToken 的 API 地址Model ID 是有效的 Claude 系列模型。如果用的是第三方兼容层要确认它支持 Anthropic 的消息格式。OAuth 相关报错。Claude Code 某些版本会尝试用 OAuth 流程鉴权如果你用的是 API Key 方式可能会看到 OAuth token 相关的错误。解决办法是确认配置里用的是ANTHROPIC_AUTH_TOKEN而不是 OAuth 相关的字段并且没有残留的 OAuth 配置文件干扰。如果之前登录过 Claude 官方账号清理一下~/.claude下的缓存文件避免旧凭证覆盖新配置。ADT 侧报错。如果报错信息里出现 destination、package、transport、authorization 这些词问题在 MCP 工具通道或 ABAP 侧不在模型通道。检查ADT_DESTINATION是否和 ADT 里配的一致ADT_USER是否有对应 package 的权限ADT_CLIENT是否正确。这类报错和 TaoToken 无关不要往模型通道上找原因。排查时的一个实用技巧把模型通道和工具通道分开测。先用模型对话页面单独测模型通道确认 Key 和 Model 有效再在 Claude Code 里让它列 tools确认 MCP 工具通道通最后跑一个需要两者协同的任务。这样任何报错都能快速定位到是哪条链路的问题。6. 把 Claude Code 接进 ABAP 工具链的下一步配置跑通之后你可以开始把更多 ABAP 开发动作接进这条链路。建议从只读工具开始扩展比如用abap_business_services-fetch_service_information读取 OData service 的 metadata用abap_transport-unifiedDifference查看 transport 的 diff用abap_atc_get_result获取 ATC 检查结果。这些工具不修改系统状态风险低适合先熟悉工具调用的节奏。等你对工具调用和审批流程熟悉后再引入会修改系统的工具比如abap_creation-create_object、abap_activate_objects、abap_run_atc。这些工具在共享 DEV 系统上执行时建议保留人工确认环节尤其是创建对象和激活对象这类操作。MCP 协议本身支持 human in the loopClaude Code 也会在调用工具前展示即将执行的动作利用好这个机制。长期做 ABAP 开发的话可以考虑用 Coding Plan 来管理模型调用额度地址是 https://taotoken.net/coding-plan 。它适合需要频繁调用模型做代码分析、工具编排的场景比按次调用更划算。如果你的团队还在评估阶段先用模型对话页面测试效果确认链路稳定后再上 Coding Plan。接入文档在 https://taotoken.net/doc 里面有各客户端的详细配置说明包括 Claude Code、Cline、CC Switch 等。遇到配置问题时先查文档大部分常见错误都有对应说明。API Keys 管理在 https://taotoken.net/api-keys Key 的创建、禁用、额度查看都在这里。最后提醒一点MCP 工具通道和模型通道分离这个架构不只适用于 ABAP 场景。任何需要本地工具调用 远程模型推理的组合都可以用同样的思路配置。ABAP 的特殊之处在于 ADT 工具链本身比较重destination、package、transport 这些概念增加了配置的复杂度但只要把两条链路分开看问题就清晰了。
返回列表