LinSoap

LinSoap

Null
github
x
bilibili

TypeScript跑通第一個MCP,使用Deepseek查詢sqlite資料庫

最近最火的 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 服務是否正常。

Stdio 運行結果

SSE Transport#

在./server/sqlite_sse.ts 中添加

完成 server 編寫後,同樣要進行編譯,還需要運行 express 服務,然後使用 Inspector 連接測試功能是否正常。

打開 Inspector,選擇 transport type 為 sse,設置 url 為http://localhost:3001/sse,點擊連接,測試工具。

#

SSE 測試結果

MCP 客戶端編寫#

MCP 客戶端同樣支持兩種 transport,一種是 stdio,一種是 sse,與服務端相對應。在 index.ts 中添加

編寫完 MCP 客戶端後,編譯 ts,運行 MCP 客戶端,如果列出可用工具列表,則說明客戶端運行正常。

#

MCP 客戶端查詢 Tools 結果

向 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 的能力。

  • 目前一個客戶端好像只支持連接一個服務端,在有多個服務的情況下,如何高效的管理客戶端也是一個問題。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。