Skip to content

Commit fad836c

Browse files
committed
changes
1 parent 78c6aef commit fad836c

File tree

5 files changed

+127
-13
lines changed

5 files changed

+127
-13
lines changed

examples/fastmcp/unicode_example.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@
44
"""
55

66
from mcp.server.fastmcp import FastMCP
7+
from mcp.server.message_queue import RedisMessageQueue
78

8-
mcp = FastMCP()
9+
# Create a Redis message queue
10+
redis_queue = RedisMessageQueue(
11+
redis_url="redis://localhost:6379/0", prefix="mcp:pubsub:"
12+
)
13+
14+
mcp = FastMCP(message_queue=redis_queue)
915

1016

1117
@mcp.tool(
@@ -61,4 +67,4 @@ def multilingual_hello() -> str:
6167

6268

6369
if __name__ == "__main__":
64-
mcp.run()
70+
mcp.run(transport="sse")

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ dependencies = [
3636
rich = ["rich>=13.9.4"]
3737
cli = ["typer>=0.12.4", "python-dotenv>=1.0.0"]
3838
ws = ["websockets>=15.0.1"]
39-
redis = ["redis>=5.0.0"]
39+
redis = ["redis>=5.2.1"]
40+
types-redis = ["types-redis>=4.6.0.20241004"]
4041

4142
[project.scripts]
4243
mcp = "mcp.cli:app [cli]"

src/mcp/server/fastmcp/server.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,6 @@ def sse_app(self) -> Starlette:
485485
"""Return an instance of the SSE server app."""
486486
# Use a custom provided message queue if available
487487
message_queue = self.settings.message_queue
488-
489488
# If no message queue is provided, create an in-memory queue as default
490489
if message_queue is None:
491490
from mcp.server.message_queue import InMemoryMessageQueue

src/mcp/server/message_queue/redis.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from uuid import UUID
66

77
import anyio
8-
from anyio import CapacityLimiter, from_thread
8+
from anyio import CapacityLimiter
99
import mcp.types as types
1010
from mcp.server.message_queue.base import MessageCallback
1111

@@ -74,8 +74,8 @@ async def _listen_for_messages(self) -> None:
7474
async with self._limiter:
7575
while True:
7676
message: None | dict[str, Any] = await self._pubsub.get_message( # type: ignore
77-
ignore_subscribe_messages=True
78-
)
77+
ignore_subscribe_messages=True, timeout=None # type: ignore
78+
)
7979
if message is None:
8080
continue
8181

@@ -105,7 +105,7 @@ async def _listen_for_messages(self) -> None:
105105
msg = types.JSONRPCMessage.model_validate_json(data)
106106

107107
if msg and session_id in self._callbacks:
108-
from_thread.run(self._callbacks[session_id], msg)
108+
await self._callbacks[session_id](msg)
109109
except Exception as e:
110110
logger.error(f"Failed to process message: {e}")
111111

uv.lock

Lines changed: 113 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)