最近很火的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的原理呢?如果有疑问,在评论区留下你的疑惑吧

相关推荐
CF14年老兵1 小时前
「Vue 3 + View Transition 实现炫酷圆形缩放换肤动画」
前端·css·trae
bug菌1 小时前
还在为Java集成AI应用而头疼?Trae让你3分钟从小白变大神!
aigc·ai编程·trae
bug菌1 小时前
还在为Java Web后端开发而码字到深夜?Trae让你秒变全栈大神!
aigc·ai编程·trae
石小石Orz4 小时前
效率提升一倍!谈谈我的高效开发工具链
前端·后端·trae
围巾哥萧尘5 小时前
Mailbox | 围巾哥萧尘 | 使用 TRAE SOLO 创建高级暗模式电子邮件应用🧣
trae
豆包MarsCode5 小时前
项目笔记|Dogtor 颈椎健康插件开发全记录
trae
bug菌6 小时前
还在为Java开发效率低下而苦恼?Trae能否成为你的编程救星?
aigc·ai编程·trae
围巾哥萧尘6 小时前
「学习方法」将数学学习方法应用于自媒体实践的完整方法论🧣(可借鉴到编程领域)
trae
bug菌7 小时前
如何快速借助字节Trae解决Java 性能问题?看此篇最为关键!
aigc·ai编程·trae