MCP协议实战:30分钟给Claude接上你公司的内部API

上周给团队做Claude落地,折腾了半天怎么让它访问内部API,最后发现MCP协议真的香,30分钟就搞定了。今天把完整流程写出来,大家直接抄作业就行。

为什么要给Claude接内部API?

说实话,现在用大模型做开发的同学,90%都遇到过这个问题:

大模型训练数据都是公开的,根本不知道你公司内部的业务数据,也没法调用你内部的系统接口。

之前我们为了让Claude能查内部的用户数据,搞了个很蠢的方案:每次让用户把数据导出来,复制粘贴到对话框里。

不仅麻烦,还容易泄露敏感数据,而且数据量大的时候根本没法弄。

直到上个月Anthropic官方推出了MCP(Model Context Protocol)协议,完美解决了这个问题。

MCP到底是什么?

简单来说,MCP就是一套让大模型安全访问外部服务的标准协议。

你可以把它理解成大模型和外部系统之间的"翻译官":

  • 你公司的内部API不需要改任何代码,只要写个简单的MCP适配器就行
  • Claude会自动识别什么时候需要调用内部API,不需要你写复杂的提示词
  • 所有请求都经过权限校验,不会泄露敏感数据
    最重要的是,整个配置过程真的非常简单,我亲测30分钟就能跑通。

准备工作

首先你需要准备好这几样东西:

  1. 一个可以正常使用的Claude API Key(没有的话去Anthropic官网申请,几分钟就搞定)
  2. 你公司内部API的访问地址和权限
  3. 一台能同时访问公网和内部网络的服务器(做MCP代理用)
  4. 基础的Node.js/Python环境就行,不用什么复杂的依赖

哦对了,官方有现成的MCP SDK,直接用就行,不用自己从零写协议实现。

第一步:搭建MCP代理服务

我用的是Node.js版本的SDK,写起来最方便。

首先初始化项目:

bash 复制代码
mkdir claude-mcp-proxy
cd claude-mcp-proxy
npm init -y
npm install @anthropic-ai/mcp-server express cors

然后创建一个server.js文件,核心代码非常简单:

javascript 复制代码
const { MCPServer } = require('@anthropic-ai/mcp-server');
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());

// 初始化MCP服务器
const mcpServer = new MCPServer({
  // 定义你要暴露给Claude的工具
  tools: [
    {
      name: "query_internal_user_data",
      description: "查询公司内部的用户数据,根据用户ID返回用户信息",
      parameters: {
        type: "object",
        properties: {
          user_id: {
            type: "string",
            description: "要查询的用户ID"
          }
        },
        required: ["user_id"]
      },
      // 工具调用的具体实现
      handler: async (params) => {
        const { user_id } = params;
        // 这里调用你公司的内部API
        const response = await fetch(`https://internal-api.your-company.com/users/${user_id}`, {
          headers: {
            "Authorization": "Bearer YOUR_INTERNAL_API_TOKEN"
          }
        });
        return await response.json();
      }
    },
    // 你可以在这里加更多的内部API工具
    {
      name: "query_order_statistics",
      description: "查询订单统计数据,可以按日期范围查询",
      parameters: {
        type: "object",
        properties: {
          start_date: { type: "string", description: "开始日期,格式YYYY-MM-DD" },
          end_date: { type: "string", description: "结束日期,格式YYYY-MM-DD" }
        },
        required: ["start_date", "end_date"]
      },
      handler: async (params) => {
        const { start_date, end_date } = params;
        const response = await fetch(`https://internal-api.your-company.com/orders/statistics?start=${start_date}&end=${end_date}`, {
          headers: { "Authorization": "Bearer YOUR_INTERNAL_API_TOKEN" }
        });
        return await response.json();
      }
    }
  ]
});

// 暴露MCP接口
app.post('/mcp', async (req, res) => {
  const result = await mcpServer.handleRequest(req.body);
  res.json(result);
});

// 启动服务
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`MCP代理服务运行在 http://localhost:${PORT}`);
});

是不是超简单?你只要把内部API的地址和参数改一下就行,其他的SDK都帮你处理好了。

启动服务:

bash 复制代码
node server.js

现在你的MCP代理服务就跑起来了。

第二步:配置Claude使用你的MCP服务

接下来需要告诉Claude,有这么个MCP服务可以用。

如果你用的是官方的Claude API,调用的时候加个mcp_endpoints参数就行:

python 复制代码
from anthropic import Anthropic

client = Anthropic(api_key="YOUR_ANTHROPIC_API_KEY")

