Skip to content
Open
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
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"@rollup/plugin-node-resolve": "^16.0.3",
"@stylistic/eslint-plugin": "^5.4.0",
"@types/debug": "^4.1.12",
"@types/express": "^5.0.3",
"@types/filesystem": "^0.0.36",
"@types/node": "^24.3.3",
"@types/sinon": "^17.0.4",
Expand All @@ -66,6 +67,7 @@
"sinon": "^21.0.0",
"typescript": "^5.9.2",
"typescript-eslint": "^8.43.0",
"express": "^5.1.0",
"yargs": "18.0.0"
},
"engines": {
Expand Down
7 changes: 7 additions & 0 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,12 @@ export const cliOptions = {
default: true,
describe: 'Set to false to exlcude tools related to network.',
},
transport: {
type: 'string',
description: 'Transport to use for the MCP server. Available options are: stdio, http.',
choices: ['stdio', 'http'] as const,
default: 'stdio',
},
} satisfies Record<string, YargsOptions>;

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

return yargsInstance
Expand Down
39 changes: 35 additions & 4 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {McpResponse} from './McpResponse.js';
import {Mutex} from './Mutex.js';
import {
McpServer,
StreamableHTTPServerTransport,
StdioServerTransport,
type CallToolResult,
SetLevelRequestSchema,
Expand Down Expand Up @@ -184,7 +185,37 @@ for (const tool of tools) {
registerTool(tool);
}

const transport = new StdioServerTransport();
await server.connect(transport);
logger('Chrome DevTools MCP Server connected');
logDisclaimers();
if (args.transport === 'stdio') {
const transport = new StdioServerTransport();
await server.connect(transport);
logger('Chrome DevTools MCP Server connected via stdio');
logDisclaimers();
}

if (args.transport === 'http') {
const { default: express } = await import('express');
const app = express();
app.use(express.json());

app.all("/mcp", async (req, res) => {
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined,
enableJsonResponse: true,
});

res.on("close", () => {
transport.close();
});

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

app.listen(3000, () => {
logger('Chrome DevTools MCP Server listening on port 3000 via http');
logDisclaimers();
}).on("error", (error) => {
logger('Chrome DevTools MCP Server error:', error);
process.exit(1);
});
}
1 change: 1 addition & 0 deletions src/third_party/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export {debug} from 'debug';
export type {Debugger} from 'debug';
export {McpServer} from '@modelcontextprotocol/sdk/server/mcp.js';
export {StdioServerTransport} from '@modelcontextprotocol/sdk/server/stdio.js';
export {StreamableHTTPServerTransport} from '@modelcontextprotocol/sdk/server/streamableHttp.js';
export {
type CallToolResult,
SetLevelRequestSchema,
Expand Down