1. abap_lists_destinations 不返回,先别急着怀疑 MCP Server
如果你在 Claude Code 里接好了 ABAP MCP Server,输入一句“帮我看看现在有哪些 ABAP System Destinations”,结果abap_lists_destinations这个工具要么迟迟不返回,要么直接报错,第一反应通常是:ADT 连接是不是断了?MCP Server 是不是没起来?destination 配置是不是写错了?
我一开始也这么想,后来发现大部分情况下问题根本不在 ABAP 侧。abap_lists_destinations是 ABAP MCP 工具链里的入口工具,模型要先通过它拿到可用的 ABAP System Destinations,才能判断后续对象该建到哪个 DEV、QAS 还是 PRD 系统里,避免把对象建到错误的 client。但这里有个容易被忽略的前提:模型得先把请求发出去。如果 Claude Code 的模型通道本身就不通,工具调用请求压根到不了 MCP Server,你看到的“工具不返回”其实只是表象。
这篇就按排障视角,把 Claude Code 的模型通道和 ABAP MCP Server 这两层拆开,先把模型通道切到 TaoToken 跑通,再回头查abap_lists_destinations到底返回了什么。
2. 为什么要把模型通道和 ABAP MCP Server 分开看
2.1 两层职责完全不同
在 Claude Code 这类 MCP 客户端里,其实同时跑着两条链路。一条是模型通道,负责把你的自然语言和工具调用意图发给大模型,再把模型的响应拿回来;另一条是 MCP 通道,负责把模型决定调用的工具请求转发给 ABAP MCP Server,由 Server 去连后端 ABAP 系统执行。
abap_lists_destinations属于第二条链路里的工具,但它能不能被触发,取决于第一条链路是否正常。模型通道断了,工具调用意图就发不出去,表现就是“工具没反应”。这时候你去重启 MCP Server、重配 ADT 连接,都是白费功夫。
2.2 常见误判路径
实际排障里最常见的误判是这样:看到abap_lists_destinations没返回,先去查 MCP Server 日志,发现日志里根本没有这次调用记录,于是怀疑 Server 没启动;再去看 ADT,发现 ADT 自己连得好好的,又怀疑是 MCP Server 和 ADT 之间的配置问题。绕一圈下来,真正的原因可能是 Claude Code 的 Base URL 填错了,或者 Key 没生效,模型请求根本没发出去。
所以正确的顺序是:先确认 Claude Code 能把请求发到模型,再看 MCP Server 返回的 destination 列表。这也是这篇要强调的核心。
3. 前置:先把 Claude Code 的模型通道切到 TaoToken
3.1 拿 Key 和确认 Base URL
打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建一把 Key。这一步只解决模型通道的认证问题,跟 ABAP 系统选择没有任何关系。
拿到 Key 之后,把 Claude Code 的 Base URL 填成:
https://taotoken.net/api这里有两个坑要特别注意。第一,不要带/v1,填成https://taotoken.net/api/v1会导致请求路径不对。第二,不要填官网首页,首页地址不是 API 入口。Base URL 就是https://taotoken.net/api,一字不差。
3.2 配置示例
Claude Code 的配置一般放在环境变量或配置文件里。以环境变量为例,大致是这样:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="你从TaoToken创建的那把Key"如果你用的是配置文件方式,找到对应的 base_url 和 api_key 字段,按上面的值填进去。填完之后重启 Claude Code,让配置生效。
注意:TaoToken 只出现在模型通道和 Key 获取环节,它不负责选择 ABAP 系统,也不替代
abap_lists_destinations。destination 列表始终由 ABAP MCP Server 返回。
3.3 确认模型通道通了
配置好之后,先在 Claude Code 里发一句最简单的对话,比如“你好,确认一下连接”。如果模型能正常回复,说明模型通道已经通了。这一步过了,再去看 MCP 工具才有意义。
4. 可复制配置:让 Claude Code 继续调用 abap_lists_destinations
4.1 MCP Server 配置保持原样
模型通道切好之后,ABAP MCP Server 的配置不用动。它还是按原来的方式连你的 ABAP 后端,负责执行abap_lists_destinations、对象创建、激活、传输、ABAP Unit 这些工具。你要做的是确认 MCP Server 在 Claude Code 里被正确注册。
一个典型的 MCP 配置片段长这样:
{ "mcpServers": { "abap-mcp": { "command": "你的ABAP MCP Server启动命令", "args": ["你的启动参数"], "env": { "ABAP_DESTINATION_CONFIG": "你的destination配置路径" } } } }具体 command 和 args 按你实际用的 ABAP MCP Server 来填,这里不展开。关键是这段配置和模型通道是独立的,改 Base URL 不影响它。
4.2 触发 destination 查询
模型通道通了、MCP Server 注册好了之后,在 Claude Code 里发一句:
列出当前可用的 ABAP System Destinations模型会决定调用abap_lists_destinations。这时候你观察两个地方:一是 Claude Code 里有没有出现工具调用提示,二是 ABAP MCP Server 日志里有没有这次调用的记录。
如果 Claude Code 显示了工具调用、Server 日志也有记录,说明两层链路都通了,接下来就看返回的 destination 列表内容。如果 Claude Code 压根没显示工具调用,那问题还在模型通道,回到第 3 步检查 Base URL 和 Key。
5. 验证请求与成功结果
5.1 期望的返回结构
abap_lists_destinations正常返回时,你会看到一组可用的 ABAP System Destinations,通常包含 destination 名称、对应的系统标识、可能还有 client 信息。类似这样:
{ "destinations": [ { "name": "ABAP_DEV", "system": "S4H_DEV", "client": "100" }, { "name": "ABAP_QAS", "system": "S4H_QAS", "client": "200" } ] }拿到这个列表后,你才能确认目标 DEV、QAS、PRD destination 是否真实可用。比如你要在 DEV 里建对象,就得先确认列表里有 DEV 对应的 destination,而不是想当然地以为它一定在。
5.2 确认 destination 真实可用
列表返回不代表 destination 一定能连上。有些 destination 配置存在,但后端系统当前不可达。稳妥的做法是拿列表里的某个 destination 再做一次轻量查询,比如让模型基于这个 destination 读一个对象结构,确认它真的能连到后端。
这一步过了,才说明从 Claude Code 模型通道到 TaoToken,再到 ABAP MCP Server,再到后端 ABAP 系统,整条链路是通的。后续的 object creation、activation、transport、ABAP Unit 等 MCP Tools 仍然由 ABAP MCP Server 执行,跟模型通道是分开的。
6. 本篇常见错排查
6.1 工具不返回,但 Server 日志无记录
这是最典型的模型通道问题。Claude Code 没把工具调用请求发出去,Server 自然没记录。检查 Base URL 是不是https://taotoken.net/api,有没有误加/v1,Key 是否有效。改完重启 Claude Code。
6.2 工具返回认证或权限错误
如果 Server 日志里有调用记录,但返回的是认证失败或权限不足,那问题在 ABAP 侧。检查 MCP Server 连后端用的账号权限,以及 destination 配置里的认证信息。这跟模型通道无关。
6.3 destination 列表为空
列表返回成功但内容为空,说明 MCP Server 没读到任何 destination 配置。检查ABAP_DESTINATION_CONFIG指向的配置文件路径对不对,文件里有没有实际的 destination 定义。
6.4 列表有 destination 但连不上
destination 存在但后端不可达,通常是网络或系统状态问题。确认后端 ABAP 系统当前是否可访问,destination 里的 host、port、client 是否填对。
6.5 误把模型通道问题当成 MCP 问题
最常见的坑就是这一条。看到abap_lists_destinations不返回,直接去折腾 MCP Server 和 ADT,结果真正的问题在 Claude Code 的 Base URL。记住排障顺序:先模型通道,后 MCP 通道。
7. 跑通之后:模型通道与 MCP 工具各司其职
跑通之后你会发现,从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 拿到的 Key 配通的是 Claude Code 的模型通道,它负责让模型能正常收发请求。而 destination 查询、object creation、activation、transport、ABAP Unit 这些 MCP Tools,仍然由 ABAP MCP Server 执行,模型通道不参与。
如果你后续要长期在 Claude Code 里做 ABAP 编码和 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=model-chat&utm_campaign=rewrite
需要管理或新建 Key,去控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
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
如果你用的是 Claude Code 的 Anthropic 兼容通道,配置参考:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecode-anthropic&utm_campaign=rewrite
把模型通道和 MCP 通道分开排障,abap_lists_destinations不返回这类问题会好定位很多。先确认请求发得出去,再去看 destination 列表里到底有什么。