Homestead

BLOG260702 · MCP Proxy

将 MCP Proxy 引入到 API Call Demo 中

在不破坏原有 client-server 结构的前提下,为 Demo 加上一层可扩展的 MCP 工具调用路径。

2026.07.02约 10 分钟阅读API Call DemoModel Context Protocol

本文目标是在一个已有的 client-server API Call Demo 中,引入 MCP Proxy,让原本直接调用后端 API 的 Demo,扩展为可以通过 MCP 工具层访问数据,同时尽量不破坏原有项目结构。

整个改造的重点不是推翻原始 API,而是在保留原调用链的基础上,增加一条更接近 Agent 工具调用架构的新路径。

一、MCP 与本实例的基础知识

可以先把 MCP(Model Context Protocol)理解成一层“工具与上下文的标准接口”。大模型负责理解用户意图、规划步骤和生成调用参数;MCP 则把外部能力包装成可发现、可调用、可治理的工具,让模型不必直接耦合每一个后端服务、SDK 或私有接口。

在本实例中,MCP Proxy 位于 API Call Demo 与 MCP Server 之间。它不替代模型,也不替代业务 API,而是把“模型或应用想调用什么工具”和“后端实际如何暴露工具”解耦开来。

MCP Server

实际提供能力的一端,例如读取数据库、调用内部 API、访问文档或执行脚本。

MCP Client / Proxy

发起工具调用并治理调用过程,统一处理路由、鉴权、日志、错误返回和后续扩展。

二、原始 Demo 与改造原则

原始 Demo 只有一条直接路径:前端调用 Express server 暴露的 GET /api/profile,由后端直接返回 profile 数据。

这次改造的原则是只做加法,不破坏原结构。原来的 /api/profile 继续保留,新加的 /api/profile-via-mcp 用来展示通过 MCP Proxy 调用工具层的路径。

最重要的是:不要破坏原结构。原始 /api/profile 继续保留,只新增 MCP Proxy 入口和 MCP Server 工具层。

三、改造后的调用链路

改造后,Demo 同时保留 Direct API 与 MCP Proxy 两条路径。前端可以用 radio button 在两者之间切换。

01 Client选择 MCP Proxy 并提交 name。
02 Express Route进入 /api/profile-via-mcp。
03 MCP Client调用对应 tool。
04 MCP Server执行 MySQL 查询。
05 Response转换为与原 API 一致的 JSON。
Route说明
GET /api/profile原始 Direct API,保持兼容。
GET /api/profile-via-mcp通过 MCP Proxy 查询 profile。
GET /api/mcp/health检查 MCP Server 与 MySQL 状态。

四、模块拆分

Server 配置整理

.env 保存数据库连接参数,dbConfig.js 负责统一导出 MySQL 配置,避免 Express server 与 MCP server 配置分叉。

MCP Server Tools

db_health 检查数据库连接是否正常;get_profile_by_name 根据 name 查询 profile 数据。

mcpClient.js

启动或连接 mysqlToolsServer.js,读取 tools,调用指定工具,并接收 tool result。

mcpProxy.js

读取 req.query.name,调用 get_profile_by_name,再把 MCP 返回结果转换成和 /api/profile 一样的 JSON 格式。

五、最终结构

server\ 和 mcp-server\ 结构中都包含 node_modules\,便于读者理解两个 Node 项目各自有独立依赖。

C:\api-demo
  client\
    index.html
    script.js

  server\
    server.js
    mcpClient.js
    mcpProxy.js
    dbConfig.js
    .env
    package.json
    package-lock.json
    node_modules\

  mcp-server\
    mysqlToolsServer.js
    package.json
    package-lock.json
    node_modules\

小结

这次改造的核心,是在原有 API Call Demo 之上增加一层 MCP Proxy。它既保留原始 Demo 的简单性,又展示了 MCP 在工具化、解耦和扩展方面的价值。