שרת MCP מאומת: Redis

שרת ה-MCP ל-Redis, אומת בריצה חיה על Mac אמיתי.

  • אומת2026-08-03macOS 14.4.1
  • חבילהredis-mcp-server (PyPI) 0.5.0
  • מדווח על עצמוRedis MCP Server 1.29.0
  • פרוטוקול MCP2025-06-18
  • סביבת ריצהv25.8.1 (test client)

התשובה הקצרה

אומת לאחרונה 2026-08-03

שרת ה-MCP ל-Redis מאפשר לעוזר AI לדבר עם מופע Redis שכבר רץ אצלכם: לקרוא ולכתוב מפתחות, לעבוד עם hashes, רשימות, קבוצות, קבוצות ממוינות, streams ו-JSON, להריץ חיפוש וקטורי והיברידי מעל אינדקס, ולקרוא נתוני שרת. זהו השרת הרשמי, שמפרסמת Redis, Inc. כחבילת Python בשם redis-mcp-server, הוא רץ על ה-Mac שלכם על גבי stdio, ומול מופע מקומי בלי סיסמה הוא אינו דורש חשבון, מפתח API או הרשמה. לא הסתפקנו במה שכתוב ב-README. הפעלנו אותו מול redis-server אמיתי ב-localhost:6379, דיברנו איתו בפרוטוקול, ספרנו את כל 47 הכלים, כתבנו מפתח חד-פעמי, קראנו אותו בחזרה ומחקנו אותו, ושמרנו את הפלט הגולמי. הריצה הזו גם חשפה משהו שה-README לא מספר: הפקודה המדויקת שהוא מדפיס קורסת היום, ודגל אחד נוסף מתקן אותה. הקריסה, הפתרון וכל שאר השגיאות נמצאים למטה. [3][1][2]

  • כלים

    47, נספרו בריצה חיה

  • אישורי גישה

    לא נדרשים למופע מקומי

  • ערוץ תקשורת

    stdio, רץ על ה-Mac שלכם [2]

  • מתחזק

    Redis, Inc., בתחזוקה פעילה [1][3]

  • הורדות

    4.6 אלף בשבוע האחרון ב-PyPI [4]

  • רישיון

    MIT, של Redis, Inc. [1][5]

אימות

איך שרת ה-MCP הזה אומת.

השיטה

הפעלנו redis-server אמיתי על ה-Mac הזה בכתובת localhost:6379, הרצנו את שרת ה-MCP עם uvx על גבי stdio כשהוא מכוון ל-redis://localhost:6379/0, השלמנו את לחיצת היד של MCP, קראנו ל-tools/list ואז הרצנו קריאות כלי אמיתיות: set כתב מפתח חד-פעמי עם תפוגה של 60 שניות, get קרא אותו בחזרה ו-delete מחק אותו. לא נעשה שימוש בשום אישור גישה, ולא נקרא ולא נשמר אף אחד כזה: המופע מקומי ובלי אימות. ארבע הפעלות נוספות נעשו בכוונה כדי להיכשל, ומהן הגיע קטע פתרון התקלות. הפקודה שמודפסת ב-README קרסה על ה-Mac הזה עוד לפני לחיצת היד, ולכן כל ההפעלות השתמשו ב-uvx עם קיבוע של ה-SDK של MCP ל-Python מתחת לגרסה 2, שהתרגם לגרסה 1.29.0. על ה-Mac רצו Python 3.14.3 ו-uv 0.10.11. השם Node מופיע ברצועה למעלה רק משום שלקוח הבדיקה שלנו הוא תהליך Node; השרת הזה אינו זקוק לו. כשמטמון ה-uv כבר מלא, השרת אינו מדפיס דבר לא ל-stdout ולא ל-stderr, ולכן מה שמופיע למטה הוא תגובת ה-initialize הגולמית בשורה אחת, בדיוק כפי שהגיעה מהחיבור.

הודעת הפתיחה של השרת

{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"Redis MCP Server","version":"1.29.0"}}}

קריאת כלי אמיתית אחת

tools/call set {"key": "mcp-verify-2026", "value": "getroutines-live-check", "expiration": 60}
Successfully set mcp-verify-2026 with expiration 60 seconds

שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.

כלים

הכלים, כפי שנספרו מהשרת הרץ.

השרת ענה ל-tools/list עם 47 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.

כלימה הוא עושה
hsetname*key*value*expire_seconds

Set a field in a hash stored at key with an optional expiration time. Args: name: The Redis hash key. key: The field name inside the hash. value: The value to set. expire_seconds: Optional; time in seconds after which the key should expire. Returns: A success message or an error message.

hgetname*key*

Get the value of a field in a Redis hash. Args: name: The Redis hash key. key: The field name inside the hash. Returns: The field value or an error message.

hdelname*key*

Delete a field from a Redis hash. Args: name: The Redis hash key. key: The field name inside the hash. Returns: A success message or an error message.

hgetallname*

Get all fields and values from a Redis hash. Args: name: The Redis hash key. Returns: A dictionary of field-value pairs or an error message.

hexistsname*key*

Check if a field exists in a Redis hash. Args: name: The Redis hash key. key: The field name inside the hash. Returns: True if the field exists, False otherwise.

set_vector_in_hashname*vector*vector_field

Store a vector as a field in a Redis hash. Args: name: The Redis hash key. vector_field: The field name inside the hash. Unless specifically required, use the default field name vector: The vector (list of numbers) to store in the hash. Returns: True if the vector was successfully stored, False otherwise.

get_vector_from_hashname*vector_field

Retrieve a vector from a Redis hash and convert it back from binary blob. Args: name: The Redis hash key. vector_field: The field name inside the hash. Unless specifically required, use the default field name Returns: The vector as a list of floats, or an error message if retrieval fails.

json_setname*path*value*expire_seconds

Set a JSON value in Redis at a given path with an optional expiration time. Args: name: The Redis key where the JSON document is stored. path: The JSON path where the value should be set. value: The JSON value to store (as JSON string, or will be auto-converted). expire_seconds: Optional; time in seconds after which the key should expire. Returns: A success message or an error message.

json_getname*path

Retrieve a JSON value from Redis at a given path. Args: name: The Redis key where the JSON document is stored. path: The JSON path to retrieve (default: root '$'). Returns: The retrieved JSON value or an error message.

json_delname*path

Delete a JSON value from Redis at a given path. Args: name: The Redis key where the JSON document is stored. path: The JSON path to delete (default: root '$'). Returns: A success message or an error message.

lpushname*value*expire

Push a value onto the left of a Redis list and optionally set an expiration time.

rpushname*value*expire

Push a value onto the right of a Redis list and optionally set an expiration time.

lpopname*

Remove and return the first element from a Redis list.

rpopname*

Remove and return the last element from a Redis list.

lrangename*start*stop*

Get elements from a Redis list within a specific range. Returns: str: A JSON string containing the list of elements or an error message.

llenname*

Get the length of a Redis list.

lremname*count*element*

Remove elements from a Redis list. Args: name: The name of the list count: Number of elements to remove (0 = all, positive = from head, negative = from tail) element: The element value to remove Returns: A string indicating the number of elements removed.

deletekey*

Delete a Redis key. Args: key (str): The key to delete. Returns: str: Confirmation message or an error message.

typekey*

Returns the string representation of the type of the value stored at key Args: key (str): The key to check. Returns: str: The type of key, or none when key doesn't exist

expirename*expire_seconds*

Set an expiration time for a Redis key. Args: name: The Redis key. expire_seconds: Time in seconds after which the key should expire. Returns: A success message or an error message.

renameold_key*new_key*

Renames a Redis key from old_key to new_key. Args: old_key (str): The current name of the Redis key to rename. new_key (str): The new name to assign to the key. Returns: Dict[str, Any]: A dictionary containing the result of the operation. On success: {"status": "success", "message": "..."} On error: {"error": "..."}

scan_keyspatterncountcursor

Scan keys in the Redis database using the SCAN command (non-blocking, production-safe). ⚠️ IMPORTANT: This returns PARTIAL results from one iteration. Use scan_all_keys() to get ALL matching keys, or call this function multiple times with the returned cursor until cursor becomes 0. The SCAN command iterates through the keyspace in small chunks, making it safe to use on large databases without blocking other operations. Args: pattern: Pattern to match keys against (default is "*" for all keys). Common patterns: "user:*", "cache:*", "*:123", etc. count: Hint for the number of keys to return per iteration (default 100). Redis may return more or fewer keys than this hint. cursor: The cursor position to start scanning from (0 to start from beginning). To continue scanning, use the cursor value returned from previous call. Returns: A dictionary containing: - 'cursor': Next cursor position (0 means scan is complete) - 'keys': List of keys found in this iteration (PARTIAL RESULTS) - 'total_scanned': Number of keys returned in this batch - 'scan_complete': Boolean indicating if scan is finished Or an error message if something goes wrong. Example usage: First call: scan_keys("user:*") -> returns cursor=1234, keys=[...], scan_complete=False Next call: scan_keys("user:*", cursor=1234) -> continues from where it left off Final call: returns cursor=0, scan_complete=True when done

