|
@@ -18,6 +18,7 @@ import { roleTools } from './tools/role-tools.js';
|
|
|
import { systemConfigTools } from './tools/system-config-tools.js';
|
|
import { systemConfigTools } from './tools/system-config-tools.js';
|
|
|
import { orderTools } from './tools/order-tools.js';
|
|
import { orderTools } from './tools/order-tools.js';
|
|
|
import { authTools } from './tools/auth-tools.js';
|
|
import { authTools } from './tools/auth-tools.js';
|
|
|
|
|
+import { getApiClient } from './services/api-client.js';
|
|
|
|
|
|
|
|
// ============================================================================
|
|
// ============================================================================
|
|
|
// Server Configuration
|
|
// Server Configuration
|
|
@@ -739,19 +740,33 @@ async function runHTTP() {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// MCP endpoint
|
|
// MCP endpoint
|
|
|
- app.post('/mcp', async (req, res) => {
|
|
|
|
|
|
|
+ app.post('/mcp', async (req: express.Request, res: express.Response) => {
|
|
|
|
|
+ // Extract Authorization token from request header
|
|
|
|
|
+ const authHeader = req.headers.authorization;
|
|
|
|
|
+ if (authHeader && authHeader.startsWith('Bearer ')) {
|
|
|
|
|
+ const token = authHeader.substring(7); // Remove 'Bearer ' prefix
|
|
|
|
|
+ getApiClient().setToken(token);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// Create a new transport for each request (stateless, prevents request ID collisions)
|
|
// Create a new transport for each request (stateless, prevents request ID collisions)
|
|
|
const transport = new StreamableHTTPServerTransport({
|
|
const transport = new StreamableHTTPServerTransport({
|
|
|
sessionIdGenerator: undefined,
|
|
sessionIdGenerator: undefined,
|
|
|
enableJsonResponse: true
|
|
enableJsonResponse: true
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- // Clean up transport when response closes
|
|
|
|
|
- res.on('close', () => transport.close());
|
|
|
|
|
-
|
|
|
|
|
- // Connect server to transport and handle request
|
|
|
|
|
- await server.connect(transport);
|
|
|
|
|
- await transport.handleRequest(req, res, req.body);
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ // Clean up transport when response closes
|
|
|
|
|
+ res.on('close', () => {
|
|
|
|
|
+ transport.close();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // Connect server to transport and handle request
|
|
|
|
|
+ await server.connect(transport);
|
|
|
|
|
+ await transport.handleRequest(req, res, req.body);
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ // Always close transport to allow reconnection on next request
|
|
|
|
|
+ transport.close();
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// Start listening
|
|
// Start listening
|