返回市场
MCP客户端服务器

MCP客户端服务器

作者:wangliguang2 星标更新:2025-07-17

项目介绍

技术文档摘要

该项目能带来什么

  • 大模型如何与MCP交互
    • [x] 与工具的交互逻辑
    • [x] 与资源的交互逻辑
    • [] 与提示的交互逻辑
  • [x] MCP服务器的两种机制
    • [x] 如何自行开发一个MCP服务器
    • [x] 如何使用第三方MCP服务器
    • [x] 如何将STDio转换为可流式传输的http

1、项目介绍

1. 目录结构

├── index.js # 启动文件,在这里可以选择你要使用的 mcp server
├── llm
│   └── askLLM.js # 调用大模型
└── mcp
    ├── sse
    │   └── client.js
    ├── stdio
    │   ├── compute 
    │   │   ├── client.js
    │   │   └── server.js # 自己写的 mcp server
    │   └── filesystem
    │       └── client.js
    └── streamable-http
        └── client.js

2. 脚本介绍

  • npm run start: 启用对话服务,在根目录中有一个.env文件用于设置环境变量src/index你可以选择要测试的MCP类型
  • npm run sse基于STDio启动SSE服务
  • npm run inspector打开用于测试MCP服务器的可视化工具

3. 经验总结

  1. 各种Transport都可以通过requestInit设置header,例如添加认证令牌

    new StreamableHTTPClientTransport(new URL('http://localhost:8000/sse'), {
    	requestInit: {
    		headers: {
    			"Authorization": "Bearer xxx",
        }
      }
    })
    
  2. 访问各种client可以通过_meta设置参数,例如:

    await client.listTools({
      _meta: {
        newsId: "179",
      }
    })
    
    await client.callTool({ 
      name: tool.name,
      arguments: {
        ...JSON.parse(functionInfo.arguments),
        _meta: {
          newsId: '170'
        }
      }
    });
    
    await client.listResources({
      _meta: {
        newsId: "179",
      }
    })
    
    await client.readResource({
       uri: "",
       _meta: {
    	   newId: '179'
    })
    

2、MCP知识点补充

1. 调用client.connect时报告的错误

不支持的协议版本,支持的最新版本是2025-03-26

主要原因在于MCP客户端和MCP服务器使用了不同版本的MCP协议,前端解决方案是升级或降级@modelcontextprotocol/sdk版本。

2. STDio、SSE和streamableHTTP的区别

STDIO和SSE的应用场景

MCP协议:为什么Streamable HTTP是最好的选择?

STDio是拉取相应的代码到本地并启动本地服务

SSE是从服务器拉取相应代码以启动服务

3. 如何将STDio转换为ssestreamableHttp服务

工具: https://github.com/supercorp-ai/supergateway

4. RAG和MCP

RAG和MCP:LLMs的“右手”,谁是你最喜欢的?

5. 顺序思维

大脑思考非常不同:顺序思维MCP 实现基于推理的大模型功能的全面分析

3、官方地址

  1. modelcontextprotocol/typescript-sdk
  2. MCP官方网站