scan_all_keyspatternbatch_size

Scan and return ALL keys matching a pattern using multiple SCAN iterations. This function automatically handles the SCAN cursor iteration to collect all matching keys. It's safer than KEYS * for large databases but will still collect all results in memory. ⚠️ WARNING: With very large datasets (millions of keys), this may consume significant memory. For large-scale operations, consider using scan_keys() with manual iteration instead. Args: pattern: Pattern to match keys against (default is "*" for all keys). batch_size: Number of keys to scan per iteration (default 100). Returns: A list of all keys matching the pattern or an error message.

search_redis_documentsquestion*

Search Redis documentation and knowledge base to learn about Redis concepts and use cases. This tool exposes updated and curated documentation, and must be invoked every time the user wants to learn more in areas including: **Common Use Cases:** - Session Management: User session storage and management - Caching: Application-level and database query caching - Rate Limiting: API throttling and request limiting - Leaderboards: Gaming and ranking systems - Semantic Search: AI-powered similarity search - Agentic Workflows: AI agent state and memory management - RAG (Retrieval-Augmented Generation): Vector storage for AI applications - Real-time Analytics: Counters, metrics, and time-series data - Message Queues: Task queues and job processing - Geospatial: Location-based queries and proximity search Args: question: The question about Redis concepts, data structures, features, or use cases Returns: Union[List[Dict[str, Any]], Dict[str, Any]]: A list of documentation results from the API, or a dict with an error message.

publishchannel*message*

Publish a message to a Redis channel. Args: channel: The Redis channel to publish to. message: The message to send. Returns: A success message or an error message.

subscribechannel*

Subscribe to a Redis channel. Args: channel: The Redis channel to subscribe to. Returns: A success message or an error message.

unsubscribechannel*

Unsubscribe from a Redis channel. Args: channel: The Redis channel to unsubscribe from. Returns: A success message or an error message.

get_indexes

List of indexes in the Redis database Returns: str: A JSON string containing the list of indexes or an error message.

get_index_infoindex_name*

Retrieve schema and information about a specific Redis index using FT.INFO. Args: index_name (str): The name of the index to retrieve information about. Returns: str: Information about the specified index or an error message.

get_indexed_keys_numberindex_name*

Retrieve the number of indexed keys by the index Args: index_name (str): The name of the index to retrieve information about. Returns: str: Number of indexed keys as a string

create_vector_index_hashindex_nameprefixvector_fielddimdistance_metric

Create a Redis 8 vector similarity index using HNSW on a Redis hash. This function sets up a Redis index for approximate nearest neighbor (ANN) search using the HNSW algorithm and float32 vector embeddings. Args: index_name: The name of the Redis index to create. Unless specifically required, use the default name for the index. prefix: The key prefix used to identify documents to index (e.g., 'doc:'). Unless specifically required, use the default prefix. vector_field: The name of the vector field to be indexed for similarity search. Unless specifically required, use the default field name dim: The dimensionality of the vectors stored under the vector_field. distance_metric: The distance function to use (e.g., 'COSINE', 'L2', 'IP'). Returns: A string indicating whether the index was created successfully or an error message.

vector_search_hashquery_vector*index_namevector_fieldkreturn_fields

Perform a KNN vector similarity search using Redis 8 or later version on vectors stored in hash data structures. Args: query_vector: List of floats to use as the query vector. index_name: Name of the Redis index. Unless specifically specified, use the default index name. vector_field: Name of the indexed vector field. Unless specifically required, use the default field name k: Number of nearest neighbors to return. return_fields: List of fields to return (optional). Returns: A list of matched documents or an error message.

hybrid_searchquery_vector*filter_expressionindex_namevector_fieldkreturn_fields

Perform a hybrid search combining a Redis filter expression with KNN vector similarity. Hybrid search pre-filters documents by metadata before ranking by vector similarity — the standard pattern for production RAG and semantic search pipelines. Filter expression examples: "*" → no filter, pure vector search (same as vector_search_hash) "@category:{news}" → tag filter "@year:[2020 2024]" → numeric range "@lang:{en} @year:[2022 +inf]" → combined tag + range "@title:redis" → full-text match on a text field Full filter syntax: https://redis.io/docs/latest/develop/interact/search-and-query/query/ Args: query_vector: List of floats to use as the query vector. filter_expression: Redis filter expression to restrict candidates before KNN ranking. Defaults to '*' (no filter). index_name: Name of the Redis index (default: 'vector_index'). vector_field: Name of the indexed vector field (default: 'vector'). k: Number of nearest neighbors to return. return_fields: Additional fields to include in results (optional). Returns: A list of matched documents with their similarity score, or an error message.

