Merge pull request #33 from modelcontextprotocol/jerome/init-log
Log client capabilities and extensions on initialize requests
This commit is contained in:
commit
117601ef16
2 changed files with 28 additions and 4 deletions
|
|
@ -16,6 +16,7 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
|
||||||
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
||||||
import { ITokenValidator } from '../../interfaces/auth-validator.js';
|
import { ITokenValidator } from '../../interfaces/auth-validator.js';
|
||||||
import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
|
import { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
|
||||||
|
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
||||||
|
|
||||||
// Import createServer from each example package (compiled JS)
|
// Import createServer from each example package (compiled JS)
|
||||||
// All packages are published on the public npm registry
|
// All packages are published on the public npm registry
|
||||||
|
|
@ -115,6 +116,24 @@ export class ExampleAppsModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Log initialization requests to inspect client capabilities/extensions
|
||||||
|
if (isInitializeRequest(req.body)) {
|
||||||
|
const initParams = req.body?.params;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const capabilities = initParams?.capabilities as Record<string, any> | undefined;
|
||||||
|
console.log(JSON.stringify({
|
||||||
|
severity: 'INFO',
|
||||||
|
message: `=== MCP INITIALIZE REQUEST (${slug}) ===`,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
slug,
|
||||||
|
clientInfo: initParams?.clientInfo,
|
||||||
|
protocolVersion: initParams?.protocolVersion,
|
||||||
|
capabilities,
|
||||||
|
hasExtensions: !!capabilities?.extensions,
|
||||||
|
extensions: capabilities?.extensions,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
// Create fresh server and transport for each request (stateless mode)
|
// Create fresh server and transport for each request (stateless mode)
|
||||||
const server = createServer();
|
const server = createServer();
|
||||||
const transport = new StreamableHTTPServerTransport({
|
const transport = new StreamableHTTPServerTransport({
|
||||||
|
|
|
||||||
|
|
@ -105,11 +105,16 @@ export async function handleStreamableHTTP(req: Request, res: Response) {
|
||||||
shttpTransport = await getShttpTransport(sessionId, onsessionclosed, isGetRequest);
|
shttpTransport = await getShttpTransport(sessionId, onsessionclosed, isGetRequest);
|
||||||
} else if (isInitializeRequest(req.body)) {
|
} else if (isInitializeRequest(req.body)) {
|
||||||
// New initialization request - use JSON response mode
|
// New initialization request - use JSON response mode
|
||||||
logger.debug('Processing initialize request', {
|
const initParams = req.body?.params;
|
||||||
body: req.body,
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const capabilities = initParams?.capabilities as Record<string, any> | undefined;
|
||||||
|
logger.info('=== MCP INITIALIZE REQUEST ===', {
|
||||||
userId,
|
userId,
|
||||||
headerSessionId: sessionId, // This is the sessionId from header (should be undefined for init)
|
clientInfo: initParams?.clientInfo,
|
||||||
isInitializeRequest: true
|
protocolVersion: initParams?.protocolVersion,
|
||||||
|
capabilities,
|
||||||
|
hasExtensions: !!capabilities?.extensions,
|
||||||
|
extensions: capabilities?.extensions,
|
||||||
});
|
});
|
||||||
|
|
||||||
const onsessioninitialized = async (sessionId: string) => {
|
const onsessioninitialized = async (sessionId: string) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue