Communitygithub.com

Cortadel Doctor

自我託管的長期時序圖形記憶系統,專為 AI 代理設計 — 在單一容器中整合 MCP、REST 和儀表板,支援 FalkorDB 或 Memgraph。

Cortadel Doctor 是什麼?

Cortadel Doctor 是一個診斷工具,用於驗證 Cortadel 記憶伺服器的端到端健康狀態和配置。它依序執行四個關鍵檢查:配置解析、未經身份驗證的伺服器健康檢查、身份驗證驗證以及即時資料讀取測試。該工具使用原始 curl 命令而不是插件內建的 API 輔助函式,以確保完整的 HTTP 狀態碼和錯誤訊息的可見性。它支援透過 REST API 和 MCP(如果當前會話中可用)進行診斷,讓開發者能精確定位問題是出在 REST 還是 MCP 層。對於任何失敗的檢查,輸出會提供具體的下一步動作,例如檢查 API 金鑰或用戶 ID 是否正確。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add cortadel/cortadel

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Cortadel Doctor 是做什麼的?

端到端安裝診斷。執行以下所有檢查,並回報全部結果 — 不要在第一個失敗就停止。千萬不要使用 cortadel-plugin/scripts/lib.mjs 的 api() 輔助函式來執行任何這些檢查:它會把所有失敗(非 2xx 狀態碼、逾時、網路錯誤)都吞併成 null,這對診斷來說完全錯誤,因為診斷的整個目的就是要區分 401 和零結果。請使用原始 curl(或直接使用 MCP 工具),以便真實的狀態碼和錯誤主體保持可見。

執行

檢查 1 — 配置解析

解析插件自身鉤子所解析的相同必要值(base_url、user_id、api_key),優先級為 CLAUDE_PLUGIN_OPTION_<KEY> 層級第一,CORTADEL_* 環境變數層級第二 — 這與 cortadel-plugin/scripts/lib.mjs 的 cfg()/readOption() 優先級一致:

for pair in "CLAUDE_PLUGIN_OPTION_BASE_URL:CORTADEL_URL" \
            "CLAUDE_PLUGIN_OPTION_USER_ID:CORTADEL_USER_ID" \
            "CLAUDE_PLUGIN_OPTION_API_KEY:CORTADEL_API_KEY"; do
  opt="${pair%%:*}"; fallback="${pair##*:}"
  val="${!opt:-${!fallback:-}}"
  if [ -n "$val" ]; then echo "$fallback: resolved"; else echo "$fallback: NOT SET"; fi
done

如果三個值都解析為非空值則為 PASS;如果任何一個為空則為 FAIL — 並將其餘檢查回報為「略過,無配置」。切勿印出 API 金鑰的實際值,僅需回報是否已解析。

注意事項,若相關則向使用者清楚說明:CLAUDE_PLUGIN_OPTION_* 的說明文件指出它會被注入到鉤子的子程序中。它是否也在技能本身的 shell 執行中可見,此儲存庫中並未確認 — 請檢查兩個層級並回報哪一個層級實際解析了每個值,而不是假設 marketplace 層級在此可被存取。

檢查 2 — 伺服器健康狀態(無需身份驗證)

GET /api/health 完全不需要任何憑證 — 這是最適合的首次網路探測,與你自身的 API 金鑰是否有效無關:

curl -s "$CORTADEL_URL/api/health"

回報頂層的 status(ok 或 degraded),以及如果存在的話的 checks 映射(例如 checks.memgraph.ok、checks.embeddings.ok)。degraded/503 回應是正常、非例外情況 — 不應因此停止執行其餘檢查。

檢查 3 — 身份驗證

curl -s -o /tmp/cortadel-doctor-auth.json -w "HTTP %{http_code}\n" \
  -H "Authorization: Bearer $CORTADEL_API_KEY" \
  "$CORTADEL_URL/api/v1/memories?user_id=$CORTADEL_USER_ID&size=1"
  • 200 → PASS。
  • 401 → FAIL — API 金鑰遺失或無效。
  • 403 → FAIL — 金鑰有效但與 user_id 不符。
  • 其他任何狀態碼 → FAIL — 回報狀態碼和回應主體。

檢查 4 — 即時讀取

如果檢查 3 回傳 200,讀取 /tmp/cortadel-doctor-auth.json:確認它能解析為 JSON,並且具有 items 陣列和 total 計數(MemoryListPagedResponse 的結構)。將 total 回報為安裝的記憶體數量 — 這是伺服器暴露的唯一彙總數字;沒有單獨的統計資料端點,所以這就是任何地方可用的完整「統計資料」。

如果在此會話中同時也連線了 cortadel MCP 伺服器,請額外呼叫 mcp__cortadel__search_memory({ topK: 1 })(無 query — 瀏覽模式)作為第二條獨立的即時讀取路徑,透過 MCP 層面而非 REST。請單獨回報:REST 通過而 MCP 失敗(或相反)可以縮小實際故障的是安裝的哪一半。如果目前會話中沒有可用的 MCP 工具,則跳過此子檢查 — 不要讓它失敗。

顯示

一起回報所有四個檢查,每個檢查標註 PASS/FAIL/WARN,例如:

Config resolution   PASS  base_url、user_id、api_key 均已解析(CORTADEL_* 層級)
Server health       PASS  status=ok
Auth                PASS  HTTP 200
Live read           PASS  total=142 個記憶;MCP search_memory: PASS

如果任何檢查失敗,請添加具體的下一步動作,對應 docs/plugin.md 的疑難排解章節:401 → 檢查 CORTADEL_API_KEY;403 → 檢查 CORTADEL_USER_ID 是否與金鑰的使用者相符;degraded 健康狀態 → 指向失敗的 checks.* 條目。

相關技能