☰
Spring AI Alibaba实战训练营-25:用MCP SDK打造Github交互智能体应用的完整指南(含TaoToken配置)
2026/10/2 15:28:27 网站建设 项目流程

1. 从零跑通 Spring AI Alibaba 与 Github 智能体:场景与痛点拆解

如果你是一名 Java 开发者,最近大概率被两个词反复刷屏:Spring AI 和 MCP。前者让 Spring 生态终于有了官方级别的 AI 应用开发框架,后者则试图解决一个更根本的问题——让大模型安全、标准化地调用外部工具。把这两个东西捏在一起,再对接 Github,就能做出一个「用自然语言操作仓库」的智能体:你说一句「帮我建个私有仓库叫 test-mcp」,它就去调 Github API 把事办了。

听起来很爽,但真正动手时,坑一个接一个。我见过太多人在第一步就卡住:MCP Server 到底怎么配?Windows 和 macOS 的启动命令为什么不一样?Spring AI 的ToolCallbackProvider注入不进来怎么办?更现实的问题是,模型侧如果还用 DashScope 的 Key,很多同学手上并没有现成的额度,或者想统一用一个 Key 管理多家模型,结果配置写得七零八落。

这篇就按「能跟做」的标准来。我会先带你把 MCP Server 的配置骨架搭好,再把 TaoToken 的统一 Key 接进settings.json和 Spring 配置里,最后用一个真实的 Github 仓库创建请求验证整条链路。全程 Java 17 + Maven,代码可直接复制。适合谁?适合已经会 Spring Boot、想快速把 MCP 智能体跑起来、又不想在 Key 管理上折腾半天的 Java 开发者。

核心检索词先明确:Spring AI Alibaba 结合 MCP SDK 开发 Github 交互智能体,本质是让 Spring 应用通过 MCP 协议把 Github 的能力暴露给大模型,模型负责理解意图、选择工具、生成调用参数,MCP Server 负责真正执行 API 请求。你不需要手写任何 Github REST 调用,只需要把工具「挂」上去。

2. TaoToken 前置:统一 Key 接入 settings.json 与 Spring 配置

在写业务代码之前,先把模型侧的接入理顺。很多教程默认你用 DashScope 的 Key,但实际开发中,你可能同时想用 Claude、GPT 或者国产模型做对比,每换一个就改一次application.yml,非常烦。TaoToken 的思路是提供一个统一的 API 入口,你只需要维护一个 Key,就能在多个模型之间切换。

官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。注意,API 地址后面不要加 UTM 参数,直接用它作为 Base URL 即可。

对于 Spring AI Alibaba 项目,最推荐的方式是把 Key 写进环境变量,然后在application.yml里引用。但如果你同时用 Claude Code 或者 Cline 这类工具做辅助开发,建议把统一 Key 也写进它们的settings.json,这样本地调试和 IDE 插件用的是同一套凭证,排查问题时不会互相干扰。

先看 Claude Code 的settings.json配置片段,路径通常在~/.claude/settings.json(macOS/Linux)或%USERPROFILE%\.claude\settings.json(Windows):

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }

这里三个要素缺一不可:Base URL 指向 TaoToken 的 API 入口,Auth Token 填你申请到的 Key,Model 指定具体模型 ID。如果你用的是 Cline 或者 Roo Code,配置项名称可能略有不同,但逻辑一致——都是 Base URL + Key + Model ID 三件套。

回到 Spring 项目,application.yml里这样写:

spring: ai: openai: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} chat: options: model: claude-sonnet-4-20250514 mcp: client: stdio: servers-configuration: classpath:/mcp-servers-config.json

注意这里我把模型提供商从 DashScope 换成了 OpenAI 兼容模式,因为 TaoToken 提供的是 OpenAI 兼容接口,Spring AI 的spring-ai-openai-spring-boot-starter可以直接对接。这样你就不需要额外引入 DashScope 的 starter,依赖更干净。

