MCP-学习(1)

MCP学习的前置知识

这一章主要对MCP的前置知识进行学习:stdio(通信方式)、JSON-RPC(通信格式)

stdio

stdio:st and ard i nput and output (标准输入输出)

进程之间是相互独立的,而进程需要与外界进行通信,通信的方式有很多,其中一种就是stdio。它能够让一个进程 通过标准输出接口(stdout) 向外界发送信息、外界也可以 通过它的标准输入接口(stdin) 向进程中写入一些信息。

举个栗子🌰

标准输出接口

用node.js来写个简单案例:

js 复制代码
//创建一个server.js
//process进程  stdout标准输出
process.stdout.write('Hello World!!\n')

然后在终端中运行它node server.js (意思:启动一个node进程,参数是'server.js'),就会发现终端中打印了Hello World!!。没错看起来效果很像console.log(),因为在node环境console.log()的内部确实是调用了process.stdout.write()加上一些额外处理。

那我们刚刚说了,stdio是通信方式呀,那这里是谁跟谁通信了嘞?这里其实是node进程与终端进行通信了 :终端本身是一个进程,它在 启动子进程(这里是node进程) 的时候会去 监听子进程的标准输出接口,终端已经内置了这些流程,当它监听到数据后就会将其显示在终端。

标准输入接口
js 复制代码
//server.js
//监听父进程(终端)输入
process.stdin.on('data',(data)=>{
    const resp = `回复 ${data}\n`
    process.stdout.write(resp)
})

运行后,会发现终端中就会一直运行着这个node进程,可以在终端输入数据然后回车来发送,就可以被node子进程接收到。那么我们就会发现,在这个场景下,终端 类似于客户端 ,因此才会给这个js文件起名为server.js

当然node.js自己本身也可以作为一个父进程来创建更多子进程:

js 复制代码
import {spawn} from 'child_process'

// 创建子进程
const serverProcess = spawn('node',['server.js']) //启动node应用程序,参数是'server.js'

stdio的特点:简洁、高效 ,但仅适用于本地进程间通信

JSON-RPC (通信格式约束)

request(2.0的版本,如果用到不同版本需要分析)
json 复制代码
{
    'jsonrpc': '2.0',  //版本
    'method': 'sum',   //方法
    'params': {        //参数
        "a": 5,
        "b": 6
    },
    'id': 1            //标记
}
response
json 复制代码
{
    'jsonrpc': '2.0',  //版本
    'result': 11,
    'id': 1
}

这边从server.js这边写一个测试:

js 复制代码
import utils from './utils.js'
process.stdin.on('data',(data)=>{
    const req = JSON.parse(data)
    const funcName = req.method
    const params = req.params
    const result = utils[funcName](params)
    const res = {
        'jsonrpc': '2.0',
        'result': result,
        'id': req.id
    }
})

小结

这些通信,主要是补充了某一些进程功能上的不足

相关推荐
Highcharts.js2 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
LaughingZhu8 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫8 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
Mahir088 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
小鹏linux9 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水10 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger10 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)10 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态11 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态11 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态