最近最火的 AI 技術應該就是 MCP 了,還不了解 MCP 概念的建議查看Model Context Protocol 文檔,其中詳細介紹了 MCP 的概念和規範。本文使用官方的 TypeScript SDK,請求到 DeepSeek,從服務端到客戶端簡單實現一個 Sqlite MCP,順利開始 MCP 開發。
初始化項目#
本項目所有資源都在這個 git 倉庫TypeScript-MCP-Sqlite-Quickstart,包括了案例使用到的 sqlite 文件,你可以直接拉取,或者按照步驟初始化,自己創建一個數據庫。
創建項目
配置 package.json 和 tsconfig.json package.json
tsconfig.json
編寫 MCP Server#
MCP Server 有兩種啟動方式,一種是 Stdio,一種是 SSE,在本節都會進行介紹。首先介紹 Stdio 方式。
Stdio Transport#
在./server/sqlite_stdio.ts 文件中添加
使用 build 編譯 ts 文件,inspector是官方提供的一個 MCP server 檢查工具,使用 inspector 檢查 server 服務是否正常。
SSE Transport#
在./server/sqlite_sse.ts 中添加
完成 server 編寫後,同樣要進行編譯,還需要運行 express 服務,然後使用 Inspector 連接測試功能是否正常。
打開 Inspector,選擇 transport type 為 sse,設置 url 為http://localhost:3001/sse,點擊連接,測試工具。
#
MCP 客戶端編寫#
MCP 客戶端同樣支持兩種 transport,一種是 stdio,一種是 sse,與服務端相對應。在 index.ts 中添加
編寫完 MCP 客戶端後,編譯 ts,運行 MCP 客戶端,如果列出可用工具列表,則說明客戶端運行正常。
#
向 Deepseek 發送請求調用 MCP#
deepseek 可以使用 openai sdk 發送請求,在發送請求的時候在參數中帶上 tools 即可。由於 openai 的 Tools 參數定義和 anthropic 的 tools 參數定義不同,在獲取到 tools 後按需進行轉換。 轉換函數
至此,已經成功獲取 tools 信息,只需要在請求 deepseek 的時候帶上 tools 參數,然後監聽 response 中的 finish_reson,如果為 tools_calls,則獲取 response 中的 toll_calls 中的 name 和 args。然後調用 MCP 客戶端的 callTool 方法,將獲取到的結果重新發送給 Deepseek,Deepseek 就成功獲取到了數據庫中的信息。
至此已經完成了 Deepseek 通過 MCP 獲取數據庫信息,使用以下指令查看調用情況。
下一步#
至此,一個最簡單的 MCP 流程已經完成,有非常多的地方可以完善。
-
這個流程提供了最簡單的 sql 查詢功能。server 描述做的也比較粗糙,并不是每一次大模型都能成功調用 tool
-
目前的請求方式是非流式的,可以改進為流式
-
目前只支持一輪調用工具,無法實現多輪調用,允許 MCP 多輪調用能夠更好發揮 MCP 的能力。
-
目前一個客戶端好像只支持連接一個服務端,在有多個服務的情況下,如何高效的管理客戶端也是一個問題。