七牛云

5 分钟搭建你的第一个 MCP Server,用 MaaS 平台的模型当大脑

Model Context Protocol (MCP) 作为连接 AI 宿主应用与外部工具的标准协议,解决了 AI 生态中接口碎片化的问题。然而,目前多数 MCP 文章偏向概念阐述,缺乏实际的模型服务集成方案。

在真实的工程落地中,频繁的工具调用与长文本分析往往面临两个硬伤:直连海外 API 极易因网络超时导致长链条任务中断,以及高频请求带来的高额 Token 成本。

本文将提供一个面向工程师的快速通关指南,展示如何基于 TypeScript 构建一个最小可用的 MCP 服务,接入 Claude Code,并利用七牛云 AI 大模型服务(提供国内加速节点与高并发保障)实现底层模型的无缝切换。

接口规范声明:本教程基于七牛云 AI 提供的 OpenAI 兼容 REST 接口,保持请求体结构一致,通过 MAAS_BASE_URL 与 MAAS_MODEL 参数实现模型解耦。若你的目标平台的 API 架构存在差异,请根据代码中 // TODO 标记重构相应的请求解析逻辑,整体流程无需变更。

01

本文交付目标

  1. 构建 MCP 服务端:使用 TypeScript 实现一个具备基础工具能力的 MCP Server。

  2. 多模型热切换:通过单行环境配置,动态路由至七牛云平台上的不同规模模型。

  3. 集成验证:将自定义 Server 接入 Claude Code,完成全链路闭环测试。

预计耗时:5 分钟

环境依赖:Node.js 18+

02

30 秒速览 MCP 协议架构

MCP 核心定义了 3 个角色,使得 AI 运行时(Runtime)能够以统一的标准调度外部能力:

  • Host:AI 宿主应用(例如 Claude Code、Cursor),负责接收用户输入并编排任务。

  • Client:宿主应用内部的协议通信模块,负责生命周期管理与消息路由。

  • Server:执行具体业务逻辑的实体程序,暴露具体的工具(Tools)接口。

+---------------------+              +------------------+              +------------------------+
| Claude Code (Host)  | <-- MCP -->  | 你的 MCP Server   | <-- REST --> | 七牛云 AI 大模型服务群    |
+---------------------+              +------------------+              +------------------------+

03

初始化工程环境

执行以下脚本创建项目并安装标准依赖:

Bash

mkdir mcp-maas-demo && cd mcp-maas-demo
npm init -y
npm install @modelcontextprotocol/sdk zod dotenv
npm install -D typescript @types/node tsx
npx tsc --init

在项目根目录下创建 .env 环境配置文件,配置七牛云 AI 平台凭证与路由参数:

代码段

# .env
MAAS_API_KEY=your_qiniu_api_key
MAAS_BASE_URL=https://api.qnaigc.com/v1
MAAS_MODEL=deepseek/deepseek-v4-pro # 示例模型,可按需替换为平台支持的其他模型

注:将模型标识(MAAS_MODEL)抽离至环境变量,是后续实现运行时模型热切换的核心工程设计。

04

实现最小可用 MCP 服务端

创建入口文件 src/index.ts,实现核心通信与工具注册逻辑:

TypeScript

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import "dotenv/config";

// ---- 1. 初始化 MCP Server ----
const server = new McpServer({
  name: "maas-demo-server",
  version: "1.0.0",
});

// ---- 2. 定义一个简单工具:查天气 ----
// 真实场景里你可以换成查订单、查文档、查库存等任意业务逻辑
server.registerTool(
"get_weather",
  {
    title: "查询天气",
    description: "根据城市名查询当前天气情况",
    inputSchema: {
      city: z.string().describe("城市名称,例如:北京、上海"),
    },
  },
  async ({ city }) => {
    // mock 数据,实际项目里换成真实天气 API
    const mockWeather = {
      city,
      temperature: `${20 + Math.floor(Math.random() * 10)}°C`,
      condition: ["晴", "多云", "小雨"][Math.floor(Math.random() * 3)],
    };
return {
      content: [
        {
type: "text",
          text: `${city}当前天气:${mockWeather.condition},气温 ${mockWeather.temperature}`,
        },
      ],
    };
  }
);

