概要
インストール
ツールリスト
コンテンツ詳細
代替品
MCPコンテキストサーバーとは?
MCPコンテキストサーバーは、AIエージェント向けに特別に設計されたコンテキストストレージサーバーです。Claude CodeやLangGraphなどのさまざまなAIエージェントが、同じタスク内で履歴会話、画像、メタデータなどの情報を共有してアクセスできます。AIエージェントに共有の記憶庫を提供し、タスクを協力して完了できるようにします。MCPコンテキストサーバーの使い方は?
使用方法は非常に簡単です。1) サーバーをAIクライアント(Claude Codeなど)にインストールし、2) 提供されるツールを使用してコンテキストを保存および検索し、3) 異なるエージェントが同じthread_idを使用してコンテキストを共有します。サーバーは、簡単なSQLiteから本番環境向けのPostgreSQLまで、複数のデータベースバックエンドをサポートします。適用シナリオ
• 複数のエージェントの協力:複雑なタスクを共同で完了する際に、複数のAIエージェントがコンテキストを共有します。 • 長期会話:履歴会話を覚える必要がある長時間の会話。 • マルチモーダルタスク:テキストと画像を同時に処理する必要があるタスク。 • 知識管理:AIエージェントに検索可能な知識ベースを提供します。 • 開発協力:開発チーム内のAIアシスタントがプロジェクトコンテキストを共有します。主な機能
使い方
使用例
よくある質問
関連リソース
インストール
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"LOG_LEVEL": "${LOG_LEVEL:-INFO}",
"DB_PATH": "${DB_PATH:-~/.mcp/context_storage.db}",
"MAX_IMAGE_SIZE_MB": "${MAX_IMAGE_SIZE_MB:-10}",
"MAX_TOTAL_SIZE_MB": "${MAX_TOTAL_SIZE_MB:-100}"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "localhost",
"POSTGRESQL_USER": "postgres",
"POSTGRESQL_PASSWORD": "postgres",
"POSTGRESQL_DATABASE": "mcp_context",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres:your-actual-password@db.[PROJECT_REF].supabase.co:5432/postgres"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "db.[PROJECT_REF].supabase.co",
"POSTGRESQL_PORT": "5432",
"POSTGRESQL_USER": "postgres",
"POSTGRESQL_PASSWORD": "your-actual-password",
"POSTGRESQL_DATABASE": "postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres.[PROJECT-REF]:your-actual-password@aws-0-[REGION].pooler.supabase.com:5432/postgres"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "aws-0-[REGION].pooler.supabase.com",
"POSTGRESQL_PORT": "5432",
"POSTGRESQL_USER": "postgres.[PROJECT-REF]",
"POSTGRESQL_PASSWORD": "your-actual-password",
"POSTGRESQL_DATABASE": "postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres:your-actual-password@db.[PROJECT_REF].supabase.co:5432/postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}## 🚀 MCP Context Server
*高性能なモデルコンテキストプロトコル(MCP)サーバーで、LLMエージェントに持続的なマルチモーダルコンテキストストレージを提供します。FastMCPを使用して構築されたこのサーバーは、スレッドベースのスコープを通じて、同じタスクに取り組む複数のエージェント間でコンテキストをシームレスに共有することを可能にします。*
## 🚀 クイックスタート
このMCP Context Serverを使用する前に、以下の前提条件を満たす必要があります。
- `uv` パッケージマネージャー([インストール手順](https://docs.astral.sh/uv/getting-started/installation/))
- MCP互換クライアント(Claude Code、LangGraph、または任意のMCPクライアント)
### Claude Codeへのサーバー追加方法
MCP Context ServerをClaude Codeに追加するには、2つの方法があります。
#### 方法1:CLIコマンドを使用する
```bash
# PyPIから(推奨)
claude mcp add context-server -- uvx --python 3.12 mcp-context-server
# またはGitHubから(最新の開発バージョン)
claude mcp add context-server -- uvx --python 3.12 --from git+https://github.com/alex-feel/mcp-context-server mcp-context-server
# またはセマンティック検索を使用する場合(セットアップ手順については、docs/semantic-search.mdを参照)
claude mcp add context-server -- uvx --python 3.12 --with mcp-context-server[semantic-search] mcp-context-server
# またはGitHubから(最新の開発バージョン)でセマンティック検索を使用する場合(セットアップ手順については、docs/semantic-search.mdを参照)
claude mcp add context-server -- uvx --python 3.12 --from git+https://github.com/alex-feel/mcp-context-server --with mcp-context-server[semantic-search] mcp-context-server
詳細については、こちらを参照してください。
方法2:直接ファイルを設定する
プロジェクトディレクトリ内の .mcp.json ファイルに以下を追加します。
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {}
}
}
}
GitHubからの最新の開発バージョンを使用する場合は、以下を使用します。
"args": ["--python", "3.12", "--from", "git+https://github.com/alex-feel/mcp-context-server", "mcp-context-server"]
設定ファイルの場所と詳細については、こちらを参照してください。
インストールの確認
# Claude Codeを起動
claude
# MCPツールが利用可能か確認
/mcp
✨ 主な機能
- マルチモーダルコンテキストストレージ:テキストと画像の両方を保存および取得できます。
- スレッドベースのスコープ:同じタスクに取り組むエージェントは、スレッドIDを通じてコンテキストを共有します。
- 柔軟なメタデータフィルタリング:任意のJSONシリアライズ可能なフィールドでカスタム構造化データを保存し、15の強力な演算子を使用してフィルタリングできます。
- 日付範囲フィルタリング:ISO 8601形式を使用して、作成タイムスタンプでコンテキストエントリをフィルタリングできます。
- タグベースの組織化:正規化されたインデックス付きタグを使用して、効率的なコンテキスト検索が可能です。
- 全文検索:語幹化、ランキング、およびブールクエリを使用したオプションの言語検索(FTS5/tsvector)。
- セマンティック検索:意味ベースの検索のためのオプションのベクトル類似性検索。
- ハイブリッド検索:Reciprocal Rank Fusion(RRF)を使用したオプションのFTSとセマンティック検索の組み合わせ。
- 複数のデータベースバックエンド:SQLite(デフォルト、ゼロコンフィグ)またはPostgreSQL(高同時性、本番グレード)から選択できます。
- 高性能:WALモード(SQLite)/MVCC(PostgreSQL)、戦略的なインデックス作成、および非同期操作。
- MCP標準準拠:Claude Code、LangGraph、および任意のMCP互換クライアントと互換性があります。
- 本番環境対応:包括的なテストカバレッジ、型安全性、および堅牢なエラーハンドリング。
📦 インストール
環境変数による設定
サーバーは、MCP設定の環境変数を使用して構成できます。サーバーは ${VAR} または ${VAR:-default} 構文を使用した環境変数の展開をサポートします。
環境変数を使用した設定例:
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"LOG_LEVEL": "${LOG_LEVEL:-INFO}",
"DB_PATH": "${DB_PATH:-~/.mcp/context_storage.db}",
"MAX_IMAGE_SIZE_MB": "${MAX_IMAGE_SIZE_MB:-10}",
"MAX_TOTAL_SIZE_MB": "${MAX_TOTAL_SIZE_MB:-100}"
}
}
}
}
環境変数の展開の詳細については、こちらを参照してください。
サポートされる環境変数
コア設定
- STORAGE_BACKEND:データベースバックエンド -
sqlite(デフォルト)またはpostgresql - LOG_LEVEL:ログレベル(DEBUG、INFO、WARNING、ERROR、CRITICAL) - デフォルトはERROR
- DB_PATH:データベースファイルの場所(SQLiteのみ) - デフォルトは ~/.mcp/context_storage.db
- MAX_IMAGE_SIZE_MB:画像の最大サイズ(MB) - デフォルトは10
- MAX_TOTAL_SIZE_MB:リクエストの最大総サイズ(MB) - デフォルトは100
全文検索設定
- ENABLE_FTS:全文検索機能を有効にする(true/false) - デフォルトはfalse
- FTS_LANGUAGE:語幹化とテキスト検索の言語 - デフォルトは
english。PostgreSQLは29の言語を完全な語幹化でサポートします。SQLiteはPorterステマーにenglishを使用し、その他の値にはunicode61トークナイザー(語幹化なし)を使用します。
ハイブリッド検索設定
- ENABLE_HYBRID_SEARCH:RRF融合を使用したFTSとセマンティック検索を組み合わせたハイブリッド検索を有効にする(true/false) - デフォルトはfalse
- HYBRID_RRF_K:RRF平滑化定数(1-1000) - デフォルトは60。値が高いほど、ランク間でより均一な処理が行われます。
セマンティック検索設定
- ENABLE_SEMANTIC_SEARCH:セマンティック検索機能を有効にする(true/false) - デフォルトはfalse
- OLLAMA_HOST:埋め込み生成のためのOllama APIホストURL - デフォルトは http://localhost:11434
- EMBEDDING_MODEL:セマンティック検索のための埋め込みモデル名 - デフォルトは embeddinggemma:latest
- EMBEDDING_DIM:埋め込みベクトルの次元 - デフォルトは768。注意:初期設定後にこれを変更するには、データベースの移行が必要です(セマンティック検索ガイドを参照)
PostgreSQL設定(STORAGE_BACKEND=postgresqlの場合のみ)
- POSTGRESQL_HOST:PostgreSQLサーバーのホスト - デフォルトはlocalhost
- POSTGRESQL_PORT:PostgreSQLサーバーのポート - デフォルトは5432
- POSTGRESQL_USER:PostgreSQLのユーザー名 - デフォルトはpostgres
- POSTGRESQL_PASSWORD:PostgreSQLのパスワード - デフォルトはpostgres
- POSTGRESQL_DATABASE:PostgreSQLのデータベース名 - デフォルトはmcp_context
高度な設定
サーバーの高度なチューニングのための追加の環境変数が利用可能です。
- 接続プールの設定
- リトライ動作の設定
- SQLiteのパフォーマンス最適化
- サーキットブレーカーのしきい値
- 操作タイムアウト
すべての構成オプションの完全なリストについては、app/settings.py を参照してください。
セマンティック検索
OllamaとEmbeddingGemmaを使用してオプションのセマンティック検索を有効にする詳細な手順については、セマンティック検索ガイド を参照してください。
Dockerデプロイ
HTTPトランスポートとコンテナオーケストレーションを使用した本番デプロイのために、SQLite、PostgreSQL、および外部PostgreSQL(Supabase)のDocker Compose構成が利用可能です。セットアップ手順とクライアント接続の詳細については、Dockerデプロイガイド を参照してください。
認証
認証が必要なHTTPトランスポートデプロイの場合、ベアラートークン、Google OAuth、およびAzure ADの構成オプションについては、認証ガイド を参照してください。
📚 ドキュメント
データベースバックエンド
サーバーは、STORAGE_BACKEND 環境変数を介して選択可能な複数のデータベースバックエンドをサポートしています。
SQLite(デフォルト)
ゼロコンフィグのローカルストレージで、シングルユーザーのデプロイに最適です。
- 機能:
- インストール不要 - すぐに使えます。
- 本番グレードの接続プーリングと書き込みキュー。
- より高い同時性のためのWALモード。
- シングルユーザーおよび中程度のワークロードに適しています。
- 構成:構成不要 - サーバーを起動するだけです!
PostgreSQL
マルチユーザーおよび高トラフィックのデプロイに適した高性能バックエンド。
- 機能:
- MVCCを介して、SQLiteよりも10倍以上の書き込みスループット。
- ネイティブの同時書き込みサポート。
- 高速なメタデータクエリのためのJSONBインデックス。
- asyncpgを使用した本番グレードの接続プーリング。
- セマンティック検索のためのpgvector拡張機能。
- Dockerを使用したクイックスタート: pgvectorを使用したPostgreSQLを実行するのは非常に簡単で、たった2つのコマンドです。
# 1. pgvector付きのPostgreSQLをプルして実行(ワンパッケージ)
docker run --name pgvector18 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=mcp_context \
-p 5432:5432 \
-d pgvector/pgvector:pg18-trixie
# 2. サーバーを構成する(最小限のセットアップ - たった2つの変数)
export STORAGE_BACKEND=postgresql
export ENABLE_SEMANTIC_SEARCH=true # オプション:セマンティック検索が必要な場合のみ
これで完了です!サーバーは自動的に以下のことを行います。
- 起動時にPostgreSQLに接続します。
- スキーマを初期化します(テーブルとインデックスを作成します)。
- pgvector拡張機能を有効にします(Dockerイメージには事前にインストールされています)。
- セマンティック検索が有効になっている場合は、セマンティック検索の移行を適用します。
.mcp.jsonでの構成
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "localhost",
"POSTGRESQL_USER": "postgres",
"POSTGRESQL_PASSWORD": "postgres",
"POSTGRESQL_DATABASE": "mcp_context",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
注意:PostgreSQL設定は、PostgreSQLを使用する場合にのみ必要です。STORAGE_BACKEND が設定されていない場合、サーバーはデフォルトでSQLiteを使用します。
Supabaseとの連携
Supabaseは、直接のデータベース接続を使用してPostgreSQLバックエンドと完全に互換性があります。特別な構成は必要ありません - SupabaseはPostgreSQLです。
接続方法
Supabaseは2つの接続方法を提供しています。ネットワーク機能に基づいて選択してください。
- 直接接続(IPv6が必要、最低遅延)
- セッションプーラー(IPv4互換、汎用的)
接続方法1:直接接続(推奨)
- 最適な使用シナリオ:IPv6サポートのあるVM、サーバー、およびローカル開発。
- 要件:
- IPv6接続性(または有料の専用IPv4アドオン)
- ポート5432がアクセス可能
- 最低遅延(約15-20ms)
- クイックセットアップ:
- データベース接続詳細を取得する:
Supabaseダッシュボードに移動します。
- Database → Settings(左サイドバー → Database → Settings)に移動します。
- "Connect to your project" セクションを見つけます。
- "Connection String" タブを選択し、次に "Direct connection" 方法を選択します。
postgresql://postgres:[YOUR_PASSWORD]@db.[PROJECT_REF].supabase.co:5432/postgresが表示されます。
- データベースパスワードを取得またはリセットする:
重要:セキュリティ上の理由から、データベースパスワードはSupabaseダッシュボードには表示されません。
次のいずれかの方法を使用する必要があります。
- Supabaseプロジェクトを作成するときに設定したパスワードを使用する、または
- 接続文字列の下にある "Reset database password" をクリックして、新しいパスワードを生成する。
注意:接続文字列の
[YOUR_PASSWORD]を実際のデータベースパスワード(APIキーではなく、REST/GraphQL APIにはAPIキーが使用されます)に置き換えます。
- 接続を構成する:
実際のパスワードを使用して
.mcp.jsonに追加します。
- データベース接続詳細を取得する:
Supabaseダッシュボードに移動します。
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres:your-actual-password@db.[PROJECT_REF].supabase.co:5432/postgres"
}
}
}
}
または、個別の環境変数を使用することもできます。
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "db.[PROJECT_REF].supabase.co",
"POSTGRESQL_PORT": "5432",
"POSTGRESQL_USER": "postgres",
"POSTGRESQL_PASSWORD": "your-actual-password",
"POSTGRESQL_DATABASE": "postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
[PROJECT_REF] を実際のプロジェクト参照IDに、your-actual-password をデータベースパスワードに置き換えます。
接続方法2:セッションプーラー(IPv4互換)
- 最適な使用シナリオ:IPv6サポートのないシステム(Windows、企業ネットワーク、制限された環境)。
- 要件:
- IPv4接続性(汎用的に動作します)
- ポート5432がアクセス可能
- わずかに高い遅延(約20-30ms、直接接続より+5-10ms)
- 直接接続との重要な違い:
- 異なるホスト名:
*.pooler.supabase.comを使用します(db.*.supabase.coではありません)。 - 異なるユーザー名の形式:
postgres.[PROJECT-REF](プロジェクト参照を含みます)。 - 同じポート:5432(サーバーレスのみのトランザクションプーラーの場合は6543ではありません)。
- IPv4互換:IPv6構成なしですべてのシステムで動作します。
- 異なるホスト名:
- クイックセットアップ:
- セッションプーラーの接続文字列を取得する:
Supabaseダッシュボードに移動します。
- Database → Settings(左サイドバー → Database → Settings)に移動します。
- "Connect to your project" セクションを見つけます。
- "Connection String" タブを選択し、次に "Session pooler" 方法("Transaction pooler" ではない)を選択します。
postgresql://postgres.[PROJECT-REF]:[YOUR_PASSWORD]@aws-0-[REGION].pooler.supabase.com:5432/postgresが表示されます。 例:
- セッションプーラーの接続文字列を取得する:
Supabaseダッシュボードに移動します。
postgresql://postgres.abcdefghijklmno:your-password@aws-0-us-east-1.pooler.supabase.com:5432/postgres
- データベースパスワードを取得またはリセットする(直接接続と同じ - 上記を参照)
- 接続を構成する:
.mcp.jsonに追加します。
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres.[PROJECT-REF]:your-actual-password@aws-0-[REGION].pooler.supabase.com:5432/postgres"
}
}
}
}
または、個別の環境変数を使用することもできます。
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_HOST": "aws-0-[REGION].pooler.supabase.com",
"POSTGRESQL_PORT": "5432",
"POSTGRESQL_USER": "postgres.[PROJECT-REF]",
"POSTGRESQL_PASSWORD": "your-actual-password",
"POSTGRESQL_DATABASE": "postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
[PROJECT-REF] を実際のプロジェクト参照に、[REGION] をプロジェクトのリージョン(例:us-east-1)に、your-actual-password をデータベースパスワードに置き換えます。
どの接続方法を使用するべきか?
| 考慮事項 | 直接接続 | セッションプーラー |
|---|---|---|
| IPv6が必要 | はい(または有料のIPv4アドオン) | いいえ - IPv4互換 |
| 遅延 | 最低(約15-20ms) | +5-10msのオーバーヘッド |
| Windows互換性 | IPv6構成が必要な場合があります | 汎用的に動作します |
| 企業ネットワーク | ブロックされる場合があります | 通常は動作します |
| 構成 | 簡単(標準のPostgreSQL) | 正しいホスト名が必要 |
| 最適な使用シナリオ | IPv6のあるVM、サーバー | Windows、制限されたネットワーク |
推奨事項:
- まず直接接続を試してみてください - より簡単で高速です。
- "getaddrinfo failed" エラーが発生した場合は、セッションプーラーに切り替えてください(IPv6接続性の問題を示しています)。
トラブルシューティング
- "getaddrinfo failed" エラー: 直接接続でこのエラーが表示された場合:
Error: getaddrinfo ENOTFOUND db.[PROJECT-REF].supabase.co
解決策:システムがIPv6をサポートしていないか、無効になっています。代わりにセッションプーラーを使用してください(上記の方法2)。
理由:直接接続(db.*.supabase.co)はデフォルトでIPv6を使用します。セッションプーラー(*.pooler.supabase.com)はSupavisorプロキシを通じてIPv4互換を提供します。
- セマンティック検索を有効にする(pgvector拡張機能):
Supabaseでセマンティック検索を使用する場合は、pgvector拡張機能を有効にする必要があります。
- Supabaseダッシュボードを介して(最も簡単な方法):
- Database → Extensions(左サイドバー)に移動します。
- 拡張機能のリストで "vector" を検索します。
- "vector" 拡張機能(バージョン0.8.0以上)を見つけます。
- トグルスイッチをクリックして有効にします(有効にすると緑色になります)。
- SQLエディタを介して(代替方法):
- Supabaseダッシュボードの SQLエディタ に移動します。
CREATE EXTENSION IF NOT EXISTS vector;を実行します。SELECT * FROM pg_extension WHERE extname = 'vector';で確認します。
- 環境を構成する:
- Supabaseダッシュボードを介して(最も簡単な方法):
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"STORAGE_BACKEND": "postgresql",
"POSTGRESQL_CONNECTION_STRING": "postgresql://postgres:your-actual-password@db.[PROJECT_REF].supabase.co:5432/postgres",
"ENABLE_SEMANTIC_SEARCH": "true"
}
}
}
}
注意:pgvector拡張機能はすべてのSupabaseプロジェクトで利用可能ですが、手動で有効にする必要があります。サーバーは初回実行時に必要なベクトル列とインデックスを自動的に作成します。
なぜ直接接続を推奨するのか?
- Supabaseによって推奨:バックエンドサービスおよびサーバーサイドアプリケーションに適しています。
- 完全なPostgreSQL機能:pgvector(利用可能、有効にする必要があります)、JSONB、トランザクション、すべての拡張機能。
- より高いパフォーマンス:REST APIよりも低い遅延、ネイティブの接続プーリング。
- 本番環境対応:同時書き込みのためのMVCC、asyncpgを使用した接続プーリング。
- 特別なコード不要:標準のPostgreSQLバックエンドを使用します - Supabase固有の実装は必要ありません。
重要な注意事項:
- ✅ 設定 → データベースセクションのデータベースパスワードを使用する
- ❌ APIキーではない - APIキー(レガシーサービスロールキーを含む)はREST/GraphQL APIに使用され、直接のデータベース接続には使用されません。
- ✅ 直接接続にはポート5432を使用する(バックエンドサービスに推奨)
- ✅ pgvector拡張機能 はすべてのSupabaseプロジェクトで利用可能です - セマンティック検索のためにダッシュボード → 拡張機能を介して有効にします。
- ✅ すべてのPostgreSQL機能 は同じように動作します - JSONBインデックス、メタデータフィルタリング、トランザクション。
セキュリティのベストプラクティス:
- データベースパスワードを環境変数に保存し、コード内に保存しないでください。
- シンプルさのためにSupabaseの接続文字列形式を使用します。
- デフォルトでSSL/TLSを有効にします(Supabase接続によって自動的に処理されます)。
- 読み取り専用のクレデンシャルを使用することを検討してください。
💻 使用例
基本的な使用法
store_context
オプションの画像と柔軟なメタデータを持つコンテキストエントリを保存します。
# コンテキストエントリを保存する例
store_context(
thread_id="project-123",
source="user",
text="This is a sample text.",
images=[],
metadata={"status": "active", "priority": 5},
tags=["sample"]
)
search_context
強力なフィルタリング(メタデータクエリや日付範囲を含む)を使用してコンテキストエントリを検索します。
# コンテキストエントリを検索する例
search_context(
thread_id="project-123",
source="user",
tags=["sample"],
content_type="text",
metadata={"status": "active"},
start_date="2025-11-01",
end_date="2025-11-30",
limit=10
)
get_context_by_ids
特定のIDでコンテキストエントリを取得します。
# 特定のIDでコンテキストエントリを取得する例
get_context_by_ids(
context_ids=[1, 2, 3],
include_images=True
)
delete_context
IDまたはスレッドでコンテキストエントリを削除します。
# IDでコンテキストエントリを削除する例
delete_context(
context_ids=[1, 2, 3]
)
list_threads
すべてのアクティブなスレッドを統計情報とともにリストします。
# すべてのアクティブなスレッドをリストする例
list_threads()
get_statistics
データベースの統計情報と使用メトリクスを取得します。
# データベースの統計情報を取得する例
get_statistics()
update_context
既存のコンテキストエントリの特定のフィールドを更新します。
# コンテキストエントリの特定のフィールドを更新する例
update_context(
context_id=1,
text="This is an updated text.",
metadata={"status": "completed"},
tags=["updated"]
)
semantic_search_context
ベクトル埋め込みを使用してセマンティック類似性検索を実行します。
# セマンティック類似性検索を実行する例
semantic_search_context(
query="This is a sample query.",
limit=5,
thread_id="project-123"
)
fts_search_context
言語処理、関連性ランキング、およびハイライト付きのスニペットを使用して全文検索を実行します。
# 全文検索を実行する例
fts_search_context(
query="This is a sample query.",
mode="match",
limit=5,
thread_id="project-123"
)
hybrid_search_context
Reciprocal Rank Fusion(RRF)を使用してFTSとセマンティック検索を組み合わせたハイブリッド検索を実行します。
# ハイブリッド検索を実行する例
hybrid_search_context(
query="This is a sample query.",
limit=5,
thread_id="project-123"
)
高度な使用法
バッチ操作
複数のコンテキストエントリを効率的にバッチ処理できます。
# 複数のコンテキストエントリをバッチで保存する例
store_context_batch(
entries=[
{
"thread_id": "project-123",
"source": "user",
"text": "This is a sample entry 1.",
"metadata": {"status": "active"},
"tags": ["sample"]
},
{
"thread_id": "project-123",
"source": "user",
"text": "This is a sample entry 2.",
"metadata": {"status": "active"},
"tags": ["sample"]
}
]
)
🔧 技術詳細
APIリファレンス
ツール
-
store_context:オプションの画像と柔軟なメタデータを持つコンテキストエントリを保存します。
- パラメータ:
thread_id(str, required):会話/タスクスレッドの一意の識別子source(str, required):'user' または 'agent'text(str, required):保存するテキストコンテンツimages(list, optional):MIMEタイプ付きのBase64エンコードされた画像metadata(dict, optional):追加の構造化データ - あなたのユースケースに合わせた完全に柔軟なJSONオブジェクトtags(list, optional):組織化のためのタグ(自動的に正規化されます)
- メタデータの柔軟性:
メタデータフィールドは、任意のJSONシリアライズ可能な構造を受け入れます。
- タスク管理:
status、priority、assignee、due_date、completedを保存します。 - エージェントコーディネーション:
agent_name、task_name、execution_time、resource_usageを追跡します。 - ナレッジベース:
category、relevance_score、source_url、authorを含めます。 - デバッグコンテキスト:
error_type、stack_trace、environment、versionを保存します。 - 分析:
user_id、session_id、event_type、timestampを記録します。
- タスク管理:
- パフォーマンスに関する注意:
以下のメタデータフィールドは、より高速なフィルタリングのためにインデックスが作成されています。
status:状態情報(例:'pending'、'active'、'completed')priority:範囲クエリのための数値agent_name:特定のエージェント識別子task_name:文字列検索のためのタスクタイトルcompleted:完了状態のブールフラグ
- 戻り値:成功ステータスとコンテキストIDを含む辞書
- パラメータ:
-
search_context:強力なフィルタリング(メタデータクエリや日付範囲を含む)を使用してコンテキストエントリを検索します。
- パラメータ:
thread_id(str, optional):スレッドでフィルタリングsource(str, optional):ソースでフィルタリング('user' または 'agent')tags(list, optional):タグでフィルタリング(OR論理)content_type(str, optional):タイプでフィルタリング('text' または 'multimodal')metadata(dict, optional):単純なメタデータフィルター(キー=値の等価性)metadata_filters(list, optional):演算子を使用した高度なメタデータフィルターstart_date(str, optional):この日以降に作成されたエントリをフィルタリング(ISO 8601形式)end_date(str, optional):この日以前に作成されたエントリをフィルタリング(ISO 8601形式)limit(int, optional):返す最大結果数(1-100、デフォルト:30)offset(int, optional):ページネーションのオフセット(デフォルト:0)include_images(bool, optional):レスポンスに画像データを含めるexplain_query(bool, optional):クエリ実行統計を含める
- メタデータフィルタリング:単純なキー=値の等価性と15の演算子を使用した高度なフィルタリングをサポートします。詳細は メタデータガイド を参照してください。
- 日付フィルタリング:ISO 8601日付フィルタリングをサポートします。
- 戻り値:一致するコンテキストエントリのリスト(オプションでクエリ統計を含む)
- パラメータ:
-
get_context_by_ids:特定のIDでコンテキストエントリを取得します。
- パラメータ:
context_ids(list, required):コンテキストエントリのIDのリストinclude_images(bool, optional):画像データを含める(デフォルト:True)
- 戻り値:完全なコンテンツを持つコンテキストエントリのリスト
- パラメータ:
-
delete_context:IDまたはスレッドでコンテキストエントリを削除します。
- パラメータ:
context_ids(list, optional):削除する特定のIDthread_id(str, optional):スレッド内のすべてのエントリを削除
- 戻り値:削除されたエントリの数を含む辞書
- パラメータ:
-
list_threads:すべてのアクティブなスレッドを統計情報とともにリストします。
- 戻り値:
- エントリ数を持つスレッドのリスト
- ソースタイプの分布
- マルチモーダルコンテンツの数
- タイムスタンプの範囲
- 戻り値:
-
get_statistics:データベースの統計情報と使用メトリクスを取得します。
- 戻り値:
- 総エントリ数
- ソースとコンテンツタイプ別の内訳
- 総画像数
- 一意のタグ数
- データベースのサイズ(MB)
- 戻り値:
-
update_context:既存のコンテキストエントリの特定のフィールドを更新します。
- パラメータ:
context_id(int, required):更新するコンテキストエントリのIDtext(str, optional):新しいテキストコンテンツmetadata(dict, optional):新しいメタデータ(完全な置換)metadata_patch(dict, optional):RFC 7396 JSON Merge Patchを使用した部分的なメタデータ更新tags(list, optional):新しいタグ(完全な置換)images(list, optional):新しい画像(完全な置換)
- メタデータ更新オプション:
metadataを使用して完全に置換するか、metadata_patchを使用して部分的に更新します。これらのパラメータは相互に排他的です。 RFC 7396 JSON Merge Patchのセマンティクス(metadata_patch):- 新しいキーは既存のメタデータに追加されます。
- 既存のキーは新しい値で置き換えられます。
- ヌル値はキーを削除します。
- パラメータ:
# 他のフィールドを保持しながら単一のフィールドを更新する
update_context(context_id=123, metadata_patch={"status": "completed"})
# 新しいフィールドを追加し、別のフィールドを削除する
update_context(context_id=123, metadata_patch={"reviewer": "alice", "draft": None})
-
制限事項(RFC 7396):ヌル値は保存できません(ヌルはキーを削除することを意味します - 必要な場合は完全な置換を使用してください)、配列は全体が置き換えられます(マージされません)。詳細は メタデータガイド を参照してください。
-
フィールド更新ルール:
- 更新可能なフィールド:text_content、metadata、tags、images
- 変更できないフィールド:id、thread_id、source、created_at(データの整合性のために保持されます)
- 自動管理されるフィールド:content_type(画像の有無に基づいて再計算されます)、updated_at(現在のタイムスタンプに設定されます)
-
更新動作:
- 提供されたフィールドのみが更新されます(選択的な更新)。
- タグと画像は一貫性を保つために完全な置換セマンティクスを使用します。
- コンテンツタイプは画像の有無に基づいて自動的に 'text' と 'multimodal' の間で切り替わります。
- 少なくとも1つの更新可能なフィールドが提供される必要があります。
-
戻り値:
- 成功ステータス
- コンテキストID
- 更新されたフィールドのリスト
- 成功/エラーメッセージ
-
semantic_search_context:ベクトル埋め込みを使用してセマンティック類似性検索を実行します。
- 注意:このツールは、
ENABLE_SEMANTIC_SEARCH=trueを介してセマンティック検索が有効になっており、すべての依存関係がインストールされている場合にのみ使用できます。実装はバックエンドによって異なります。- SQLite:Ollamaを介した埋め込みモデルを使用したsqlite-vec拡張機能を使用します。
- PostgreSQL:Ollamaを介した埋め込みモデルを使用したpgvector拡張機能(pgvector Dockerイメージに事前にインストールされています)を使用します。
- パラメータ:
query(str, required):自然言語の検索クエリlimit(int, optional):返す最大結果数(1-100、デフォルト:5)offset(int, optional):ページネーションのオフセット(デフォルト:0)thread_id(str, optional):オプションのスレッドでフィルタリングsource(str, optional):ソースタイプでフィルタリング('user' または 'agent')tags(list, optional):これらのタグのいずれかでフィルタリング(OR論理)content_type(str, optional):コンテンツタイプでフィルタリング('text' または 'multimodal')start_date(str, optional):この日以降に作成されたエントリをフィルタリング(ISO 8601形式)end_date(str, optional):この日以前に作成されたエントリをフィルタリング(ISO 8601形式)metadata(dict, optional):単純なメタデータフィルター(キー=値の等価性)metadata_filters(list, optional):演算子を使用した高度なメタデータフィルターinclude_images(bool, optional):結果に画像データを含める(デフォルト:false)explain_query(bool, optional):クエリ実行統計を含める(デフォルト:false)
- メタデータフィルタリング:
search_contextと同じフィルタリング構文をサポートします。詳細は メタデータガイド を参照してください。 - 戻り値:
- クエリ文字列
- 類似度スコアを持つセマンティックに類似するコンテキストエントリのリスト
- 結果数
- 埋め込みに使用されたモデル名
- クエリ実行統計(
explain_query=Trueの場合のみ)
- 注意:このツールは、
-
fts_search_context:言語処理、関連性ランキング、およびハイライト付きのスニペットを使用して全文検索を実行します。
- 注意:このツールは、
ENABLE_FTS=trueを介してFTSが有効になっている場合にのみ使用できます。実装はバックエンドによって異なります。- SQLite:BM25ランキングを使用したFTS5を使用します。Porterステマー(英語)またはunicode61トークナイザー(多言語)。
- PostgreSQL:ts_rankランキングを使用したtsvector/tsqueryを使用します。29の言語を完全な語幹化でサポートします。
- パラメータ:
query(str, required):検索クエリmode(str, optional):検索モード -match(デフォルト)、prefix、phrase、またはbooleanlimit(int, optional):返す最大結果数(1-100、デフォルト:5)offset(int, optional):ページネーションのオフセット(デフォルト:0)thread_id(str, optional):オプションのスレッドでフィルタリングsource(str, optional):ソースタイプでフィルタリング('user' または 'agent')tags(list, optional):これらのタグのいずれかでフィルタリング(OR論理)content_type(str, optional):コンテンツタイプでフィルタリング('text' または 'multimodal')start_date(str, optional):この日以降に作成されたエントリをフィルタリング(ISO 8601形式)end_date(str, optional):この日以前に作成されたエントリをフィルタリング(ISO 8601形式)metadata(dict, optional):単純なメタデータフィルター(キー=値の等価性)metadata_filters(list, optional):演算子を使用した高度なメタデータフィルターhighlight(bool, optional):結果にハイライト付きのスニペットを含める(デフォルト:false)include_images(bool, optional):結果に画像データを含める(デフォルト:false)explain_query(bool, optional):クエリ実行統計を含める(デフォルト:false)
- 検索モード:
match:語幹化を使用した標準的な単語マッチング(デフォルト)prefix:オートコンプリートスタイルの検索のための接頭辞マッチングphrase:単語の順序を保持した正確なフレーズマッチングboolean:複雑なクエリのためのブール演算子(AND、OR、NOT)
- メタデータフィルタリング:
search_contextと同じフィルタリング構文をサポートします。詳細は メタデータガイド を参照してください。 - 戻り値:
- クエリ文字列と検索モード
- 関連性スコアとハイライト付きのスニペットを持つ一致するエントリのリスト
- 結果数
- FTSの可用性ステータス
- 注意:このツールは、
-
hybrid_search_context:Reciprocal Rank Fusion(RRF)を使用してFTSとセマンティック検索を組み合わせたハイブリッド検索を実行します。
- 注意:このツールは、
ENABLE_HYBRID_SEARCH=trueを介してハイブリッド検索が有効になっており、FTS(ENABLE_FTS=true)またはセマンティック検索(ENABLE_SEMANTIC_SEARCH=true)の少なくとも一方が有効になっている場合にのみ使用できます。RRFアルゴリズムは、利用可能な検索方法からの結果を組み合わせ、両方の検索で出現するドキュメントを強調表示します。 - パラメータ:
query(str, required):自然言語の検索クエリlimit(int, optional):返す最大結果数(1-100、デフォルト:5)offset(int, optional):ページネーションのオフセット(デフォルト:0)search_modes(list, optional):使用する検索モード -['fts', 'semantic'](デフォルト:両方)fusion_method(str, optional):融合アルゴリズム -'rrf'(デフォルト)rrf_k(int, optional):RRF平滑化定数(1-1000、デフォルトはHYBRID_RRF_K環境変数から)thread_id(str, optional):オプションのスレッドでフィルタリングsource(str, optional):ソースタイプでフィルタリング('user' または 'agent')tags(list, optional):これらのタグのいずれかでフィルタリング(OR論理)content_type(str, optional):コンテンツタイプでフィルタリング('text' または 'multimodal')start_date(str, optional):この日以降に作成されたエントリをフィルタリング(ISO 8601形式)end_date(str, optional):この日以前に作成されたエントリをフィルタリング(ISO 8
- 注意:このツールは、
代替品








