據(jù)庫暴露給 MCP 客戶端)
如何用 spacetime mcp 把 SpacetimeDB 數(shù)據(jù)庫暴露給 MCP 客戶端【免費下載鏈接】SpacetimeDBDevelopment at the speed of light項目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB當你有一個正在運行的 SpacetimeDB 數(shù)據(jù)庫希望讓支持 MCP 的 Agent 或編輯器比如 Claude Desktop、Claude Code、Codex直接操作它——列出數(shù)據(jù)庫、讀取 schema、執(zhí)行 SQL、調(diào)用 reducer——而不用再走 shell 命令時spacetime mcp就是這個橋梁。它在本地以 stdio 方式啟動一個 MCP 服務(wù)把客戶端的請求轉(zhuǎn)發(fā)到 SpacetimeDB 主機或單個數(shù)據(jù)庫工具調(diào)用返回 JSON 結(jié)果。本文適用的前提數(shù)據(jù)庫和主機已經(jīng)存在你本地裝有spacetimeCLI。需要特別注意文檔明確標注 MCP 支持是不穩(wěn)定功能Unstable Featurespacetime mcp命令可能存在破壞性變更且某些已發(fā)布的 CLI 中可能還沒有這個子命令必要時需要從倉庫源碼構(gòu)建見 codex-plugin/README.md。準備條件確認 CLI 里有 mcp 子命令在配置任何客戶端之前先確認你的spacetimeCLI 包含該命令spacetime help mcp根據(jù) CLI Referencespacetime mcp的用法是spacetime mcp [OPTIONS] [database]可用選項只有兩個-s,--server SERVER— 指定承載數(shù)據(jù)庫的服務(wù)器取值可以是 nickname、host name 或 URL--anonymous— 使用匿名身份執(zhí)行而不是你保存的登錄身份。關(guān)于身份spacetime mcp默認使用你已保存的 SpacetimeDB 身份即spacetime login登錄后的身份除非傳入--anonymous。后續(xù)所有工具調(diào)用都以這個身份運行權(quán)限邊界見文末。選擇暴露范圍整個主機還是單個數(shù)據(jù)庫MCP 服務(wù)有兩種形態(tài)啟動命令直接決定形態(tài)也決定客戶端工具調(diào)用的參數(shù)形狀# 主機級host-wide不指定數(shù)據(jù)庫服務(wù)整個 SpacetimeDB 主機 spacetime mcp --server local # 數(shù)據(jù)庫級database-scoped只服務(wù) my-database 這一個庫 spacetime mcp my-database --server localmy-database是文檔中的示例值替換為你自己的數(shù)據(jù)庫名。兩種形態(tài)的區(qū)別主機級每個數(shù)據(jù)類工具都必須帶database參數(shù)值為數(shù)據(jù)庫名或 identity并且額外暴露list_databases工具數(shù)據(jù)庫級數(shù)據(jù)庫在啟動命令里已經(jīng)固定數(shù)據(jù)類工具不再需要database參數(shù)list_databases也不可用。除了位置參數(shù)數(shù)據(jù)庫名還可以來自環(huán)境變量SPACETIMEDB_DB_NAME省略命令行參數(shù)時服務(wù)會回退到該環(huán)境變量的值。把服務(wù)暴露給 MCP 客戶端MCP 客戶端通常通過 stdio 啟動 MCP 服務(wù)器進程所以核心就是讓客戶端去執(zhí)行spacetime mcp。codex-plugin/README.md 給出了 Claude Desktop / Claude Code 這類客戶端的配置形態(tài)頂層mcpServers鍵{ mcpServers: { spacetimedb: { command: spacetime, args: [mcp] } } }這對應(yīng)主機級服務(wù)代理在每次調(diào)用里指定數(shù)據(jù)庫。如果要固定到單個數(shù)據(jù)庫把參數(shù)改成{ mcpServers: { spacetimedb: { command: spacetime, args: [mcp, my-database] } } }或者保持args不變在運行環(huán)境里設(shè)置SPACETIMEDB_DB_NAME環(huán)境變量。Codex 插件注冊 MCP 服務(wù)器用的是同一條命令無需額外配置其形狀為{ spacetimedb: { command: spacetime, args: [mcp] } }如果你的客戶端不經(jīng)過 stdio 橋接而是能直接發(fā)送 MCP JSON-RPC 請求SpacetimeDB 主機本身就暴露了 HTTP 端點可選路徑見 MCP ReferencePOST /v1/mcp POST /v1/database/name-or-identity/mcpPOST /v1/mcp是主機級每次數(shù)據(jù)工具調(diào)用都要帶database參數(shù)POST /v1/database/name-or-identity/mcp固定到單個數(shù)據(jù)庫數(shù)據(jù)工具調(diào)用省略database。認證使用與其他 SpacetimeDB HTTP API 調(diào)用相同的 bearer token省略認證則使用匿名身份。驗證連接并調(diào)用工具不要假設(shè)工具已經(jīng)就緒skills/mcp/SKILL.md 建議先讀 MCP 客戶端的工具列表tools/list再構(gòu)造工具調(diào)用。這些工具是被動出現(xiàn)的沒有任何提示連接成功后會以spacetimedb.list_databases、spacetimedb.get_schema、spacetimedb.sql、spacetimedb.call、spacetimedb.ping的形式出現(xiàn)。工具完全缺失則說明 MCP 服務(wù)器沒有連上此時應(yīng)回退到spacetimeCLI。工具全集來自 MCP Reference工具主機級參數(shù)數(shù)據(jù)庫級參數(shù)說明list_databases無不可用列出你的身份在該主機上擁有的數(shù)據(jù)庫ping可選message可選message健康檢查回顯可選消息get_schemadatabase無以 JSON 返回 schema包含類型、表、reducerssqldatabase、sql、可選confirmedsql、可選confirmed執(zhí)行 SQL以 JSON 返回行confirmed為真時等待持久化確認的讀calldatabase、reducer、可選argsreducer、可選args調(diào)用 reducerargs是按位置排列的 JSON 數(shù)組最簡驗證路徑是調(diào)用ping它會回顯你傳入的可選message確認鏈路通暢。之后按 skills/mcp/SKILL.md 展示的巡檢順序操作主機級示例文檔原樣給出list_databases {} get_schema { database: mydb } sql { database: mydb, sql: SELECT * FROM message } call { database: mydb, reducer: send_message, args: [hello] }注意list_databases只列出你自己擁有的數(shù)據(jù)庫匿名身份下結(jié)果為空不知道數(shù)據(jù)庫名時從它開始查。數(shù)據(jù)庫級形態(tài)下同樣的調(diào)用去掉database字段{ sql: SELECT * FROM message }調(diào)用無參數(shù)的 reducer 時省略args或傳空數(shù)組帶參數(shù)時按 reducer 參數(shù)順序傳值。需要等待持久化確認的讀時給sql傳confirmed: true。身份與權(quán)限邊界這些規(guī)則在文檔中明確列出直接決定了你通過 MCP 能做什么Reducer 是正常寫入路徑。通過call修改應(yīng)用狀態(tài)reducer 事務(wù)性地執(zhí)行要么整體提交、要么整體回滾。sql工具可以讀公共表SQL 寫入需要擁有該數(shù)據(jù)庫。寫入優(yōu)先走 reducer讓授權(quán)與校驗留在模塊邏輯里。私有表不能通過 MCP SQL 讀取。get_schema仍會顯示私有表的聲明所以sql報no such table不一定是模塊里沒有這張表也可能是當前身份讀不到它。常見錯誤與排查MCP Reference 給出了四個典型報錯的含義錯誤含義database argument must be a string服務(wù)是主機級而工具調(diào)用漏掉了database或傳了非字符串值unknown tool: list_databases服務(wù)是數(shù)據(jù)庫級list_databases不可用x not found當前身份下該主機沒有名為x的數(shù)據(jù)庫或該處需要 identity 卻傳了名字no such table: x表對當前身份是私有的、模塊中不存在或調(diào)用打到了錯誤的數(shù)據(jù)庫工具失敗不會導致傳輸層斷開而是作為 MCP 響應(yīng)體內(nèi)的結(jié)果返回結(jié)果帶isError: true錯誤信息以文本形式給出。文檔的建議是在換工具形態(tài)或換database值重試之前先讀取錯誤文本。限制MCP 支持目前是不穩(wěn)定功能參數(shù)和工具形態(tài)可能隨版本發(fā)生破壞性變更spacetime mcp在某些已發(fā)布 CLI 中可能還不存在codex-plugin/README.md 的說明是如果命令缺失MCP 服務(wù)器無法啟動需要時可從本倉庫構(gòu)建 CLIMCP 工具只能操作已經(jīng)存在的數(shù)據(jù)庫不能替代 CLI 完成腳手架、編譯模塊、發(fā)布或生成 bindings 等步驟。命令細節(jié)以 CLI Reference 的spacetime mcp一節(jié)和 MCP Reference 為準。【免費下載鏈接】SpacetimeDBDevelopment at the speed of light項目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考