dbsize

Get the number of keys stored in the Redis database

infosection

Get Redis server information and statistics. Args: section: The section of the info command (default, memory, cpu, etc.). Returns: A dictionary of server information or an error message.

client_list

Get a list of connected clients to the Redis server.

saddname*value*expire_seconds

Add a value to a Redis set with an optional expiration time. Args: name: The Redis set key. value: The value to add to the set. expire_seconds: Optional; time in seconds after which the set should expire. Returns: A success message or an error message.

sremname*value*

Remove a value from a Redis set. Args: name: The Redis set key. value: The value to remove from the set. Returns: A success message or an error message.

smembersname*

Get all members of a Redis set. Args: name: The Redis set key. Returns: A list of values in the set or an error message.

zaddkey*score*member*expiration

Add a member to a Redis sorted set with an optional expiration time. Args: key (str): The sorted set key. score (float): The score of the member. member (str): The member to add. expiration (int, optional): Expiration time in seconds. Returns: str: Confirmation message or an error message.

zrangekey*start*end*with_scores

Retrieve a range of members from a Redis sorted set. Args: key (str): The sorted set key. start (int): The starting index. end (int): The ending index. with_scores (bool, optional): Whether to include scores in the result. Returns: str: The sorted set members in the given range or an error message.

zremkey*member*

Remove a member from a Redis sorted set. Args: key (str): The sorted set key. member (str): The member to remove. Returns: str: Confirmation message or an error message.

xaddkey*fields*expiration

Add an entry to a Redis stream with an optional expiration time. Args: key (str): The stream key. fields (dict): The fields and values for the stream entry. expiration (int, optional): Expiration time in seconds. Returns: str: The ID of the added entry or an error message.

xrangekey*count

Read entries from a Redis stream. Args: key (str): The stream key. count (int, optional): Number of entries to retrieve. Returns: str: The retrieved stream entries or an error message.

xdelkey*entry_id*

Delete an entry from a Redis stream. Args: key (str): The stream key. entry_id (str): The ID of the entry to delete. Returns: str: Confirmation message or an error message.

setkey*value*expiration

Set a Redis string value with an optional expiration time. Args: key (str): The key to set. value (str, bytes, int, float, dict): The value to store. expiration (int, optional): Expiration time in seconds. Returns: str: Confirmation message or an error message.

getkey*

Get a Redis string value. Args: key (str): The key to retrieve. Returns: str, bytes: The stored value or an error message.

פרמטרים המסומנים ב-* הם חובה.

התקנה

הגדרות שעובדות, אחת לכל אפליקציה.

העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.

Claude Desktop

פתחו את הקובץ ‎~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:

{
  "mcpServers": {
    "redis": {
      "type": "stdio",
      "command": "/opt/homebrew/bin/uvx",
      "args": [
        "--from",
        "redis-mcp-server@latest",
        "--with",
        "mcp<2",
        "redis-mcp-server",
        "--url",
        "redis://localhost:6379/0"
      ]
    }
  }
}

השתמשו בנתיב המלא ל-uvx, כפי שעושה ה-README: אפליקציית Mac שמופעלת מה-Dock אינה רואה את אותו PATH שהטרמינל שלכם רואה, ו-Homebrew מתקינה אותה ב-‎/opt/homebrew/bin/uvx. הצמד ‎--with ו-mcp<2 הוא תוספת שלנו ולא של ה-README: בלעדיו השרת קורס בהפעלה היום, וזו הרשומה הראשונה בפתרון התקלות למטה. החליפו את הכתובת בזו של המופע שלכם, ואז סגרו ופתחו מחדש את Claude Desktop. [2][12][7]

Claude Code

פקודה אחת בטרמינל:

claude mcp add --transport stdio redis -- uvx --from redis-mcp-server@latest --with 'mcp<2' redis-mcp-server --url redis://localhost:6379/0

כל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ. השאירו את המרכאות הבודדות סביב mcp<2: בלעדיהן המעטפת קוראת את סימן הקטן מ- כהפניית קובץ והפקודה נשברת עוד לפני ש-Claude Code רואה אותה. הוסיפו זוגות ‎--env KEY=value לפני שם השרת אם ה-Redis שלכם דורש סיסמה. [13][2]

Cursor

