Communitygithub.com

Cortadel Doctor

自己ホスト型の長期時系列グラフメモリをAIエージェントに提供します — MCP、REST、ダッシュボードを1つのコンテナに統合し、FalkorDBまたはMemgraphをバックエンドとして利用できます。

Cortadel Doctor とは?

Cortadelは、AIエージェント向けの自己ホスト型長期記憶システムです。グラフデータベース(FalkorDBまたはMemgraph)を活用し、エージェント間の知識の永続化と関連付けを実現します。MCP(Model Context Protocol)、REST API、そして管理ダッシュボードが単一のコンテナに統合されているため、セットアップが簡潔で、外部サービスに依存しません。 主な機能として、ユーザーごとのメモリ管理、ベクトル埋め込みによる意味検索、時系列ベースの知識グラフ構築が可能です。開発者はMCPツールを通じてClaudeなどのAIアシスタントに直接統合でき、REST API経由での外部アプリケーションからのアクセスもサポートしています。 このシステムは、エージェントがセッションを超えてコンテキストを維持し、過去の対話やタスクの知識を活用できるように設計されています。自己ホスト型であるため、データのプライバシーと制御を完全に保持できます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add cortadel/cortadel

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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

3つすべてが空でない値に解決された場合はPASS、いずれかが空の場合はFAIL — 残りのチェックは「設定なしのためスキップ」として報告します。APIキーの実際の値は決して出力せず、解決されたかどうかのみを出力します。

注意事項(関連する場合、ユーザーに明確に伝えてください): CLAUDE_PLUGIN_OPTION_* はフックサブプロセスに注入されることが文書化されています。スキル自身のシェル実行内で可視であるかどうかは、このリポジトリでは確認されていません — 両方の階層をチェックし、どの階層が実際に各値を解決したかを報告してください。マーケットプレイス階層がここで到達可能であると仮定しないでください。

チェック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 なし — ブラウズモード)を呼び出し、RESTではなくMCPサーフェスを通じた独立した2つ目のライブ読み取りパスとして機能させます。RESTパスとMCPの失敗(またはその逆)は、インストールのどの半分が実際に壊れているかを絞り込みます。現在のセッションでMCPツールが利用できない場合、このサブチェックはスキップします — 失敗させないでください。

表示

4つのチェックすべてを、チェックごとに PASS/FAIL/WARN で報告します。例:

設定解決       PASS  base_url, user_id, api_key すべて解決 (CORTADEL_* 階層)
サーバーヘルス   PASS  status=ok
認証           PASS  HTTP 200
ライブ読み取り   PASS  total=142 memories; MCP search_memory: PASS

いずれかのチェックが失敗した場合、docs/plugin.md のトラブルシューティングセクションを反映した具体的な次の手順を追加します:401 → CORTADEL_API_KEY を確認;403 → CORTADEL_USER_ID がキーのユーザーと一致するか確認;ヘルス低下 → 失敗した checks.* エントリを指摘。

関連スキル