夜雨聆风学习资料网

ARTICLE · 991714

从工具孤岛到 AI 智能中枢:Java 基于 Spring AI Alibaba 构建生产级 MCP Server,并落地 K8s 智能运维

从工具孤岛到 AI 智能中枢:Java 基于 Spring AI Alibaba 构建生产级 MCP Server,并落地 K8s 智能运维

从工具孤岛到 AI 智能中枢:Java 基于 Spring AI Alibaba 构建生产级 MCP Server,并落地 K8s 智能运维

当 AI 开始调用数据库、订单系统、Kubernetes、Redis,甚至执行“重启生产服务”时,真正困难的已经不是 Function Calling。

真正的问题是:

AI 到底能调用什么?谁允许它调用?一次调用如何鉴权?危险操作如何确认?执行失败如何重试?整个过程如何审计?

MCP 解决的是 AI 与工具之间的标准化连接问题,而生产级 MCP Server 要解决的,是 AI Agent 接入企业内部系统后的安全、稳定与治理问题。

本文将以 Java + Spring AI Alibaba 为基础,从 MCP 协议原理出发,构建一个面向 Kubernetes 智能运维的生产级 MCP Server,并深入讨论工具设计、权限控制、异步任务、RBAC、审计、可观测性和分布式架构演进。


一、背景:AI 为什么会遇到“工具孤岛”?

假设你负责一家电商公司的后端和基础设施。

公司现在准备建设 AI 智能助手,希望用户可以直接提问:

帮我查询订单 10001 的状态。

或者:

查看 order-service 最近 1 小时是否存在大量错误。

再进一步:

如果订单服务 Pod 重启次数超过 3 次,分析最近日志,并给出处理建议。

最终甚至可能变成:

确认异常后,重启订单服务。

看起来只是让大模型调用几个接口,但真正实现后你会发现,企业内部能力分散在大量系统中:

订单服务
用户服务
商品服务
Redis
MySQL
日志平台
Prometheus
Kubernetes
CMDB
CI/CD

传统做法通常是针对不同模型分别实现工具适配:

                ┌──────── OpenAI Tools
订单服务 ────────┤
                ├──────── Claude Tool Use
                │
                ├──────── 通义 Function Calling
                │
                └──────── 其他 Agent Framework

随着模型和 Agent 越来越多,系统很容易演变成:

每增加一个模型,就增加一层工具适配代码。

最终出现几个典型问题:

1. 工具协议不统一

不同模型、不同 Agent Framework 的工具调用格式存在差异。

2. 工具能力重复封装

查询订单的能力本来已经存在,但为了支持不同 AI 平台,需要重复包装多次。

3. 工具无法动态发现

Agent 需要提前知道有哪些工具。

新增一个内部能力,可能意味着:

开发工具
修改 Agent
修改 Prompt
修改模型配置
重新部署

4. 企业内部能力开始失控

尤其当 AI 能调用:

删除数据
修改配置
重启服务
发布应用
执行数据库操作

问题已经不再只是“模型怎么调用接口”。

而是:

如何建立一套 AI 调用企业内部能力的标准基础设施?

这正是 MCP 的价值所在。


二、MCP 到底解决了什么问题?

MCP,全称:

Model Context Protocol

可以把它理解成:

AI 世界中的工具连接标准协议。

它试图解决:

AI 应用
    │
    │ 不再关心后面是什么模型、什么语言、什么系统
    ▼
MCP
    │
    ├──── Tool
    ├──── Resource
    └──── Prompt
    │
    ▼
企业内部系统

也就是说:

Claude
Cursor
自研 Agent
IDE
企业 AI 助手
        │
        ▼
   ┌─────────────┐
   │ MCP Client  │
   └──────┬──────┘
          │
          │ MCP Protocol
          ▼
   ┌─────────────┐
   │ MCP Server  │
   └──────┬──────┘
          │
     ┌────┼───────────────┐
     ▼    ▼               ▼
 Kubernetes  订单服务    Redis

这样,后端系统不再需要关心:

“调用我的到底是 Claude 还是 OpenAI?”

只需要实现:

“我是一个符合 MCP 协议的工具提供者。”


三、MCP 的核心架构

一个典型 MCP 架构包含三个角色。

3.1 Host

Host 是用户直接交互的 AI 应用,例如:

Claude Desktop
Cursor
IDE
企业 AI 助手
自研 Agent 平台

它负责:

  • • 与用户交互
  • • 管理模型
  • • 管理多个 MCP Client
  • • 组织工具调用

3.2 MCP Client

Client 通常运行在 Host 内部。

它负责:

连接 MCP Server
协议协商
获取工具列表
发送工具调用
接收执行结果

一个 Client 通常对应一个 MCP Server 连接。


3.3 MCP Server

MCP Server 才是真正提供企业能力的一方。

例如:

query_order
query_user
query_pod_status
get_pod_logs
restart_deployment
query_prometheus

Server 可以暴露三类主要能力:

Tools

可以执行的操作。

例如:

查询订单
查询日志
查询 Pod
重启 Deployment

Resources

向 AI 提供上下文资源。

例如:

数据库 Schema
CMDB 信息
服务说明
运行手册
系统文档

Prompts

提供可复用的 Prompt 模板。

例如:

故障分析模板
订单异常分析模板
线上事故排查模板

四、一次 MCP 工具调用发生了什么?

以:

查询订单状态

为例。

完整过程可以理解为:

① Client 初始化
        │
        ▼
initialize
        │
        ▼
② Server 返回能力
        │
        ▼
③ Client 获取工具
        │
        ▼
tools/list
        │
        ▼
④ 返回:
{
  "name": "query_order_status",
  "description": "根据订单ID查询订单状态"
}
        │
        ▼
⑤ 用户提问
        │
        ▼
“查询订单 10001”
        │
        ▼
⑥ LLM 判断需要调用工具
        │
        ▼
tools/call
{
  "name": "query_order_status",
  "arguments": {
      "orderId": "10001"
  }
}
        │
        ▼
⑦ MCP Server 执行业务逻辑
        │
        ▼
⑧ 返回结果

这里有一个非常重要的认知:

MCP 不负责替你实现业务能力。

MCP 做的是:

标准化 AI 如何发现和调用这些能力。

例如:

订单查询

仍然应该由你的订单服务实现。

MCP Server 只是一个:

AI Tool Gateway

或者:

AI Capability Adapter

五、MCP 不等于“另一个 Function Calling”

很多人第一次接触 MCP 时会问:

这不就是 Function Calling 吗?

确实有相似之处。

但是两者解决的问题不同。

对比
Function Calling
MCP
核心目标
模型调用函数
AI 连接外部能力
协议
通常由模型厂商定义
统一协议
模型绑定
通常存在
相对模型无关
工具发现
通常应用预先提供
支持标准化发现
Resources
通常不是核心能力
支持
Prompts
通常不是协议能力
支持
跨系统
需要自行封装
更适合作为标准接口
企业工具治理
需要自行设计
可在协议之上统一建设

简单理解:

Function Calling 是“模型怎么调用函数”。

而:

MCP 是“AI 系统如何连接外部世界”。

两者并不是完全竞争关系。

实际上,一个 Agent 完全可以:

LLM
 │
 │ Function Calling
 ▼
Agent Runtime
 │
 │ MCP
 ▼
MCP Server
 │
 ▼
企业系统

六、为什么不能把企业接口直接暴露给 AI?

这是生产环境最容易被忽略的问题。

假设你直接定义:

@Tool(
    name = "execute_sql",
    description = "执行任意 SQL"
)

public String executeSql(String sql) {
return jdbcTemplate.queryForList(sql).toString();
}

AI 理论上可能生成:

DELETEFROM users;

或者:

UPDATE orders SET status ='SUCCESS';

再例如:

@Tool(
    name = "restart_service",
    description = "重启 Kubernetes 服务"
)

如果没有额外治理:

用户 Prompt
    ↓
LLM
    ↓
Tool Call
    ↓
直接重启生产服务