环境变量TAOTOKEN_API_KEY在启动时传入:

export TAOTOKEN_API_KEY=sk-你的TaoTokenKey mvn spring-boot:run

或者在 IDE 的 Run Configuration 里加-DTAOTOKEN_API_KEY=sk-xxx。实测下来,这种统一 Key 的方式在切换模型时特别省事,改一行model配置就能从 Claude 换到 GPT,不用重新申请额度。

3. 可复制配置:MCP Server 骨架与 Spring Boot 依赖

这一节是整篇的核心,配置写对了,后面基本就是顺水推舟。先看 Maven 依赖,pom.xml里需要这几项:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.0-RC1</version> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> <version>1.0.0-RC1</version> </dependency> </dependencies>

如果你坚持用 Spring AI Alibaba 的 DashScope starter,把第二个依赖换成spring-ai-alibaba-starter-dashscope即可,但那样就没法直接用 TaoToken 的统一 Key 了,需要额外做适配。所以这里我推荐 OpenAI 兼容模式。

接下来是 MCP Server 的配置文件mcp-servers-config.json,放在src/main/resources下。Windows 和 macOS 的差异主要在command字段:

Windows 版本:

{ "mcpServers": { "github": { "command": "cmd", "args": [ "/c", "npx", "-y", "@modelcontextprotocol/server-github" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_你的GithubToken" } } } }

macOS/Linux 版本:

{ "mcpServers": { "github": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_你的GithubToken" } } } }

关键点:GITHUB_PERSONAL_ACCESS_TOKEN必须替换成你真实申请的 PAT,权限至少勾选repo。这个 Token 只在生成时显示一次,丢了就得重新生成。另外,npx命令要求本机已安装 Node.js,建议 18 以上版本。如果你在 Windows 上遇到npx找不到的情况,把command改成cmd,args里加/c是标准解法。

Spring Boot 主类里,用CommandLineRunner做一次性验证:

@SpringBootApplication public class GithubMcpApplication { public static void main(String[] args) { SpringApplication.run(GithubMcpApplication.class, args); } @Bean public CommandLineRunner run(ChatClient.Builder builder, ToolCallbackProvider tools, ConfigurableApplicationContext ctx) { return args -> { ChatClient chatClient = builder .defaultToolCallbacks(tools) .build(); String input = "帮我创建一个私有仓库,命名为 test-mcp-demo"; System.out.println(">>> 用户: " + input); String response = chatClient.prompt(input).call().content(); System.out.println(">>> 助手: " + response); ctx.close(); }; } }

ToolCallbackProvider是 Spring AI 自动装配的,它会把 MCP Server 暴露的工具全部注册进来。defaultToolCallbacks(tools)这一步是灵魂,没有它,模型根本不知道有 Github 工具可用。

4. 验证请求:从自然语言到 Github 仓库创建成功

配置写完后,跑起来看结果。在项目根目录执行:

mvn spring-boot:run

启动日志里你会看到 MCP Client 尝试拉起npx @modelcontextprotocol/server-github,如果 Node.js 环境正常,会输出类似MCP server started的信息。接着 Spring AI 会向 TaoToken 的 API 发起请求,模型返回工具调用意图,框架再通过 MCP 把调用转发给 Github Server。

一次成功的输出大概长这样:

>>> 用户: 帮我创建一个私有仓库,命名为 test-mcp-demo >>> 助手: 已为你创建私有仓库 test-mcp-demo,地址为 https://github.com/你的用户名/test-mcp-demo

这时候你去 Github 个人主页刷新,应该能看到新仓库。如果模型返回的是「我无法直接操作 Github」之类的回复,说明工具没注入成功,回到上一节检查ToolCallbackProvider是否被正确注入。

再试一个稍微复杂的指令,验证工具调用的多样性:

列出我最近更新的 5 个仓库

模型会调用list_repositories工具,返回结果里包含仓库名、更新时间、可见性。这一步能跑通,说明整条链路——自然语言理解、工具选择、参数生成、API 执行、结果回传——全部打通。

如果你想在 Web 层暴露这个能力,加一个 Controller:

@RestController public class GithubAgentController { private final ChatClient chatClient; public GithubAgentController(ChatClient chatClient) { this.chatClient = chatClient; } @PostMapping("/agent/github") public String ask(@RequestBody String question) { return chatClient.prompt(question).call().content(); } }

注意,这里的ChatClient需要是已经注入了defaultToolCallbacks的那个实例。如果你在配置类里构建了带工具的 ChatClient Bean,直接注入即可;否则需要在 Controller 里手动构建。

5. 本篇常见错排查:401、local proxy failed 与 OAuth 报错

实际跑的时候,报错五花八门。我挑几个最高频的,对照真实错误信息给解法。

错误一:401 Unauthorized或API key invalid

这是模型侧认证失败。先确认TAOTOKEN_API_KEY环境变量是否真的传进去了,可以在主类里加一行System.out.println(System.getenv("TAOTOKEN_API_KEY"))验证。如果打印出来是 null,说明 IDE 没读到环境变量,改用-DTAOTOKEN_API_KEY=sk-xxx方式传参。另外检查 Base URL 是否写成了https://taotoken.net/api,末尾不要多斜杠。

错误二:local proxy failed或connection refused

这个报错通常出现在 MCP Server 启动阶段。npx第一次拉取@modelcontextprotocol/server-github时需要联网下载包,如果网络环境不稳定,会卡住然后超时。解法是提前手动执行一次npx -y @modelcontextprotocol/server-github,把包缓存到本地。Windows 用户如果看到cmd not found,确认系统 PATH 里有C:\Windows\System32。

错误三:Error reading choices或返回体解析失败

这多半是模型返回格式和 Spring AI 预期不一致。TaoToken 的 OpenAI 兼容接口返回的是标准choices数组,但如果你的model字段填了一个不存在的模型 ID,服务端可能返回错误结构。检查application.yml里的model值,确保是 TaoToken 支持的模型,比如claude-sonnet-4-20250514或gpt-4o。

错误四:Github 侧OAuth或Access denied

这是 PAT 权限问题。去 Github Settings > Developer settings > Personal access tokens 检查,确保勾选了repo全部权限。如果是组织仓库,还需要额外授权 SSO。重新生成 Token 后,更新mcp-servers-config.json里的GITHUB_PERSONAL_ACCESS_TOKEN,重启应用。

错误五:ToolCallbackProvider注入失败

启动时报No qualifying bean of type ToolCallbackProvider,说明 MCP Client 的自动装配没生效。检查spring-ai-starter-mcp-client依赖是否引入,以及application.yml里spring.ai.mcp.client.stdio.servers-configuration路径是否正确。路径必须是classpath:/mcp-servers-config.json,文件名不能错。

6. 语义一致 CTA:把这条链路用到更多场景

跑通 Github 之后,你会发现这套模式可以复制到任何有 MCP Server 的服务上。Jira、Slack、文件系统、数据库,只要有人写了对应的 MCP Server,你只需要改mcp-servers-config.json里的command和args,Spring 侧代码几乎不用动。这就是 MCP 协议的价值——把「模型调用外部工具」这件事标准化了。

如果你在配置 TaoToken 统一 Key 的过程中需要查具体的模型 ID 或者接口参数,可以到模型对话页面直接试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。想长期用这套配置做编码和 Agent 开发,Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。Key 的管理和生成在 Console 里:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,API Keys 页面是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,Claude Code 相关的配置说明在 https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。

最后留一个实用技巧:把mcp-servers-config.json里的 Github Token 也换成环境变量引用,比如"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}",这样配置文件就能安全地提交到 Git 仓库,不用担心 Token 泄露。Spring AI 的 MCP Client 支持这种占位符替换,实测有效。

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

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

立即咨询