在AI智能体与外部系统连接的赛道上,碎片化集成一直是行业痛点。不同工具与智能体的配对往往需要定制化开发,不仅重复劳动多,还难以构建真正可扩展的连接生态。而模型上下文协议(MCP)的出现,为这一问题提供了破局之道,它作为开源标准,让开发者只需一次集成,就能为AI智能体解锁海量外部工具与数据资源。自2024年11月推出以来,MCP的adoption速度惊人,社区已搭建数千台MCP服务器,主流编程语言的SDK全面覆盖,使其成为AI智能体连接外部系统的实际标准。
如今,开发者们常规性地为智能体配置跨数十台MCP服务器的数百乃至数千种工具,但随着工具数量的激增,新的挑战也浮出水面:工具定义的前置加载和中间结果的上下文传递,不仅拖慢了智能体响应速度,还大幅增加了token消耗成本。如何在不牺牲工具丰富度的前提下,提升AI智能体的运行效率?代码执行与MCP的结合,给出了极具创新性的解决方案。

当MCP的使用规模扩大,两种典型场景会直接导致AI智能体的成本上升与延迟增加,成为制约效率的核心瓶颈。让我们以医疗健康领域为例,看看这些问题如何影响实际业务。
工具定义占用过多上下文窗口。某医院使用AI智能体处理患者数据时,需要连接电子病历系统(EMR)、实验室信息系统(LIS)、影像归档和通信系统(PACS)等12个核心系统的48种工具。传统MCP客户端将所有工具定义一次性加载到上下文,仅EMR系统的"获取患者病史"工具就包含患者ID、就诊类型、时间范围等8个参数说明,48种工具累计占用超过8万个token。当医生查询某位患者的综合诊疗信息时,AI智能体需要先花费12秒消化这些工具定义,才能开始处理实际请求,严重影响诊疗效率。
中间结果重复消耗token。巴西最大的血库Hemominas曾遇到这样的问题:当AI智能体处理献血者匹配任务时,需要先调用献血者数据库工具获取符合条件的500条记录(约3万个token),再调用血液库存工具查询对应血型库存(约1.2万个token),最后调用预约系统工具生成时间表。在传统模式下,这三类数据会反复流经模型上下文,总token消耗超过15万,且每次工具调用都需要模型重新处理这些数据,导致整个流程耗时近40秒,难以满足紧急用血的时间要求。
这两个问题的本质,是传统直接工具调用模式与大规模工具集成的不兼容,当工具数量和数据体量突破临界点,上下文窗口的承载能力就会成为效率天花板。
随着代码执行环境在AI智能体中的普及,一种新的交互模式应运而生:将MCP服务器以代码API的形式呈现,让AI智能体通过编写代码与外部工具交互。这种模式从根源上解决了传统调用的两大痛点,实现了"按需加载工具"和"执行环境预处理数据"的双重优化,让MCP的规模化应用更具可行性。
实现这一模式的核心思路,是将所有可用工具组织成文件目录结构。以下是TypeScript环境下的工具目录示例:
/servers
/emr
getPatientHistory.ts
updateDiagnosis.ts
index.ts
/lis
getLabResult.ts
createTestOrder.ts
index.ts
/pacs
getImageStudy.ts
index.ts
searchTools.ts
每个工具文件封装了完整的MCP调用逻辑,以getPatientHistory.ts为例:
// 定义输入输出接口
interface GetPatientHistoryInput {
patientId: string;
visitType?: 'inpatient' | 'outpatient';
startDate?: string;
}
interface MedicalRecord {
date: string;
department: string;
diagnosis: string;
treatment: string;
}
// MCP工具调用实现
export async function getPatientHistory(input: GetPatientHistoryInput): Promise<MedicalRecord[]> {
return callMCPTool({
server: 'emr-server-01',
tool: 'get_patient_history',
parameters: input
});
}
这种文件化组织方式,让AI智能体能像开发者浏览代码库一样探索工具。在Hemominas的案例中,采用代码执行模式后,AI智能体只需加载献血者数据库和预约系统两个工具的定义(约1200个token),通过以下代码完成任务:
// 仅加载所需工具
import { searchDonors } from './servers/bloodBank/searchDonors';
import { createAppointment } from './servers/appointment/createAppointment';
// 执行逻辑
const eligibleDonors = await searchDonors({
bloodType: 'A型',
lastDonation: '>6个月',
location: '里约热内卢'
});
// 仅返回前10条匹配结果
const topDonors = eligibleDonors.slice(0, 10);
const appointments = await Promise.all(
topDonors.map(donor => createAppointment({
donorId: donor.id,
date: '2025-11-10'
}))
);
return appointments;
整个过程的token消耗降至2800个,时间缩短至3.2秒,效率提升超过10倍。Cloudflare也发布了类似的研究成果,并将这种模式命名为"Code Mode",其核心共识在于:大语言模型(LLM)具备强劲的代码编写能力,开发者应充分利用这一优势,让AI智能体以更高效的方式与MCP服务器交互。
大语言模型天生擅长浏览文件系统,将工具以代码文件形式呈现,让"按需读取工具定义"成为可能。AI智能体无需在任务开始前加载所有工具的完整定义,而是根据当前需求,通过遍历目录、读取特定文件的方式,获取必需的工具信息。
金融服务公司Hiscox在使用AI智能体处理保险承保时,构建了包含200多种工具的代码库。为了提升工具查找效率,他们开发了智能搜索功能:
// 搜索工具函数
async function searchTools(keywords: string[]): Promise<ToolInfo[]> {
const toolFiles = await readDirectory('./servers/**/*.ts');
return toolFiles.filter(file =>
keywords.some(keyword =>
file.name.includes(keyword) || file.content.includes(keyword)
)
).map(file => ({
name: file.name.replace('.ts', ''),
description: extractDescription(file.content),
path: file.path
}));
}
当需要处理财产保险承保时,智能体通过搜索"property insurance"快速定位到12个相关工具,并可选择仅查看名称、获取功能描述,或读取完整schema。这种方式使Hiscox的承保流程从原来的3天缩短到几分钟,效率提升超过100倍。
面对大规模数据时,代码执行模式能让AI智能体在执行环境中完成数据预处理,仅将关键信息返回给模型上下文,彻底避免海量原始数据占用token。n8n工作流平台的Code节点模式为我们提供了很好的实践参考,其"Run Once for All Items"模式特别适合批量数据处理:
// n8n Code节点示例:处理1万条患者数据
const allItems = $input.all();
// 仅保留需要随访的患者(状态为"待复查"且年龄>65岁)
const filteredItems = allItems.filter(item =>
item.json.followUpStatus === '待复查' && item.json.age > 65
);
// 仅返回关键字段
const result = filteredItems.map(item => ({
json: {
patientId: item.json.patientId,
name: item.json.name,
nextVisitDate: calculateNextVisitDate(item.json.lastVisit)
}
}));
return result;
这种处理方式使1万条原始数据(约50万个token)最终仅生成包含87条记录的精简结果(约4350个token),上下文负载降低99.1%。医疗健康公司CytoReason采用类似方法处理疾病模型数据,将查询时间从两分钟缩短到10秒。
传统工具调用模式下,循环、条件判断、错误处理等逻辑需要通过多次工具调用与模型交互来实现,而代码执行模式允许AI智能体使用熟悉的编程语法,将复杂逻辑封装成单段代码。搬家公司PODS在打造智能车身广告牌时,就利用了这一优势:
// 智能广告牌内容生成逻辑
async function generateBillboardContent() {
const locations = await getNYCBlockLocations(); // 获取纽约街区位置
const weather = await getWeatherData(); // 获取天气数据
for (const block of locations) {
try {
// 根据街区特征和天气生成标题
const title = await generateTitle({
neighborhood: block.neighborhood,
weather: weather.current,
timeOfDay: getCurrentTimeOfDay()
});
// 更新广告牌内容
await updateBillboard(block.id, title);
console.log(`Updated billboard ${block.id} with: ${title}`);
// 等待车辆移动到下一个街区
await sleep(30000);
} catch (error) {
console.error(`Failed to update billboard ${block.id}:`, error);
// 错误处理:使用默认内容
await updateBillboard(block.id, 'PODS: 轻松搬家,无忧生活');
}
}
}
这段代码实现了29小时内覆盖299个街区、生成6000多个独特标题的复杂任务,而传统工具调用模式需要进行数千次交互才能完成。
在处理敏感数据时,代码执行模式提供了天然的隐私保护机制。医疗健康组织Genial Care在处理自闭症患者治疗记录时,采用了"数据不落地"的处理方式:
// 敏感数据处理示例
async function processPatientRecords(patientIds: string[]) {
// 从MCP服务器获取加密的治疗记录
const encryptedRecords = await medicalRecordTool.getEncryptedRecords(patientIds);
// 在执行环境中解密并处理(不返回原始数据)
const processedData = encryptedRecords.map(record => {
const decrypted = decryptRecord(record);
return {
patientId: record.patientId,
treatmentProgress: calculateProgress(decrypted),
nextSessionType: recommendNextSession(decrypted)
};
});
// 仅返回处理结果,不包含原始敏感数据
return processedData;
}
同时,他们利用MCP客户端的自动token化功能,将身份证号、联系方式等PII信息替换为占位符,确保模型始终无法接触真实敏感数据。这种方式使Genial Care在优化治疗记录效率的同时,完全符合HIPAA隐私法规要求。
代码执行环境的文件系统访问权限,让AI智能体具备了状态保存能力。大众汽车在开发myVW APP的AI助手时,就构建了可复用的技能库:
// 技能库示例:车辆故障诊断
export async function diagnoseVehicleIssue(vin: string, symptoms: string[]) {
// 检查是否有缓存的诊断结果
if (await fileExists(`./cache/${vin}_diagnosis.json`)) {
return JSON.parse(await readFile(`./cache/${vin}_diagnosis.json`));
}
// 调用多个MCP工具获取数据
const vehicleData = await vehicleTool.getVehicleData(vin);
const errorCodes = await obdTool.getErrorCodes(vin);
const maintenanceHistory = await maintenanceTool.getHistory(vin);
// 执行诊断逻辑
const diagnosis = await analyzeDiagnosis({
vehicleData,
errorCodes,
symptoms,
maintenanceHistory
});
// 缓存诊断结果
await writeFile(`./cache/${vin}_diagnosis.json`, JSON.stringify(diagnosis));
return diagnosis;
}
这种方式使常见车辆问题的诊断时间从原来的20秒缩短到3秒,由于80%的查询可以直接使用缓存结果。AI助手还能根据用户的具体车型和历史数据,提供个性化的维修提议,大幅提升用户体验。
代码执行模式打破了传统工具调用的孤立性,让跨平台、多工具的复杂联动变得更简洁。小额贷款平台Fundwell利用这一优势,构建了端到端的融资匹配系统:
// 融资匹配流程
async function matchFinancingSolution(businessId: string) {
// 1. 获取企业财务数据
const financialData = await accountingTool.getFinancials(businessId);
// 2. 分析信用评分
const creditScore = await creditTool.calculateScore(financialData);
// 3. 筛选合适的贷款产品
const eligibleProducts = await lendingTool.searchProducts({
creditScore,
businessType: financialData.businessType,
loanAmount: financialData.requiredAmount
});
// 4. 生成对比报告
const report = await reportTool.generateComparison({
businessId,
eligibleProducts,
financialSummary: {
revenue: financialData.revenue,
profitMargin: financialData.profitMargin
}
});
// 5. 发送报告给客户
await emailTool.send({
to: financialData.contactEmail,
subject: '定制化融资方案',
body: report.html,
attachments: [report.pdf]
});
return {
success: true,
reportId: report.id
};
}
这套系统将原来需要3天的融资匹配流程缩短到15分钟,使Fundwell的客户转化率提升了40%。
尽管代码执行模式为MCP带来了显著的效率提升,但它也引入了新的复杂性。最核心的挑战是安全与基础设施要求。金融服务公司ING银行在部署代码执行模式时,构建了多层安全防护:
这些安全措施使ING银行能够放心地使用代码执行模式处理客户查询,同时满足严格的金融监管要求。但基础设施成本也相应增加了约30%,这是企业在选择该模式时需要权衡的因素。
MCP协议的核心价值,是为AI智能体构建了连接外部世界的"通用桥梁",而代码执行模式则为这座桥梁安装了"智能调度系统"。从技术演进的角度看,AI智能体的发展正在经历从"简单工具调用者"到"复杂系统协作者"的转变,这一转变的本质是软件工程理念在AI领域的深度应用。
回顾本文中的案例,从Hemominas的献血者匹配效率提升10倍,到Hiscox的保险承保时间从3天缩短到几分钟,再到Fundwell的融资匹配流程提速288倍,我们可以清晰地看到代码执行+MCP模式带来的变革性影响。这些案例共同证明:当AI智能体能够像软件工程师一样组织工具、编写逻辑、处理数据时,其效率和能力将实现质的飞跃。
对于开发者而言,这一模式不仅提供了更高效的技术方案,更打开了新的创新空间。未来,随着执行环境安全性的提升和模型代码能力的增强,我们有理由信任,代码执行+MCP将成为大规模AI智能体系统的标准架构,推动AI智能体在更多行业实现深度落地。