这是不可接受的。

所以生产级架构必须从:

AI → Tool → System

升级为:

AI
 │
 ▼
Agent / Host
 │
 ▼
MCP Gateway
 │
 ├── 身份认证
 ├── 租户识别
 ├── 用户权限
 ├── Tool 权限
 ├── 参数校验
 ├── 风险识别
 ├── 限流
 └── 审计
 │
 ▼
MCP Tool
 │
 ├── Read Tool
 ├── Write Tool
 └── Dangerous Tool
 │
 ▼
企业系统

MCP Server 不应该只是一个 Tool Controller。

它应该逐步演进为:

AI 调用企业内部能力的安全网关。


七、技术选型:为什么选择 Java + Spring AI Alibaba?

对于 Java 技术体系,可以将 MCP Server 的实现分为几个层次。

7.1 官方 Java MCP SDK

适合:

需要完全控制协议层
需要自己实现传输层
需要封装非 Spring 项目

优点:

  • • 更接近协议
  • • 灵活
  • • 依赖较少

缺点:

  • • 工具注册
  • • 生命周期
  • • Spring 集成
  • • 可观测性

需要自己处理更多工程问题。


7.2 Spring AI MCP

如果系统本身已经是 Spring Boot 项目,这是非常自然的选择。

核心优势:

Spring Boot
    +
Spring AI
    +
MCP

可以直接利用:

Spring Bean
依赖注入
Actuator
Micrometer
Security
AOP

7.3 Spring AI Alibaba

如果企业本身已经使用:

Spring Boot
Spring Cloud Alibaba
Nacos
Sentinel
RocketMQ / Kafka

那么 Spring AI Alibaba 更适合作为 AI 应用层的整合框架。

最终推荐架构不是:

“所有 MCP Server 都必须绑定某一个 AI 框架。”

而是:

协议层
MCP
      ↓
Spring AI / Spring AI Alibaba
      ↓
企业基础设施
Nacos
Redis
MQ
Prometheus
Kubernetes

这样未来替换模型时:

Qwen
OpenAI
Claude
其他模型

不会影响后面的工具服务。


八、生产级架构设计

下面以“AI 智能运维平台”为例。

我们希望 AI 可以:

查询 Pod
查询 Deployment
获取日志
查询 Prometheus
分析异常
创建运维任务
重启服务
查询任务结果

整体架构:

                    ┌─────────────────┐
                    │      User       │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │   AI Assistant  │
                    │  Agent / Host   │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │   MCP Gateway   │
                    │                 │
                    │ Authentication  │
                    │ Authorization   │
                    │ Rate Limit      │
                    │ Audit           │
                    │ Risk Control    │
                    └────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              ▼              ▼              ▼
      ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
      │ K8s MCP      │ │ Order MCP    │ │ Monitor MCP  │
      └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
             │                │                │
             ▼                ▼                ▼
         Kubernetes        Order Service     Prometheus

相比把所有工具塞进一个项目:

MCP Server
 ├── K8s Tool
 ├── Order Tool
 ├── User Tool
 ├── Database Tool
 └── CI/CD Tool

生产环境更推荐:

按照领域拆分 MCP Server。

例如:

mcp-k8s-server
mcp-order-server
mcp-monitor-server
mcp-cmdb-server
mcp-database-server

这样可以实现:

独立权限

mcp-k8s-server

拥有 Kubernetes 权限。

而:

mcp-order-server

根本没有 K8s 凭证。


独立扩容

日志查询可能非常频繁:

mcp-k8s-server

可以独立扩容。


降低权限爆炸

不要出现:

一个 MCP Server
拥有所有系统最高权限

否则一个 Token 泄露,就可能影响整个内部系统。


九、工具设计:不要直接暴露底层 API

这是 MCP 落地中非常重要的一点。

9.1 不推荐这样设计

@Tool
public String kubectl(String command) {
return shellExecutor.execute(command);
}

或者:

@Tool
public String executeSql(String sql)

这种工具虽然“万能”。

但风险极高。

AI 最终拥有的实际上是:

任意 Shell 权限
任意数据库权限

9.2 推荐:面向业务能力设计工具

例如:

query_pod_status
get_pod_logs
query_deployment
restart_deployment

而不是:

execute_kubectl
execute_shell

工具应该设计为:

有限能力 + 明确语义 + 严格参数。

例如:

publicrecordPodQueryRequest(
        String namespace,
        String appName
)
 {
}

工具:

@Tool(
    name = "query_pod_status",
    description = """
        查询指定 Kubernetes 命名空间和应用的 Pod 状态。
        返回 Pod 名称、运行状态、重启次数和创建时间。
        该工具仅支持查询,不会修改 Kubernetes 资源。
        """
)

public PodStatusResponse queryPodStatus(
        PodQueryRequest request
)
 {
return opsService.queryPodStatus(request);
}

这样 AI 只能:

查询 Pod

而不能:

执行任意 Kubernetes 命令

十、构建 K8s MCP Tool

下面定义几个基础工具。

10.1 查询 Pod

@Service
@RequiredArgsConstructor
publicclassKubernetesTools {

privatefinal KubernetesClient kubernetesClient;

@Tool(
        name = "query_pod_status",
        description = """
            查询指定命名空间下应用的 Pod 状态。
            返回 Pod 名称、Phase、重启次数和 Pod IP。
            仅允许查询授权命名空间。
            """
    )

public List<PodStatusDTO> queryPodStatus(
@ToolParam(description = "Kubernetes 命名空间")
            String namespace,

@ToolParam(description = "应用名称")
            String appName
    )
 {

        checkNamespacePermission(namespace);

        List<Pod> pods = kubernetesClient
                .pods()
                .inNamespace(namespace)
                .withLabel("app", appName)
                .list()
                .getItems();

return pods.stream()
                .map(this::convert)
                .toList();
    }

}

注意这里不要只关注:

能不能调用成功

还应该考虑:

namespace 是否允许?
用户是否拥有权限?
结果是否需要脱敏?
一次最多返回多少 Pod?

十一、危险操作必须与查询操作分离

生产环境建议将工具分为三级。

Level 1:只读工具

例如:

query_pod_status
get_pod_logs
query_order
query_metrics

特点:

无状态修改
风险低

Level 2:可逆操作

例如:

scale_deployment
restart_deployment
clear_cache

需要:

权限校验
审计
限流

Level 3:高风险操作

例如:

delete_namespace
delete_database
execute_sql
rollback_production

不能直接执行。

推荐流程:

AI 请求操作
        │
        ▼
创建 Operation
        │
        ▼
风险检测
        │
        ▼
返回 Confirmation ID
        │
        ▼
用户确认
        │
        ▼
confirm_operation
        │
        ▼
异步执行

也就是:

AI:我要删除数据库
        ↓
MCP:
operationId=xxx
status=PENDING_CONFIRM
        ↓
用户确认
        ↓
正式执行

这样可以避免:

模型一次错误推理,直接影响生产环境。


十二、重启服务不要同步执行

一个常见错误是:

@Tool
public String restartDeployment(
        String namespace,
        String deploymentName
)
 {
    kubernetesClient
        .apps()
        .deployments()
        .inNamespace(namespace)
        .withName(deploymentName)
        .rolling()
        .restart();

return"success";
}

问题是:

调用是否超时?
重启是否真正成功?
Deployment 是否恢复?
新 Pod 是否 Ready?

因此更推荐:

Tool
 │
 ▼
创建任务
 │
 ▼
返回 taskId
 │
 ▼
MQ
 │
 ▼
Task Worker
 │
 ▼
Kubernetes
 │
 ▼
Redis / DB 保存结果

例如:

@Tool(
    name = "restart_deployment",
    description = "创建 Deployment 滚动重启任务,异步执行"
)

public TaskResponse restartDeployment(
        String namespace,
        String deploymentName
)
 {

    checkWritePermission(namespace);

StringtaskId= UUID.randomUUID().toString();

    taskService.create(
            taskId,
"RESTART_DEPLOYMENT",
            namespace,
            deploymentName
    );

    kafkaTemplate.send(
"ops-task-topic",
            taskId
    );

returnnewTaskResponse(
            taskId,
"PENDING"
    );
}

