關于MCP SSE 服務器的工作原理

模型上下文協議(Model Context Protocol,簡稱MCP) 是一種全新的開放協議,專門用于標準化地為大語言模型(LLMs)提供應用場景和數據背景。 你可以把MCP想象成AI領域的“USB-C接口”,它能讓不同的AI模型與外部工具和數據源輕松連接

近來學習了一下,先是使用stdio的方式叫cursor做了一個,完全沒有問題。但是sse的方式叫cursor 干始終不成功, 找了一輪,發現youtube的教程視頻里主持,也沒有搞定sse的服務器,balahblah說了一堆,就要move on ....于是研究了一下。

1. 首先MCP SSE是基于http協議的一個應用,服務器和客戶端主要通過json rc的方式進行溝通。

2. MCP SSE Client會發起多個連接,但是第一個連接是http://yourhost:port/sse,? 這個連接是溝通的第一步,它會使用chunked的回傳數據,意思是不告訴client這個數據有多少,這樣就它就可以一直連著了。 所以這個鏈接就是一個用來通知的鏈接。你現在就明白了為什么 ,就叫SSE(Server-Sent Events )。 它首先按以下格式信息給client, 然后就是定時的ping包了, 每次都只是一個chunk,估計后期server會有推送也會使用這個鏈接通知client.

event: 事件的名字
data:  事件的數據

? ? ? 2.1 第一個event是,這個直接返回,就是給client分配一個session_id, 方便后面多個連接過來服務器可以分清誰和誰。


51
event: endpoint
data: /messages/?session_id=07aa8f90d79a49eaad802693cdd05b5b

? ? ? client收到這個,就會以http://yourhost:port/messages/?session_id=07aa8f90d79a49eaad802693cdd05b5b , 新發起一個連接去請求mcp sse server

? ? ?2.2 第二個event是event: message, 這個data 是一個json來的,就是告訴client,當前mcp server的能力,還有服務器的基本信息。

124
event: message
data: {"jsonrpc": "2.0","id": 0,"result": {"protocolVersion": "2024-11-05","capabilities": {"experimental": {},"prompts": {"listChanged": false},"resources": {"subscribe": false,"listChanged": false},"tools": {"listChanged": false}},"serverInfo": {"name": "mem0-mcp","version": "1.3.0"}}
}

? ? ?2.3 第三個event也是一個message , 用來告訴client 服務器提供的tools有哪些。

{"jsonrpc": "2.0","id": 1,"result": {"tools": [{"name": "add_coding_preference","description": "Add a new coding preference to mem0. This tool stores code snippets, implementation details,\n    and coding patterns for future reference. Store every code snippet. When storing code, you should include:\n    - Complete code with all necessary imports and dependencies\n    - Language/framework version information (e.g., \"Python 3.9\", \"React 18\")\n    - Full implementation context and any required setup/configuration\n    - Detailed comments explaining the logic, especially for complex sections\n    - Example usage or test cases demonstrating the code\n    - Any known limitations, edge cases, or performance considerations\n    - Related patterns or alternative approaches\n    - Links to relevant documentation or resources\n    - Environment setup requirements (if applicable)\n    - Error handling and debugging tips\n    The preference will be indexed for semantic search and can be retrieved later using natural language queries.","inputSchema": {"properties": {"text": {"title": "Text","type": "string"}},"required": ["text"],"title": "add_coding_preferenceArguments","type": "object"}},{"name": "get_all_coding_preferences","description": "Retrieve all stored coding preferences for the default user. Call this tool when you need \n    complete context of all previously stored preferences. This is useful when:\n    - You need to analyze all available code patterns\n    - You want to check all stored implementation examples\n    - You need to review the full history of stored solutions\n    - You want to ensure no relevant information is missed\n    Returns a comprehensive list of:\n    - Code snippets and implementation patterns\n    - Programming knowledge and best practices\n    - Technical documentation and examples\n    - Setup and configuration guides\n    Results are returned in JSON format with metadata.","inputSchema": {"properties": {},"title": "get_all_coding_preferencesArguments","type": "object"}},{"name": "search_coding_preferences","description": "Search through stored coding preferences using semantic search. This tool should be called \n    for EVERY user query to find relevant code and implementation details. It helps find:\n    - Specific code implementations or patterns\n    - Solutions to programming problems\n    - Best practices and coding standards\n    - Setup and configuration guides\n    - Technical documentation and examples\n    The search uses natural language understanding to find relevant matches, so you can\n    describe what you're looking for in plain English. Always search the preferences before \n    providing answers to ensure you leverage existing knowledge.","inputSchema": {"properties": {"query": {"title": "Query","type": "string"}},"required": ["query"],"title": "search_coding_preferencesArguments","type": "object"}}]}
}

