Skip to content

Commit 94b8207

Browse files
committed
feat: add --transport flag and support for running the MCP server via HTTP
1 parent ad307f6 commit 94b8207

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"@rollup/plugin-node-resolve": "^16.0.3",
4646
"@stylistic/eslint-plugin": "^5.4.0",
4747
"@types/debug": "^4.1.12",
48+
"@types/express": "^5.0.3",
4849
"@types/filesystem": "^0.0.36",
4950
"@types/node": "^24.3.3",
5051
"@types/sinon": "^17.0.4",
@@ -66,6 +67,7 @@
6667
"sinon": "^21.0.0",
6768
"typescript": "^5.9.2",
6869
"typescript-eslint": "^8.43.0",
70+
"express": "^5.1.0",
6971
"yargs": "18.0.0"
7072
},
7173
"engines": {

src/cli.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,12 @@ export const cliOptions = {
154154
default: true,
155155
describe: 'Set to false to exlcude tools related to network.',
156156
},
157+
transport: {
158+
type: 'string',
159+
description: 'Transport to use for the MCP server. Available options are: stdio, http.',
160+
choices: ['stdio', 'http'] as const,
161+
default: 'stdio',
162+
},
157163
} satisfies Record<string, YargsOptions>;
158164

159165
export function parseArguments(version: string, argv = process.argv) {
@@ -206,6 +212,7 @@ export function parseArguments(version: string, argv = process.argv) {
206212
'Disable tools in the performance category',
207213
],
208214
['$0 --no-category-network', 'Disable tools in the network category'],
215+
['$0 --transport http', 'Use HTTP transport for the MCP server'],
209216
]);
210217

211218
return yargsInstance

src/main.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {McpResponse} from './McpResponse.js';
1515
import {Mutex} from './Mutex.js';
1616
import {
1717
McpServer,
18+
StreamableHTTPServerTransport,
1819
StdioServerTransport,
1920
type CallToolResult,
2021
SetLevelRequestSchema,
@@ -184,7 +185,37 @@ for (const tool of tools) {
184185
registerTool(tool);
185186
}
186187

187-
const transport = new StdioServerTransport();
188-
await server.connect(transport);
189-
logger('Chrome DevTools MCP Server connected');
190-
logDisclaimers();
188+
if (args.transport === 'stdio') {
189+
const transport = new StdioServerTransport();
190+
await server.connect(transport);
191+
logger('Chrome DevTools MCP Server connected via stdio');
192+
logDisclaimers();
193+
}
194+
195+
if (args.transport === 'http') {
196+
const { default: express } = await import('express');
197+
const app = express();
198+
app.use(express.json());
199+
200+
app.all("/mcp", async (req, res) => {
201+
const transport = new StreamableHTTPServerTransport({
202+
sessionIdGenerator: undefined,
203+
enableJsonResponse: true,
204+
});
205+
206+
res.on("close", () => {
207+
transport.close();
208+
});
209+
210+
await server.connect(transport);
211+
return transport.handleRequest(req, res, req.body);
212+
});
213+
214+
app.listen(3000, () => {
215+
logger('Chrome DevTools MCP Server listening on port 3000 via http');
216+
logDisclaimers();
217+
}).on("error", (error) => {
218+
logger('Chrome DevTools MCP Server error:', error);
219+
process.exit(1);
220+
});
221+
}

src/third_party/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export {debug} from 'debug';
1313
export type {Debugger} from 'debug';
1414
export {McpServer} from '@modelcontextprotocol/sdk/server/mcp.js';
1515
export {StdioServerTransport} from '@modelcontextprotocol/sdk/server/stdio.js';
16+
export {StreamableHTTPServerTransport} from '@modelcontextprotocol/sdk/server/streamableHttp.js';
1617
export {
1718
type CallToolResult,
1819
SetLevelRequestSchema,

0 commit comments

Comments
 (0)