awesome-copilot-mcp 0.0.1-beta

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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +590 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/github-adapter.d.ts +33 -0
  8. package/dist/github-adapter.d.ts.map +1 -0
  9. package/dist/github-adapter.js +226 -0
  10. package/dist/github-adapter.js.map +1 -0
  11. package/dist/http-server.d.ts +55 -0
  12. package/dist/http-server.d.ts.map +1 -0
  13. package/dist/http-server.js +270 -0
  14. package/dist/http-server.js.map +1 -0
  15. package/dist/index.d.ts +6 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +27 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/logger.d.ts +3 -0
  20. package/dist/logger.d.ts.map +1 -0
  21. package/dist/logger.js +25 -0
  22. package/dist/logger.js.map +1 -0
  23. package/dist/mcp-prompts.d.ts +18 -0
  24. package/dist/mcp-prompts.d.ts.map +1 -0
  25. package/dist/mcp-prompts.js +81 -0
  26. package/dist/mcp-prompts.js.map +1 -0
  27. package/dist/mcp-resources.d.ts +37 -0
  28. package/dist/mcp-resources.d.ts.map +1 -0
  29. package/dist/mcp-resources.js +394 -0
  30. package/dist/mcp-resources.js.map +1 -0
  31. package/dist/mcp-server.d.ts +11 -0
  32. package/dist/mcp-server.d.ts.map +1 -0
  33. package/dist/mcp-server.js +49 -0
  34. package/dist/mcp-server.js.map +1 -0
  35. package/dist/mcp-shared.d.ts +10 -0
  36. package/dist/mcp-shared.d.ts.map +1 -0
  37. package/dist/mcp-shared.js +160 -0
  38. package/dist/mcp-shared.js.map +1 -0
  39. package/dist/mcp-tools.d.ts +41 -0
  40. package/dist/mcp-tools.d.ts.map +1 -0
  41. package/dist/mcp-tools.js +249 -0
  42. package/dist/mcp-tools.js.map +1 -0
  43. package/dist/sse.d.ts +15 -0
  44. package/dist/sse.d.ts.map +1 -0
  45. package/dist/sse.js +11 -0
  46. package/dist/sse.js.map +1 -0
  47. package/dist/types.d.ts +94 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +3 -0
  50. package/dist/types.js.map +1 -0
  51. package/metadata.json +5767 -0
  52. package/package.json +85 -0
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.GitHubAdapter = void 0;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const fs = __importStar(require("fs-extra"));
42
+ const path = __importStar(require("path"));
43
+ const logger_1 = require("./logger");
44
+ class GitHubAdapter {
45
+ client;
46
+ memoryCache = new Map();
47
+ repoConfig;
48
+ constructor(config) {
49
+ this.repoConfig = config;
50
+ const headers = {
51
+ 'User-Agent': 'awesome-copilot-mcp/1.0.0'
52
+ };
53
+ this.client = axios_1.default.create({
54
+ headers,
55
+ timeout: 30000
56
+ });
57
+ }
58
+ getCached(key) {
59
+ const entry = this.memoryCache.get(key);
60
+ if (!entry)
61
+ return null;
62
+ const now = Date.now();
63
+ if (now - entry.timestamp > entry.ttl * 1000) {
64
+ this.memoryCache.delete(key);
65
+ return null;
66
+ }
67
+ return entry.data;
68
+ }
69
+ setCached(key, data, ttl = 3600) {
70
+ this.memoryCache.set(key, {
71
+ data,
72
+ timestamp: Date.now(),
73
+ ttl
74
+ });
75
+ }
76
+ async fetchFile(filePath) {
77
+ const cacheKey = `file_${filePath.replace(/\//g, '_')}`;
78
+ const cached = this.getCached(cacheKey);
79
+ if (cached) {
80
+ return cached;
81
+ }
82
+ try {
83
+ const url = `https://raw.githubusercontent.com/${this.repoConfig.owner}/${this.repoConfig.repo}/${this.repoConfig.branch || 'main'}/${filePath}`;
84
+ const response = await this.client.get(url);
85
+ const content = typeof response.data === 'string' ? response.data : JSON.stringify(response.data);
86
+ this.setCached(cacheKey, content);
87
+ return content;
88
+ }
89
+ catch (error) {
90
+ logger_1.logger.error(`Failed to fetch file ${filePath}: ${error}`);
91
+ throw error;
92
+ }
93
+ }
94
+ /**
95
+ * Public wrapper to fetch raw file content from the repository.
96
+ */
97
+ async fetchRawFile(filePath) {
98
+ return this.fetchFile(filePath);
99
+ }
100
+ /**
101
+ * Load all files from a skill directory.
102
+ */
103
+ async loadSkillDirectory(skillName) {
104
+ const index = await this.fetchIndex();
105
+ const skill = index.skills.find(s => s.name === skillName);
106
+ if (!skill) {
107
+ throw new Error(`Skill not found: ${skillName}`);
108
+ }
109
+ const skillDir = skill.path.replace(/\/SKILL\.md$/, '').replace(/SKILL\.md$/, '');
110
+ const fileList = skill.files || ['SKILL.md'];
111
+ const files = await Promise.all(fileList.map(async (relativePath) => {
112
+ const fullPath = `${skillDir}/${relativePath}`;
113
+ try {
114
+ const content = await this.fetchRawFile(fullPath);
115
+ return { path: relativePath, content };
116
+ }
117
+ catch (error) {
118
+ logger_1.logger.warn(`Failed to fetch skill file ${fullPath}: ${error}`);
119
+ return null;
120
+ }
121
+ }));
122
+ return {
123
+ name: skillName,
124
+ files: files.filter((f) => f !== null)
125
+ };
126
+ }
127
+ async loadBundledMetadata() {
128
+ try {
129
+ const bundledPath = path.resolve(__dirname, '..', 'metadata.json');
130
+ if (await fs.pathExists(bundledPath)) {
131
+ logger_1.logger.info(`Loading bundled metadata from ${bundledPath}`);
132
+ const metadata = await fs.readJson(bundledPath);
133
+ if (metadata.version && Array.isArray(metadata.agents)) {
134
+ return {
135
+ agents: metadata.agents || [],
136
+ prompts: metadata.prompts || [],
137
+ instructions: metadata.instructions || [],
138
+ skills: metadata.skills || [],
139
+ collections: metadata.collections || [],
140
+ lastUpdated: metadata.generatedAt || new Date().toISOString()
141
+ };
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ logger_1.logger.warn(`Failed to load bundled metadata: ${error}`);
147
+ }
148
+ return null;
149
+ }
150
+ async fetchRemoteIndex() {
151
+ logger_1.logger.info('Attempting to download lean metadata index...');
152
+ if (this.repoConfig.metadataUrl) {
153
+ try {
154
+ logger_1.logger.info(`Fetching metadata from hosted URL: ${this.repoConfig.metadataUrl}`);
155
+ const response = await this.client.get(this.repoConfig.metadataUrl);
156
+ const metadata = response.data;
157
+ if (metadata.version && Array.isArray(metadata.agents)) {
158
+ logger_1.logger.info(`✓ Hosted metadata index loaded (v${metadata.version})`);
159
+ return {
160
+ agents: metadata.agents || [],
161
+ prompts: metadata.prompts || [],
162
+ instructions: metadata.instructions || [],
163
+ skills: metadata.skills || [],
164
+ collections: metadata.collections || [],
165
+ lastUpdated: metadata.generatedAt || new Date().toISOString()
166
+ };
167
+ }
168
+ }
169
+ catch (err) {
170
+ logger_1.logger.warn(`Failed to fetch hosted metadata: ${err}`);
171
+ }
172
+ }
173
+ try {
174
+ const content = await this.fetchFile('metadata.json');
175
+ const metadata = JSON.parse(content);
176
+ if (metadata.version && Array.isArray(metadata.agents)) {
177
+ logger_1.logger.info(`✓ Remote metadata index loaded (v${metadata.version})`);
178
+ return {
179
+ agents: metadata.agents || [],
180
+ prompts: metadata.prompts || [],
181
+ instructions: metadata.instructions || [],
182
+ skills: metadata.skills || [],
183
+ collections: metadata.collections || [],
184
+ lastUpdated: metadata.generatedAt || new Date().toISOString()
185
+ };
186
+ }
187
+ throw new Error('Invalid metadata format');
188
+ }
189
+ catch (err) {
190
+ logger_1.logger.error(`Failed to fetch remote index: ${err}`);
191
+ return {
192
+ agents: [], prompts: [], instructions: [], skills: [], collections: [],
193
+ lastUpdated: new Date().toISOString()
194
+ };
195
+ }
196
+ }
197
+ /**
198
+ * Main entry point for data loading.
199
+ */
200
+ async fetchIndex(forceRemote = false) {
201
+ const cacheKey = 'index_v2';
202
+ if (!forceRemote) {
203
+ const cached = this.getCached(cacheKey);
204
+ if (cached) {
205
+ return cached;
206
+ }
207
+ const bundledMetadata = await this.loadBundledMetadata();
208
+ if (bundledMetadata) {
209
+ this.setCached(cacheKey, bundledMetadata);
210
+ return bundledMetadata;
211
+ }
212
+ }
213
+ const remoteMetadata = await this.fetchRemoteIndex();
214
+ this.setCached(cacheKey, remoteMetadata);
215
+ return remoteMetadata;
216
+ }
217
+ async refresh() {
218
+ this.memoryCache.clear();
219
+ return this.fetchIndex(true);
220
+ }
221
+ clearCache() {
222
+ this.memoryCache.clear();
223
+ }
224
+ }
225
+ exports.GitHubAdapter = GitHubAdapter;
226
+ //# sourceMappingURL=github-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-adapter.js","sourceRoot":"","sources":["../src/github-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { Express } from 'express';
2
+ import { IndexData } from './types';
3
+ interface HttpServerOptions {
4
+ port?: number;
5
+ host?: string;
6
+ authToken?: string;
7
+ allowedOrigins?: string[];
8
+ allowedHosts?: string[];
9
+ bodyLimit?: string;
10
+ rateLimit?: {
11
+ windowMs: number;
12
+ max: number;
13
+ };
14
+ tls?: {
15
+ key: string | Buffer;
16
+ cert: string | Buffer;
17
+ ca?: string | Buffer;
18
+ };
19
+ }
20
+ interface AdapterLike {
21
+ fetchIndex: () => Promise<IndexData>;
22
+ refresh: () => Promise<IndexData>;
23
+ loadSkillDirectory: (name: string) => Promise<{
24
+ name: string;
25
+ files: Array<{
26
+ path: string;
27
+ content: string;
28
+ }>;
29
+ }>;
30
+ }
31
+ export declare class HttpServer {
32
+ private app;
33
+ private server?;
34
+ private adapter;
35
+ private options;
36
+ private tools;
37
+ private prompts;
38
+ private resources;
39
+ private mcpServer;
40
+ private transport;
41
+ private activeRequests;
42
+ private connected;
43
+ private connectPromise?;
44
+ constructor(adapter: AdapterLike, options?: HttpServerOptions);
45
+ private attachErrorHandlers;
46
+ private configureSecurity;
47
+ getApp(): Express;
48
+ private setupRoutes;
49
+ addActiveRequestForTest(id: string, controller: AbortController): void;
50
+ start(): Promise<void>;
51
+ stop(): Promise<void>;
52
+ private ensureConnected;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAQxE,OAAO,EAAE,SAAS,EAAiD,MAAM,SAAS,CAAC;AAQnF,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,GAAG,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC7E;AAOD,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAClH;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAC,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAgC;IAEjD,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAE3B,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB;IA+DjE,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,iBAAiB;IAiEzB,MAAM;IAIN,OAAO,CAAC,WAAW;IA8CnB,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe;IAIzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAmBb,eAAe;CAS9B"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HttpServer = void 0;
7
+ const http_1 = __importDefault(require("http"));
8
+ const https_1 = __importDefault(require("https"));
9
+ const express_js_1 = require("@modelcontextprotocol/sdk/server/express.js");
10
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
11
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
12
+ const logger_1 = require("./logger");
13
+ const package_json_1 = __importDefault(require("../package.json"));
14
+ const mcp_tools_1 = require("./mcp-tools");
15
+ const mcp_prompts_1 = require("./mcp-prompts");
16
+ const mcp_resources_1 = require("./mcp-resources");
17
+ const mcp_shared_1 = require("./mcp-shared");
18
+ class HttpServer {
19
+ app;
20
+ server;
21
+ adapter;
22
+ options;
23
+ tools;
24
+ prompts;
25
+ resources;
26
+ mcpServer;
27
+ transport;
28
+ // Promote activeRequests to a class member so tests can validate cancel logic
29
+ activeRequests = new Map();
30
+ connected = false;
31
+ connectPromise;
32
+ constructor(adapter, options = {}) {
33
+ this.adapter = adapter;
34
+ this.options = {
35
+ port: options.port ?? 8080,
36
+ host: options.host ?? '127.0.0.1',
37
+ authToken: options.authToken,
38
+ allowedOrigins: options.allowedOrigins,
39
+ allowedHosts: options.allowedHosts,
40
+ bodyLimit: options.bodyLimit ?? '1mb',
41
+ rateLimit: options.rateLimit,
42
+ tls: options.tls,
43
+ };
44
+ // Use createMcpExpressApp directly as the main application
45
+ this.app = (0, express_js_1.createMcpExpressApp)({
46
+ host: this.options.host ?? '127.0.0.1',
47
+ allowedHosts: this.options.allowedHosts
48
+ });
49
+ // Apply security/custom middlewares
50
+ // Note: createMcpExpressApp already includes express.json() and host validation.
51
+ this.configureSecurity();
52
+ // Initialize MCP helpers
53
+ this.tools = new mcp_tools_1.MCPTools(this.adapter);
54
+ this.prompts = new mcp_prompts_1.MCPPrompts();
55
+ this.resources = new mcp_resources_1.MCPResources(this.adapter);
56
+ // Shared MCP server + transport (stateless mode)
57
+ this.mcpServer = new index_js_1.Server({
58
+ name: 'awesome-copilot-mcp',
59
+ version: package_json_1.default.version,
60
+ }, {
61
+ capabilities: {
62
+ tools: {},
63
+ prompts: {},
64
+ resources: {},
65
+ },
66
+ });
67
+ (0, mcp_shared_1.registerMcpHandlers)(this.mcpServer, this.tools, this.prompts, this.resources, {
68
+ onCallStart: (requestId, controller) => {
69
+ if (requestId)
70
+ this.activeRequests.set(requestId, { controller });
71
+ },
72
+ onCallEnd: (requestId) => {
73
+ if (!requestId)
74
+ return;
75
+ this.activeRequests.delete(requestId);
76
+ // Ensure any lingering SSE streams for this request are closed
77
+ this.transport.closeSSEStream(requestId);
78
+ }
79
+ });
80
+ this.transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
81
+ // Stateless mode to simplify client usage; callers must still send both JSON and SSE accept headers
82
+ sessionIdGenerator: undefined,
83
+ });
84
+ // Register routes
85
+ this.setupRoutes(this.app);
86
+ // Attach error handlers
87
+ this.attachErrorHandlers(this.app);
88
+ }
89
+ attachErrorHandlers(app = this.app) {
90
+ app.use((err, _req, res, next) => {
91
+ if (err?.type === 'entity.too.large') {
92
+ return res.status(413).json({ error: 'Request entity too large' });
93
+ }
94
+ if (err)
95
+ return res.status(400).json({ error: err.message || 'Bad Request' });
96
+ next();
97
+ });
98
+ }
99
+ configureSecurity() {
100
+ // Note: createMcpExpressApp handles:
101
+ // 1. Host header validation
102
+ // 2. Global JSON parsing (via express.json)
103
+ // We explicitly avoid adding urlencoded parser to encourage strict JSON-RPC usage.
104
+ // Optional origin validation for CORS-like checks on GET requests if explicit config is present
105
+ // Optional origin validation (useful when frontends fetch metadata)
106
+ if (this.options.allowedOrigins?.length) {
107
+ this.app.use((req, res, next) => {
108
+ const rawOrigin = req.headers.origin || req.headers.referer;
109
+ if (!rawOrigin)
110
+ return res.status(403).json({ error: 'Missing Origin header' });
111
+ let normalizedOrigin = rawOrigin;
112
+ try {
113
+ normalizedOrigin = new URL(rawOrigin).origin;
114
+ }
115
+ catch {
116
+ // keep raw origin if parsing fails
117
+ }
118
+ if (!this.options.allowedOrigins.includes(normalizedOrigin)) {
119
+ return res.status(403).json({ error: 'Origin not allowed' });
120
+ }
121
+ next();
122
+ });
123
+ }
124
+ // Optional bearer auth / API key validation
125
+ if (this.options.authToken) {
126
+ this.app.use((req, res, next) => {
127
+ if (req.path === '/health')
128
+ return next();
129
+ const header = req.headers.authorization || '';
130
+ const apiKey = req.headers['x-api-key'];
131
+ const token = header.startsWith('Bearer ') ? header.substring(7) : header;
132
+ if (token === this.options.authToken || apiKey === this.options.authToken) {
133
+ return next();
134
+ }
135
+ res.status(401).json({ error: 'Unauthorized' });
136
+ });
137
+ }
138
+ // Simple in-memory rate limiting per IP
139
+ if (this.options.rateLimit) {
140
+ const hits = new Map();
141
+ const { windowMs, max } = this.options.rateLimit;
142
+ this.app.use((req, res, next) => {
143
+ const now = Date.now();
144
+ const key = req.ip || req.headers['x-forwarded-for']?.toString() || 'unknown';
145
+ const windowStart = now - windowMs;
146
+ const recent = (hits.get(key) || []).filter((t) => t > windowStart);
147
+ if (recent.length >= max) {
148
+ return res.status(429).json({ error: 'Too Many Requests' });
149
+ }
150
+ recent.push(now);
151
+ hits.set(key, recent);
152
+ next();
153
+ });
154
+ }
155
+ }
156
+ getApp() {
157
+ return this.app;
158
+ }
159
+ setupRoutes(app) {
160
+ // Helper to handle MCP request via Transport
161
+ const handleMcpRequest = async (req, res) => {
162
+ try {
163
+ await this.ensureConnected();
164
+ // createMcpExpressApp includes body-parser, so we must pass the parsed body
165
+ // to the transport if available.
166
+ await this.transport.handleRequest(req, res, req.body);
167
+ }
168
+ catch (error) {
169
+ logger_1.logger.error(`HTTP MCP request failed: ${error}`);
170
+ if (!res.headersSent) {
171
+ res.status(500).json({ error: 'Failed to handle MCP request' });
172
+ }
173
+ }
174
+ };
175
+ // Primary MCP Endpoints
176
+ // POST /mcp (JSON-RPC)
177
+ app.post('/mcp', handleMcpRequest);
178
+ // GET /mcp (SSE)
179
+ app.get('/mcp', handleMcpRequest);
180
+ // DELETE /mcp (Session Close)
181
+ app.delete('/mcp', handleMcpRequest);
182
+ // Standard Aliases
183
+ // GET /sse -> /mcp (SSE)
184
+ app.get('/sse', handleMcpRequest);
185
+ // POST /messages -> /mcp (RPC)
186
+ app.post('/messages', handleMcpRequest);
187
+ // Cancel endpoint to abort ongoing requests
188
+ // Body is already JSON-parsed by global middleware
189
+ app.post('/mcp/cancel', (req, res) => {
190
+ const { id } = req.body || {};
191
+ if (!id)
192
+ return res.status(400).json({ error: 'Missing id' });
193
+ const active = this.activeRequests.get(id);
194
+ if (!active)
195
+ return res.status(404).json({ error: 'Request not found or already completed' });
196
+ active.controller.abort();
197
+ this.transport.closeSSEStream(id);
198
+ this.activeRequests.delete(id);
199
+ return res.json({ id, status: 'cancelled' });
200
+ });
201
+ }
202
+ // Test helper: register an active request to validate /mcp/cancel success path
203
+ // Not intended for production usage.
204
+ addActiveRequestForTest(id, controller) {
205
+ this.activeRequests.set(id, { controller });
206
+ }
207
+ async start() {
208
+ if (this.server)
209
+ return;
210
+ await this.ensureConnected();
211
+ return new Promise((resolve, reject) => {
212
+ try {
213
+ const create = () => {
214
+ if (this.options.tls) {
215
+ return https_1.default.createServer(this.options.tls, this.app);
216
+ }
217
+ return http_1.default.createServer(this.app);
218
+ };
219
+ this.server = create();
220
+ this.server.listen(this.options.port, this.options.host, () => {
221
+ const protocol = this.options.tls ? 'https' : 'http';
222
+ logger_1.logger.info(`HTTP server listening on ${protocol}://${this.options.host}:${this.options.port}`);
223
+ this.server.on('error', (err) => {
224
+ logger_1.logger.error(`Server error: ${err}`);
225
+ });
226
+ resolve();
227
+ });
228
+ this.server.on('error', (err) => {
229
+ logger_1.logger.error(`Failed to start server: ${err}`);
230
+ reject(err);
231
+ });
232
+ }
233
+ catch (err) {
234
+ logger_1.logger.error(`Exception during start: ${err}`);
235
+ reject(err);
236
+ }
237
+ });
238
+ }
239
+ async stop() {
240
+ if (this.server) {
241
+ await new Promise((resolve, reject) => {
242
+ this.server.close((err) => {
243
+ if (err)
244
+ reject(err);
245
+ else
246
+ resolve();
247
+ });
248
+ });
249
+ this.server = undefined;
250
+ }
251
+ if (this.connected) {
252
+ await this.transport.close();
253
+ await this.mcpServer.close();
254
+ this.connected = false;
255
+ this.connectPromise = undefined;
256
+ }
257
+ }
258
+ async ensureConnected() {
259
+ if (this.connected)
260
+ return;
261
+ if (!this.connectPromise) {
262
+ this.connectPromise = this.mcpServer.connect(this.transport).then(() => {
263
+ this.connected = true;
264
+ });
265
+ }
266
+ return this.connectPromise;
267
+ }
268
+ }
269
+ exports.HttpServer = HttpServer;
270
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":";;;;;;AAEA,gDAAwB;AACxB,kDAA0B;AAE1B,4EAAkF;AAClF,0FAAmG;AACnG,wEAAmE;AAEnE,qCAAkC;AAClC,mEAAkC;AAClC,2CAAuC;AACvC,+CAA2C;AAC3C,mDAA+C;AAC/C,6CAAmD;AAwBnD,MAAa,UAAU;IACb,GAAG,CAAU;IACb,MAAM,CAA8B;IACpC,OAAO,CAAc;IACrB,OAAO,CAA4B;IACnC,KAAK,CAAW;IAChB,OAAO,CAAa;IACpB,SAAS,CAAe;IACxB,SAAS,CAAS;IAClB,SAAS,CAAgC;IACjD,8EAA8E;IACtE,cAAc,GAAG,IAAI,GAAG,EAA2C,CAAC;IACpE,SAAS,GAAG,KAAK,CAAC;IAClB,cAAc,CAAiB;IAEvC,YAAY,OAAoB,EAAE,UAA6B,EAAE;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACjC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC;QAEF,2DAA2D;QAC3D,IAAI,CAAC,GAAG,GAAG,IAAA,gCAAmB,EAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW;YACtC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;QAEH,oCAAoC;QACpC,iFAAiF;QACjF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,yBAAyB;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,wBAAU,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,OAAc,CAAC,CAAC;QAEvD,iDAAiD;QACjD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAM,CAAC;YAC1B,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,sBAAG,CAAC,OAAO;SACrB,EAAE;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;aACd;SACF,CAAC,CAAC;QAEH,IAAA,gCAAmB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;YAC5E,WAAW,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;gBACrC,IAAI,SAAS;oBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;gBACvB,IAAI,CAAC,SAAS;oBAAE,OAAO;gBACvB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACtC,+DAA+D;gBAC/D,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,IAAI,iDAA6B,CAAC;YACjD,oGAAoG;YACpG,kBAAkB,EAAE,SAAS;SAC9B,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3B,wBAAwB;QACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IACO,mBAAmB,CAAC,MAAe,IAAI,CAAC,GAAG;QACjD,GAAG,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACrE,IAAI,GAAG,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACrC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC;YAC9E,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAIO,iBAAiB;QACvB,qCAAqC;QACrC,6BAA6B;QAC7B,4CAA4C;QAE5C,mFAAmF;QAEnF,gGAAgG;QAEhG,oEAAoE;QACpE,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;gBAC/D,MAAM,SAAS,GAAI,GAAG,CAAC,OAAO,CAAC,MAA6B,IAAK,GAAG,CAAC,OAAO,CAAC,OAA8B,CAAC;gBAC5G,IAAI,CAAC,SAAS;oBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;gBAEhF,IAAI,gBAAgB,GAAG,SAAS,CAAC;gBACjC,IAAI,CAAC;oBACH,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,mCAAmC;gBACrC,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC7D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;gBAC/D,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,IAAI,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC1E,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC1E,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;YACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;gBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,SAAS,CAAC;gBAC9E,MAAM,WAAW,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACnC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;gBACpE,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;oBACzB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtB,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;IAEH,CAAC;IAID,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEO,WAAW,CAAC,GAAY;QAC9B,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC7B,4EAA4E;gBAC5E,iCAAiC;gBACjC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAU,EAAE,GAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,wBAAwB;QACxB,uBAAuB;QACvB,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACnC,iBAAiB;QACjB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClC,8BAA8B;QAC9B,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAErC,mBAAmB;QACnB,yBAAyB;QACzB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClC,+BAA+B;QAC/B,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAExC,4CAA4C;QAC5C,mDAAmD;QACnD,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YACtD,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAC9F,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,qCAAqC;IACrC,uBAAuB,CAAC,EAAU,EAAE,UAA2B;QAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;wBACrB,OAAO,eAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzD,CAAC;oBACD,OAAO,cAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC;gBAEF,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;oBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;oBACrD,eAAM,CAAC,IAAI,CAAC,4BAA4B,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBAEhG,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;wBACpC,eAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;oBAEH,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;oBACnC,eAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,eAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzB,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AAjRD,gCAiRC"}
@@ -0,0 +1,6 @@
1
+ export { MCPServer } from './mcp-server';
2
+ export { MCPTools } from './mcp-tools';
3
+ export { GitHubAdapter } from './github-adapter';
4
+ export * from './types';
5
+ export { logger } from './logger';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.logger = exports.GitHubAdapter = exports.MCPTools = exports.MCPServer = void 0;
18
+ var mcp_server_1 = require("./mcp-server");
19
+ Object.defineProperty(exports, "MCPServer", { enumerable: true, get: function () { return mcp_server_1.MCPServer; } });
20
+ var mcp_tools_1 = require("./mcp-tools");
21
+ Object.defineProperty(exports, "MCPTools", { enumerable: true, get: function () { return mcp_tools_1.MCPTools; } });
22
+ var github_adapter_1 = require("./github-adapter");
23
+ Object.defineProperty(exports, "GitHubAdapter", { enumerable: true, get: function () { return github_adapter_1.GitHubAdapter; } });
24
+ __exportStar(require("./types"), exports);
25
+ var logger_1 = require("./logger");
26
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAClB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,0CAAwB;AACxB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,3 @@
1
+ import winston from 'winston';
2
+ export declare const logger: winston.Logger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,eAAO,MAAM,MAAM,gBAiBjB,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = void 0;
7
+ const winston_1 = __importDefault(require("winston"));
8
+ exports.logger = winston_1.default.createLogger({
9
+ level: process.env.LOG_LEVEL || 'info',
10
+ format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()),
11
+ defaultMeta: { service: 'awesome-copilot-mcp' },
12
+ transports: [
13
+ new winston_1.default.transports.Console({
14
+ stderrLevels: ['error', 'warn', 'info', 'http', 'verbose', 'debug', 'silly'],
15
+ consoleWarnLevels: ['warn'],
16
+ format: winston_1.default.format.combine(winston_1.default.format.simple())
17
+ })
18
+ ]
19
+ });
20
+ // Add file transport in production
21
+ if (process.env.NODE_ENV === 'production') {
22
+ exports.logger.add(new winston_1.default.transports.File({ filename: 'error.log', level: 'error' }));
23
+ exports.logger.add(new winston_1.default.transports.File({ filename: 'combined.log' }));
24
+ }
25
+ //# sourceMappingURL=logger.js.map