跟著就是ping包的返回,防止client死了。


2d
: ping - 2025-03-12 08:16:23.071429+00:00

3. endpoint請求

? ?拿到endpont后,client 使用post的請求endpoint,? 這個只處理請求,目前看?返回則在第一個http連接里。

第二個鏈接 請求如下:, 這個調用initialize,對應上面的第一個message的event.

第二個鏈接, 這個只回復202 AcceptedPOST /messages/?session_id=9aa12073a4494d5580a5c30ed54c4bfd HTTP/1.1
host: 10.0.105.64:8080
connection: keep-alive
content-type: application/json
accept: */*
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: gzip, deflate
content-length: 253{"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":true,"prompts":false,"resources":true,"logging":false,"roots":{"listChanged":false}},"clientInfo":{"name":"cursor-vscode","version":"1.0.0"}},"jsonrpc":"2.0","id":0}
HTTP/1.1 202 Accepteddate: Wed, 12 Mar 2025 08:08:32 GMT
server: uvicorn
content-length: 8Accepted

第三個鏈接,請求如下:


第三個鏈接,僅回復 202 AcceptedPOST /messages/?session_id=9aa12073a4494d5580a5c30ed54c4bfd HTTP/1.1
host: 10.0.105.64:8080
connection: keep-alive
content-type: application/json
accept: */*
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: gzip, deflate
content-length: 54{"method":"notifications/initialized","jsonrpc":"2.0"}
HTTP/1.1 202 Accepted
date: Wed, 12 Mar 2025 08:08:32 GMT
server: uvicorn
content-length: 8Accepted

第四個鏈接,請求如下,請求tools/list, 服務器在第一個get的鏈接,通過event的方式返回了這個列表給mcp sse client


第四個鏈接,僅加復 202 AcceptedPOST /messages/?session_id=9aa12073a4494d5580a5c30ed54c4bfd HTTP/1.1
host: 10.0.105.64:8080
connection: keep-alive
content-type: application/json
accept: */*
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: gzip, deflate
content-length: 46{"method":"tools/list","jsonrpc":"2.0","id":1}
HTTP/1.1 202 Accepted
date: Wed, 12 Mar 2025 08:08:32 GMT
server: uvicorn
content-length: 8Accepted

1-3完成就是屬于初始化完成,mcp sse的client和server 連接起來了。

然后后面使用mcp call 調用的,在cursor chat里輸入

call mcp tool search_coding_preferences about StdioServerTransport

就是新起一個http短鏈接,post到endpoint,如下

POST /messages/?session_id=97a44bcff590415e99cf803350ffd542 HTTP/1.1
host: 10.0.105.64:8080
connection: keep-alive
content-type: application/json
accept: */*
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: gzip, deflate
content-length: 143{"method":"tools/call","params":{"name":"search_coding_preferences","arguments":{"query":"about StdioServerTransport"}},"jsonrpc":"2.0","id":3}HTTP/1.1 202 Accepted
date: Wed, 12 Mar 2025 09:10:43 GMT
server: uvicorn
content-length: 8HTTP/1.1 202 Accepted
date: Wed, 12 Mar 2025 09:10:43 GMT
server: uvicorn
content-length: 8Accepted

