1
1
import './utils/env.js' // I hate how I have to do this but whatever. Stupid shim.
2
2
import { logger } from './utils/logger.js'
3
- import express , { Request , Response } from 'express'
3
+ import express , { NextFunction , Request , Response } from 'express'
4
4
import trmnlRouter from './v1/routers/trmnlRouter.js'
5
5
import statusRouter from './v1/routers/statusRouter.js'
6
6
import rateLimit from 'express-rate-limit'
@@ -12,7 +12,6 @@ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'
12
12
import { registerTools } from './v1/mcp/registerTools.js'
13
13
import { logIncomingAuth , authRequired , authOptional } from './utils/auth.js'
14
14
15
-
16
15
logger . info ( 'Initializing MCP server...' )
17
16
const mcpServer = new McpServer ( {
18
17
name : 'subspace-mcp-server' ,
@@ -34,7 +33,6 @@ registerTools(mcpServer)
34
33
35
34
// Discovery endpoint
36
35
server . get ( '/sse' , logIncomingAuth , authRequired , async ( req : Request , res : Response ) => {
37
-
38
36
const transport = new SSEServerTransport ( '/messages' , res )
39
37
transports [ transport . sessionId ] = transport
40
38
logger . info ( 'New MCP session created:' , transport . sessionId )
@@ -51,7 +49,7 @@ server.post('/messages', logIncomingAuth, authRequired, async (req: Request, res
51
49
52
50
if ( typeof sessionId != 'string' ) {
53
51
logger . error ( 'Bad sessionId' , sessionId )
54
- res . status ( 400 ) . send ( { messages : 'Bad sessionId' } )
52
+ res . status ( 400 ) . send ( { message : 'Bad sessionId' } )
55
53
}
56
54
57
55
const transport = transports [ sessionId ]
@@ -79,6 +77,17 @@ server.use('/health', express.json(), statusRouter)
79
77
// reverse proxy
80
78
server . set ( 'trust proxy' , 1 )
81
79
80
+ server . use ( function ( err : any , req : Request , res : Response , next : NextFunction ) {
81
+ if ( err . name === 'UnauthorizedError' ) {
82
+ logger . warn ( 'JWT failed authentication' )
83
+ res . status ( 401 ) . send ( { message : 'Unauthorized' } )
84
+ } else if ( err . code === 'credentials_required' ) {
85
+ logger . warn ( 'No token provided' )
86
+ res . status ( 401 ) . json ( { message : 'No token provided' } )
87
+ } else {
88
+ next ( err )
89
+ }
90
+ } )
82
91
83
92
server . listen ( PORT , ( ) => {
84
93
logger . info ( `Using log level: ${ process . env . LOG_LEVEL || 'info' } ` )
0 commit comments