aem-live-docs-mcp 1.0.0

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/dist/index.js ADDED
@@ -0,0 +1,606 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
+ import { z } from "zod";
6
+ import { createServer } from "node:http";
7
+ import { randomUUID } from "node:crypto";
8
+ import { config } from "./config.js";
9
+ import { loadIndex, searchEntries, getDocSections, getSectionSlugs, getSectionEntries, getRelatedDocs, clearCache, } from "./sitemap.js";
10
+ import { fetchPageContent, fetchRawContent, extractCodeExamples, extractPageToc, clearMemoryCache, } from "./content.js";
11
+ // ─── State ───────────────────────────────────────────────────────────────────
12
+ let docEntries = [];
13
+ let isLoaded = false;
14
+ let loadPromise = null;
15
+ const startTime = Date.now();
16
+ function preWarm() {
17
+ if (loadPromise)
18
+ return;
19
+ loadPromise = (async () => {
20
+ try {
21
+ docEntries = await loadIndex();
22
+ isLoaded = true;
23
+ console.error(`Pre-warm complete: ${docEntries.length} AEM pages indexed`);
24
+ }
25
+ catch (err) {
26
+ console.error("Pre-warm failed, will retry on first tool call:", err);
27
+ loadPromise = null;
28
+ }
29
+ })();
30
+ }
31
+ async function ensureLoaded() {
32
+ if (isLoaded)
33
+ return;
34
+ if (loadPromise) {
35
+ await loadPromise;
36
+ if (isLoaded)
37
+ return;
38
+ }
39
+ docEntries = await loadIndex();
40
+ isLoaded = true;
41
+ }
42
+ // ─── Server ──────────────────────────────────────────────────────────────────
43
+ const server = new McpServer({
44
+ name: "aem-live-docs",
45
+ version: config.version,
46
+ });
47
+ // ═══════════════════════════════════════════════════════════════════════════════
48
+ // RESOURCES
49
+ // ═══════════════════════════════════════════════════════════════════════════════
50
+ server.resource("sections", "aem-docs://sections", {
51
+ description: "All AEM documentation sections (docs, developer, blog, etc.) with page counts",
52
+ mimeType: "text/plain",
53
+ }, async () => {
54
+ await ensureLoaded();
55
+ const sections = getDocSections(docEntries);
56
+ const sorted = [...sections.entries()].sort((a, b) => b[1] - a[1]);
57
+ const text = sorted
58
+ .map(([slug, count]) => {
59
+ const label = slug.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
60
+ return `${label} (${slug}) — ${count} pages`;
61
+ })
62
+ .join("\n");
63
+ return {
64
+ contents: [
65
+ {
66
+ uri: "aem-docs://sections",
67
+ text: `AEM Live Docs — ${docEntries.length} total pages\n\n${text}`,
68
+ mimeType: "text/plain",
69
+ },
70
+ ],
71
+ };
72
+ });
73
+ server.resource("stats", "aem-docs://stats", {
74
+ description: "MCP server status: version, uptime, index size",
75
+ mimeType: "application/json",
76
+ }, async () => {
77
+ await ensureLoaded();
78
+ const stats = {
79
+ version: config.version,
80
+ uptime_seconds: Math.floor((Date.now() - startTime) / 1000),
81
+ total_pages_indexed: docEntries.length,
82
+ sections: getDocSections(docEntries).size,
83
+ loaded: isLoaded,
84
+ query_index_url: config.queryIndexUrl,
85
+ };
86
+ return {
87
+ contents: [
88
+ {
89
+ uri: "aem-docs://stats",
90
+ text: JSON.stringify(stats, null, 2),
91
+ mimeType: "application/json",
92
+ },
93
+ ],
94
+ };
95
+ });
96
+ server.resource("section-docs", new ResourceTemplate("aem-docs://docs/{section}", {
97
+ list: async () => {
98
+ await ensureLoaded();
99
+ return {
100
+ resources: getSectionSlugs(docEntries).map((slug) => ({
101
+ uri: `aem-docs://docs/${slug}`,
102
+ name: slug.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()),
103
+ description: `Browse AEM ${slug} documentation`,
104
+ mimeType: "text/plain",
105
+ })),
106
+ };
107
+ },
108
+ complete: {
109
+ section: async (value) => {
110
+ await ensureLoaded();
111
+ const slugs = getSectionSlugs(docEntries);
112
+ return value ? slugs.filter((s) => s.startsWith(value.toLowerCase())) : slugs;
113
+ },
114
+ },
115
+ }), {
116
+ description: "Browse AEM documentation pages within a section",
117
+ mimeType: "text/plain",
118
+ }, async (uri, variables) => {
119
+ await ensureLoaded();
120
+ const section = variables.section;
121
+ const entries = getSectionEntries(docEntries, section);
122
+ if (entries.length === 0) {
123
+ return {
124
+ contents: [
125
+ {
126
+ uri: uri.href,
127
+ text: `No pages found for section "${section}".`,
128
+ mimeType: "text/plain",
129
+ },
130
+ ],
131
+ };
132
+ }
133
+ const text = entries
134
+ .map((e) => `- ${e.title}\n ${e.url}${e.description ? `\n ${e.description.slice(0, 100)}` : ""}`)
135
+ .join("\n");
136
+ return {
137
+ contents: [
138
+ {
139
+ uri: uri.href,
140
+ text: `${section} — ${entries.length} pages:\n\n${text}`,
141
+ mimeType: "text/plain",
142
+ },
143
+ ],
144
+ };
145
+ });
146
+ // ═══════════════════════════════════════════════════════════════════════════════
147
+ // PROMPTS
148
+ // ═══════════════════════════════════════════════════════════════════════════════
149
+ server.prompt("aem-site-setup", "Step-by-step guide to set up a new AEM site from scratch using the official docs", {
150
+ content_source: z
151
+ .string()
152
+ .describe("Where content will be authored: 'google-drive', 'sharepoint', or 'aem-authoring' (Universal Editor)"),
153
+ cdn: z
154
+ .string()
155
+ .optional()
156
+ .describe("CDN to use (e.g., 'cloudflare', 'fastly', 'akamai', 'cloudfront', 'adobe-managed')"),
157
+ }, ({ content_source, cdn }) => ({
158
+ messages: [
159
+ {
160
+ role: "user",
161
+ content: {
162
+ type: "text",
163
+ text: [
164
+ `Help me set up a new AEM (Adobe Experience Manager) site from scratch.`,
165
+ "",
166
+ `- **Content source:** ${content_source}`,
167
+ cdn ? `- **CDN:** ${cdn}` : "",
168
+ "",
169
+ "1. Use `search_aem_docs` to find the Developer Tutorial and setup guide for the chosen content source.",
170
+ "2. Fetch the getting-started pages with `get_aem_doc_content`.",
171
+ "3. Fetch CDN setup docs if a CDN was specified.",
172
+ "4. Provide: **Step-by-step setup instructions**, **GitHub repo structure**, **content source connection steps**, **CDN config** (if applicable), and **go-live checklist**.",
173
+ "5. Cite all source documentation links from aem.live.",
174
+ ]
175
+ .filter(Boolean)
176
+ .join("\n"),
177
+ },
178
+ },
179
+ ],
180
+ }));
181
+ server.prompt("aem-block-creator", "Design and scaffold an AEM block (component) using official block collection patterns", {
182
+ block_name: z.string().describe("Name of the block (e.g., 'hero', 'card-list', 'accordion')"),
183
+ purpose: z.string().describe("What the block should do / display"),
184
+ }, ({ block_name, purpose }) => ({
185
+ messages: [
186
+ {
187
+ role: "user",
188
+ content: {
189
+ type: "text",
190
+ text: [
191
+ `Help me create an AEM block called "${block_name}".`,
192
+ "",
193
+ `**Purpose:** ${purpose}`,
194
+ "",
195
+ "1. Use `search_aem_docs` (section: `developer`) to find block anatomy, markup patterns, and the Block Collection reference.",
196
+ "2. Fetch the most relevant pages with `get_aem_doc_content` and code examples with `get_aem_code_examples`.",
197
+ "3. Generate: **Block folder structure**, **`${block_name}.js`** JavaScript, **`${block_name}.css`** styles, **Word/Google Doc table markup** authors should use, and **auto-blocking config** if applicable.",
198
+ "4. Cite all source documentation links.",
199
+ ].join("\n"),
200
+ },
201
+ },
202
+ ],
203
+ }));
204
+ server.prompt("aem-performance-guide", "Achieve a Lighthouse score of 100 for an AEM site", {
205
+ issue: z
206
+ .string()
207
+ .optional()
208
+ .describe("Specific performance issue to address (e.g., 'LCP', 'CLS', 'slow JS', 'images')"),
209
+ }, ({ issue }) => ({
210
+ messages: [
211
+ {
212
+ role: "user",
213
+ content: {
214
+ type: "text",
215
+ text: [
216
+ `Help me achieve a Lighthouse score of 100 for my AEM site.`,
217
+ issue ? `\n**Specific issue to address:** ${issue}` : "",
218
+ "",
219
+ "1. Use `search_aem_docs` to find the 'Keeping it 100' guide and any performance-related pages.",
220
+ "2. Fetch the performance guides with `get_aem_doc_content`.",
221
+ "3. Provide: **Root causes** for the issue (if specified), **concrete fixes with code snippets**, **image optimization tips**, **font loading best practices**, **lazy loading patterns**, and **verification steps**.",
222
+ "4. Cite all source documentation links.",
223
+ ]
224
+ .filter(Boolean)
225
+ .join("\n"),
226
+ },
227
+ },
228
+ ],
229
+ }));
230
+ server.prompt("aem-cdn-setup", "Configure a CDN to deliver an AEM site in production", {
231
+ cdn_provider: z
232
+ .string()
233
+ .describe("CDN provider: 'cloudflare', 'fastly', 'akamai', 'cloudfront', or 'adobe-managed'"),
234
+ push_invalidation: z
235
+ .boolean()
236
+ .optional()
237
+ .describe("Whether to also configure push invalidation"),
238
+ }, ({ cdn_provider, push_invalidation }) => ({
239
+ messages: [
240
+ {
241
+ role: "user",
242
+ content: {
243
+ type: "text",
244
+ text: [
245
+ `Help me configure ${cdn_provider} to deliver my AEM site.`,
246
+ push_invalidation ? "\nAlso include push invalidation setup." : "",
247
+ "",
248
+ `1. Use \`search_aem_docs\` with query "${cdn_provider} setup" in section \`docs\` to find the CDN configuration guide.`,
249
+ "2. If push invalidation is requested, also search for push invalidation docs for this CDN.",
250
+ "3. Fetch the relevant pages with `get_aem_doc_content`.",
251
+ "4. Provide: **Step-by-step CDN configuration**, **required DNS settings**, **origin configuration**, **push invalidation setup** (if requested), and **verification steps**.",
252
+ "5. Cite all source documentation links.",
253
+ ]
254
+ .filter(Boolean)
255
+ .join("\n"),
256
+ },
257
+ },
258
+ ],
259
+ }));
260
+ // ═══════════════════════════════════════════════════════════════════════════════
261
+ // TOOLS
262
+ // ═══════════════════════════════════════════════════════════════════════════════
263
+ server.tool("search_aem_docs", "Search Adobe Experience Manager (AEM) documentation at aem.live. Returns pages ranked by BM25 relevance with description snippets. Covers developer guides, authoring, CDN setup, blocks, Edge Delivery Services, Sidekick, performance, and more.", {
264
+ query: z
265
+ .string()
266
+ .describe("Search keywords (e.g., 'block collection', 'sidekick publish', 'lighthouse 100', 'cloudflare setup', 'google drive authoring')"),
267
+ limit: z
268
+ .number()
269
+ .min(1)
270
+ .max(50)
271
+ .default(15)
272
+ .describe("Max results (default: 15)"),
273
+ section: z
274
+ .string()
275
+ .optional()
276
+ .describe("Filter by section: 'docs' (main guides), 'developer' (dev guides), 'blog' (blog posts), 'business', 'community'"),
277
+ }, async ({ query, limit, section }) => {
278
+ try {
279
+ await ensureLoaded();
280
+ const pool = section ? getSectionEntries(docEntries, section) : docEntries;
281
+ const results = searchEntries(pool, query, limit);
282
+ if (results.length === 0) {
283
+ return {
284
+ content: [
285
+ {
286
+ type: "text",
287
+ text: `No results for "${query}"${section ? ` in section "${section}"` : ""}. Try broader keywords or remove the section filter.`,
288
+ },
289
+ ],
290
+ };
291
+ }
292
+ const formatted = results
293
+ .map((r, i) => `${i + 1}. **${r.entry.title}** [${r.entry.section}]\n URL: ${r.entry.url}\n ${r.snippet}\n Updated: ${r.entry.lastmod}${r.entry.deprecation ? `\n ⚠️ Deprecated: ${r.entry.deprecation}` : ""}${r.entry.labs ? `\n 🧪 Labs: ${r.entry.labs}` : ""}`)
294
+ .join("\n\n");
295
+ return {
296
+ content: [
297
+ {
298
+ type: "text",
299
+ text: `Found ${results.length} results for "${query}":\n\n${formatted}\n\nUse \`get_aem_doc_content\` with a URL to read the full page.`,
300
+ },
301
+ ],
302
+ };
303
+ }
304
+ catch (err) {
305
+ return {
306
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
307
+ isError: true,
308
+ };
309
+ }
310
+ });
311
+ server.tool("get_aem_doc_content", "Fetch the full content of an AEM documentation page as clean markdown. Reads the page's native .md file directly from aem.live for accurate, up-to-date content.", {
312
+ url: z.string().url().describe("Full URL of the AEM documentation page (e.g., https://www.aem.live/docs/faq)"),
313
+ }, async ({ url }) => {
314
+ try {
315
+ const content = await fetchPageContent(url);
316
+ return { content: [{ type: "text", text: content }] };
317
+ }
318
+ catch (err) {
319
+ return {
320
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
321
+ isError: true,
322
+ };
323
+ }
324
+ });
325
+ server.tool("list_aem_doc_sections", "List all AEM documentation sections with page counts. Use section slugs as the 'section' parameter in search_aem_docs.", {}, async () => {
326
+ try {
327
+ await ensureLoaded();
328
+ const sections = getDocSections(docEntries);
329
+ const sorted = [...sections.entries()].sort((a, b) => b[1] - a[1]);
330
+ const formatted = sorted
331
+ .map(([slug, count]) => {
332
+ const label = slug.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
333
+ return `- **${label}** (\`${slug}\`) — ${count} pages`;
334
+ })
335
+ .join("\n");
336
+ return {
337
+ content: [
338
+ {
339
+ type: "text",
340
+ text: `AEM Live Documentation (${docEntries.length} pages total):\n\n${formatted}\n\nUse the slug with \`search_aem_docs\` section parameter.`,
341
+ },
342
+ ],
343
+ };
344
+ }
345
+ catch (err) {
346
+ return {
347
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
348
+ isError: true,
349
+ };
350
+ }
351
+ });
352
+ server.tool("get_aem_page_toc", "Get the table of contents (heading hierarchy) of an AEM documentation page. Useful for understanding the structure before fetching the full content.", {
353
+ url: z.string().url().describe("Full URL of the AEM documentation page"),
354
+ }, async ({ url }) => {
355
+ try {
356
+ const raw = await fetchRawContent(url);
357
+ const toc = extractPageToc(raw);
358
+ if (toc.length === 0) {
359
+ return {
360
+ content: [{ type: "text", text: `No headings found on ${url}.` }],
361
+ };
362
+ }
363
+ const formatted = toc.map((h) => `${" ".repeat(h.level - 1)}- ${h.title}`).join("\n");
364
+ return {
365
+ content: [{ type: "text", text: `Table of Contents — ${url}:\n\n${formatted}` }],
366
+ };
367
+ }
368
+ catch (err) {
369
+ return {
370
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
371
+ isError: true,
372
+ };
373
+ }
374
+ });
375
+ server.tool("get_aem_code_examples", "Extract only code examples from an AEM documentation page. Returns fenced code blocks without prose — token-efficient when you only need snippets (JS, CSS, HTML, YAML, etc.).", {
376
+ url: z.string().url().describe("Full URL of the AEM documentation page"),
377
+ }, async ({ url }) => {
378
+ try {
379
+ const raw = await fetchRawContent(url);
380
+ const examples = extractCodeExamples(raw);
381
+ if (examples.length === 0) {
382
+ return {
383
+ content: [{ type: "text", text: `No code examples found on ${url}.` }],
384
+ };
385
+ }
386
+ const formatted = examples
387
+ .map((ex, i) => `### Example ${i + 1}${ex.language !== "text" ? ` (${ex.language})` : ""}\n\`\`\`${ex.language}\n${ex.code}\n\`\`\``)
388
+ .join("\n\n");
389
+ return {
390
+ content: [{ type: "text", text: `${examples.length} code example(s) from ${url}:\n\n${formatted}` }],
391
+ };
392
+ }
393
+ catch (err) {
394
+ return {
395
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
396
+ isError: true,
397
+ };
398
+ }
399
+ });
400
+ server.tool("get_related_aem_docs", "Find sibling/related AEM documentation pages for a given page URL (pages in the same folder of the doc tree).", {
401
+ url: z.string().url().describe("Full URL of the AEM documentation page"),
402
+ limit: z
403
+ .number()
404
+ .min(1)
405
+ .max(30)
406
+ .default(10)
407
+ .describe("Max related pages (default: 10)"),
408
+ }, async ({ url, limit }) => {
409
+ try {
410
+ await ensureLoaded();
411
+ const related = getRelatedDocs(docEntries, url, limit);
412
+ if (related.length === 0) {
413
+ return {
414
+ content: [{ type: "text", text: `No related pages found for ${url}.` }],
415
+ };
416
+ }
417
+ const formatted = related
418
+ .map((r, i) => `${i + 1}. **${r.title}**\n ${r.url}\n ${r.description.slice(0, 100)}`)
419
+ .join("\n\n");
420
+ return {
421
+ content: [{ type: "text", text: `${related.length} related pages:\n\n${formatted}` }],
422
+ };
423
+ }
424
+ catch (err) {
425
+ return {
426
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
427
+ isError: true,
428
+ };
429
+ }
430
+ });
431
+ server.tool("refresh_aem_index", "Force-refresh the cached page index from aem.live query-index.json.", {}, async () => {
432
+ try {
433
+ isLoaded = false;
434
+ loadPromise = null;
435
+ docEntries = [];
436
+ clearMemoryCache();
437
+ await clearCache();
438
+ await ensureLoaded();
439
+ return {
440
+ content: [
441
+ { type: "text", text: `Index refreshed. ${docEntries.length} AEM pages indexed.` },
442
+ ],
443
+ };
444
+ }
445
+ catch (err) {
446
+ return {
447
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
448
+ isError: true,
449
+ };
450
+ }
451
+ });
452
+ server.tool("lookup_aem_topic", "Look up an AEM topic, feature name, or concept (e.g., 'sidekick', 'block collection', 'push invalidation', 'repoless'). Auto-fetches the top result for an immediate answer.", {
453
+ topic: z
454
+ .string()
455
+ .describe("AEM topic, feature, or concept to look up (e.g., 'sidekick', 'block collection', 'push invalidation', 'repoless', 'experimentation')"),
456
+ section: z
457
+ .string()
458
+ .optional()
459
+ .describe("Optional section to scope the lookup: 'docs', 'developer', 'blog'"),
460
+ }, async ({ topic, section }) => {
461
+ try {
462
+ await ensureLoaded();
463
+ const pool = section ? getSectionEntries(docEntries, section) : docEntries;
464
+ let results = searchEntries(pool, topic, 5);
465
+ if (results.length === 0 && section) {
466
+ results = searchEntries(docEntries, topic, 5);
467
+ }
468
+ if (results.length === 0) {
469
+ return {
470
+ content: [
471
+ {
472
+ type: "text",
473
+ text: `No documentation found for "${topic}". Try different keywords or remove the section filter.`,
474
+ },
475
+ ],
476
+ };
477
+ }
478
+ let pageContent = "";
479
+ try {
480
+ pageContent = await fetchPageContent(results[0].entry.url);
481
+ }
482
+ catch {
483
+ // non-critical — fall back to listing
484
+ }
485
+ const others = results
486
+ .slice(1)
487
+ .map((r, i) => `${i + 2}. **${r.entry.title}**\n ${r.entry.url}`)
488
+ .join("\n\n");
489
+ const text = pageContent
490
+ ? `## ${results[0].entry.title}\n\n${pageContent}${others ? `\n\n---\n\n## Other Matches\n\n${others}` : ""}`
491
+ : results
492
+ .map((r, i) => `${i + 1}. **${r.entry.title}**\n ${r.entry.url}\n ${r.snippet}`)
493
+ .join("\n\n");
494
+ return { content: [{ type: "text", text }] };
495
+ }
496
+ catch (err) {
497
+ return {
498
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
499
+ isError: true,
500
+ };
501
+ }
502
+ });
503
+ server.tool("multi_aem_search", "Search AEM documentation with multiple queries at once. Returns de-duplicated results from all queries — reduces round-trips when researching a topic from multiple angles.", {
504
+ queries: z
505
+ .array(z.string())
506
+ .min(1)
507
+ .max(5)
508
+ .describe("Array of search queries (1–5)"),
509
+ limit_per_query: z
510
+ .number()
511
+ .min(1)
512
+ .max(20)
513
+ .default(5)
514
+ .describe("Max results per query (default: 5)"),
515
+ section: z
516
+ .string()
517
+ .optional()
518
+ .describe("Optional section filter for all queries"),
519
+ }, async ({ queries, limit_per_query, section }) => {
520
+ try {
521
+ await ensureLoaded();
522
+ const pool = section ? getSectionEntries(docEntries, section) : docEntries;
523
+ const seen = new Set();
524
+ const blocks = [];
525
+ for (const q of queries) {
526
+ const results = searchEntries(pool, q, limit_per_query);
527
+ const unique = results.filter((r) => !seen.has(r.entry.url));
528
+ unique.forEach((r) => seen.add(r.entry.url));
529
+ if (unique.length > 0) {
530
+ const list = unique
531
+ .map((r, i) => ` ${i + 1}. **${r.entry.title}**\n ${r.entry.url}\n ${r.snippet}`)
532
+ .join("\n");
533
+ blocks.push(`### "${q}" (${unique.length} results)\n\n${list}`);
534
+ }
535
+ else {
536
+ blocks.push(`### "${q}"\n\n No results.`);
537
+ }
538
+ }
539
+ return {
540
+ content: [
541
+ {
542
+ type: "text",
543
+ text: `Multi-search — ${seen.size} unique pages:\n\n${blocks.join("\n\n")}`,
544
+ },
545
+ ],
546
+ };
547
+ }
548
+ catch (err) {
549
+ return {
550
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
551
+ isError: true,
552
+ };
553
+ }
554
+ });
555
+ // ═══════════════════════════════════════════════════════════════════════════════
556
+ // TRANSPORT & MAIN
557
+ // ═══════════════════════════════════════════════════════════════════════════════
558
+ async function startHttpTransport() {
559
+ const transport = new StreamableHTTPServerTransport({
560
+ sessionIdGenerator: () => randomUUID(),
561
+ });
562
+ await server.connect(transport);
563
+ const httpServer = createServer(async (req, res) => {
564
+ res.setHeader("Access-Control-Allow-Origin", "*");
565
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
566
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, mcp-session-id");
567
+ if (req.method === "OPTIONS") {
568
+ res.writeHead(204);
569
+ res.end();
570
+ return;
571
+ }
572
+ try {
573
+ await transport.handleRequest(req, res);
574
+ }
575
+ catch (err) {
576
+ console.error("HTTP error:", err);
577
+ if (!res.headersSent) {
578
+ res.writeHead(500);
579
+ res.end("Internal Server Error");
580
+ }
581
+ }
582
+ });
583
+ httpServer.listen(config.httpPort, () => {
584
+ console.error(`AEM Live Docs MCP running on http://localhost:${config.httpPort}`);
585
+ });
586
+ }
587
+ async function startStdioTransport() {
588
+ const transport = new StdioServerTransport();
589
+ await server.connect(transport);
590
+ console.error("AEM Live Docs MCP server running on stdio");
591
+ }
592
+ async function main() {
593
+ const useHttp = process.argv.includes("--http");
594
+ if (useHttp) {
595
+ await startHttpTransport();
596
+ }
597
+ else {
598
+ await startStdioTransport();
599
+ }
600
+ preWarm();
601
+ }
602
+ main().catch((err) => {
603
+ console.error("Fatal error:", err);
604
+ process.exit(1);
605
+ });
606
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}