diff --git a/docs/servers/logging-progress-cancellation.md b/docs/servers/logging-progress-cancellation.md index a23aff35b5..3ec0ceb281 100644 --- a/docs/servers/logging-progress-cancellation.md +++ b/docs/servers/logging-progress-cancellation.md @@ -77,7 +77,7 @@ Only the result comes back: Log to `stderr` (stdio servers) or use OpenTelemetry instead. **MCP logging** is deprecated as of protocol version 2026-07-28 (SEP-2577) and stays functional through the deprecation window (at least twelve months) — see the [deprecated features registry](https://modelcontextprotocol.io/specification/2026-07-28/deprecated). ::: -Declare the `logging` capability when you construct the server. +Declare the `logging` capability when you construct the server. Without it, `ctx.mcpReq.log()` and `server.sendLoggingMessage()` resolve successfully and send nothing, with no warning. ```ts source="../../examples/guides/servers/logging-progress-cancellation.examples.ts#logging_capability" const server = new McpServer({ name: 'file-processor', version: '1.0.0' }, { capabilities: { logging: {} } }); diff --git a/docs/serving/sessions-state-scaling.md b/docs/serving/sessions-state-scaling.md index 7f51545648..777836473c 100644 --- a/docs/serving/sessions-state-scaling.md +++ b/docs/serving/sessions-state-scaling.md @@ -92,7 +92,7 @@ On shutdown, close every stored transport — `for (const { transport } of sessi ## Resume a dropped stream -A sessionful client holds a `GET` SSE stream open for server notifications, and anything sent while that connection is down is lost. An **event store** closes the gap: with one configured, the transport stamps every SSE message with an event id from the store before sending it. +A sessionful client holds a `GET` SSE stream open for server notifications, and anything sent while that connection is down is lost. An **event store** closes the gap: with one configured, the transport stamps every SSE message with an event id from the store before sending it. One window it cannot close: anything sent before the client has opened its first `GET`, because that request carries no `Last-Event-ID` to replay from. A server that emits alerts on a timer should repeat them while the condition persists, or defer its first check until a client is likely connected. `EventStore` is a two-method contract — `storeEvent(streamId, message)` persists a message and returns its event id; `replayEventsAfter(lastEventId, { send })` re-sends every later message on that stream. Implement it over storage every node can reach (`databaseEventStore` here) and pass it next to `sessionIdGenerator`.