最近很火的MCP,究竟是什么?Trae用大白话教会你

什么是MCP?

MCP(Model Context Protocol)是一种让AI模型与外部工具通信的标准协议,它通过标准输入输出(stdin/stdout)进行通信,使用JSON格式交换数据。

MCP的通信原理

  • 标准输入(stdin) : 接收AI模型的请求
  • 标准输出(stdout) : 返回处理结果
  • 标准错误(stderr) : 输出调试信息 这种设计让MCP服务器可以独立运行,通过管道与任何支持标准输入输出的程序通信。

今天让Trae来帮我们理解一下Mcp的标准输出输入是怎么样的

消息格式详解

首先是初始化消息,来作为mcp的初始化

服务端node会响应

json 复制代码
{"type":"initialize_result","protocol":"mcp","version":"1.
0"}

然后是Trae帮我们做得简易工具来理解mcp的调用消息"tool_name": "add"

调用的json格式

css 复制代码
{
  "type": "call_tool",
  "tool_name": "add",
  "arguments": {"a": 5, "b": 3}
}

服务器会响应以下的格式

json 复制代码
{
  "type": "tool_result",
  "tool_name": "add",
  "result": {"result": 8, "operation": "5 + 3"}
}

实际测试验证

然后我让Trae帮我生成测试脚本,通过测试脚本 quick-test.js ,帮我们验证了以下功能

✅ 初始化 :服务器正确响应初始化请求

✅ 加法运算 :5 + 3 = 8,返回详细计算过程

✅ 乘法运算 :4 × 7 = 28,包含操作描述

✅ 消息回显 :正确返回输入消息及其长度

完整示例代码

这是Trae生成服务器端(mcp-demo.js)

javascript 复制代码
const readline = require('readline');

// 定义工具函数
const tools = {
  add: (a, b) => ({ result: a + b, operation: `${a} + ${b}
  ` }),
  multiply: (a, b) => ({ result: a * b, operation: `${a} × 
  ${b}` }),
  echo: (message) => ({ result: message, length: message.
  length })
};

// 处理消息
function handleMessage(message) {
  switch (message.type) {
    case 'initialize':
      return { type: 'initialize_result', protocol: 'mcp', 
      version: '1.0' };
    
    case 'call_tool':
      const tool = tools[message.tool_name];
      if (!tool) {
        return { type: 'error', message: `Unknown tool: $
        {message.tool_name}` };
      }
      const result = tool(...Object.values(message.
      arguments));
      return { type: 'tool_result', tool_name: message.
      tool_name, result };
    
    default:
      return { type: 'error', message: `Unknown message 
      type: ${message.type}` };
  }
}

// 启动服务器
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

console.error('🚀 MCP演示服务器已启动!');
console.error('输入格式: JSON消息');
console.error('示例: {"type":"initialize"}');
console.error('示例: {"type":"call_tool","tool_name":"add",
"arguments":{"a":5,"b":3}}');
console.error('---');

rl.on('line', (line) => {
  try {
    const message = JSON.parse(line.trim());
    console.error('收到消息:', JSON.stringify(message, 
    null, 2));
    const response = handleMessage(message);
    console.log(JSON.stringify(response));
  } catch (error) {
    console.error('错误:', error.message);
    console.log(JSON.stringify({ type: 'error', message: 
    error.message }));
  }
});

生成的测试客户端(quick-test.js)

javascript 复制代码
const { spawn } = require('child_process');

const testCases = [
  { name: '初始化', message: { type: 'initialize' } },
  { name: '加法', message: { type: 'call_tool', tool_name: 
  'add', arguments: { a: 5, b: 3 } } },
  { name: '乘法', message: { type: 'call_tool', tool_name: 
  'multiply', arguments: { a: 4, b: 7 } } }
];

const server = spawn('node', ['mcp-demo.js'], { stdio: 
['pipe', 'pipe', 'inherit'] });
server.stdout.on('data', (data) => {
  console.log('响应:', JSON.parse(data.toString()));
});

testCases.forEach((test, index) => {
  setTimeout(() => {
    server.stdin.write(JSON.stringify(test.message) + 
    '\n');
  }, index * 500);
});

使用指南

可以通过以下的命令来快速开始

  1. 启动服务器 : node mcp-demo.js
  2. 手动测试 :直接输入JSON消息
  3. 自动化测试 : node quick-test.js

Trae帮我们也加了调试,方便我们看到运行的每一个过程和输出结果

  • 使用 console.error() 输出调试信息到stderr
  • 每条消息必须是 单行JSON
  • 响应后立即读取stdout,避免缓冲区溢出

控制台输出的结果

扩展建议

  • 添加更多工具函数到 tools 对象
  • 支持异步操作(返回Promise)
  • 增加错误处理和验证
  • 实现工具发现机制

通过这种标准输入输出方式,MCP实现了AI模型与工具的无缝集成,为构建强大的AI应用提供了坚实基础。

看完Trae帮我们理解的Mcp,你是不是更加清晰Mcp的原理呢?如果有疑问,在评论区留下你的疑惑吧

相关推荐
MingT 明天你好!2 天前
trae中安装mcp报Cannot find package/ERR_MODULE_NOT_FOUND问题
node.js·trae
程序员爱德华2 天前
AI Coding 使用教程
copilot·cursor·trae·claude code·ai coding
飞哥数智坊3 天前
没有内测邀请码?我来帮你实测下 SOLO 网页端
人工智能·trae
sinat_267611916 天前
Trae AI 进行 Android 从0 到 1的一键开发
kotlin·android studio·trae
阆遤7 天前
利用TRAE对nanobot进行安全分析并优化
python·安全·ai·trae·nanobot
Molesidy8 天前
【VSCode】VSCode或者Trae的扩展文件夹以及用户设置文件夹的路径更改到指定位置
ide·编辑器·trae
yosh'joy!!8 天前
下载Trae使用
ai·trae
豆包MarsCode8 天前
只需一个指令,让 OpenClaw 安排 TRAE 干活
trae
sugar15699 天前
Trae快速构建自己项目的docker镜像
docker·容器·trae
sugar15699 天前
Trae 添加项目规则,快速完成crmeb项目本地开发环境搭建
docker·容器·trae