前端工程师的周五:300行Prompt的“屎山”
一个前端工程师的Agent在合并新闻源时又报错了。他的系统提示词堆到近300行,里面塞满了各种API调用指令、格式转换咒语、边界补丁。每次加一个新信息源,他都得小心翼翼往里埋代码,生怕触发隐藏依赖。
把工具调用逻辑硬塞进Prompt,系统必然脆弱。一次API变更,就得翻遍整段Prompt修改。
MCP是什么:给工具调用一个标准插座
MCP(Model Context Protocol)由Anthropic在2025年提出,同年11月移交给Linux Foundation旗下的Agentic AI Foundation治理。它的作用是为AI模型和外部工具之间提供统一的接口——就像给电器装了个标准插座,不用每次都重新接线。
实操:从300行到10行
拿一个信息聚合Agent来说:它能查科技新闻、天气和汇率。
改之前:你在Prompt里手写每个工具的调用细节。
# 当用户问科技新闻时
使用news_api工具,参数:{"sources": ["techcrunch", "theverge"]}
# 当用户问天气时
使用weather_api工具,参数:{"location": "用户提到的城市"}
# 当用户问汇率时
使用exchange_rate工具,参数:{"from": "USD", "to": "CNY"}
# 还得写至少15种边界处理...
这段Prompt会随着工具增多而膨胀,维护成本越来越高。
改之后:每个工具封装成独立的MCP Server,LLM通过标准协议调用。
MCP架构是三层:Host(宿主,比如Claude Desktop)、Client、Server。
graph TD
A[用户请求] --> B[MCP Host: Agent主程序]
B -- MCP Client --> C[MCP Server: 新闻聚合]
B -- MCP Client --> D[MCP Server: 天气服务]
B -- MCP Client --> E[MCP Server: 汇率计算]
C --> F[TechCrunch API / TheVerge API]
D --> G[OpenWeather API]
E --> H[ExchangeRate API]
以下是一个新闻MCP Server的简化声明(TypeScript SDK):
const server = new Server({ name: "news-aggregator", version: "1.0.0" });
server.tool("get_tech_news", { description: "获取最新科技新闻" }, async () => {
const newsData = await fetchTechNewsFromAPI();
return { content: [{ type: "text", text: formatNews(newsData) }] };
});
Agent的Prompt变成:
你是一个信息聚合助手。可用工具:
- get_tech_news: 获取科技新闻
- get_current_weather: 获取天气
- convert_currency: 货币汇率转换
根据请求调用工具并整合信息。
300行变成不到10行。新增工具只需加一个Server,Prompt不用改。
MCP的三大核心设计
MCP定义了三个原语来解决“N×M问题”(N个模型对接M个工具):
- 工具(Tools):让模型执行操作,比如调API、查数据库。
- 资源(Resources):让模型以结构化方式读取数据源,比如把数据库表暴露成资源,模型直接查询。
- 提示模板(Prompts):预定义提示片段,供Agent调用,把领域知识模块化。
这样工具开发者专注维护Server,Agent开发者专注业务逻辑,相互独立。
用LangChain快速接入
用LangChain MCP Adapter连接上述Server:
const newsToolkit = new MCPToolkit({ serverUrl: "http://localhost:3000/news" });
await newsToolkit.connect();
const weatherToolkit = new MCPToolkit({ serverUrl: "http://localhost:3001/weather" });
await weatherToolkit.connect();
const model = new ChatAnthropic({ model: "claude-sonnet-4-20250514" });
const tools = [...newsToolkit.getTools(), ...weatherToolkit.getTools()];
const agent = createToolCallingAgent({ llm: model, tools });
const result = await agent.invoke({ input: "北京天气和最新的科技新闻" });
Agent程序轻量通用,可以随时切换不同工具模块。
从写提示词到搭系统
MCP正在改变开发方式:
- 重心转移:从花时间写精巧的Prompt,转向设计模块化、可观测的工具系统。
- 开箱即用:2026年开源社区已有大量现成的MCP Server,涵盖数据库、云服务、办公软件,可以像搭积木一样组合。
- 权限更清晰:每个Server可以配置独立API密钥和权限,避免把敏感信息全塞进Prompt。
Agent开发已经从科学家的玩具变成了工程师的日常工作。MCP让工具调用标准化,帮你避开手写Prompt的坑。