הוסיפו ל-‎~/.cursor/mcp.json עבור כל הפרויקטים, או ל-‎.cursor/mcp.json בתוך פרויקט אחד:

{
  "mcpServers": {
    "redis": {
      "command": "uvx",
      "args": [
        "--from",
        "redis-mcp-server@latest",
        "--with",
        "mcp<2",
        "redis-mcp-server",
        "--url",
        "redis://localhost:6379/0"
      ]
    }
  }
}

Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. Cursor אינו זקוק למפתח type עבור שרת stdio, רק ל-command, ל-args ולבלוק env אופציונלי. אם Cursor מדווח שאינו מוצא את uvx, כתבו במקום זאת את הנתיב המלא ‎/opt/homebrew/bin/uvx. [14]

Routines

בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:

Name        Redis
Command     /opt/homebrew/bin/uvx
Arguments   --from redis-mcp-server@latest --with mcp<2 redis-mcp-server --url redis://localhost:6379/0

Environment Variables
(leave empty for a local instance with no password)

הערך בשדה ה-Arguments מתפצל לפי רווחים ואינו דורש מרכאות, ולכן mcp<2 נכנס בדיוק כפי שהוא כתוב. השאירו את Environment Variables ריק עבור Redis מקומי בלי אימות. אם יש לכם סיסמה, שלבו אותה בכתובת בצורה redis://default:yourpassword@host:6379/0 או הוסיפו את REDIS_PWD כמשתנה סביבה, ובכל מקרה אל תכתבו אותה ב-Arguments. לחצו קודם על Test Connection: שרת תקין עונה עם מספר הכלים שלו, ארבעים ושבעה עבור השרת הזה. [15][2]

בלי טרמינל

איך מגדירים את שרת ה-MCP‏ Redis בלי טרמינל.

אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים שני שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות. הדבר היחיד שאתם צריכים להביא הוא מופע Redis והכתובת שלו.

  1. 01

    התקינו את Routines

    הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו.

  2. 02

    דעו מה כתובת ה-Redis שלכם

    עבור Redis שרץ על אותו Mac, הכתובת היא redis://localhost:6379/0 ולא צריך שום דבר נוסף. עבור מופע מתארח, הספק נותן לכם מחרוזת חיבור מלאה בצורה redis://username:password@host:port/0, או rediss:// עם שתי אותיות s כשהחיבור מוצפן. החזיקו אותה בלוח ההעתקה לפני השלב הבא.

  3. 03

    פתחו את הגדרות ה-MCP

    לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.

  4. 04

    בחרו Command (stdio)‎

    הטופס נפתח במצב URL (SSE/HTTP). העבירו אותו ל-Command (stdio): השרת הזה הוא פקודה, לא כתובת אינטרנט. Name: Redis. Command: ‎/opt/homebrew/bin/uvx, כתוב במלואו, כי אפליקציה שמופעלת מה-Dock אינה מחפשת באותן תיקיות שהטרמינל שלכם מחפש.

  5. 05

    הדביקו את הארגומנטים, ואז בדקו

    Arguments: ‎--from redis-mcp-server@latest --with mcp<2 redis-mcp-server --url ואחריו הכתובת שלכם. השאירו את Environment Variables ריק אלא אם ה-Redis שלכם דורש סיסמה. לחצו Test Connection: Routines מפעילה את השרת בלי לשמור אותו ומדווחת כמה כלים היא מצאה, ארבעים ושבעה עבור השרת הזה. אחר כך לחצו Add Server.

  6. 06

    השתמשו בו

    הכלים עובדים בצ׳אט מיד: שאלו כמה מפתחות יש במסד הנתונים, או מה מכיל מפתח מסוים. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.

רעיונות לשגרות

שגרות ששווה לתזמן.

אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.

פתק בוקר על בריאות המטמון

פרומפט

Every weekday at 8:00, check my Redis instance: how many keys it holds, how much memory it is using, and how many clients are connected. Compare it with yesterday and write a five-line note to redis-health.md in my Notes folder, flagging anything that moved more than 20 percent.

מעקב אחרי תור עבודות שמתארך

פרומפט

Every hour between 9:00 and 18:00 on weekdays, read the length of my job queue list in Redis. If it is above 500 items, write a line with the time and the count to queue-backlog.md and tell me; if it is below, do nothing.

סריקה שבועית של מפתחות ישנים

פרומפט

Every Monday at 10:00, scan my Redis instance for keys matching session:* and cache:*, list the ones with no expiry set, and write them to redis-no-ttl.md with a short note on which prefixes are growing. Do not delete anything.

