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
    }
})

小结

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

相关推荐
用户4099322502122 小时前
PostgreSQL数据类型怎么选才高效不踩坑?
后端·ai编程·trae
fliter2 小时前
迈向易用的Rust
后端
起风了___2 小时前
Python 自动化下载夸克网盘分享文件:基于 Playwright 的完整实现(含登录态持久化与提取码处理)
后端·python
数字化顾问2 小时前
解析前端框架 Axios 的设计理念与源码:从零手写一个支持 HTTP/3 的“类 Axios”最小核
前端
福大大架构师每日一题2 小时前
2025-09-27:子字符串连接后的最长回文串Ⅰ。用go语言,给定两个字符串 s 和 t。你可以从 s 中截取一段连续字符(也可以不取,即空串),再从 t 中
后端
二个半engineer2 小时前
微前端中iframe集成方式与使用微前端框架方式对比
前端·前端框架
我是华为OD~HR~栗栗呀2 小时前
测试转C++开发面经(华为OD)
java·c++·后端·python·华为od·华为·面试
小菜全3 小时前
《WebAssembly:前端开发的新可能》
前端·javascript