Skip to content

Commit 6b05d9e

Browse files
maxisbeymac 🦦
authored andcommitted
fix: allow Any type for logging message parameter
Change the type annotation of the message parameter in Context.log(), Context.debug(), Context.info(), Context.warning(), and Context.error() from str to Any. The MCP spec defines the log data field as: data: unknown - "Any JSON serializable type is allowed here" This allows MCP servers to send rich structured notifications: ctx.info({"event": "progress", "percent": 50}) The parameter name is kept as message for backward compatibility. Fixes #397
1 parent 3517a29 commit 6b05d9e

File tree

2 files changed

+6
-39
lines changed

2 files changed

+6
-39
lines changed

.github/workflows/claude-code-review.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/mcp/server/mcpserver/context.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ async def elicit_url(
187187
async def log(
188188
self,
189189
level: Literal["debug", "info", "warning", "error"],
190-
message: str,
190+
message: Any,
191191
*,
192192
logger_name: str | None = None,
193193
extra: dict[str, Any] | None = None,
@@ -196,7 +196,7 @@ async def log(
196196
197197
Args:
198198
level: Log level (debug, info, warning, error)
199-
message: Log message
199+
message: The data to log. Any JSON-serializable type (string, dict, list, etc.)
200200
logger_name: Optional logger name
201201
extra: Optional dictionary with additional structured data to include
202202
"""
@@ -261,20 +261,20 @@ async def close_standalone_sse_stream(self) -> None:
261261
await self._request_context.close_standalone_sse_stream()
262262

263263
# Convenience methods for common log levels
264-
async def debug(self, message: str, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
264+
async def debug(self, message: Any, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
265265
"""Send a debug log message."""
266266
await self.log("debug", message, logger_name=logger_name, extra=extra)
267267

268-
async def info(self, message: str, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
268+
async def info(self, message: Any, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
269269
"""Send an info log message."""
270270
await self.log("info", message, logger_name=logger_name, extra=extra)
271271

272272
async def warning(
273-
self, message: str, *, logger_name: str | None = None, extra: dict[str, Any] | None = None
273+
self, message: Any, *, logger_name: str | None = None, extra: dict[str, Any] | None = None
274274
) -> None:
275275
"""Send a warning log message."""
276276
await self.log("warning", message, logger_name=logger_name, extra=extra)
277277

278-
async def error(self, message: str, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
278+
async def error(self, message: Any, *, logger_name: str | None = None, extra: dict[str, Any] | None = None) -> None:
279279
"""Send an error log message."""
280280
await self.log("error", message, logger_name=logger_name, extra=extra)

0 commit comments

Comments
 (0)