response = client.messages.create(
  model="claude-3-opus-20240229",
  max_tokens=1024,
  messages=[
    {"role": "user", "content": "帮我查一下用户ID为12345的用户信息,还有2026年4月的订单统计"}
  ],
  # 在这里配置你的MCP服务地址
  mcp_endpoints=[
    "https://your-mcp-proxy-server.com/mcp"
  ]
)

print(response.content[0].text)

就这么简单!Claude会自动识别用户的问题需要调用哪些工具,然后自动去你的MCP服务调用对应的接口,再把结果整合到回答里。

你根本不用写任何提示词告诉它怎么调用API,MCP协议会自动处理所有的参数校验和格式转换。

第三步:测试效果

我测试的时候,问的问题是"帮我查一下用户ID 12345的信息,还有4月的订单总金额"。

Claude自动做了这几件事:

  1. 识别到需要调用两个工具:query_internal_user_dataquery_order_statistics
  2. 自动提取参数:user_id=12345,start_date=2026-04-01,end_date=2026-04-30
  3. 调用我的MCP代理服务,拿到两个接口的返回结果
  4. 把结果整合起来,用自然语言回答我
    整个过程不到3秒,完全不需要人工干预,效果真的惊到我了。

踩坑记录

我在配置的过程中也踩了几个坑,大家注意避坑:

1. 内网访问问题

MCP代理服务必须同时能访问公网和内网,不然Claude的请求过来了,但是访问不了内部API。

我一开始把代理服务部署在了公网服务器上,访问不了内部API,折腾了半天。后来改成部署在公司的VPN网络里,对外暴露一个公网端口就好了。

2. 权限校验

千万不要把MCP服务直接暴露在公网上不加任何校验!

我是在MCP服务前面加了一层API Key校验,只有Anthropic的官方IP段才能访问,避免被人恶意调用内部API。

官方文档里有最新的Anthropic IP段列表,直接配置到nginx或者服务层就行。

3. 参数校验

虽然MCP SDK会自动校验参数,但是最好在handler里再加一层业务校验,避免传入非法参数导致内部API出错。

比如用户ID的格式、日期范围的合法性之类的,多一层校验没坏处。

4. 超时时间

内部API的响应可能比较慢,记得把MCP服务的超时时间设长一点,我设的是30秒,足够大部分内部接口响应了。

扩展玩法

搞定基础功能之后,我还扩展了几个好用的功能:

  1. 加了调用日志,所有的工具调用都记录下来,方便排查问题
  2. 加了权限控制,不同的用户角色只能调用对应的API
  3. 加了缓存,相同的查询请求直接返回缓存结果,不用每次都调用内部API
  4. 加了更多的工具,比如查询内部知识库、创建工单、发送内部通知之类的
    现在我们团队的客服、运营甚至产品同学,都直接用Claude查内部数据,不用再找技术同学跑数了,效率提升了至少一倍。

写在最后

说实话,MCP协议真的是我最近半年见过的最实用的AI开发协议。

之前想给大模型接外部工具,要么用复杂的Function Calling提示词工程,要么用各种第三方中间件,麻烦得要死。

现在有了MCP,你只要专注写自己的业务逻辑就行,其他的都交给协议处理。

整个配置过程真的只有30分钟,推荐所有做AI落地的同学都试试。

如果配置过程中遇到问题,欢迎评论区留言,我看到都会回复。

相关推荐
正在走向自律2 小时前
KingbaseES 基础 SQL 语法与日常运维实操手册
运维·数据库·sql·kingbasees
㳺三才人子2 小时前
SpringDoc OpenAPI 配置問題
服务器·spring boot
实心儿儿2 小时前
Linux —— 进程概念 - 程序地址空间
linux·运维·算法
buhuizhiyuci2 小时前
linux篇-应用商店:“yum / apt“ 的详解
linux·运维·服务器
Tisfy2 小时前
CORS 跨域重定向后 Origin 变 null —— 一次 Nginx 字体加载失败的排查记录
运维·nginx·html·cors
零号全栈寒江独钓3 小时前
基于c/c++实现linux/windows跨平台ntp时间戳服务器
linux·c语言·c++·windows
程序猿阿伟3 小时前
《QClaw隐藏的GitHub自动化神级用法》
运维·自动化·github
ulias2123 小时前
进程初识(1)
linux·运维·服务器·网络·c++
发发就是发3 小时前
TTY子系统与线路规程:那个让我深夜抓狂的串口“丢包”问题
linux·服务器·驱动开发·单片机·嵌入式硬件