AI 获得:

{
"taskId":"xxx",
"status":"PENDING"
}

然后再调用:

query_task_result

查看:

PENDING
RUNNING
SUCCESS
FAILED

十三、完整任务状态机

建议建立明确的任务状态。

PENDING
   │
   ▼
RUNNING
   │
   ├──── SUCCESS
   │
   ├──── FAILED
   │
   └──── TIMEOUT

对于危险操作:

PENDING_CONFIRM
       │
       ▼
CONFIRMED
       │
       ▼
PENDING
       │
       ▼
RUNNING
       │
       ├── SUCCESS
       └── FAILED

对应数据表可以设计:

CREATE TABLE mcp_operation_task (
    id BIGINTPRIMARY KEY,
    task_id VARCHAR(64) NOT NULL,
    operation_type VARCHAR(64) NOT NULL,
    status VARCHAR(32) NOT NULL,

    operator_id VARCHAR(64),
    agent_id VARCHAR(64),

    namespace VARCHAR(128),
    resource_name VARCHAR(256),

    request_params JSON,
result JSON,
    error_message TEXT,

    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

非常重要的是:

不要只记录“任务成功还是失败”。

还应该记录:

谁发起?
哪个 Agent?
调用了哪个 Tool?
参数是什么?
最终执行结果?
失败原因?

这就是 AI 工具调用的审计基础。


十四、真正生产级 MCP Server 必须有审计

推荐建立:

mcp_audit_log

记录:

traceId
requestId
userId
agentId
toolName
arguments
permissionResult
riskLevel
executeStatus
executeTime
errorMessage

调用链:

User
  │
  ▼
Agent
  │
  ▼
MCP Gateway
  │ traceId=abc
  ▼
Tool Authorization
  │
  ▼
Tool Execution
  │
  ▼
Audit Log

出现事故时,至少可以回答:

谁通过 AI 重启了生产订单服务?

而不是只能看到:

kubectl rollout restart

却不知道是谁触发的。


十五、Kubernetes 权限:绝对不要使用 cluster-admin

错误示例:

kind:ClusterRoleBinding
roleRef:
name:cluster-admin

这意味着 MCP Server 一旦被攻击:

AI → MCP → cluster-admin

攻击者理论上可能控制整个集群。


推荐最小权限原则。

例如只允许:

pods
pods/log
deployments

只允许:

get
list
watch
patch

RBAC 示例:

apiVersion:v1
kind:ServiceAccount
metadata:
name:mcp-k8s-server
namespace:ops
---
apiVersion:rbac.authorization.k8s.io/v1
kind:Role
metadata:
name:mcp-k8s-role
namespace:production
rules:

-apiGroups: [""]
resources:
-pods
-pods/log
verbs:
-get
-list
-watch

-apiGroups: ["apps"]
resources:
-deployments
verbs:
-get
-list
-patch
---
apiVersion:rbac.authorization.k8s.io/v1
kind:RoleBinding
metadata:
name:mcp-k8s-binding
namespace:production
subjects:
-kind:ServiceAccount
name:mcp-k8s-server
namespace:ops
roleRef:
kind:Role
name:mcp-k8s-role
apiGroup:rbac.authorization.k8s.io

进一步建议:

开发环境 MCP
        ↓
dev namespace

测试 MCP
        ↓
test namespace

生产 MCP
        ↓
production namespace

不要让一个 MCP Server 默认拥有所有 Namespace 权限。


十六、AI 智能运维的完整案例

现在来看一个真实一点的场景。

用户:

帮我检查 order-service 最近是否异常,如果 Pod 重启次数超过 3 次,分析日志原因,给出处理建议。

AI 的执行链路:

① tools/list

发现:

query_pod_status
get_pod_logs
query_metrics
restart_deployment
create_operation
confirm_operation

然后:

② query_pod_status

结果:

order-service-xxx
restartCount = 4

满足异常条件。

继续:

③ get_pod_logs

获取最近错误日志。

AI 分析发现:

OutOfMemoryError

继续调用:

④ query_metrics

发现:

Memory Usage > 95%

此时 AI 不应该直接:

restart_deployment

而应该返回:

当前 order-service Pod 重启 4 次,日志存在 OOM,内存持续超过 95%。

建议先扩容或调整 JVM Memory 配置。直接重启只能短暂恢复,无法解决根因。

是否创建重启任务?

用户确认后:

⑤ create_operation

返回:

operationId=xxx
status=PENDING_CONFIRM

确认:

⑥ confirm_operation

最终:

⑦ 异步 Worker 执行

执行:

Kubernetes Rolling Restart

Worker 持续检查:

新 ReplicaSet 创建
↓
旧 Pod 终止
↓
新 Pod Ready
↓
健康检查通过

最终:

SUCCESS

整个流程才是真正的:

AI 驱动运维。

而不是:

AI 帮你执行 kubectl。


十七、性能设计:不要阻塞 MCP 连接线程

如果 MCP Server 使用响应式 Web 服务或长连接传输,必须特别注意:

@Tool
public String query() {
    jdbcTemplate.query(...);
}

如果工具执行线程与网络事件线程混用,可能导致:

慢 SQL
↓
线程阻塞
↓
连接处理能力下降
↓
大量 MCP Client 超时

推荐架构:

Network Layer
     │
     │ Non-blocking
     ▼
MCP Request
     │
     ▼
Tool Dispatcher
     │
     ├──── Virtual Thread
     │
     ├──── Worker Pool
     │
     └──── Async Task
     │
     ▼
Business Service

不同类型工具使用不同执行策略。

快速查询

同步

例如:

查询订单
查询 Pod
查询状态

IO 密集型

独立线程池 / Virtual Thread

例如:

调用多个微服务
查询日志
查询数据库

长时间任务

异步任务

例如:

重启服务
发布应用
执行巡检
批量修复

十八、幂等性:AI 会重复调用工具

这是传统接口设计中容易忽略,但 Agent 场景必须考虑的问题。

因为 Agent 可能:

网络超时
↓
不知道工具是否成功
↓
再次调用

例如:

restart_deployment

如果重复执行:

第一次 → 正在重启
第二次 → 再次重启
第三次 → 又重启

因此写操作建议支持:

idempotencyKey

例如:

@Tool
public TaskResponse restartDeployment(
        String namespace,
        String deploymentName,
        String idempotencyKey
)
 {
Tasktask= taskService.findByIdempotencyKey(
            idempotencyKey
    );

if (task != null) {
return task.toResponse();
    }

return createTask(...);
}

这样即使 Agent 重试:

相同 idempotencyKey

仍然返回同一个任务。


十九、工具结果不要无限返回

另一个容易出现的问题:

getPodLogs()

直接返回:

10MB 日志

结果:

MCP 返回巨大内容
↓
Agent Context 膨胀
↓
Token 消耗增加
↓
LLM 性能下降

推荐:

get_pod_logs

增加限制:

时间范围
最大行数
关键词过滤
错误级别

例如:

get_pod_logs(
    namespace,
    podName,
    sinceMinutes=60,
    tailLines=500,
    keyword="ERROR"
)

同时 MCP Server 可以返回结构化结果:

{
"totalLines":5000,
"returnedLines":500,
"truncated":true,
"logs":[]
}

AI 才能知道:

当前结果只是部分日志。


二十、Kubernetes 部署

一个基础 Deployment:

apiVersion:apps/v1
kind:Deployment
metadata:
name:mcp-k8s-server

spec:
replicas:2

selector:
matchLabels:
app:mcp-k8s-server

template:
metadata:
labels:
app:mcp-k8s-server

spec:
serviceAccountName:mcp-k8s-server

containers:
-name:mcp-server

image:your-registry/mcp-k8s-server:1.0.0

ports:
-containerPort:8080

resources:
requests:
cpu:"250m"
memory:"512Mi"

limits:
cpu:"1"
memory:"1Gi"

readinessProbe:
httpGet:
path:/actuator/health/readiness
port:8080

livenessProbe:
httpGet:
path:/actuator/health/liveness
port:8080

如果服务存在长连接,需要特别注意:

Pod 扩容
Pod 缩容
滚动发布
长连接迁移
客户端重连

因此 MCP Server 应尽可能保持:

无状态

任务状态不要保存在:

JVM Memory

推荐:

Redis
MySQL
PostgreSQL

二十一、MCP Server 的可观测性设计

生产环境建议至少监控:

请求指标

mcp_request_total
mcp_request_duration
mcp_error_total

Tool 指标

tool_call_total
tool_call_duration
tool_call_error_total

并按照:

toolName
status
riskLevel

进行标签分类。


例如可以快速发现:

query_pod_status
QPS = 500
P99 = 200ms

或者:

restart_deployment
调用 10 次
失败 3 次

链路追踪

推荐完整链路:

User Request
     │
     ▼
AI Gateway
     │
     ▼
Agent
     │
     ▼
MCP Gateway
     │
     ▼
MCP Tool
     │
     ├──── Order Service
     │
     ├──── Kubernetes API
     │
     └──── Redis

统一:

traceId

这样线上出现:

工具超时

可以直接定位:

是 MCP Server 慢?

还是:

Kubernetes API 慢?

还是:

后面的订单服务慢?


二十二、最终推荐的企业级架构

随着 MCP 工具越来越多,推荐演进为:

                         ┌───────────────────┐
                         │    AI Application │
                         │  Agent / Copilot  │
                         └─────────┬─────────┘
                                   │
                                   ▼
                         ┌───────────────────┐
                         │    MCP Gateway    │
                         │                   │
                         │ Authentication    │
                         │ Authorization     │
                         │ Rate Limit        │
                         │ Audit             │
                         │ Risk Control      │
                         │ Routing           │
                         └─────────┬─────────┘
                                   │
          ┌────────────────────────┼────────────────────────┐
          ▼                        ▼                        ▼
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ MCP K8s Server  │     │ MCP Order       │     │ MCP Monitor     │
│                 │     │ Server          │     │ Server          │
└────────┬────────┘     └────────┬────────┘     └────────┬────────┘
         │                       │                       │
         ▼                       ▼                       ▼
    Kubernetes              Order System             Prometheus
                                                        Grafana

后续还可以增加:

MCP Database Server
MCP CMDB Server
MCP CI/CD Server
MCP Customer Service Server

最终形成企业内部:

AI Capability Platform

也就是:

以前:
AI 需要什么能力
↓
开发人员临时接一个 API

现在:
企业系统
↓
统一封装 MCP 能力
↓
统一权限
↓
统一审计
↓
统一发现
↓
任意 Agent 调用

二十三、总结

MCP 的价值,并不只是:

“让大模型调用 Java 方法。”

真正的价值在于:

让 AI 以标准方式接入企业内部系统。

对于 Java 开发者来说,构建 MCP Server 的技术难度其实并不是最大的挑战。

真正需要解决的是:

工具如何设计?
权限如何控制?
危险操作如何确认?
调用如何幂等?
长任务如何异步?
任务如何追踪?
整个过程如何审计?
多个 MCP Server 如何治理?

因此,一个真正生产级的 MCP 架构应该是:

标准化
+
工具分层
+
最小权限
+
风险控制
+
异步任务
+
幂等
+
审计
+
可观测性
+
分布式治理

最后可以把 MCP Server 理解成:

AI 时代的企业能力网关。

过去:

API Gateway

解决的是:

应用如何调用企业服务。

而未来:

MCP Gateway

解决的可能是:

AI 如何安全、标准化、可治理地调用企业能力。

当你的 AI 开始查询订单、分析日志、读取监控、操作 Kubernetes,MCP 就不再只是一个“新协议”。

它将逐渐成为:

连接 AI 与企业系统之间的重要基础设施。

相关学习资料