メインコンテンツまでスキップ

Amazon ElastiCache/MemoryDB Valkey MCP サーバー

Amazon ElastiCache Valkey データストア向けの AWS Labs Model Context Protocol (MCP) サーバーです。

機能

この MCP サーバーは、Valkey を扱う AI エージェント向けに特化した 12 個のツールを提供します。ツール群は、構造化された JSON 入力を受け付け、コマンド変換を内部で処理することで、トークンコストとエージェントのエラー率を最小限に抑えるよう設計されています。

Valkey AI Search — 4 ツール

ツール機能
manage_index検索インデックスの作成、削除、検査、一覧表示を行います。TEXT、NUMERIC、TAG、VECTOR フィールドを含む構造化スキーマ定義を受け付けます。デフォルトは COSINE 距離 + HNSW アルゴリズムです。
add_documentsオプションの埋め込み生成付きでドキュメントを取り込みます。Bedrock、OpenAI、Ollama プロバイダーをサポートします。インデックスが存在しない場合は自動作成します。
searchセマンティック検索、テキスト検索、ハイブリッド検索、類似検索を統合したツールです。パラメータからモードを自動検出するほか、明示的な mode の上書き指定も受け付けます。
aggregateFT.AGGREGATE 用の構造化パイプラインビルダーです。GROUPBY、SORTBY、APPLY、FILTER、LIMIT ステージと 12 種類の REDUCE 関数をサポートします。

Valkey JSON Intelligence — 5 ツール

ツール機能
json_getValkey キーの指定パスから JSON 値を取得します。
json_set指定パスに JSON 値を設定します(オプションで TTL を指定可能)。
json_arrappend指定パスの JSON 配列に値を追加します。
json_arrpop指定パスの JSON 配列から要素を取り出します。
json_arrtrimJSON 配列を指定した範囲にトリムします。

Valkey Command Runner — 3 ツール(3 段階の安全性)

ツール階層機能
valkey_readSafe読み取り専用コマンド(GET、HGETALL、SCAN、INFO など)。readonly モードでも常に利用可能です。
valkey_writeWrite変更系コマンド(SET、HSET、DEL、LPUSH など)。破壊的なコマンドはブロックされます。readonly モードでは無効です。
valkey_adminAdmin破壊的なコマンド(FLUSHALL、CONFIG SET、EVAL など)。デフォルトでは無効で、VALKEY_ADMIN_ENABLED=trueconfirm=True が必要です。

3 段階の安全性モデル: valkey_read(常に安全)→ valkey_write(変更可、破壊的操作は不可)→ valkey_admin(オプトイン専用、デフォルトで無効)。エージェントが誤ってステージングクラスターに FLUSHALL を実行することはありません。

その他の機能

  • Valkey-GLIDE: 非同期ネイティブなパフォーマンスを実現する Valkey GLIDE 上に構築されています。
  • クラスターサポート: スタンドアロンおよびクラスター構成の Valkey デプロイメントに対応します。
  • SSL/TLS セキュリティ: CA 証明書検証付きの TLS によるセキュアな接続。
  • Readonly モード: --readonly で書き込み操作を防止します。
  • マルチプロバイダー埋め込み: Bedrock、OpenAI、Ollama に対応し、自動フォールバックを備えています。
  • ヘルスチェック: ALB ターゲットグループのヘルスチェック用の GET /health エンドポイント。

前提条件

  1. Astral から uv をインストールします
  2. uv python install 3.10 で Python をインストールします
  3. Valkey データストアへのアクセス:
  4. 埋め込みプロバイダーの認証情報(add_documentssearch によるセマンティック検索を使用する場合にのみ必要):
    • Bedrock(デフォルト): AWS 認証情報が必要です — AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYAWS_PROFILE、または IAM ロール。認証情報がない場合、セマンティック検索は NoCredentialsError で失敗します。
    • OpenAI: OPENAI_API_KEY が必要です
    • Ollama: 実行中の Ollama インスタンスが必要です(認証情報は不要)
  5. Amazon ElastiCache/MemoryDB への接続手順については、ELASTICACHECONNECT.md を参照してください。

クイックスタート

Search モジュールと JSON モジュールを含むローカル Valkey インスタンスを起動します:

docker run -d --name valkey -p 6379:6379 valkey/valkey-bundle:latest

起動していることを確認します:

docker exec valkey valkey-cli PING
# Should return: PONG

MCP サーバーを実行します(埋め込みに Ollama を使用 — AWS 認証情報は不要):

uvx awslabs.valkey-mcp-server@latest

または、セマンティック検索用に Ollama 埋め込みを使用する場合:

EMBEDDING_PROVIDER=ollama uvx awslabs.valkey-mcp-server@latest

AI IDE で次のクエリ例を試してみてください:

"Create a search index called products with title (TEXT), category (TAG), and price (NUMERIC) fields"
"Add 3 product documents to the products index"
"Search for electronics in the products index"
"Show me the average price by category"

インストール

KiroCursorVS Code
Add to KiroInstall MCP ServerInstall on VS Code

MCP 設定

MCP 設定ファイル(例: Kiro の場合は ~/.kiro/settings/mcp.json、Cursor の場合は .cursor/mcp.json、VS Code の場合は .vscode/mcp.json)に以下を追加します:

{
"mcpServers": {
"awslabs.valkey-mcp-server": {
"command": "uvx",
"args": ["awslabs.valkey-mcp-server@latest"],
"env": {
"VALKEY_HOST": "127.0.0.1",
"VALKEY_PORT": "6379",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}

ヒント: 初期セットアップ中は FASTMCP_LOG_LEVEL=INFO または DEBUG を使用すると、接続とツール登録の出力を確認できます。本番環境では ERROR に切り替えてください。

デフォルトの埋め込みプロバイダーは Bedrock で、AWS 認証情報が必要です。代わりに Ollama を使用する場合(認証情報は不要)、以下を追加します:

        "EMBEDDING_PROVIDER": "ollama",
"OLLAMA_HOST": "http://localhost:11434"

Readonly モード(すべての書き込み操作を無効化します — 埋め込みの設定はセマンティック検索を使用する場合にのみ必要です):

{
"mcpServers": {
"awslabs.valkey-mcp-server": {
"command": "uvx",
"args": ["awslabs.valkey-mcp-server@latest", "--readonly"],
"env": {
"VALKEY_HOST": "127.0.0.1",
"VALKEY_PORT": "6379",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}

Windows でのインストール

{
"mcpServers": {
"awslabs.valkey-mcp-server": {
"command": "uv",
"args": [
"tool", "run", "--from",
"awslabs.valkey-mcp-server@latest",
"awslabs.valkey-mcp-server.exe"
],
"env": {
"VALKEY_HOST": "127.0.0.1",
"VALKEY_PORT": "6379",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}

Docker

まずイメージをビルドします:

docker build -t awslabs/valkey-mcp-server .

MCP 設定(ホスト上の Valkey に到達するには host.docker.internal を使用します。Linux では代わりに --network host を使用します):

{
"mcpServers": {
"awslabs.valkey-mcp-server": {
"command": "docker",
"args": [
"run", "--rm", "--interactive",
"--env", "FASTMCP_LOG_LEVEL=ERROR",
"--env", "VALKEY_HOST=host.docker.internal",
"--env", "VALKEY_PORT=6379",
"awslabs/valkey-mcp-server:latest"
]
}
}
}

Docker での readonly モード:

{
"mcpServers": {
"awslabs.valkey-mcp-server": {
"command": "docker",
"args": [
"run", "--rm", "--interactive",
"--env", "FASTMCP_LOG_LEVEL=ERROR",
"--env", "VALKEY_HOST=host.docker.internal",
"--env", "VALKEY_PORT=6379",
"awslabs/valkey-mcp-server:latest",
"--readonly"
]
}
}
}

Docker コンテナを直接実行する場合:

docker run -p 8080:8080 \
-e VALKEY_HOST=host.docker.internal \
-e VALKEY_PORT=6379 \
awslabs/valkey-mcp-server

設定

サーバー

変数説明デフォルト
MCP_TRANSPORTトランスポートプロトコル(stdiosse)stdio

Valkey 接続

変数説明デフォルト
VALKEY_HOSTValkey のホスト名または IP127.0.0.1
VALKEY_PORTValkey のポート6379
VALKEY_USERNAME認証用のユーザー名None
VALKEY_PWD認証用のパスワード(注: VALKEY_PASSWORD ではありません)""
VALKEY_USE_SSLTLS を有効化false
VALKEY_SSL_CA_CERTSTLS 検証用の CA 証明書(PEM)へのパスNone
VALKEY_CLUSTER_MODEクラスターモードを有効化false
VALKEY_VECTOR_ALGORITHMデフォルトのベクトルインデックスアルゴリズム(HNSW または FLAT)HNSW
VALKEY_VECTOR_DISTANCE_METRICデフォルトのベクトル距離メトリクス(COSINEL2、または IP)COSINE
VALKEY_ADMIN_ENABLED管理者階層(破壊的なコマンド)を有効化false

埋め込みプロバイダー

埋め込み生成は、add_documents(ベクトルの生成)と search(セマンティック/ハイブリッドモード)で使用されます。テキスト検索、JSON ツール、または manage_index のみを使用する場合、埋め込みプロバイダーは不要です。

変数説明デフォルト
EMBEDDING_PROVIDERプロバイダー: bedrockopenaiollama、または hashbedrock

注: デフォルトのプロバイダーは Bedrock で、AWS 認証情報が必要です。AWS 認証情報を設定していない場合は、EMBEDDING_PROVIDER=ollama を設定してローカルの Ollama インスタンスを実行するか、テスト用に EMBEDDING_PROVIDER=hash を設定してください(決定的で低品質な埋め込み)。

Bedrock

認証情報は AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYAWS_PROFILE、または IAM ロール経由で指定します。

変数説明デフォルト
AWS_REGIONAWS リージョンus-east-1
BEDROCK_MODEL_IDモデル IDamazon.nova-2-multimodal-embeddings-v1:0
BEDROCK_NORMALIZE埋め込みを正規化None
BEDROCK_DIMENSIONS埋め込みの次元数None(モデルのデフォルト)
BEDROCK_INPUT_TYPE入力タイプNone
BEDROCK_MAX_ATTEMPTS最大リトライ回数3
BEDROCK_MAX_POOL_CONNECTIONSコネクションプールのサイズ50
BEDROCK_RETRY_MODEリトライモードadaptive

OpenAI

変数説明デフォルト
OPENAI_API_KEYAPI キー(必須)None
OPENAI_MODELモデル名text-embedding-3-small

Ollama

変数説明デフォルト
OLLAMA_HOSTOllama エンドポイント URL(プロトコルが必要です。例: http://localhost:11434)http://localhost:11434
OLLAMA_EMBEDDING_MODELモデル名nomic-embed-text

使用例

"Create a search index for product data with title, category, price, and embedding fields"
"Add these product documents and generate embeddings from the title field"
"Search for products similar to 'wireless headphones'"
"Find products similar to product:123"
"Show me the average price by category"
"Store this JSON config and set a 1-hour TTL"
"Get the nested value at $.settings.theme from the config key"

トラブルシューティング

問題原因対処法
Connection refused または timed outValkey が起動していないか、ホスト/ポートが誤っているVALKEY_HOSTVALKEY_PORT を確認します。valkey-cli -h <host> -p <port> PING でテストします。
セマンティック検索での NoCredentialsErrorBedrock がデフォルトのプロバイダーだが AWS 認証情報が未設定EMBEDDING_PROVIDER=ollama を設定するか、AWS 認証情報を設定します。
Unknown command 'FT.CREATE'Valkey Search モジュールがロードされていないvalkey/valkey-bundle Docker イメージを使用するか、Search モジュールをロードします。
Unknown command 'JSON.GET'Valkey JSON モジュールがロードされていないvalkey/valkey-bundle Docker イメージを使用するか、JSON モジュールをロードします。
Docker: 127.0.0.1 への Connection refusedコンテナのループバックはホストではないVALKEY_HOST=host.docker.internal(macOS/Windows)または --network host(Linux)を使用します。
Request URL is missing 'http://'OLLAMA_HOST がプロトコルなしで設定されているプロトコルを含めます: localhost:11434 ではなく http://localhost:11434 とします。
サーバーから出力がないFASTMCP_LOG_LEVEL=ERROR が情報出力を抑制しているトラブルシューティング時は FASTMCP_LOG_LEVEL=INFO または DEBUG を設定します。

ツール名の衝突

このサーバーは search という名前のツールを公開しています。他の MCP サーバー(例: Atlassian Rovo)も同名のツールを公開している場合があります。複数の MCP サーバーが同時にアクティブな場合、AI エージェントがそれらを区別できず、誤ったツールが呼び出されることがあります。

この問題が発生した場合は、次のいずれかを行ってください:

  • Valkey 検索を使用する際に、競合する MCP サーバーを無効化する
  • MCP クライアントがサポートしている場合は、明示的なツールルーティングを使用する(例: サーバースコープ付きのツール名)
  • インデックス名や Valkey 固有のパラメータを参照して、Valkey の search ツールを明示的に使用するようエージェントに指示する

開発

テストの実行

uv venv && source .venv/bin/activate && uv sync

# Unit tests
uv run --frozen pytest tests/ -m "not live and not integration"

# Live integration tests (requires VALKEY_HOST and EMBEDDING_PROVIDER)
uv run --frozen pytest tests/test_search_live.py -m live -v

# Type checking
uv run --frozen pyright

Docker イメージのビルド

docker build -t awslabs/valkey-mcp-server .

Docker コンテナの実行

docker run -p 8080:8080 \
-e VALKEY_HOST=host.docker.internal \
-e VALKEY_PORT=6379 \
awslabs/valkey-mcp-server

Readonly モード:

docker run -p 8080:8080 \
-e VALKEY_HOST=host.docker.internal \
-e VALKEY_PORT=6379 \
awslabs/valkey-mcp-server --readonly