פתרון תקלות

השגיאות שנתקלנו בהן, ומה פתר אותן.

שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.

הפקודה מה-README קורסת עוד לפני שהיא עולה

מה רואים

Traceback (most recent call last):
  File "/Users/[REDACTED]/.cache/uv/archive-v0/UNWlYJnHWlVcsoPONbhvR/bin/redis-mcp-server", line 6, in <module>
    from src.main import cli
  File "/Users/[REDACTED]/.cache/uv/archive-v0/UNWlYJnHWlVcsoPONbhvR/lib/python3.14/site-packages/src/main.py", line 11, in <module>
    from src.common.server import mcp
  File "/Users/[REDACTED]/.cache/uv/archive-v0/UNWlYJnHWlVcsoPONbhvR/lib/python3.14/site-packages/src/common/server.py", line 3, in <module>
    from mcp.server.fastmcp import FastMCP
ModuleNotFoundError: No module named 'mcp.server.fastmcp'

הפתרון

זה מה שקיבלנו בתאריך 2026-08-03 מהפקודה המדויקת שמודפסת ב-README, וזו לא אשמתכם. חבילת 0.5.0 שפורסמה מבקשת את ה-SDK של MCP ל-Python בלי גבול עליון, ולכן uv מתקינה את החדש ביותר, וגרסה 2.0.0 של ה-SDK העבירה את המודול שהשרת הזה מייבא. הוסיפו ‎--with ו-mcp<2 מיד אחרי שם החבילה, בדיוק כפי שעושה כל הגדרה בעמוד הזה, והוא יעלה. הפרויקט כבר תיקן את הגבול בענף ה-main שלו, ולכן גרסה עתידית תייתר את הדגל.

הכלים מופיעים, אבל כל קריאה עונה שהחיבור נדחה

מה רואים

Error retrieving key mcp-verify-2026: Error 61 connecting to localhost:6399. Connection refused.

הפתרון

השרת עולה ומתאר את כל 47 הכלים גם כשאין אף אחד שמאזין, כי הוא פותח את החיבור רק כשכלי באמת רץ. לכן Test Connection ירוק מוכיח שהשרת עובד, לא שה-Redis שלכם נגיש. גרמנו לשגיאה הזו בכוונה כשכיוונו אותו לפורט 6399 שאין בו כלום. בדקו את המארח, הפורט ומספר מסד הנתונים בכתובת שלכם, ובדקו שהמופע רץ.

קריאת כלי נכשלת בשגיאת אימות ארגומנטים

מה רואים