第一個鏈接就是會有一個通知返回如下:

event: message
data: {"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"[]"}],"isError":false}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73160.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機:基于深度學習的Web應用安全漏洞檢測與掃描

目錄 前言 課題背景和意義 實現技術思路 一、算法理論基礎 1.1 網絡爬蟲 1.2 漏洞檢測 二、 數據集 三、實驗及結果分析 3.1 實驗環境搭建 3.2 模型訓練 最后 前言 📅大四是整個大學期間最忙碌的時光,一邊要忙著備考或實習為畢業后面臨的就業升學做準備,…

win32匯編環境,網絡編程入門之二

;運行效果 ;win32匯編環境,網絡編程入門之二 ;本教程在前一教程的基礎上,研究一下如何得到服務器的返回的信息 ;正常的邏輯是連接上了,然后我發送什么,它返回什么,但是這有一個很尷尬的問題。 ;就是如何表現出來。因為網絡可能有延遲,這個延遲并不確定有多久。 ;而程序是順…

【高分論文密碼】AI大模型和R語言的全類型科研圖形繪制,從畫圖、標注、改圖、美化、組合、排序分解科研繪圖每個步驟

在科研成果競爭日益激烈的當下,「一圖勝千言」已成為高水平SCI期刊的硬性門檻——數據顯示很多情況的拒稿與圖表質量直接相關。科研人員普遍面臨的工具效率低、設計規范缺失、多維數據呈現難等痛點,因此科研繪圖已成為成果撰寫中的至關重要的一個環節&am…

大語言模型-1.2-大模型技術基礎

簡介 本博客內容是《大語言模型》一書的讀書筆記,該書是中國人民大學高瓴人工智能學院趙鑫教授團隊出品,覆蓋大語言模型訓練與使用的全流程,從預訓練到微調與對齊,從使用技術到評測應用,幫助學員全面掌握大語言模型的…

uni-app打包成H5使用相對路徑

網上找了一圈,沒用,各種試,終于給試出來了,主要是網絡上的沒有第二步,只有第一步,導致打包之后請求的路徑沒有帶上域名 運行的基礎路徑設置為./ config.js文件里面的baseUrl路徑改成空字符,千萬…

Android UI性能優化

Android UI性能優化 一、UI性能優化基礎 1.1 UI渲染原理 Android系統的UI渲染是通過一個被稱為"UI線程"或"主線程"的單線程模型來完成的。系統會以16ms(約60fps)的固定時間間隔發送VSYNC信號,觸發UI的渲染流程。如果一幀的處理時間超過16ms,就會出現丟…

【16】單片機編程核心技巧:移位運算的應用

【16】單片機編程核心技巧:移位運算的應用 七律 移位 左遷乘二寄存移,右徙除二暫寄時。 二進玄機藏位里,一移妙法化玄機。 合璧分疆拼字節,置位清零控毫厘。 速效堪超乘除算,單片機中展神威。 摘要 移位運算是單片…

【Linux內核系列】:文件系統

🔥 本文專欄:Linux 🌸作者主頁:努力努力再努力wz ★★★ 本文前置知識: 文件系統初識 那么在我們此前關于文件的學習中,我們學習的都是進程與打開的文件之間的關系,以及打開的文件如何進行管理…

git commit messege 模板設置 (規范化管理git)

配置方法 git config --global core.editor vim (設置 Git 的默認編輯器為 Vim)在用戶根目錄下(~),創建一個.git_commit_msg文件,然后把下面的內容拷貝到文件中并保存。 [version][模塊][類型]{解決xxx問題…

Python和Docker實現AWS ECR/ECS上全自動容器化部署網站前端

以類似ChatGPT的網站前端界面的HTML頁面、CSS樣式表和JavaScript腳本為例,用Python代碼將整個前端代碼文件的目錄,其中包括所有創建的前端代碼文件用Docker打包成鏡像文件,提前檢查Docker軟件是否已經安裝,并如果容器服務不存在&a…

無人機全景應用解析與技術演進趨勢

無人機全景應用解析與技術演進趨勢 ——從立體安防到萬物互聯的空中革命 一、現有應用場景全景解析 (一)公共安全領域 1. 立體安防體系 空中哨兵:搭載 77 GHz 77\text{GHz} 77GHz毫米波雷達(探測距離 5 km 5\text{km} 5km&…

ChatGPT4.5詳細介紹和API調用詳細教程

OpenAI在2月27日發布GPT-4.5的研究預覽版——這是迄今為止OpenAI最強大、最出色的聊天模型。GPT-4.5在擴大預訓練和微調規模方面邁出了重要的一步。通過擴大無監督學習的規模,GPT-4.5提升了識別內容中的模式、建立內容關聯和生成對于內容的見解的能力,但…

AI 中對內存的龐大需求

剛接觸AI時,只知道AI對顯存的要求很高,但慢慢發現,AI對內存的要求也越來越高了。 最近嘗試玩下 wan 2.1 ,進行圖生視頻,使用comfyui官方工作流,720p(720*1280)53幀,結果…

如何選擇適合您智能家居解決方案的通信協議?

如何選擇適合您智能家居解決方案的通信協議? 在開發智能家居產品時,選擇合適的通信協議對于設備的高效運行及其在智能家居系統中的互操作性至關重要。市面上協議眾多,了解它們的特性并在做決定前考慮各種因素是非常必要的。以下是一些幫助您…

L3-1 奪寶大賽

輸入樣例 1: 5 7 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 2 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 7 1 5 7 1 1 1 5 5 3 1 3 5 1 4輸出樣例 1: 7 6樣例 1 說明: 七支隊伍到達大本營的時間順次為:7、不可能、5、3、3、5、6&#xff0c…

C# AOT生成的hellowwordEXE運行占用多少內存1-5MB?

C# 使用 AOT(Ahead - Of - Time,提前編譯)生成的 "Hello, World!" 可執行文件在運行時占用的內存會受到多種因素的影響,以下是詳細分析: 影響內存占用的因素 操作系統:不同的操作系統&#xff0…

nextJs在DOM視圖中渲染未轉為狀態值的localStorage導致報錯

報錯但不限于如下&#xff1a; error: hydration failed because the initial ui does not match what was rendered on the server. Did not expect server HTML to contain a <span> in <div>. hook.js:608 warning: expected server html to contain a match…

macOS 安裝 Homebrew、nvm 及安裝切換 node 版本

一、安裝Homebrew 提示&#xff1a;在安裝 nvm 時&#xff0c;如果使用 brew 方式安裝&#xff0c;就要先安裝 Homebrew 1、打開終端&#xff0c;輸入以下指令&#xff08;官網可獲取最新命令&#xff09;&#xff1a; 國外鏡像 /bin/bash -c "$(curl -fsSL https://ra…

海思高安主控芯片兼容編譯fastboot流程

華為海思主控芯片有高安和非高安之分&#xff0c;主要是安全性上區別&#xff0c;啟動程序不同&#xff0c;一般無法共用。但實際生產中可能出現混料或者同一款產品不同批次一個是高安的一個是非高安的&#xff0c;這時就需要軟件上做兼容&#xff0c;實際是高安固件是可以做到…

大模型在甲狀腺腫瘤預測及治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、甲狀腺腫瘤概述 2.1 甲狀腺腫瘤分類及特征 2.2 甲狀腺腫瘤的發病率與危害 2.3 現有診斷與治療手段概述 三、大模型技術原理與應用現狀 3.1 大模型的基本原理與架構 3.2 大模型在…