// ---- 3. 定义一个"调用 MaaS 模型做总结"的工具 ----
// 这里是今天的重点:展示如何在 MCP Server 内部调用 MaaS 平台的模型
server.registerTool(
"summarize_with_maas",
  {
    title: "用 MaaS 模型总结文本",
    description: "把一段较长的文本交给 MaaS 平台的模型,返回简短摘要",
    inputSchema: {
      text: z.string().describe("需要总结的原始文本"),
    },
  },
  async ({ text }) => {
    const summary = await callMaasModel(
      `请用一句话总结以下内容:\n${text}`
    );
return {
      content: [{ type: "text", text: summary }],
    };
  }
);

// ---- 4. 封装 MaaS 平台调用 ----
// 假设是 OpenAI 兼容接口,大多数 MaaS 平台都是这个形态
async function callMaasModel(prompt: string): Promise<string> {
  const response = await fetch(`${process.env.MAAS_BASE_URL}/chat/completions`, {
    method: "POST",
    headers: {
"Content-Type": "application/json",
      Authorization: `Bearer ${process.env.MAAS_API_KEY}`,
    },
    body: JSON.stringify({
      model: process.env.MAAS_MODEL, // 换模型只改这一个环境变量
      messages: [{ role: "user", content: prompt }],
      max_tokens: 300,
    }),
  });

if (!response.ok) {
    throw new Error(`MaaS 调用失败: ${response.status}${await response.text()}`);
  }

  const data = await response.json();
  // TODO: 如果你们平台的返回结构不是 OpenAI 兼容格式,改这里的取值路径
return data.choices?.[0]?.message?.content ?? "(未返回内容)";
}

// ---- 5. 启动 Server ----
const transport = new StdioServerTransport();
await server.connect(transport);

在 package.json 中配置启动脚本:

JSON

{
"scripts": {
"start": "tsx src/index.ts"
  }
}

执行本地编译验证:

Bash

npm run start

注:此时标准输入输出流(Stdio)将被挂起以等待 MCP 协议握手信号,未抛出异常即代表初始化正常(通过 Ctrl+C 终止进程)。

05

接入 Claude Code 进行集成测试

编辑 Claude Code 的全局配置文件(通常位于 ~/.claude.json,可通过 /mcp 命令确认绝对路径),注入以下服务节点:

JSON

{
"mcpServers": {
"qiniu-maas-demo": {
"command": "npx",
"args": ["tsx", "/[PROJECT_ABSOLUTE_PATH]/mcp-maas-demo/src/index.ts"],
"env": {
"MAAS_API_KEY": "your_qiniu_api_key",
"MAAS_BASE_URL": "https://api.qnaigc.com/v1",
"MAAS_MODEL": "deepseek/deepseek-v4-pro"
      }
    }
  }
}

重启 Claude Code 运行时,执行意图测试:

  • 验证业务工具:帮我查一下北京的天气

  • 验证代理工具:用 summarize_with_maas 工具帮我总结这段话:「MCP 协议正在成为 AI 应用调用外部工具的标准方式……」

Image

若正确返回业务数据与摘要结果,证明 Claude Code -> MCP Server -> 七牛云 AI 的全链路已全线贯通。

06

进阶:体验“零代码重构的配置级切换”

这是本小节的核心工程实践。得益于七牛云提供的多模型统一鉴权架构,当需要评估不同参数规模模型在特定工具场景下的表现时,你无需重构、无需重新构建编译任何 TypeScript 代码。

仅需变更配置中的 MAAS_MODEL 变量(在修改 .claude.json 里的环境变量后,客户端会自动在下一次请求中透传新模型):

Bash

# 切换前:使用高性价比开源模型
MAAS_MODEL=deepseek/deepseek-v4-flash

# 切换后:一键切到高性能闭源/大参数模型
MAAS_MODEL=deepseek/deepseek-v4-pro

再次执行 summarize_with_maas,服务将无缝走通新模型的推理链路。你可以明显观测到在七牛云国内加速节点的支撑下,不同模型的首字延迟(TTFT)与吞吐表现。同时,你可以登录七牛云后台控制台,直观查看在同一个 API Key 下,异构模型的流量分布、调用日志与计费快照。

07

结语与后续演进

通过本文的工程实践,我们成功构建了一个具备多模型路由能力的 MCP 服务。这种将 “工具定义(MCP)” 与 “大模型算力(MaaS)” 解耦的架构,为构建企业级低延迟、低成本 AI 应用提供了标准范式。

点击「阅读原文」,立即体验。

Image

推荐阅读

Image
Image
Image