Error executing tool set: 1 validation error for setArguments
value
  Field required [type=missing, input_value={'key': 'mcp-verify-2026'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.13/v/missing

הפתרון

ארגומנט חובה חסר, כאן קריאת set עם מפתח בלי ערך. ההודעה מציינת את שם הכלי, את השדה ואת מה שהתקבל, ולכן בדרך כלל אפשר להחזיר אותה כמו שהיא לעוזר. טבלת הכלים למעלה מפרטת אילו ארגומנטים כל כלי דורש.

העוזר קורא לכלי שאינו קיים

מה רואים

Unknown tool: gett

הפתרון

שגיאת הקלדה או שם שהומצא. השרת עונה בשורה הזו ורושם אזהרה במקום לקרוס, ולכן השיחה ממשיכה. הפנו את העוזר לטבלת הכלים למעלה, שהיא בדיוק הרשימה שהשרת הרץ מדווח.

uv לא מוצאת את החבילה בכלל

מה רואים

  × No solution found when resolving tool dependencies:
  ╰─▶ Because redis-mcp-servr was not found in the package registry and you
      require redis-mcp-servr, we can conclude that your requirements are
      unsatisfiable.

הפתרון

שם חבילה שגוי, כאן שלנו ובכוונה. השם הוא redis-mcp-server, ביחיד, עם המילה server במלואה, והוא נמצא ב-PyPI ולא ב-npm. אם העתקתם הגדרה ממקום כלשהו והיא מציינת חבילת npm, קראו למטה בשאלות הנפוצות איזו חבילה היא האמיתית.

לקוח ה-MCP לא מצליח להפעיל את השרת בכלל

הפתרון

הפקודה uvx שייכת ל-uv, מריץ חבילות ה-Python. אם uv לא מותקנת על ה-Mac, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו אותה מ-astral.sh/uv, ואז השתמשו בנתיב המלא ‎/opt/homebrew/bin/uvx בהגדרה, כי אפליקציות שולחן עבודה אינן מחפשות באותן תיקיות שהטרמינל שלכם מחפש. השרת הזה אינו זקוק ל-Node.js כלל; Node מופיע ברצועת הקבלה שלנו רק משום שלקוח הבדיקה שלנו כתוב בו.

שאלות נפוצות

שאלות שאנשים שואלים.

מה זה שרת ה-MCP ל-Redis?

זו תוכנית קטנה שיושבת בין עוזר AI לבין מופע Redis ומדברת את ה-Model Context Protocol. אחרי החיבור, עוזר כמו Claude יכול לקרוא ולכתוב מפתחות, לעבוד עם hashes, רשימות, קבוצות, קבוצות ממוינות, streams ומסמכי JSON, להריץ חיפוש וקטורי והיברידי מעל אינדקס של Redis, ולקרוא נתוני שרת. Redis, Inc. עצמה מפרסמת אותו, הוא רץ כתהליך מקומי על ה-Mac שלכם ומדבר עם אפליקציית ה-AI על גבי stdio. [1][2]

אילו כלים כלולים בשרת ה-MCP ל-Redis?

השרת הרץ חושף 47 כלים. מחרוזות ומפתחות (set, get, delete, type, expire, rename, scan_keys, scan_all_keys), hashes ‏(hset, hget, hdel, hgetall, hexists), רשימות (lpush, rpush, lpop, rpop, lrange, llen, lrem), קבוצות וקבוצות ממוינות (sadd, srem, smembers, zadd, zrange, zrem), streams ‏(xadd, xrange, xdel), JSON ‏(json_set, json_get, json_del), pub/sub ‏(publish, subscribe, unsubscribe), וקטורים וחיפוש (set_vector_in_hash, get_vector_from_hash, create_vector_index_hash, vector_search_hash, hybrid_search, get_indexes, get_index_info, get_indexed_keys_number), נתוני שרת (dbsize, info, client_list), וכלי אחד לחיפוש בתיעוד (search_redis_documents). הטבלה למעלה היא פלט ה-tools/list החי, מילה במילה.

האם שרת ה-MCP ל-Redis בטוח להרצה?

הקוד פתוח תחת רישיון MIT והחיבור אינו יוצא מהמחשב שלכם אלא אם כתובת ה-Redis שלכם מצביעה למקום אחר. השאלה האמיתית היא היקף, כי השרת הזה אינו לקריאה בלבד: delete, hdel, json_del, lrem, srem, zrem, xdel ו-rename כולם משנים נתונים, ו-set דורס מפתח בלי אזהרה. כוונו אותו קודם למופע פיתוח, או למספר מסד נתונים ששמור לעוזר, ותנו לו משתמש Redis עם ההרשאות המינימליות לפני שתקרבו אותו לנתוני ייצור. [1]

הוא דורש מפתח API או חשבון?

לא. עבור מופע מקומי בלי סיסמה אין למה להירשם ואין אישור גישה להדביק: כל ריצת האימות שלנו לא השתמשה באף אחד. אם ל-Redis שלכם יש סיסמה, היא נכנסת לכתובת החיבור או למשתנה הסביבה REDIS_PWD, וקיים גם מסלול Microsoft Entra ID אופציונלי עבור Azure Managed Redis שהתקנה מקומית לעולם לא נוגעת בו. הפקודה uvx מורידה את החבילה מ-PyPI בריצה הראשונה, כך שההפעלה הראשונה צריכה חיבור לאינטרנט; אחריה היא שמורה על ה-Mac. [2][3]

האם חבילת ה-npm היא אותו דבר?

לא, וזו המלכודת. אין חבילת npm רשמית לעבודה עם הנתונים שלכם ב-Redis. השם ב-npm ‏@modelcontextprotocol/server-redis הוא שרת ייחוס ישן ש-npm מסמנת כמיושן, עם ההודעה שהחבילה כבר אינה נתמכת; הגרסה האחרונה שלה מתוארכת ל-2025-04-25 והקוד שלה יושב במאגר הייחוס שהועבר לארכיון. למרות זאת היא נמשכה 1,594 פעמים בשבוע שהסתיים ב-2026-08-01, כלומר לא מעט אנשים עדיין מתקינים חבילה מתה. החבילה המתוחזקת היא חבילת ה-PyPI שבעמוד הזה. שימו לב לשם נוסף: redis/mcp-redis-cloud גם הוא של Redis, אבל הוא מנהל מנויי Redis Cloud ולא את הנתונים במופע שרץ. [8][9][10][11]

למה PyPI מציג 0.5.0 אבל השרת מדווח 1.29.0?

שני המספרים אמיתיים ולכדנו את שניהם. PyPI מפרסם את החבילה כ-0.5.0, בתאריך 2026-03-16. על גבי MCP השרת הרץ מדווח את השם Redis MCP Server ואת הגרסה 1.29.0, שהיא גרסת ה-SDK של MCP ל-Python שמתחתיו: השרת הזה אינו מוסר ל-SDK גרסה משלו, וה-SDK שהרצנו נופל בחזרה לדיווח גרסת החבילה שלו עצמו כשהשרת משאיר את השדה ריק. אותו קוד, שני מספרים, ואף אחד מהם לא שגוי. [3][6]

אילו אפליקציות יכולות להשתמש בשרת ה-MCP ל-Redis?

כל לקוח MCP שמסוגל להפעיל שרת stdio מקומי: Claude Desktop, Claude Code, Cursor ו-Routines כולם יכולים, וההגדרה המדויקת לכל אחד נמצאת למעלה. VS Code עם GitHub Copilot מקבל אותה צורה. אין נקודת קצה מתארחת או מרוחקת שאפשר לכוון אליה כתובת, כי השרת תומך היום ב-stdio בלבד; ה-README מציין ש-streamable HTTP מתוכנן אך טרם שוחרר. [2][13][14][15]

מקורות

כל טענה חיצונית, עם קבלה.

כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.

  1. [1]

    GitHub: redis/mcp-redisנקרא בתאריך 2026-08-03

    The official Redis, Inc. repository. 556 stars, MIT licensed, not archived, last push 2026-07-31, per the GitHub API.

  2. [2]

    redis/mcp-redis READMEנקרא בתאריך 2026-08-03

    The uvx invocation, the Claude Desktop and VS Code config shapes, the environment variable table, the Entra ID section, and the statement that only stdio is supported today.

  3. [3]

    PyPI: redis-mcp-serverנקרא בתאריך 2026-08-03

    Latest version 0.5.0, uploaded 2026-03-16, requiring the Python MCP SDK as mcp[cli]>=1.9.4 with no upper limit.

  4. [4]

    PyPI download stats: redis-mcp-serverנקרא בתאריך 2026-08-03

    4,576 downloads in the last week, 13,809 in the last month.

  5. [5]

    redis/mcp-redis pyproject.toml (main branch)נקרא בתאריך 2026-08-03

    License MIT, requires-python >=3.10, entry point redis-mcp-server, and the SDK limit already tightened on main to mcp[cli]>=1.26.0,<2.

  6. [6]

    redis/mcp-redis latest releaseנקרא בתאריך 2026-08-03

    Tag 0.5.0, published 2026-03-16, so main carries commits ahead of the last tagged release.

  7. [7]

    PyPI: mcp, the Python MCP SDKנקרא בתאריך 2026-08-03

    Version 2.0.0 published 2026-07-28, the release that moves the module the published server imports.

  8. [8]

    npm registry: @modelcontextprotocol/server-redisנקרא בתאריך 2026-08-03

    Latest version 2025.4.25, published 2025-04-25, flagged deprecated: Package no longer supported.

  9. [9]

    npm downloads API: last weekנקרא בתאריך 2026-08-03

    1,594 downloads for the week ending 2026-08-01, on a package marked no longer supported.

  10. [10]

    GitHub: modelcontextprotocol/servers-archivedנקרא בתאריך 2026-08-03

    Archived repository described as reference MCP servers that are no longer maintained, the former home of the npm Redis server.

  11. [11]

    GitHub: redis/mcp-redis-cloudנקרא בתאריך 2026-08-03

    A second official Redis server, for the Redis Cloud control plane rather than the data in a running instance. 40 stars, last push 2025-05-05.

  12. [12]

    modelcontextprotocol.io: Connect to local MCP serversנקרא בתאריך 2026-08-03

    The official Claude Desktop quickstart and the config file location.

  13. [13]

    Claude Code docs: MCPנקרא בתאריך 2026-08-03

    The claude mcp add syntax for local stdio servers, and the --env flag.

  14. [14]

    Cursor docs: Model Context Protocolנקרא בתאריך 2026-08-03

    The mcp.json shape and file locations, and the command, args and env fields for a stdio server.

  15. [15]

    Routines: Connectorsנקרא בתאריך 2026-08-03

    How Routines runs one-click OAuth connectors and any MCP server.

העמוד הזה מתאר את Redis כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.

מאחורי המדריך הזה

Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הדוחות שהיא כותבת נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines