Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions src/core/MCPServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,27 +137,6 @@ export class MCPServer {
};
logger.debug(`Creating HttpStreamTransport. response mode: ${httpConfig.responseMode}`);
transport = new HttpStreamTransport(httpConfig);

(transport as HttpStreamTransport).setServerConfig(
{ name: this.serverName, version: this.serverVersion },
async (mcpServer) => {
for (const [toolName, tool] of this.toolsMap.entries()) {
(mcpServer as any).tool(
toolName,
tool.inputSchema.properties || {},
async (params: any) => {
const result = await tool.toolCall({
params: {
name: toolName,
arguments: params,
},
});
return result;
}
);
}
}
);
break;
}
case 'stdio':
Expand Down
3 changes: 2 additions & 1 deletion src/loaders/BaseLoader.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { join, dirname } from 'path';
import { pathToFileURL } from 'url';
import { existsSync } from 'fs';
import { logger } from '../core/Logger.js';
import { discoverFilesRecursively, hasValidFiles } from '../utils/fileDiscovery.js';
Expand Down Expand Up @@ -85,7 +86,7 @@ export abstract class BaseLoader<T> {
`Attempting to load ${this.config.subdirectory.slice(0, -1)} from: ${fullPath}`
);

const importPath = `file://${fullPath}`;
const importPath = pathToFileURL(fullPath).href;
const module = await import(importPath);

let ItemClass = null;
Expand Down
35 changes: 24 additions & 11 deletions src/transports/http/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@ export class HttpStreamTransport extends AbstractTransport {
private _endpoint: string;
private _enableJsonResponse: boolean = false;


private _transports: Map<string, StreamableHTTPServerTransport> = new Map();


private _serverConfig: any;
private _serverSetupCallback?: (server: McpServer) => Promise<void>;

Expand Down Expand Up @@ -54,7 +52,6 @@ export class HttpStreamTransport extends AbstractTransport {
);
}


setServerConfig(serverConfig: any, setupCallback: (server: McpServer) => Promise<void>): void {
this._serverConfig = serverConfig;
this._serverSetupCallback = setupCallback;
Expand Down Expand Up @@ -120,13 +117,30 @@ export class HttpStreamTransport extends AbstractTransport {
logger.info('Creating new session for initialization request');

if (!this._serverSetupCallback || !this._serverConfig) {
logger.error('No server configuration available');
this.sendError(
res,
500,
-32603,
'Internal server error: No server configuration available'
);
logger.debug('No server configuration available, using standard transport behavior');
transport = new StreamableHTTPServerTransport({
sessionIdGenerator: () => randomUUID(),
onsessioninitialized: (sessionId: string) => {
logger.info(`Session initialized: ${sessionId}`);
this._transports.set(sessionId, transport);
},
enableJsonResponse: this._enableJsonResponse,
});

transport.onclose = () => {
if (transport.sessionId) {
logger.info(`Transport closed for session: ${transport.sessionId}`);
this._transports.delete(transport.sessionId);
}
};

transport.onmessage = async (message: JSONRPCMessage) => {
if (this._onmessage) {
await this._onmessage(message);
}
};

await transport.handleRequest(req, res, body);
return;
}

Expand All @@ -135,7 +149,6 @@ export class HttpStreamTransport extends AbstractTransport {
sessionIdGenerator: () => randomUUID(),
onsessioninitialized: (sessionId: string) => {
logger.info(`Session initialized: ${sessionId}`);
// Store the transport by session ID
this._transports.set(sessionId, transport);
},
enableJsonResponse: this._enableJsonResponse,
Expand Down