ARTICLE DETAIL

资讯详情

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

SAP 生成原生 Mobile APP 的解决方案盘点:从 MDK 到 MCP Server 配 TaoToken 的 OData 接入骨架

SAP 生成原生 Mobile APP 的解决方案盘点:从 MDK 到 MCP Server 配 TaoToken 的 OData 接入骨架 1. SAP 移动应用生成路径怎么选MDK、OData 直连与 MCP Server 的真实差异SAP 生态里想做一个原生移动 App摆在面前的路线其实不止一条但真正能落地的组合并不多。我先把结论放在前面如果你要的是「自然语言描述需求 → 生成可运行的跨平台移动应用 → 部署到手机」目前最顺的组合是 MDKMobile Development Kit MCP Server SAP Mobile Services后端数据通过 OData 服务暴露出来。而如果你只是想让手机读几个 OData 接口那直连也能跑但企业环境下基本会被安全策略卡住。先解释几个关键词方便后面看配置不迷路。MDK 是 SAP 的元数据驱动移动开发框架一套项目可以跑在 Android、iOS也能当 Web 应用用它把页面、动作、规则、离线定义都写在元数据里运行时由移动客户端解释成原生界面。OData 是 SAP 后端暴露业务数据的标准协议S/4HANA Cloud 上你只能消费已发布的 API不能随便把内部表暴露出去。MCP Server 则是把 MDK 的创建、生成、部署能力包装成 AI Agent 可调用的工具让自然语言真正驱动项目生成。三条路径的差异我用一张表说清楚路径自然语言生成原生体验离线能力企业安全适合谁MDK MCP Server强强强强想快速出可运行 App 的开发者OData 直连无取决于前端需自己实现弱内部工具、原型验证BTP SDK 原生开发辅助最强强强有专业移动团队的项目我试过直接用手机请求 S/4HANA 的 OData URL技术上能通但生产环境不该这么干。原因很直接手机里存技术用户密码等于把后端钥匙交出去OAuth 和 SSO 没法统一处理用户身份传播、设备撤销、日志审计全都缺位。正确链路应该是手机 → SAP Mobile Services → BTP Destination → S/4HANA Cloud中间这层代理把认证、离线、推送、应用更新全兜住了。那 MCP Server 到底解决什么问题它把 MDK 项目生成从「手写元数据」变成「描述需求」。你告诉 AI Agent 要一个销售订单应用它调用 mdk-create 根据 OData 元数据生成项目骨架再调 mdk-gen 补页面和动作最后 mdk-manage 负责构建、部署、生成二维码。整个过程里OData 元数据是地基没有它生成出来的页面不知道字段从哪来。所以选型逻辑可以简化成一句话要自然语言生成 原生 离线选 MDK 路线只要读数据做展示OData 直连够用但别上生产要极致原生体验且有团队BTP SDK 更合适。下面我重点讲 MDK 路线怎么配因为这是大多数人真正想落地的方向。2. TaoToken 前置准备给 MCP Server 配一个稳定的模型入口在讲 MDK 配置之前得先解决一个现实问题MCP Server 本身不产生智能它需要背后有一个能理解自然语言、能调用工具的大模型。你可以用企业自选的模型也可以用 TaoToken 这类聚合入口来统一管理模型调用。这里我以 TaoToken 为例把前置准备讲清楚因为后面 config.toml 和 settings.json 里都要填它的地址和 Key。TaoToken 在这里扮演的角色是「模型网关」你的 AI 编程助手比如 Cline、Claude Code 这类支持 MCP 的客户端通过它去调用模型模型再通过 MCP 协议去调 MDK MCP Server 的工具。整条链路是AI 助手 → TaoToken → 大模型 → MCP Server → MDK 项目。第一步拿到 API Key。访问 https://taotoken.net/api-keys 创建密钥注意这个 Key 只在创建时完整显示一次复制好放安全的地方。如果你还没账号从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 进官网注册即可。第二步确认 Base URL。TaoToken 的 API 入口是 https://taotoken.net/api注意这个地址不带任何查询参数配置时直接填这个。很多客户端要求 Base URL 以 /v1 结尾或者不带具体看客户端要求但根地址就是它。第三步选模型。TaoToken 支持多种模型你在配置里填 Model ID 就行。对于 MDK 项目生成这种任务建议选长上下文、工具调用能力强的模型因为 OData 元数据文件可能很大模型要能读懂字段结构再生成页面。这里有个容易踩的坑MCP Server 的工具调用和普通对话不一样它要求模型支持 function calling 或 tool use。如果你选的模型不支持工具调用AI 助手会一直说「我无法调用工具」而不是报错排查起来很费时间。所以配之前先确认模型能力。第四步验证 Key 能用。可以用 curl 快速测一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的_API_KEY \ -H Content-Type: application/json \ -d { model: 你的模型ID, messages: [{role: user, content: ping}] }返回里有 choices 字段就说明通了。如果返回 401检查 Key 有没有复制全、有没有多余空格。如果返回 model not found检查 Model ID 拼写。这一步做完你手里应该有三样东西Base URLhttps://taotoken.net/api、API Key、Model ID。这三件套后面在 config.toml 和 settings.json 里都要用到缺一不可。我见过有人只填了 Key 没填 Model ID客户端默认用一个不存在的模型结果一直超时还以为是网络问题。另外提醒一句TaoToken 的模型对话入口在 https://taotoken.net/models你可以先在那里试试模型能不能正常对话、能不能调工具再去配 MCP这样能把「模型问题」和「MCP 配置问题」分开排查。3. 可复制配置骨架config.toml 与 settings.json 怎么写这一节是重点我给出两份可直接复制的配置骨架一份是 MCP 客户端的 config.toml以 Cline 这类支持 TOML 配置的客户端为例一份是 settings.json以 Claude Code 或类似客户端为例。两份配置的核心都是三件套Base URL、API Key、Model ID再加上 MDK MCP Server 的启动命令。先说 config.toml。这个文件通常放在你的 AI 助手配置目录下不同客户端路径不一样Cline 一般在 VS Code 的设置里Claude Code 在用户目录的配置文件夹。内容长这样# AI 模型入口配置 [model] base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 model_id 你的模型ID provider openai-compatible # MDK MCP Server 配置 [mcp_servers.mdk] command npx args [-y, sap/mdk-mcp-server] env { SAP_MOBILE_SERVICES_HOST 你的Mobile Services地址 } # 可选文档检索 MCP [mcp_servers.mdk_docs] command npx args [-y, sap/mdk-mcp-server, --docs-only]这里几个点要解释。base_url 填 TaoToken 的 API 根地址不要带 /v1因为不同客户端会自己拼路径带了可能变成 /v1/v1。api_key 就是上一步拿到的 Key。model_id 填你选的模型。provider 写 openai-compatible因为 TaoToken 的接口兼容 OpenAI 格式。mcp_servers 段是告诉客户端去哪启动 MCP Server。command 用 npxargs 里 -y 表示自动确认安装sap/mdk-mcp-server 是包名。env 里可以传 SAP Mobile Services 的地址这样 mdk-manage 部署时知道往哪推。再说 settings.json格式是 JSON适合 Claude Code 这类客户端{ model: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoToken密钥, modelId: 你的模型ID }, mcpServers: { mdk: { command: npx, args: [-y, sap/mdk-mcp-server], env: { SAP_MOBILE_SERVICES_HOST: 你的Mobile Services地址 } } } }注意 JSON 里不能有注释所以我把说明都放在正文里。baseUrl 和 apiKey 的键名不同客户端可能不一样有的叫 base_url有的叫 baseUrl配之前看一眼客户端文档。Model ID 一定要填对这是最容易出错的地方。如果你用的是 Claude Code配置路径通常在 ~/.claude/settings.json 或项目目录下的 .claude/settings.json。Claude Code 的接入文档在 https://taotoken.net/doc里面有更细的客户端适配说明。Coding Plan 相关的长期编码配置可以参考 https://taotoken.net/coding-plan如果你打算把 MCP 生成 MDK 项目当成日常开发流程这个入口能帮你把模型调用成本管起来。配完之后重启客户端让它重新加载配置。然后在对话里问一句「你有哪些 MCP 工具可用」如果模型能列出 mdk-create、mdk-gen、mdk-manage、mdk-docs说明 MCP Server 挂载成功。如果列不出来先检查 npx 能不能跑再检查网络能不能访问 npm 源。这里有个细节MDK MCP Server 依赖 Node.js 环境npx 是 Node 自带的。如果你机器上没装 Node先装一个 LTS 版本。装完在终端跑npx -y sap/mdk-mcp-server --help能出帮助信息就说明环境没问题。4. 验证请求一次 OData 服务连通性检查与 MDK 项目生成配置写完不能直接信得验证。验证分两层先验证 OData 服务本身通不通再验证 MCP Server 能不能根据 OData 元数据生成项目。这两层分开测出问题好定位。先说 OData 连通性。假设你已经在 S/4HANA Cloud 里建好了 Communication Arrangement拿到了 OData 服务 URL形如https://你的租户.s4hana.cloud.sap/sap/opu/odata/sap/API_SALES_ORDER_SRV先用 curl 测元数据能不能拉下来curl -u 通信用户名:通信密码 \ https://你的租户.s4hana.cloud.sap/sap/opu/odata/sap/API_SALES_ORDER_SRV/\$metadata \ -H Accept: application/xml \ -o metadata.xml如果返回 200 并且 metadata.xml 里有 EntityType、EntitySet 这些标签说明服务通了。如果返回 401检查通信用户密码。如果返回 403检查 Communication Arrangement 里这个服务有没有被授权。如果返回 404检查服务路径拼写SAP 的 OData 路径大小写敏感。拿到 metadata.xml 后把它放到你的 MDK 项目工作目录因为 MCP Server 生成页面时要读它。这一步很关键很多人跳过元数据直接让 AI 生成结果字段名全是猜的生成出来的绑定对不上。接下来验证 MCP 生成。在 AI 助手对话里输入类似这样的提示词使用 mdk-create 工具基于当前目录下的 metadata.xml 创建一个离线 MDK 项目应用名为 SalesOrderApp 消费 API_SALES_ORDER_SRV 服务 首页用 ObjectTable 展示销售订单头 支持按客户和状态搜索。如果模型正确调用 mdk-create你会在工作目录看到新生成的项目文件夹里面有 Pages、Actions、Rules、i18n 这些子目录。打开 Pages 下的页面定义能看到 ObjectTable 的字段绑定指向 OData 的字段名说明元数据被正确解析了。再验证部署环节。输入使用 mdk-manage 工具构建并部署这个项目到 SAP Mobile Services 然后生成 onboarding 二维码。如果配置正确mdk-manage 会先校验项目再构建再推送到 Mobile Services最后返回一个二维码图片或链接。用手机上的 SAP Mobile Services Client 扫码就能看到应用跑起来。这里我要强调一个成功判据不是「AI 说生成了」就算成功而是你打开生成的项目文件看到页面、动作、规则、i18n 文件都真实存在字段绑定和 OData 元数据对得上这才算通。我见过 AI 回复「已为你生成项目」但目录里空空如也的情况那是模型没真正调工具只是嘴上说说。如果生成的项目里字段绑定是空的八成是 metadata.xml 没被读到。检查文件路径是不是在工作目录检查提示词里有没有明确说「基于 metadata.xml」。MCP Server 不会自动扫描整个磁盘找元数据你得告诉它文件在哪。5. 本篇常见错排查401、local proxy failed、reading choices 与 OAuth配置和验证过程中报错基本集中在几类。我把真实遇到过的错误和排查路径列出来你对着改就行。第一类401 Unauthorized。这个最直接就是 Key 不对。可能原因有三个Key 复制时带了空格或换行Key 已经过期或被撤销Base URL 填错导致请求发到了别的服务。排查方法是用第 2 节的 curl 命令单独测 Key如果 curl 也 401那就是 Key 本身的问题去 https://taotoken.net/api-keys 重新生成一个。如果 curl 通了但客户端 401那就是客户端配置里的 Key 字段名写错了或者客户端把 Key 拼到了错误的 header 里。第二类local proxy failed。这个报错通常出现在客户端尝试通过本地代理转发请求时。原因可能是客户端配置了代理但代理没启动或者代理端口被占用。排查方法是检查客户端设置里有没有 proxy 相关配置如果有先关掉试试直连。另外检查环境变量 HTTP_PROXY、HTTPS_PROXY 有没有被设置成无效值。这个错误和模型本身无关纯粹是网络层问题。第三类reading choices 相关报错比如cannot read property choices of undefined或reading choices。这个说明客户端收到了响应但响应结构里没有 choices 字段。可能原因Base URL 填成了网页地址而不是 API 地址导致返回的是 HTML 而不是 JSONModel ID 填错服务返回了错误对象请求体格式不对服务没按预期返回。排查方法是看客户端日志里实际发出的请求 URL 和收到的原始响应如果响应是 HTML那就是 URL 错了确认 base_url 是 https://taotoken.net/api 而不是官网首页。第四类OAuth 相关错误比如OAuth token request failed或invalid_client。这个通常出现在 MDK 项目部署到 Mobile Services 或访问 S/4HANA OData 时。排查分两层如果是访问 S/4HANA 报 OAuth 错检查 Communication Arrangement 里的 OAuth 配置确认 Communication User 有权限如果是部署到 Mobile Services 报错检查 Mobile Services 里的 Destination 配置确认 OAuth 客户端 ID 和密钥填对了。OAuth 的坑在于参数名容易写错比如 client_id 写成 clientIdSAP 的接口对参数名敏感。第五类MCP Server 启动失败报command not found: npx或Cannot find module。这是 Node 环境问题。确认 Node.js 装了node -v能出版本号确认 npm 能用npm -v能出版本号确认 npx 在 PATH 里。如果公司网络限制 npm 源配置一下 registry 或者用内网镜像。第六类模型不调工具一直回复文字。这个不是报错但很常见。原因是模型不支持 function calling或者客户端没把工具定义传给模型。排查方法是换一个支持工具调用的模型或者在客户端里确认 MCP 工具已经加载。如果工具列表是空的说明 MCP Server 没挂上回到第 3 节检查 config.toml 或 settings.json。第七类生成的项目字段绑定为空。这个前面提过核心是元数据没被读到。检查 metadata.xml 路径检查提示词有没有明确引用它。另外确认 OData 元数据里的字段名和你在提示词里描述的业务字段能对应上如果元数据里叫 SalesOrder你提示词里说 order number模型可能对不上。排查的通用思路是先分层再定位。模型层的问题用 curl 测MCP 层的问题看工具列表OData 层的问题用 curl 测元数据部署层的问题看 Mobile Services 日志。一层一层排除比盲目改配置快得多。6. 语义一致 CTA把模型入口和接入文档用起来配置跑通之后日常开发里你会反复用到几个入口。我把它们按场景分一下方便你按需取用。如果你在排查接入问题、需要确认 Base URL 和 Key 怎么填直接看接入文档https://taotoken.net/doc里面有各客户端的配置示例。API Key 管理在 https://taotoken.net/api-keysKey 丢了或要轮换就来这里。如果你只是想先验证模型能不能正常对话、能不能调工具用模型对话入口https://taotoken.net/models在这里试提示词比在客户端里试快因为不用反复重启客户端。如果你打算把 MCP 生成 MDK 项目当成长期开发流程模型调用量会上去这时候看 Coding Planhttps://taotoken.net/coding-plan它适合长期编码和 Agent 场景能把成本管住。如果你用的是 Claude Code它的接入配置和普通客户端略有差异参考https://taotoken.net/ClaudeCodeAnthropic里面有针对 Claude Code 的 MCP 和模型配置说明。控制台入口在 https://taotoken.net/console可以看调用记录和用量。最后说一个我踩过的坑MCP Server 生成 MDK 项目时如果 OData 元数据很大模型上下文可能不够生成到一半就断了。解决办法是先用 mdk-docs 工具检索相关组件定义缩小范围再让模型基于元数据生成。另外生成出来的项目一定要人工审查权限、字段、离线策略AI 能生成骨架但业务逻辑和数据权限不能全交给它。离线过滤条件、冲突处理策略、批量大小这些还是得开发人员根据实际业务定。
返回列表