debugger-mcp-server 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "debugger-mcp-server",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "MCP server for VS Code debugging via bridge extension",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,11 +14,9 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@modelcontextprotocol/sdk": "^1.12.1",
17
- "express": "^4.21.0",
18
17
  "zod": "^3.24.0"
19
18
  },
20
19
  "devDependencies": {
21
- "@types/express": "^5.0.0",
22
20
  "@types/node": "^22.0.0",
23
21
  "tsx": "^4.0.0",
24
22
  "typescript": "^5.7.0"
package/dist/server.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import express from "express";
2
- export declare const createApp: () => express.Express;
package/dist/server.js DELETED
@@ -1,124 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
3
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
- import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
- import { randomUUID } from "crypto";
6
- import express from "express";
7
- import { registerAllTools } from "./tools/toolRegistry.js";
8
- const createConnectedServer = () => {
9
- const server = new McpServer({
10
- name: "debugger-mcp-server",
11
- version: "0.1.0",
12
- });
13
- registerAllTools({ server });
14
- return server;
15
- };
16
- export const createApp = () => {
17
- const app = express();
18
- app.use(express.json());
19
- const transports = new Map();
20
- // ==========================================================================
21
- // Streamable HTTP transport (protocol version 2025-11-25)
22
- // ==========================================================================
23
- app.post("/mcp", async (req, res) => {
24
- const sessionId = req.headers["mcp-session-id"];
25
- if (sessionId !== undefined && transports.has(sessionId)) {
26
- const existingTransport = transports.get(sessionId);
27
- if (existingTransport instanceof SSEServerTransport) {
28
- res.status(400).json({
29
- jsonrpc: "2.0",
30
- error: { code: -32000, message: "Session uses a different transport protocol." },
31
- id: null,
32
- });
33
- return;
34
- }
35
- await existingTransport.handleRequest(req, res, req.body);
36
- return;
37
- }
38
- if (isInitializeRequest(req.body)) {
39
- const transport = new StreamableHTTPServerTransport({
40
- sessionIdGenerator: () => randomUUID(),
41
- onsessioninitialized: (newSessionId) => {
42
- transports.set(newSessionId, transport);
43
- },
44
- });
45
- transport.onclose = () => {
46
- const transportSessionId = transport.sessionId;
47
- if (transportSessionId !== undefined) {
48
- transports.delete(transportSessionId);
49
- }
50
- };
51
- const server = createConnectedServer();
52
- await server.connect(transport);
53
- await transport.handleRequest(req, res, req.body);
54
- return;
55
- }
56
- res.status(400).json({ error: "Invalid request. Missing session ID or not an initialize request." });
57
- });
58
- app.get("/mcp", async (req, res) => {
59
- const sessionId = req.headers["mcp-session-id"];
60
- if (sessionId !== undefined && transports.has(sessionId)) {
61
- const existingTransport = transports.get(sessionId);
62
- if (existingTransport instanceof SSEServerTransport) {
63
- res.status(400).json({
64
- jsonrpc: "2.0",
65
- error: { code: -32000, message: "Session uses a different transport protocol." },
66
- id: null,
67
- });
68
- return;
69
- }
70
- await existingTransport.handleRequest(req, res);
71
- return;
72
- }
73
- res.status(400).json({ error: "Invalid session." });
74
- });
75
- app.delete("/mcp", async (req, res) => {
76
- const sessionId = req.headers["mcp-session-id"];
77
- if (sessionId !== undefined && transports.has(sessionId)) {
78
- const existingTransport = transports.get(sessionId);
79
- if (existingTransport instanceof SSEServerTransport) {
80
- res.status(400).json({
81
- jsonrpc: "2.0",
82
- error: { code: -32000, message: "Session uses a different transport protocol." },
83
- id: null,
84
- });
85
- return;
86
- }
87
- await existingTransport.handleRequest(req, res);
88
- transports.delete(sessionId);
89
- return;
90
- }
91
- res.status(400).json({ error: "Invalid session." });
92
- });
93
- // ==========================================================================
94
- // Legacy SSE transport (protocol version 2024-11-05)
95
- // ==========================================================================
96
- app.get("/sse", async (_req, res) => {
97
- const transport = new SSEServerTransport("/messages", res);
98
- transports.set(transport.sessionId, transport);
99
- res.on("close", () => {
100
- transports.delete(transport.sessionId);
101
- });
102
- const server = createConnectedServer();
103
- await server.connect(transport);
104
- });
105
- app.post("/messages", async (req, res) => {
106
- const sessionId = req.query.sessionId;
107
- if (sessionId === undefined) {
108
- res.status(400).json({ error: "Missing sessionId query parameter." });
109
- return;
110
- }
111
- const existingTransport = transports.get(sessionId);
112
- if (!(existingTransport instanceof SSEServerTransport)) {
113
- res.status(400).json({
114
- jsonrpc: "2.0",
115
- error: { code: -32000, message: "No SSE transport found for this session." },
116
- id: null,
117
- });
118
- return;
119
- }
120
- await existingTransport.handlePostMessage(req, res, req.body);
121
- });
122
- return app;
123
- };
124
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/src/server.ts DELETED
@@ -1,143 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
3
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
- import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
- import { randomUUID } from "crypto";
6
- import express from "express";
7
- import { registerAllTools } from "./tools/toolRegistry.js";
8
-
9
- const createConnectedServer = (): McpServer => {
10
- const server = new McpServer({
11
- name: "debugger-mcp-server",
12
- version: "0.1.0",
13
- });
14
- registerAllTools({ server });
15
- return server;
16
- };
17
-
18
- export const createApp = (): express.Express => {
19
- const app = express();
20
- app.use(express.json());
21
-
22
- const transports = new Map<string, StreamableHTTPServerTransport | SSEServerTransport>();
23
-
24
- // ==========================================================================
25
- // Streamable HTTP transport (protocol version 2025-11-25)
26
- // ==========================================================================
27
-
28
- app.post("/mcp", async (req, res) => {
29
- const sessionId = req.headers["mcp-session-id"] as string | undefined;
30
-
31
- if (sessionId !== undefined && transports.has(sessionId)) {
32
- const existingTransport = transports.get(sessionId) as NonNullable<ReturnType<typeof transports.get>>;
33
- if (existingTransport instanceof SSEServerTransport) {
34
- res.status(400).json({
35
- jsonrpc: "2.0",
36
- error: { code: -32000, message: "Session uses a different transport protocol." },
37
- id: null,
38
- });
39
- return;
40
- }
41
- await existingTransport.handleRequest(req, res, req.body);
42
- return;
43
- }
44
-
45
- if (isInitializeRequest(req.body)) {
46
- const transport = new StreamableHTTPServerTransport({
47
- sessionIdGenerator: () => randomUUID(),
48
- onsessioninitialized: (newSessionId) => {
49
- transports.set(newSessionId, transport);
50
- },
51
- });
52
-
53
- transport.onclose = () => {
54
- const transportSessionId = transport.sessionId;
55
- if (transportSessionId !== undefined) {
56
- transports.delete(transportSessionId);
57
- }
58
- };
59
-
60
- const server = createConnectedServer();
61
- await server.connect(transport);
62
- await transport.handleRequest(req, res, req.body);
63
- return;
64
- }
65
-
66
- res.status(400).json({ error: "Invalid request. Missing session ID or not an initialize request." });
67
- });
68
-
69
- app.get("/mcp", async (req, res) => {
70
- const sessionId = req.headers["mcp-session-id"] as string | undefined;
71
- if (sessionId !== undefined && transports.has(sessionId)) {
72
- const existingTransport = transports.get(sessionId) as NonNullable<ReturnType<typeof transports.get>>;
73
- if (existingTransport instanceof SSEServerTransport) {
74
- res.status(400).json({
75
- jsonrpc: "2.0",
76
- error: { code: -32000, message: "Session uses a different transport protocol." },
77
- id: null,
78
- });
79
- return;
80
- }
81
- await existingTransport.handleRequest(req, res);
82
- return;
83
- }
84
- res.status(400).json({ error: "Invalid session." });
85
- });
86
-
87
- app.delete("/mcp", async (req, res) => {
88
- const sessionId = req.headers["mcp-session-id"] as string | undefined;
89
- if (sessionId !== undefined && transports.has(sessionId)) {
90
- const existingTransport = transports.get(sessionId) as NonNullable<ReturnType<typeof transports.get>>;
91
- if (existingTransport instanceof SSEServerTransport) {
92
- res.status(400).json({
93
- jsonrpc: "2.0",
94
- error: { code: -32000, message: "Session uses a different transport protocol." },
95
- id: null,
96
- });
97
- return;
98
- }
99
- await existingTransport.handleRequest(req, res);
100
- transports.delete(sessionId);
101
- return;
102
- }
103
- res.status(400).json({ error: "Invalid session." });
104
- });
105
-
106
- // ==========================================================================
107
- // Legacy SSE transport (protocol version 2024-11-05)
108
- // ==========================================================================
109
-
110
- app.get("/sse", async (_req, res) => {
111
- const transport = new SSEServerTransport("/messages", res);
112
- transports.set(transport.sessionId, transport);
113
-
114
- res.on("close", () => {
115
- transports.delete(transport.sessionId);
116
- });
117
-
118
- const server = createConnectedServer();
119
- await server.connect(transport);
120
- });
121
-
122
- app.post("/messages", async (req, res) => {
123
- const sessionId = req.query.sessionId as string | undefined;
124
- if (sessionId === undefined) {
125
- res.status(400).json({ error: "Missing sessionId query parameter." });
126
- return;
127
- }
128
-
129
- const existingTransport = transports.get(sessionId);
130
- if (!(existingTransport instanceof SSEServerTransport)) {
131
- res.status(400).json({
132
- jsonrpc: "2.0",
133
- error: { code: -32000, message: "No SSE transport found for this session." },
134
- id: null,
135
- });
136
- return;
137
- }
138
-
139
- await existingTransport.handlePostMessage(req, res, req.body);
140
- });
141
-
142
- return app;
143
- };