couchloop-eq-mcp 1.3.0 → 1.3.2
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/README.md +62 -48
- package/dist/clients/shrinkChatClient.d.ts +8 -8
- package/dist/developer/analyzers/bloat-detector.js +6 -6
- package/dist/developer/analyzers/bloat-detector.js.map +1 -1
- package/dist/developer/reports/review-summary.d.ts.map +1 -1
- package/dist/developer/reports/review-summary.js +20 -22
- package/dist/developer/reports/review-summary.js.map +1 -1
- package/dist/developer/scanners/review-assistant.d.ts +0 -1
- package/dist/developer/scanners/review-assistant.d.ts.map +1 -1
- package/dist/developer/scanners/review-assistant.js +47 -55
- package/dist/developer/scanners/review-assistant.js.map +1 -1
- package/dist/developer/scanners/secret-scanner.d.ts.map +1 -1
- package/dist/developer/scanners/secret-scanner.js +37 -12
- package/dist/developer/scanners/secret-scanner.js.map +1 -1
- package/dist/developer/scanners/xss-detector.d.ts.map +1 -1
- package/dist/developer/scanners/xss-detector.js +18 -9
- package/dist/developer/scanners/xss-detector.js.map +1 -1
- package/dist/index.js +147 -99
- package/dist/index.js.map +1 -1
- package/dist/server/http-mcp.d.ts +40 -1
- package/dist/server/http-mcp.d.ts.map +1 -1
- package/dist/server/http-mcp.js +295 -195
- package/dist/server/http-mcp.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +179 -159
- package/dist/server/index.js.map +1 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +13 -4
- package/dist/server/sse.js.map +1 -1
- package/dist/tools/comprehensive-code-review.d.ts +4 -1
- package/dist/tools/comprehensive-code-review.d.ts.map +1 -1
- package/dist/tools/comprehensive-code-review.js +48 -21
- package/dist/tools/comprehensive-code-review.js.map +1 -1
- package/dist/tools/detect-code-smell.js +2 -2
- package/dist/tools/detect-code-smell.js.map +1 -1
- package/dist/tools/index-full.js +2 -2
- package/dist/tools/index-full.js.map +1 -1
- package/dist/tools/index.d.ts +19 -19
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +19 -19
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insight.d.ts +7 -7
- package/dist/tools/intent-router.d.ts +1 -0
- package/dist/tools/intent-router.d.ts.map +1 -1
- package/dist/tools/intent-router.js +5 -4
- package/dist/tools/intent-router.js.map +1 -1
- package/dist/tools/primary-tools.d.ts +18 -10
- package/dist/tools/primary-tools.d.ts.map +1 -1
- package/dist/tools/primary-tools.js +8 -2
- package/dist/tools/primary-tools.js.map +1 -1
- package/dist/tools/scan-security.js +17 -29
- package/dist/tools/scan-security.js.map +1 -1
- package/dist/tools/sendMessage.js +1 -1
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session.d.ts +1 -1
- package/dist/tools/smart-context.d.ts +1 -1
- package/dist/tools/status.d.ts +3 -2
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +1 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/verify.d.ts +5 -4
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +69 -31
- package/dist/tools/verify.js.map +1 -1
- package/dist/types/insight.d.ts +2 -2
- package/dist/types/journey.d.ts +12 -12
- package/dist/workflows/index.d.ts +2 -2
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { Server } from
|
|
3
|
-
import { StdioServerTransport } from
|
|
4
|
-
import { CallToolRequestSchema,
|
|
5
|
-
import dotenv from
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import dotenv from "dotenv";
|
|
6
|
+
import { getDb, initDatabase } from "./db/client.js";
|
|
7
|
+
import { governanceAuditLog } from "./db/schema.js";
|
|
8
|
+
import { governancePostCheck, governancePreCheck, } from "./governance/middleware.js";
|
|
9
|
+
import { setupResources } from "./resources/index.js";
|
|
10
|
+
import { setupTools } from "./tools/index.js";
|
|
11
|
+
import { logger } from "./utils/logger.js";
|
|
12
12
|
// Load environment variables
|
|
13
|
-
dotenv.config({ path:
|
|
13
|
+
dotenv.config({ path: ".env.local" });
|
|
14
14
|
// Initialize server
|
|
15
15
|
async function main() {
|
|
16
16
|
try {
|
|
17
|
-
logger.info(
|
|
18
|
-
// Initialize database connection
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
logger.info("Starting CouchLoop MCP Server...");
|
|
18
|
+
// Initialize database connection (non-fatal — server responds to tools/list even without DB)
|
|
19
|
+
try {
|
|
20
|
+
await initDatabase();
|
|
21
|
+
logger.info("Database connection established");
|
|
22
|
+
}
|
|
23
|
+
catch (dbError) {
|
|
24
|
+
logger.warn("Database unavailable — starting in degraded mode (tool discovery still works):", dbError);
|
|
25
|
+
}
|
|
21
26
|
// Create MCP server instance
|
|
22
27
|
const server = new Server({
|
|
23
|
-
name:
|
|
24
|
-
version:
|
|
28
|
+
name: "couchloop-mcp",
|
|
29
|
+
version: "1.3.1",
|
|
25
30
|
}, {
|
|
26
31
|
capabilities: {
|
|
27
32
|
tools: {},
|
|
@@ -33,12 +38,12 @@ async function main() {
|
|
|
33
38
|
const tools = await setupTools();
|
|
34
39
|
// Set up tool handlers
|
|
35
40
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
36
|
-
tools: tools.map(t => t.definition)
|
|
41
|
+
tools: tools.map((t) => t.definition),
|
|
37
42
|
}));
|
|
38
43
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
39
44
|
const toolName = request.params.name;
|
|
40
45
|
const args = request.params.arguments || {};
|
|
41
|
-
const tool = tools.find(t => t.definition.name === toolName);
|
|
46
|
+
const tool = tools.find((t) => t.definition.name === toolName);
|
|
42
47
|
if (!tool) {
|
|
43
48
|
throw new Error(`Tool ${toolName} not found`);
|
|
44
49
|
}
|
|
@@ -52,8 +57,8 @@ async function main() {
|
|
|
52
57
|
try {
|
|
53
58
|
const db = getDb();
|
|
54
59
|
await db.insert(governanceAuditLog).values({
|
|
55
|
-
actionType:
|
|
56
|
-
reason: preCheck.issues.join(
|
|
60
|
+
actionType: "pre_check_block",
|
|
61
|
+
reason: preCheck.issues.join("; "),
|
|
57
62
|
confidenceScore: Math.round(preCheck.confidence * 100),
|
|
58
63
|
metadata: {
|
|
59
64
|
tool: toolName,
|
|
@@ -63,24 +68,37 @@ async function main() {
|
|
|
63
68
|
});
|
|
64
69
|
}
|
|
65
70
|
catch (auditError) {
|
|
66
|
-
logger.warn(
|
|
71
|
+
logger.warn("Failed to log governance audit:", auditError);
|
|
67
72
|
}
|
|
68
73
|
return {
|
|
69
|
-
content: [
|
|
70
|
-
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: "text",
|
|
71
77
|
text: JSON.stringify({
|
|
72
78
|
blocked: true,
|
|
73
|
-
reason:
|
|
79
|
+
reason: "Governance pre-check failed",
|
|
74
80
|
issues: preCheck.issues,
|
|
75
81
|
confidence: preCheck.confidence,
|
|
76
|
-
}, null, 2)
|
|
77
|
-
}
|
|
82
|
+
}, null, 2),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
78
85
|
};
|
|
79
86
|
}
|
|
80
87
|
// ═══════════════════════════════════════════════
|
|
81
88
|
// EXECUTE TOOL
|
|
82
89
|
// ═══════════════════════════════════════════════
|
|
83
|
-
|
|
90
|
+
let result;
|
|
91
|
+
try {
|
|
92
|
+
result = await tool.handler(args);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const message = error instanceof Error ? error.message : "Tool execution failed";
|
|
96
|
+
logger.error(`[Tool] ${toolName} threw:`, error);
|
|
97
|
+
return {
|
|
98
|
+
isError: true,
|
|
99
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
84
102
|
// ═══════════════════════════════════════════════
|
|
85
103
|
// GOVERNANCE POST-CHECK
|
|
86
104
|
// ═══════════════════════════════════════════════
|
|
@@ -91,8 +109,8 @@ async function main() {
|
|
|
91
109
|
try {
|
|
92
110
|
const db = getDb();
|
|
93
111
|
await db.insert(governanceAuditLog).values({
|
|
94
|
-
actionType:
|
|
95
|
-
reason: postCheck.issues.join(
|
|
112
|
+
actionType: "post_check_warning",
|
|
113
|
+
reason: postCheck.issues.join("; "),
|
|
96
114
|
confidenceScore: Math.round(postCheck.confidence * 100),
|
|
97
115
|
metadata: {
|
|
98
116
|
tool: toolName,
|
|
@@ -102,154 +120,184 @@ async function main() {
|
|
|
102
120
|
});
|
|
103
121
|
}
|
|
104
122
|
catch (auditError) {
|
|
105
|
-
logger.warn(
|
|
123
|
+
logger.warn("Failed to log governance audit:", auditError);
|
|
106
124
|
}
|
|
107
125
|
}
|
|
108
126
|
// Add governance metadata to response
|
|
109
127
|
const governedResult = {
|
|
110
|
-
...(typeof result ===
|
|
128
|
+
...(typeof result === "object" && result !== null
|
|
129
|
+
? result
|
|
130
|
+
: { value: result }),
|
|
111
131
|
_governance: {
|
|
112
132
|
checked: true,
|
|
113
133
|
issues: postCheck.issues,
|
|
114
134
|
confidence: postCheck.confidence,
|
|
115
|
-
}
|
|
135
|
+
},
|
|
116
136
|
};
|
|
117
137
|
return {
|
|
118
|
-
content: [
|
|
138
|
+
content: [
|
|
139
|
+
{ type: "text", text: JSON.stringify(governedResult, null, 2) },
|
|
140
|
+
],
|
|
119
141
|
};
|
|
120
142
|
});
|
|
121
|
-
logger.info(
|
|
143
|
+
logger.info("Tools registered");
|
|
122
144
|
// Set up resources
|
|
123
145
|
const resources = await setupResources();
|
|
124
146
|
// Set up resource handlers
|
|
125
147
|
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
126
|
-
resources: resources.map(r => r.definition)
|
|
148
|
+
resources: resources.map((r) => r.definition),
|
|
127
149
|
}));
|
|
128
150
|
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
129
|
-
const resource = resources.find(r => r.definition.uri === request.params.uri);
|
|
151
|
+
const resource = resources.find((r) => r.definition.uri === request.params.uri);
|
|
130
152
|
if (!resource) {
|
|
131
153
|
throw new Error(`Resource ${request.params.uri} not found`);
|
|
132
154
|
}
|
|
133
155
|
const contents = await resource.handler();
|
|
134
156
|
return {
|
|
135
|
-
contents: [
|
|
157
|
+
contents: [
|
|
158
|
+
{
|
|
136
159
|
uri: request.params.uri,
|
|
137
|
-
mimeType:
|
|
138
|
-
text: contents
|
|
139
|
-
}
|
|
160
|
+
mimeType: "application/json",
|
|
161
|
+
text: contents,
|
|
162
|
+
},
|
|
163
|
+
],
|
|
140
164
|
};
|
|
141
165
|
});
|
|
142
|
-
logger.info(
|
|
166
|
+
logger.info("Resources registered");
|
|
143
167
|
// Set up prompts
|
|
144
168
|
const prompts = [
|
|
145
169
|
{
|
|
146
|
-
name:
|
|
147
|
-
description:
|
|
170
|
+
name: "daily-reflection",
|
|
171
|
+
description: "Start a guided daily reflection session to process your day",
|
|
148
172
|
arguments: [
|
|
149
|
-
{
|
|
150
|
-
|
|
173
|
+
{
|
|
174
|
+
name: "mood",
|
|
175
|
+
description: "Your current mood (optional)",
|
|
176
|
+
required: false,
|
|
177
|
+
},
|
|
178
|
+
],
|
|
151
179
|
},
|
|
152
180
|
{
|
|
153
|
-
name:
|
|
154
|
-
description:
|
|
181
|
+
name: "code-review",
|
|
182
|
+
description: "Review code for security issues, code smells, and best practices",
|
|
155
183
|
arguments: [
|
|
156
|
-
{ name:
|
|
157
|
-
{
|
|
158
|
-
|
|
184
|
+
{ name: "code", description: "The code to review", required: true },
|
|
185
|
+
{
|
|
186
|
+
name: "language",
|
|
187
|
+
description: "Programming language",
|
|
188
|
+
required: false,
|
|
189
|
+
},
|
|
190
|
+
],
|
|
159
191
|
},
|
|
160
192
|
{
|
|
161
|
-
name:
|
|
162
|
-
description:
|
|
193
|
+
name: "validate-dependencies",
|
|
194
|
+
description: "Validate package dependencies for hallucinated or vulnerable packages",
|
|
163
195
|
arguments: [
|
|
164
|
-
{
|
|
165
|
-
|
|
196
|
+
{
|
|
197
|
+
name: "packages",
|
|
198
|
+
description: "Comma-separated list of packages to validate",
|
|
199
|
+
required: true,
|
|
200
|
+
},
|
|
201
|
+
],
|
|
166
202
|
},
|
|
167
203
|
{
|
|
168
|
-
name:
|
|
169
|
-
description:
|
|
204
|
+
name: "sprint-kickoff",
|
|
205
|
+
description: "Start a new sprint session to capture context and decisions",
|
|
170
206
|
arguments: [
|
|
171
|
-
{
|
|
172
|
-
|
|
173
|
-
|
|
207
|
+
{
|
|
208
|
+
name: "sprint_name",
|
|
209
|
+
description: "Name or identifier for the sprint",
|
|
210
|
+
required: true,
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
},
|
|
174
214
|
];
|
|
175
215
|
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
176
|
-
prompts
|
|
216
|
+
prompts,
|
|
177
217
|
}));
|
|
178
218
|
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
179
|
-
const prompt = prompts.find(p => p.name === request.params.name);
|
|
219
|
+
const prompt = prompts.find((p) => p.name === request.params.name);
|
|
180
220
|
if (!prompt) {
|
|
181
221
|
throw new Error(`Prompt not found: ${request.params.name}`);
|
|
182
222
|
}
|
|
183
223
|
const args = request.params.arguments || {};
|
|
184
224
|
let messages = [];
|
|
185
225
|
switch (prompt.name) {
|
|
186
|
-
case
|
|
187
|
-
messages = [
|
|
188
|
-
|
|
226
|
+
case "daily-reflection":
|
|
227
|
+
messages = [
|
|
228
|
+
{
|
|
229
|
+
role: "user",
|
|
189
230
|
content: {
|
|
190
|
-
type:
|
|
191
|
-
text: `Start a daily reflection session${args.mood ? ` (current mood: ${args.mood})` :
|
|
192
|
-
}
|
|
193
|
-
}
|
|
231
|
+
type: "text",
|
|
232
|
+
text: `Start a daily reflection session${args.mood ? ` (current mood: ${args.mood})` : ""}. Use the create_session tool with journey_slug "daily-reflection".`,
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
];
|
|
194
236
|
break;
|
|
195
|
-
case
|
|
196
|
-
messages = [
|
|
197
|
-
|
|
237
|
+
case "code-review":
|
|
238
|
+
messages = [
|
|
239
|
+
{
|
|
240
|
+
role: "user",
|
|
198
241
|
content: {
|
|
199
|
-
type:
|
|
200
|
-
text: `Review this code for issues:\n\n\`\`\`${args.language ||
|
|
201
|
-
}
|
|
202
|
-
}
|
|
242
|
+
type: "text",
|
|
243
|
+
text: `Review this code for issues:\n\n\`\`\`${args.language || ""}\n${args.code}\n\`\`\`\n\nUse scan_security, pre_review_code, and detect_code_smell tools to analyze.`,
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
];
|
|
203
247
|
break;
|
|
204
|
-
case
|
|
205
|
-
messages = [
|
|
206
|
-
|
|
248
|
+
case "validate-dependencies":
|
|
249
|
+
messages = [
|
|
250
|
+
{
|
|
251
|
+
role: "user",
|
|
207
252
|
content: {
|
|
208
|
-
type:
|
|
209
|
-
text: `Validate these packages: ${args.packages}\n\nUse the validate_packages tool to check if they exist and are safe
|
|
210
|
-
}
|
|
211
|
-
}
|
|
253
|
+
type: "text",
|
|
254
|
+
text: `Validate these packages: ${args.packages}\n\nUse the validate_packages tool to check if they exist and are safe.`,
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
];
|
|
212
258
|
break;
|
|
213
|
-
case
|
|
214
|
-
messages = [
|
|
215
|
-
|
|
259
|
+
case "sprint-kickoff":
|
|
260
|
+
messages = [
|
|
261
|
+
{
|
|
262
|
+
role: "user",
|
|
216
263
|
content: {
|
|
217
|
-
type:
|
|
218
|
-
text: `Start a new sprint session for "${args.sprint_name}". Use create_session to establish context, then use preserve_context to store the sprint goals
|
|
219
|
-
}
|
|
220
|
-
}
|
|
264
|
+
type: "text",
|
|
265
|
+
text: `Start a new sprint session for "${args.sprint_name}". Use create_session to establish context, then use preserve_context to store the sprint goals.`,
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
];
|
|
221
269
|
break;
|
|
222
270
|
}
|
|
223
271
|
return {
|
|
224
272
|
description: prompt.description,
|
|
225
|
-
messages
|
|
273
|
+
messages,
|
|
226
274
|
};
|
|
227
275
|
});
|
|
228
|
-
logger.info(
|
|
276
|
+
logger.info("Prompts registered");
|
|
229
277
|
// Start the server with stdio transport
|
|
230
278
|
const transport = new StdioServerTransport();
|
|
231
279
|
await server.connect(transport);
|
|
232
|
-
logger.info(
|
|
280
|
+
logger.info("CouchLoop MCP Server is running");
|
|
233
281
|
// Handle graceful shutdown
|
|
234
|
-
process.on(
|
|
235
|
-
logger.info(
|
|
282
|
+
process.on("SIGINT", async () => {
|
|
283
|
+
logger.info("Shutting down server...");
|
|
236
284
|
await server.close();
|
|
237
285
|
process.exit(0);
|
|
238
286
|
});
|
|
239
|
-
process.on(
|
|
240
|
-
logger.info(
|
|
287
|
+
process.on("SIGTERM", async () => {
|
|
288
|
+
logger.info("Shutting down server...");
|
|
241
289
|
await server.close();
|
|
242
290
|
process.exit(0);
|
|
243
291
|
});
|
|
244
292
|
}
|
|
245
293
|
catch (error) {
|
|
246
|
-
logger.error(
|
|
294
|
+
logger.error("Failed to start server:", error);
|
|
247
295
|
process.exit(1);
|
|
248
296
|
}
|
|
249
297
|
}
|
|
250
298
|
// Run the server
|
|
251
299
|
main().catch((error) => {
|
|
252
|
-
logger.error(
|
|
300
|
+
logger.error("Unhandled error:", error);
|
|
253
301
|
process.exit(1);
|
|
254
302
|
});
|
|
255
303
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,48 @@
|
|
|
3
3
|
* Implements MCP protocol over HTTP POST for all clients (ChatGPT, Claude Desktop, etc.)
|
|
4
4
|
* Used by any client connecting to https://mcp.couchloop.com/mcp
|
|
5
5
|
*/
|
|
6
|
-
import { Request, Response } from
|
|
6
|
+
import { Request, Response } from "express";
|
|
7
|
+
interface MCPToolDefinition {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
annotations?: Record<string, unknown>;
|
|
11
|
+
inputSchema: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
interface MCPResourceDefinition {
|
|
14
|
+
uri: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
mimeType?: string;
|
|
18
|
+
}
|
|
19
|
+
interface MCPPromptDefinition {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
arguments?: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
required?: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build static server-card metadata for scanners that cannot complete
|
|
30
|
+
* full MCP introspection (e.g. auth/config gated instrumentation).
|
|
31
|
+
*/
|
|
32
|
+
export declare function getServerCardMetadata(): Promise<{
|
|
33
|
+
serverInfo: {
|
|
34
|
+
name: string;
|
|
35
|
+
version: string;
|
|
36
|
+
};
|
|
37
|
+
authentication: {
|
|
38
|
+
required: boolean;
|
|
39
|
+
schemes: string[];
|
|
40
|
+
};
|
|
41
|
+
tools: MCPToolDefinition[];
|
|
42
|
+
resources: MCPResourceDefinition[];
|
|
43
|
+
prompts: MCPPromptDefinition[];
|
|
44
|
+
}>;
|
|
7
45
|
/**
|
|
8
46
|
* Handle MCP requests from ChatGPT
|
|
9
47
|
*/
|
|
10
48
|
export declare function handleChatGPTMCP(req: Request, res: Response): Promise<void>;
|
|
49
|
+
export {};
|
|
11
50
|
//# sourceMappingURL=http-mcp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-mcp.d.ts","sourceRoot":"","sources":["../../src/server/http-mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"http-mcp.d.ts","sourceRoot":"","sources":["../../src/server/http-mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK5C,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAOD,UAAU,qBAAqB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAgKD;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,cAAc,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC,CAmBD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,iBA0ZjE"}
|