本文收录于专栏 AI Agent智能体系列 ------ 20 课从协议原理到生产部署的 MCP 中文实战课程,点击订阅可跟踪后续更新。
【摘要】
你的 MCP Client 想接国产大模型但不知道端点怎么填?这课给五家实测接入表:DeepSeek、Kimi(裸 /v1 报 404,必须 /coding/v1)、MiniMax(Anthropic 协议非 OpenAI)、GLM、Qwen,每家给 base_url、model id、协议类型与实测结论,配完整 tool-calling 五步链路代码,你能直接换成自己有 key 的那家跑通。
阶段 2 上手实战:Server / Client / LLM 接入 | 来源:【原·03-02 client + 03-03 llm-client】 | 知识更新至 2026-10(当日检索 + 本机实测)
关键字: 国产大模型API、DeepSeek API、Kimi API、MiniMax API、MCP Client、tool calling、OpenAI兼容端点、大模型工具调用
概念讲解

5.1 LLM Client 的完整链路
上一课的 Client 是"死"的------调什么工具写死在代码里。真实场景是模型来决定调什么。完整链路五步:
text
用户提问 → LLM 看到工具列表,决定是否调工具 → 宿主把 tool_call 翻译成 MCP tools/call
→ Server 执行并返回 → 结果回给 LLM 生成最终回答
关键转换只有一步:把 MCP 的 tools/list 结果转成 LLM 的 tools 参数。两边 schema 几乎一样(都是 JSON Schema),只需字段映射。
5.2 国产六模型端点表(2026-10 本机实测)
| 模型 | base_url | 模型 ID | 协议 | 工具调用实测 |
|---|---|---|---|---|
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
OpenAI | ✅ 本课全链路实测 |
| Kimi | https://api.kimi.com/coding/v1(裸 /v1 报 404) |
k3 / kimi-for-coding |
OpenAI | ✅ 实测可调 |
| MiniMax | https://api.minimaxi.com/anthropic |
MiniMax-M3 |
Anthropic(非 OpenAI) | ✅ 实测可调 |
| GLM | https://api.z.ai/api/coding/paas/v4 |
glm-5.3 |
OpenAI | ⚠️ 接口通,写作当日配额耗尽(2026-10-05 恢复);thinking 用 extra_body={"thinking":{"type":"enabled"}},不用 reasoning_effort(报 422) |
| Qwen | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-plus 等 |
OpenAI | 未实测(本机无 key),按官方文档口径 |
| 小米 MiMo | 开放平台申请 | --- | OpenAI 兼容 | 未实测,按官方文档口径 |
换模型 = 换 base_url + api_key + 模型名三行,其余代码不动(MiniMax 除外,它走 Anthropic 协议,SDK 不同)。
案例实战:DeepSeek + MCP 全链路
目标
DeepSeek 收到"帮我查一下蓝牙相关的订单"→ 自主决定调 search_orders → MCP Server 执行 → 模型汇总成自然语言回答。
完整代码【已实测 2026-10,mcp 2.3.0 + openai 2.x + DeepSeek】
05_llm_client.py(与第 4 课的 04_server.py 同目录):
python
import asyncio, json, os
from openai import OpenAI
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
llm = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/v1")
async def main():
params = StdioServerParameters(command="python", args=["04_server.py"])
async with stdio_client(params) as (r, w):
async with ClientSession(r, w) as s:
await s.initialize()
# 1) MCP 工具列表 -> OpenAI tools 参数
tools = await s.list_tools()
oa_tools = [{"type": "function", "function": {
"name": t.name,
"description": t.description or "",
"parameters": t.input_schema, # mcp 2.x 是 snake_case
}} for t in tools.tools]
# 2) 第一轮:让模型决策
msgs = [{"role": "user", "content": "帮我查一下蓝牙相关的订单"}]
resp = llm.chat.completions.create(
model="deepseek-chat", messages=msgs, tools=oa_tools)
m = resp.choices[0].message
print("LLM 决定调用:", [(tc.function.name, tc.function.arguments)
for tc in (m.tool_calls or [])])
msgs.append(m)
# 3) 执行每个 tool_call,结果回填
for tc in (m.tool_calls or []):
args = json.loads(tc.function.arguments)
result = await s.call_tool(tc.function.name, args)
msgs.append({"role": "tool", "tool_call_id": tc.id,
"content": result.content[0].text})
# 4) 第二轮:模型基于工具结果生成最终回答
final = llm.chat.completions.create(model="deepseek-chat", messages=msgs)
print("最终回答:", final.choices[0].message.content)
asyncio.run(main())
实测输出
text
LLM 决定调用: [('search_orders', '{"keyword": "蓝牙"}')]
最终回答: 我找到了一个蓝牙相关的订单:
| 订单编号 | 商品名称 | 订单状态 |
|----------|----------|----------|
| E20261001001 | 蓝牙耳机 | 已发货 |
目前只查到这一个蓝牙相关的订单。如果你想查看更详细的信息......随时告诉我。
token 用量实测:两轮合计 168 tokens(prompt 94 + completion 74)。
三个要点
- 字段映射就一行 :
t.input_schema(mcp 2.x snake_case;1.x 是inputSchema)直接塞进 OpenAI 的parameters,两边都是 JSON Schema。 - 多 tool_calls 要循环处理 :模型可能一次返回多个工具调用,
for tc in m.tool_calls逐个执行逐个回填,tool_call_id必须对应。 - 这是"一轮工具调用"的最小骨架:真实 Agent 要加循环(模型可能根据结果再调工具)和最大迭代保护,那是 Agent 框架的事,不是 MCP 的事------MCP 只负责工具这一层。
Kimi / MiniMax 的差异化接入(实测摘要)
python
# Kimi(OpenAI 兼容,base_url 必须带 /coding/v1,否则 404)
OpenAI(api_key=KIMI_KEY, base_url="https://api.kimi.com/coding/v1")
# 实测:model="k3" 或 "kimi-for-coding" 均可,需明确提示"调用工具"或给 tool_choice
# MiniMax(Anthropic 协议,用 anthropic SDK 或原生 HTTP)
# endpoint: https://api.minimaxi.com/anthropic/v1/messages
# 头: x-api-key + anthropic-version: 2023-06-01
# 实测返回 tool_use block: {"name": "add", "input": {"a": 5, "b": 6}}
小结
- LLM Client = MCP Client + 一层 schema 映射 + 一个"决策→执行→回填→生成"循环
- 国产模型主流是 OpenAI 兼容:DeepSeek/Kimi/GLM/Qwen 换 base_url 即用;MiniMax 走 Anthropic 协议要单独处理
- 实测端点坑:Kimi 裸 /v1 报 404 必须 /coding/v1;GLM thinking 用 extra_body 不用 reasoning_effort
- 换模型成本 = 三行配置,这就是标准协议的价值
下一课把 Server 从 stdio 搬到 HTTP,讲传输实战、测试与部署------参见第 6 课《传输实战、测试与部署》。
扩展阅读
- 原课 03-02 client:https://github.com/microsoft/mcp-for-beginners/tree/main/03-GettingStarted/02-client
- 原课 03-03 llm-client:https://github.com/microsoft/mcp-for-beginners/tree/main/03-GettingStarted/03-llm-client
- DeepSeek API 文档:https://api-docs.deepseek.com/
- Kimi API 文档:https://platform.moonshot.cn/docs
系列导航 :本课程全集见专栏 AI Agent智能体系列;上一课·第 4 课 环境与第一个MCP Server;下一课·第 6 课 传输实战测试与部署
我的专栏
| 蛋白 / 抗体 / 多肽 / 核酸 | 分子模拟 / 动力学 / 对接 | 药物 / 设计 / 案例 | AI / Agent / 大模型 |
|---|---|---|---|
| 开源蛋白结构预测 | 分子模拟基础 | 小分子药物设计案例 | AI Agent系列 |
| 开源蛋白生成方法实践 | 分子动力学模拟-Amber | 蛋白药物设计案例 | 化学大模型 |
| 开源多肽设计模型 | 分子动力学模拟-Gromacs | 多肽药物设计案例 | 《AI Agent原理与实战》 |
| 开源多肽性质预测 | 分子动力学模拟-OpenMM | 开源小分子生成设计 | CADD中的机器学习模型 |
| DNA/RNA药物设计 | 結合自由能 | 开源药代动力学软件 | 高效计算配置 |
| siRNA药物设计模型 | UCSF DOCK系列 | 我胡师兄说药 | |
| ASO药物设计模型 | rDock系列 LeDock系列 gnina系列 |