@jaypie/mcp 0.2.12 → 0.3.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/README.md +62 -0
- package/dist/aws.d.ts +197 -0
- package/dist/index.js +1179 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/prompts/Jaypie_CICD_with_GitHub_Actions.md +141 -14
- package/prompts/Jaypie_Init_CICD_with_GitHub_Actions.md +143 -96
- package/prompts/Jaypie_MCP_Package.md +249 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/datadog.ts","../src/llm.ts","../src/createMcpServer.ts","../src/mcpExpressHandler.ts","../src/index.ts"],"sourcesContent":["/**\n * Datadog API integration module\n */\nimport * as https from \"node:https\";\n\nexport interface DatadogCredentials {\n apiKey: string;\n appKey: string;\n}\n\nexport interface DatadogSearchOptions {\n query?: string;\n source?: string;\n env?: string;\n service?: string;\n from?: string;\n to?: string;\n limit?: number;\n sort?: \"timestamp\" | \"-timestamp\";\n}\n\nexport interface DatadogAnalyticsOptions {\n query?: string;\n source?: string;\n env?: string;\n service?: string;\n from?: string;\n to?: string;\n groupBy: string[];\n compute?: Array<{\n aggregation: \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\" | \"cardinality\";\n metric?: string;\n }>;\n}\n\n// Monitors types\nexport interface DatadogMonitorsOptions {\n tags?: string[];\n monitorTags?: string[];\n name?: string;\n status?: (\"Alert\" | \"Warn\" | \"No Data\" | \"OK\")[];\n}\n\nexport interface DatadogMonitor {\n id: number;\n name: string;\n type: string;\n status: string;\n message?: string;\n tags: string[];\n priority?: number;\n query?: string;\n overallState?: string;\n}\n\nexport interface DatadogMonitorsResult {\n success: boolean;\n monitors: DatadogMonitor[];\n error?: string;\n}\n\n// Synthetics types\nexport interface DatadogSyntheticsOptions {\n tags?: string[];\n type?: \"api\" | \"browser\";\n}\n\nexport interface DatadogSyntheticTest {\n publicId: string;\n name: string;\n type: string;\n status: string;\n tags: string[];\n locations: string[];\n message?: string;\n}\n\nexport interface DatadogSyntheticResult {\n publicId: string;\n resultId: string;\n status: number;\n checkTime: number;\n passed: boolean;\n location?: string;\n}\n\nexport interface DatadogSyntheticsResult {\n success: boolean;\n tests: DatadogSyntheticTest[];\n error?: string;\n}\n\nexport interface DatadogSyntheticResultsResult {\n success: boolean;\n publicId: string;\n results: DatadogSyntheticResult[];\n error?: string;\n}\n\n// Metrics types\nexport interface DatadogMetricsOptions {\n query: string;\n from: number;\n to: number;\n}\n\nexport interface DatadogMetricSeries {\n metric: string;\n scope: string;\n pointlist: Array<[number, number | null]>;\n unit?: string;\n}\n\nexport interface DatadogMetricsResult {\n success: boolean;\n query: string;\n timeRange: { from: number; to: number };\n series: DatadogMetricSeries[];\n error?: string;\n}\n\n// RUM types\nexport interface DatadogRumOptions {\n query?: string;\n from?: string;\n to?: string;\n limit?: number;\n sort?: \"timestamp\" | \"-timestamp\";\n}\n\nexport interface DatadogRumEvent {\n id: string;\n type: string;\n timestamp?: string;\n sessionId?: string;\n viewUrl?: string;\n viewName?: string;\n errorMessage?: string;\n errorType?: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface DatadogRumResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n events: DatadogRumEvent[];\n error?: string;\n}\n\nexport interface DatadogLogEntry {\n id: string;\n timestamp?: string;\n status?: string;\n service?: string;\n message?: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface DatadogSearchResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n logs: DatadogLogEntry[];\n error?: string;\n}\n\nexport interface DatadogAnalyticsBucket {\n by: Record<string, string>;\n computes: Record<string, number>;\n}\n\nexport interface DatadogAnalyticsResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n groupBy: string[];\n buckets: DatadogAnalyticsBucket[];\n error?: string;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nconst nullLogger: Logger = {\n info: () => {},\n error: () => {},\n};\n\n/**\n * Get Datadog credentials from environment variables\n */\nexport function getDatadogCredentials(): DatadogCredentials | null {\n const apiKey = process.env.DATADOG_API_KEY || process.env.DD_API_KEY;\n const appKey =\n process.env.DATADOG_APP_KEY ||\n process.env.DATADOG_APPLICATION_KEY ||\n process.env.DD_APP_KEY ||\n process.env.DD_APPLICATION_KEY;\n\n if (!apiKey || !appKey) {\n return null;\n }\n\n return { apiKey, appKey };\n}\n\n/**\n * Validate Datadog API credentials\n */\nexport async function validateDatadogCredentials(\n credentials: DatadogCredentials,\n): Promise<{ valid: boolean; error?: string }> {\n return new Promise((resolve) => {\n const options = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v1/validate\",\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(options, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n if (res.statusCode === 200) {\n resolve({ valid: true });\n } else {\n resolve({\n valid: false,\n error: `Datadog API returned status ${res.statusCode}: ${data}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n resolve({ valid: false, error: error.message });\n });\n\n req.end();\n });\n}\n\n/**\n * Build query string from environment variables and options\n */\nexport function buildDatadogQuery(options: DatadogSearchOptions): string {\n const ddEnv = process.env.DD_ENV;\n const ddService = process.env.DD_SERVICE;\n const ddSource = process.env.DD_SOURCE;\n const ddQuery = process.env.DD_QUERY;\n\n const queryParts: string[] = [];\n\n // Add source (parameter > env var > default 'lambda')\n const effectiveSource = options.source || ddSource || \"lambda\";\n queryParts.push(`source:${effectiveSource}`);\n\n // Add env (parameter > env var)\n const effectiveEnv = options.env || ddEnv;\n if (effectiveEnv) {\n queryParts.push(`env:${effectiveEnv}`);\n }\n\n // Add service (parameter > env var)\n const effectiveService = options.service || ddService;\n if (effectiveService) {\n queryParts.push(`service:${effectiveService}`);\n }\n\n // Add base query from DD_QUERY if available\n if (ddQuery) {\n queryParts.push(ddQuery);\n }\n\n // Add user-provided query terms\n if (options.query) {\n queryParts.push(options.query);\n }\n\n return queryParts.join(\" \");\n}\n\n/**\n * Search Datadog logs\n */\nexport async function searchDatadogLogs(\n credentials: DatadogCredentials,\n options: DatadogSearchOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogSearchResult> {\n const effectiveQuery = buildDatadogQuery(options);\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const effectiveLimit = Math.min(options.limit || 50, 1000);\n const effectiveSort = options.sort || \"-timestamp\";\n\n logger.info(`Effective query: ${effectiveQuery}`);\n logger.info(\n `Search params: from=${effectiveFrom}, to=${effectiveTo}, limit=${effectiveLimit}, sort=${effectiveSort}`,\n );\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n page: {\n limit: effectiveLimit,\n },\n sort: effectiveSort,\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/logs/events/search\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid query syntax. Check your query: \"${effectiveQuery}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have logs_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: Array<{\n id: string;\n attributes?: {\n timestamp?: string;\n status?: string;\n service?: string;\n message?: string;\n attributes?: Record<string, unknown>;\n };\n }>;\n };\n\n const logs = (response.data || []).map((log) => {\n const attrs = log.attributes || {};\n return {\n id: log.id,\n timestamp: attrs.timestamp,\n status: attrs.status,\n service: attrs.service,\n message: attrs.message,\n attributes: attrs.attributes,\n };\n });\n\n logger.info(`Retrieved ${logs.length} log entries`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog response:\", parseError);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n\n/**\n * Aggregate Datadog logs using the Analytics API\n * Groups logs by specified fields and computes aggregations\n */\nexport async function aggregateDatadogLogs(\n credentials: DatadogCredentials,\n options: DatadogAnalyticsOptions,\n logger: Logger = nullLogger,\n): Promise<DatadogAnalyticsResult> {\n const effectiveQuery = buildDatadogQuery(options);\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const groupBy = options.groupBy;\n const compute = options.compute || [{ aggregation: \"count\" as const }];\n\n logger.info(`Analytics query: ${effectiveQuery}`);\n logger.info(`Group by: ${groupBy.join(\", \")}`);\n logger.info(`Time range: ${effectiveFrom} to ${effectiveTo}`);\n\n // Build compute array - each item needs aggregation and type\n const computeItems = compute.map((c) => {\n const item: {\n aggregation: string;\n type: string;\n metric?: string;\n } = {\n aggregation: c.aggregation,\n type: \"total\",\n };\n if (c.metric) {\n item.metric = c.metric;\n }\n return item;\n });\n\n // Build group_by with proper sort configuration\n const groupByItems = groupBy.map((field) => {\n const item: {\n facet: string;\n limit: number;\n sort: {\n type: string;\n order: string;\n aggregation?: string;\n };\n } = {\n facet: field,\n limit: 100,\n sort: {\n type: \"measure\",\n order: \"desc\",\n aggregation: compute[0]?.aggregation || \"count\",\n },\n };\n return item;\n });\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n group_by: groupByItems,\n compute: computeItems,\n page: {\n limit: 100,\n },\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/logs/analytics/aggregate\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Analytics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid query or groupBy fields. Verify facet names exist: ${groupBy.join(\", \")}. Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have logs_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: {\n buckets?: Array<{\n by?: Record<string, string>;\n computes?: Record<string, number>;\n }>;\n };\n };\n\n const buckets = (response.data?.buckets || []).map((bucket) => ({\n by: bucket.by || {},\n computes: bucket.computes || {},\n }));\n\n logger.info(`Retrieved ${buckets.length} aggregation buckets`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog analytics response:\",\n parseError,\n );\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n\n/**\n * List Datadog monitors with optional filtering\n */\nexport async function listDatadogMonitors(\n credentials: DatadogCredentials,\n options: DatadogMonitorsOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogMonitorsResult> {\n logger.info(\"Fetching Datadog monitors\");\n\n const queryParams = new URLSearchParams();\n\n if (options.tags && options.tags.length > 0) {\n queryParams.set(\"tags\", options.tags.join(\",\"));\n }\n if (options.monitorTags && options.monitorTags.length > 0) {\n queryParams.set(\"monitor_tags\", options.monitorTags.join(\",\"));\n }\n if (options.name) {\n queryParams.set(\"name\", options.name);\n }\n\n const queryString = queryParams.toString();\n const path = `/api/v1/monitor${queryString ? `?${queryString}` : \"\"}`;\n\n logger.info(`Request path: ${path}`);\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Monitors API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have monitors_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n monitors: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as Array<{\n id: number;\n name: string;\n type: string;\n overall_state?: string;\n message?: string;\n tags?: string[];\n priority?: number;\n query?: string;\n }>;\n\n let monitors = response.map((monitor) => ({\n id: monitor.id,\n name: monitor.name,\n type: monitor.type,\n status: monitor.overall_state || \"Unknown\",\n message: monitor.message,\n tags: monitor.tags || [],\n priority: monitor.priority,\n query: monitor.query,\n overallState: monitor.overall_state,\n }));\n\n // Filter by status if specified\n if (options.status && options.status.length > 0) {\n monitors = monitors.filter((m) =>\n options.status!.includes(\n m.status as \"Alert\" | \"Warn\" | \"No Data\" | \"OK\",\n ),\n );\n }\n\n logger.info(`Retrieved ${monitors.length} monitors`);\n\n resolve({\n success: true,\n monitors,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog monitors response:\",\n parseError,\n );\n resolve({\n success: false,\n monitors: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n monitors: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * List Datadog Synthetic tests\n */\nexport async function listDatadogSynthetics(\n credentials: DatadogCredentials,\n options: DatadogSyntheticsOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogSyntheticsResult> {\n logger.info(\"Fetching Datadog Synthetic tests\");\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v1/synthetics/tests\",\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Synthetics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have synthetics_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n tests: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n tests?: Array<{\n public_id: string;\n name: string;\n type: string;\n status: string;\n tags?: string[];\n locations?: string[];\n message?: string;\n }>;\n };\n\n let tests = (response.tests || []).map((test) => ({\n publicId: test.public_id,\n name: test.name,\n type: test.type,\n status: test.status,\n tags: test.tags || [],\n locations: test.locations || [],\n message: test.message,\n }));\n\n // Filter by type if specified\n if (options.type) {\n tests = tests.filter((t) => t.type === options.type);\n }\n\n // Filter by tags if specified\n if (options.tags && options.tags.length > 0) {\n tests = tests.filter((t) =>\n options.tags!.some((tag) => t.tags.includes(tag)),\n );\n }\n\n logger.info(`Retrieved ${tests.length} synthetic tests`);\n\n resolve({\n success: true,\n tests,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog synthetics response:\",\n parseError,\n );\n resolve({\n success: false,\n tests: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n tests: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Get recent results for a specific Synthetic test\n */\nexport async function getDatadogSyntheticResults(\n credentials: DatadogCredentials,\n publicId: string,\n logger: Logger = nullLogger,\n): Promise<DatadogSyntheticResultsResult> {\n logger.info(`Fetching results for Synthetic test: ${publicId}`);\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: `/api/v1/synthetics/tests/${publicId}/results`,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(\n `Datadog Synthetics Results API error: ${res.statusCode}`,\n );\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have synthetics_read permission.\";\n } else if (res.statusCode === 404) {\n errorMessage = `Synthetic test '${publicId}' not found. Use datadog_synthetics (without testId) to list available tests.`;\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n publicId,\n results: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n results?: Array<{\n result_id: string;\n status: number;\n check_time: number;\n dc_id?: number;\n result?: {\n passed?: boolean;\n };\n }>;\n };\n\n const results = (response.results || []).map((result) => ({\n publicId,\n resultId: result.result_id,\n status: result.status,\n checkTime: result.check_time,\n passed: result.result?.passed ?? result.status === 0,\n location: result.dc_id?.toString(),\n }));\n\n logger.info(`Retrieved ${results.length} synthetic results`);\n\n resolve({\n success: true,\n publicId,\n results,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog synthetic results:\",\n parseError,\n );\n resolve({\n success: false,\n publicId,\n results: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n publicId,\n results: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Query Datadog metrics\n */\nexport async function queryDatadogMetrics(\n credentials: DatadogCredentials,\n options: DatadogMetricsOptions,\n logger: Logger = nullLogger,\n): Promise<DatadogMetricsResult> {\n logger.info(`Querying metrics: ${options.query}`);\n logger.info(`Time range: ${options.from} to ${options.to}`);\n\n const queryParams = new URLSearchParams({\n query: options.query,\n from: options.from.toString(),\n to: options.to.toString(),\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: `/api/v1/query?${queryParams.toString()}`,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Metrics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid metric query. Check format: 'aggregation:metric.name{tags}'. Query: \"${options.query}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have metrics_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your time range.\";\n }\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n series?: Array<{\n metric: string;\n scope: string;\n pointlist: Array<[number, number | null]>;\n unit?: Array<{ name?: string }>;\n }>;\n };\n\n const series = (response.series || []).map((s) => ({\n metric: s.metric,\n scope: s.scope,\n pointlist: s.pointlist,\n unit: s.unit?.[0]?.name,\n }));\n\n logger.info(`Retrieved ${series.length} metric series`);\n\n resolve({\n success: true,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog metrics response:\", parseError);\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Search Datadog RUM events\n */\nexport async function searchDatadogRum(\n credentials: DatadogCredentials,\n options: DatadogRumOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogRumResult> {\n const effectiveQuery = options.query || \"*\";\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const effectiveLimit = Math.min(options.limit || 50, 1000);\n const effectiveSort = options.sort || \"-timestamp\";\n\n logger.info(`RUM query: ${effectiveQuery}`);\n logger.info(`Time range: ${effectiveFrom} to ${effectiveTo}`);\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n page: {\n limit: effectiveLimit,\n },\n sort: effectiveSort,\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/rum/events/search\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog RUM API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n // Check for specific \"No valid indexes\" error which means no RUM app is configured\n if (data.includes(\"No valid indexes\")) {\n errorMessage =\n \"No RUM application found. Ensure you have a RUM application configured in Datadog and it has collected data. \" +\n \"You can create a RUM application at https://app.datadoghq.com/rum/list\";\n } else if (res.statusCode === 400) {\n errorMessage = `Invalid RUM query. Check syntax: \"${effectiveQuery}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have rum_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: Array<{\n id: string;\n type: string;\n attributes?: {\n timestamp?: string;\n attributes?: {\n session?: { id?: string };\n view?: { url?: string; name?: string };\n error?: { message?: string; type?: string };\n [key: string]: unknown;\n };\n };\n }>;\n };\n\n const events = (response.data || []).map((event) => {\n const attrs = event.attributes?.attributes || {};\n return {\n id: event.id,\n type: event.type,\n timestamp: event.attributes?.timestamp,\n sessionId: attrs.session?.id,\n viewUrl: attrs.view?.url,\n viewName: attrs.view?.name,\n errorMessage: attrs.error?.message,\n errorType: attrs.error?.type,\n attributes: attrs,\n };\n });\n\n logger.info(`Retrieved ${events.length} RUM events`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog RUM response:\", parseError);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n","/**\n * LLM debugging utilities for inspecting raw provider responses\n */\n\nimport { Llm } from \"@jaypie/llm\";\n\nexport type LlmProvider = \"anthropic\" | \"gemini\" | \"openai\" | \"openrouter\";\n\nexport interface LlmDebugCallParams {\n provider: LlmProvider;\n model?: string;\n message: string;\n}\n\nexport interface LlmDebugCallResult {\n success: boolean;\n provider: string;\n model: string;\n content?: string;\n reasoning?: string[];\n reasoningTokens?: number;\n history?: unknown[];\n rawResponses?: unknown[];\n usage?: unknown[];\n error?: string;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\n// Default models for each provider\nconst DEFAULT_MODELS: Record<LlmProvider, string> = {\n anthropic: \"claude-sonnet-4-20250514\",\n gemini: \"gemini-2.0-flash\",\n openai: \"gpt-4o-mini\",\n openrouter: \"openai/gpt-4o-mini\",\n};\n\n// Reasoning-capable models for testing reasoning extraction\nexport const REASONING_MODELS: Record<string, string> = {\n \"openai-o3-mini\": \"o3-mini\",\n \"openai-o1-preview\": \"o1-preview\",\n \"openai-o1-mini\": \"o1-mini\",\n};\n\n/**\n * Make a debug LLM call and return the raw response data for inspection\n */\nexport async function debugLlmCall(\n params: LlmDebugCallParams,\n log: Logger,\n): Promise<LlmDebugCallResult> {\n const { provider, message } = params;\n const model = params.model || DEFAULT_MODELS[provider];\n\n log.info(`Making debug LLM call to ${provider} with model ${model}`);\n\n try {\n const llm = new Llm(provider, { model });\n\n const result = await llm.operate(message, {\n user: \"[jaypie-mcp] Debug LLM Call\",\n });\n\n if (result.error) {\n return {\n success: false,\n provider,\n model,\n error: `${result.error.title}: ${result.error.detail || \"Unknown error\"}`,\n };\n }\n\n // Calculate total reasoning tokens\n const reasoningTokens = result.usage.reduce(\n (sum, u) => sum + (u.reasoning || 0),\n 0,\n );\n\n return {\n success: true,\n provider,\n model,\n content:\n typeof result.content === \"string\"\n ? result.content\n : JSON.stringify(result.content),\n reasoning: result.reasoning,\n reasoningTokens,\n history: result.history,\n rawResponses: result.responses,\n usage: result.usage,\n };\n } catch (error) {\n log.error(`Error calling ${provider}:`, error);\n return {\n success: false,\n provider,\n model,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * List available providers and their default/reasoning models\n */\nexport function listLlmProviders(): {\n providers: Array<{\n name: LlmProvider;\n defaultModel: string;\n reasoningModels: string[];\n }>;\n} {\n return {\n providers: [\n {\n name: \"openai\",\n defaultModel: DEFAULT_MODELS.openai,\n reasoningModels: [\"o3-mini\", \"o1-preview\", \"o1-mini\"],\n },\n {\n name: \"anthropic\",\n defaultModel: DEFAULT_MODELS.anthropic,\n reasoningModels: [], // Anthropic doesn't expose reasoning the same way\n },\n {\n name: \"gemini\",\n defaultModel: DEFAULT_MODELS.gemini,\n reasoningModels: [], // Gemini has thoughtsTokenCount but unclear on content\n },\n {\n name: \"openrouter\",\n defaultModel: DEFAULT_MODELS.openrouter,\n reasoningModels: [\"openai/o3-mini\", \"openai/o1-preview\"],\n },\n ],\n };\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport matter from \"gray-matter\";\n\nimport {\n aggregateDatadogLogs,\n getDatadogCredentials,\n getDatadogSyntheticResults,\n listDatadogMonitors,\n listDatadogSynthetics,\n queryDatadogMetrics,\n searchDatadogLogs,\n searchDatadogRum,\n} from \"./datadog.js\";\nimport { debugLlmCall, listLlmProviders, type LlmProvider } from \"./llm.js\";\n\n// Build-time constants injected by rollup\ndeclare const __BUILD_VERSION_STRING__: string;\nconst BUILD_VERSION_STRING =\n typeof __BUILD_VERSION_STRING__ !== \"undefined\"\n ? __BUILD_VERSION_STRING__\n : \"@jaypie/mcp@0.0.0\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst PROMPTS_PATH = path.join(__dirname, \"..\", \"prompts\");\n\nexport interface CreateMcpServerOptions {\n version?: string;\n verbose?: boolean;\n}\n\n// Logger utility\nfunction createLogger(verbose: boolean) {\n return {\n info: (message: string, ...args: unknown[]) => {\n if (verbose) {\n console.error(`[jaypie-mcp] ${message}`, ...args);\n }\n },\n error: (message: string, ...args: unknown[]) => {\n console.error(`[jaypie-mcp ERROR] ${message}`, ...args);\n },\n };\n}\n\ninterface FrontMatter {\n description?: string;\n include?: string;\n globs?: string;\n}\n\nasync function parseMarkdownFile(filePath: string): Promise<{\n filename: string;\n description?: string;\n include?: string;\n}> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const filename = path.basename(filePath);\n\n if (content.startsWith(\"---\")) {\n const parsed = matter(content);\n const frontMatter = parsed.data as FrontMatter;\n return {\n filename,\n description: frontMatter.description,\n include: frontMatter.include || frontMatter.globs,\n };\n }\n\n return { filename };\n } catch {\n return { filename: path.basename(filePath) };\n }\n}\n\nfunction formatPromptListItem(prompt: {\n filename: string;\n description?: string;\n include?: string;\n}): string {\n const { filename, description, include } = prompt;\n\n if (description && include) {\n return `* ${filename}: ${description} - Required for ${include}`;\n } else if (description) {\n return `* ${filename}: ${description}`;\n } else if (include) {\n return `* ${filename} - Required for ${include}`;\n } else {\n return `* ${filename}`;\n }\n}\n\n/**\n * Creates and configures an MCP server instance with Jaypie tools\n * @param options - Configuration options (or legacy version string)\n * @returns Configured MCP server instance\n */\nexport function createMcpServer(\n options: CreateMcpServerOptions | string = {},\n): McpServer {\n // Support legacy signature: createMcpServer(version: string)\n const config: CreateMcpServerOptions =\n typeof options === \"string\" ? { version: options } : options;\n\n const { version = \"0.0.0\", verbose = false } = config;\n\n const log = createLogger(verbose);\n\n log.info(\"Creating MCP server instance\");\n log.info(`Prompts directory: ${PROMPTS_PATH}`);\n\n const server = new McpServer(\n {\n name: \"jaypie\",\n version,\n },\n {\n capabilities: {},\n },\n );\n\n log.info(\"Registering tools...\");\n\n server.tool(\n \"list_prompts\",\n \"List available Jaypie development prompts and guides. Use this FIRST when starting work on a Jaypie project to discover relevant documentation. Returns filenames, descriptions, and which file patterns each prompt applies to (e.g., 'Required for packages/express/**').\",\n {},\n async () => {\n log.info(\"Tool called: list_prompts\");\n log.info(`Reading directory: ${PROMPTS_PATH}`);\n\n try {\n const files = await fs.readdir(PROMPTS_PATH);\n const mdFiles = files.filter((file) => file.endsWith(\".md\"));\n\n log.info(`Found ${mdFiles.length} .md files`);\n\n const prompts = await Promise.all(\n mdFiles.map((file) =>\n parseMarkdownFile(path.join(PROMPTS_PATH, file)),\n ),\n );\n\n const formattedList = prompts.map(formatPromptListItem).join(\"\\n\");\n\n log.info(\"Successfully listed prompts\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text:\n formattedList || \"No .md files found in the prompts directory.\",\n },\n ],\n };\n } catch (error) {\n log.error(\"Error listing prompts:\", error);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error listing prompts: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n },\n );\n\n log.info(\"Registered tool: list_prompts\");\n\n server.tool(\n \"read_prompt\",\n \"Read a Jaypie prompt/guide by filename. Call list_prompts first to see available prompts. These contain best practices, templates, code patterns, and step-by-step guides for Jaypie development tasks.\",\n {\n filename: z\n .string()\n .describe(\n \"The prompt filename from list_prompts (e.g., 'Jaypie_Express_Package.md', 'Development_Process.md')\",\n ),\n },\n async ({ filename }) => {\n log.info(`Tool called: read_prompt (filename: ${filename})`);\n\n try {\n const filePath = path.join(PROMPTS_PATH, filename);\n\n log.info(`Reading file: ${filePath}`);\n\n const content = await fs.readFile(filePath, \"utf-8\");\n\n log.info(`Successfully read ${filename} (${content.length} bytes)`);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: content,\n },\n ],\n };\n } catch (error) {\n if ((error as { code?: string }).code === \"ENOENT\") {\n log.error(`File not found: ${filename}`);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: Prompt file \"${filename}\" not found in prompts directory`,\n },\n ],\n };\n }\n\n log.error(\"Error reading prompt file:\", error);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error reading prompt file: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n },\n );\n\n log.info(\"Registered tool: read_prompt\");\n\n server.tool(\n \"version\",\n `Prints the current version and hash, \\`${BUILD_VERSION_STRING}\\``,\n {},\n async () => {\n log.info(\"Tool called: version\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: BUILD_VERSION_STRING,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: version\");\n\n // Datadog Logs Tool\n server.tool(\n \"datadog_logs\",\n \"Search and retrieve individual Datadog log entries. Use this to view actual log messages and details. For aggregated counts/statistics (e.g., 'how many errors by service?'), use datadog_log_analytics instead. Requires DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n {\n query: z\n .string()\n .optional()\n .describe(\n \"Search query to filter logs. Examples: 'status:error', '@http.status_code:500', '*timeout*', '@requestId:abc123'. Combined with DD_ENV, DD_SERVICE, DD_SOURCE env vars if set.\",\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Override the log source (e.g., 'lambda', 'auth0', 'nginx'). If not provided, uses DD_SOURCE env var or defaults to 'lambda'.\",\n ),\n env: z\n .string()\n .optional()\n .describe(\n \"Override the environment (e.g., 'sandbox', 'kitchen', 'lab', 'studio', 'production'). If not provided, uses DD_ENV env var.\",\n ),\n service: z\n .string()\n .optional()\n .describe(\n \"Override the service name. If not provided, uses DD_SERVICE env var.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Max logs to return (1-1000). Defaults to 50.\"),\n sort: z\n .enum([\"timestamp\", \"-timestamp\"])\n .optional()\n .describe(\n \"Sort order: 'timestamp' (oldest first) or '-timestamp' (newest first, default).\",\n ),\n },\n async ({ query, source, env, service, from, to, limit, sort }) => {\n log.info(\"Tool called: datadog_logs\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n const missingApiKey =\n !process.env.DATADOG_API_KEY && !process.env.DD_API_KEY;\n const missingAppKey =\n !process.env.DATADOG_APP_KEY &&\n !process.env.DATADOG_APPLICATION_KEY &&\n !process.env.DD_APP_KEY &&\n !process.env.DD_APPLICATION_KEY;\n\n if (missingApiKey) {\n log.error(\"No Datadog API key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog API key found. Please set DATADOG_API_KEY or DD_API_KEY environment variable.\",\n },\n ],\n };\n }\n if (missingAppKey) {\n log.error(\"No Datadog Application key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog Application key found. Please set DATADOG_APP_KEY or DD_APP_KEY environment variable. The Logs Search API requires both an API key and an Application key.\",\n },\n ],\n };\n }\n }\n\n // credentials is guaranteed to be non-null here\n const result = await searchDatadogLogs(\n credentials!,\n {\n query,\n source,\n env,\n service,\n from,\n to,\n limit,\n sort,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.logs.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No logs found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}`,\n },\n ],\n };\n }\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Found ${result.logs.length} log entries:`,\n \"\",\n JSON.stringify(result.logs, null, 2),\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_logs\");\n\n // Datadog Log Analytics Tool\n server.tool(\n \"datadog_log_analytics\",\n \"Aggregate and analyze Datadog logs by grouping them by fields. Use this for statistics and counts (e.g., 'errors by service', 'requests by status code'). For viewing individual log entries, use datadog_logs instead.\",\n {\n groupBy: z\n .array(z.string())\n .describe(\n \"Fields to group by. Examples: ['source'], ['service', 'status'], ['@http.status_code']. Common facets: source, service, status, host, @http.status_code, @env.\",\n ),\n query: z\n .string()\n .optional()\n .describe(\n \"Filter query. Examples: 'status:error', '*timeout*', '@http.method:POST'. Use '*' for all logs.\",\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Override the log source filter. Use '*' to include all sources. If not provided, uses DD_SOURCE env var or defaults to 'lambda'.\",\n ),\n env: z\n .string()\n .optional()\n .describe(\n \"Override the environment filter. If not provided, uses DD_ENV env var.\",\n ),\n service: z\n .string()\n .optional()\n .describe(\n \"Override the service name filter. If not provided, uses DD_SERVICE env var.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n aggregation: z\n .enum([\"count\", \"avg\", \"sum\", \"min\", \"max\", \"cardinality\"])\n .optional()\n .describe(\n \"Aggregation type. 'count' counts logs, others require a metric field. Defaults to 'count'.\",\n ),\n metric: z\n .string()\n .optional()\n .describe(\n \"Metric field to aggregate when using avg, sum, min, max, or cardinality. E.g., '@duration', '@http.response_time'.\",\n ),\n },\n async ({\n groupBy,\n query,\n source,\n env,\n service,\n from,\n to,\n aggregation,\n metric,\n }) => {\n log.info(\"Tool called: datadog_log_analytics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n const missingApiKey =\n !process.env.DATADOG_API_KEY && !process.env.DD_API_KEY;\n const missingAppKey =\n !process.env.DATADOG_APP_KEY &&\n !process.env.DATADOG_APPLICATION_KEY &&\n !process.env.DD_APP_KEY &&\n !process.env.DD_APPLICATION_KEY;\n\n if (missingApiKey) {\n log.error(\"No Datadog API key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog API key found. Please set DATADOG_API_KEY or DD_API_KEY environment variable.\",\n },\n ],\n };\n }\n if (missingAppKey) {\n log.error(\"No Datadog Application key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog Application key found. Please set DATADOG_APP_KEY or DD_APP_KEY environment variable.\",\n },\n ],\n };\n }\n }\n\n const compute = aggregation\n ? [{ aggregation, metric }]\n : [{ aggregation: \"count\" as const }];\n\n const result = await aggregateDatadogLogs(\n credentials!,\n {\n query,\n source,\n env,\n service,\n from,\n to,\n groupBy,\n compute,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Analytics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.buckets.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No data found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}\\nGrouped by: ${result.groupBy.join(\", \")}`,\n },\n ],\n };\n }\n\n // Format buckets as a readable table\n const formattedBuckets = result.buckets.map((bucket) => {\n const byParts = Object.entries(bucket.by)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\", \");\n const computeParts = Object.entries(bucket.computes)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\", \");\n return ` ${byParts} => ${computeParts}`;\n });\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Grouped by: ${result.groupBy.join(\", \")}`,\n `Found ${result.buckets.length} groups:`,\n \"\",\n ...formattedBuckets,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_log_analytics\");\n\n // Datadog Monitors Tool\n server.tool(\n \"datadog_monitors\",\n \"List and check Datadog monitors. Shows monitor status (Alert, Warn, No Data, OK), name, type, and tags. Useful for quickly checking if any monitors are alerting.\",\n {\n status: z\n .array(z.enum([\"Alert\", \"Warn\", \"No Data\", \"OK\"]))\n .optional()\n .describe(\n \"Filter monitors by status. E.g., ['Alert', 'Warn'] to see only alerting monitors.\",\n ),\n tags: z\n .array(z.string())\n .optional()\n .describe(\n \"Filter monitors by resource tags (tags on the monitored resources).\",\n ),\n monitorTags: z\n .array(z.string())\n .optional()\n .describe(\n \"Filter monitors by monitor tags (tags on the monitor itself).\",\n ),\n name: z\n .string()\n .optional()\n .describe(\"Filter monitors by name (partial match supported).\"),\n },\n async ({ status, tags, monitorTags, name }) => {\n log.info(\"Tool called: datadog_monitors\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n const result = await listDatadogMonitors(\n credentials,\n { status, tags, monitorTags, name },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Monitors API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.monitors.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No monitors found matching the specified criteria.\",\n },\n ],\n };\n }\n\n // Group monitors by status for better readability\n const byStatus: Record<string, typeof result.monitors> = {};\n for (const monitor of result.monitors) {\n const status = monitor.status;\n if (!byStatus[status]) {\n byStatus[status] = [];\n }\n byStatus[status].push(monitor);\n }\n\n const statusOrder = [\"Alert\", \"Warn\", \"No Data\", \"OK\", \"Unknown\"];\n const formattedMonitors: string[] = [];\n\n for (const status of statusOrder) {\n const monitors = byStatus[status];\n if (monitors && monitors.length > 0) {\n formattedMonitors.push(`\\n## ${status} (${monitors.length})`);\n for (const m of monitors) {\n formattedMonitors.push(` - [${m.id}] ${m.name} (${m.type})`);\n }\n }\n }\n\n const resultText = [\n `Found ${result.monitors.length} monitors:`,\n ...formattedMonitors,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_monitors\");\n\n // Datadog Synthetics Tool\n server.tool(\n \"datadog_synthetics\",\n \"List Datadog Synthetic tests and optionally get recent results for a specific test. Shows test status, type (api/browser), and locations.\",\n {\n type: z\n .enum([\"api\", \"browser\"])\n .optional()\n .describe(\"Filter tests by type: 'api' or 'browser'.\"),\n tags: z.array(z.string()).optional().describe(\"Filter tests by tags.\"),\n testId: z\n .string()\n .optional()\n .describe(\n \"If provided, fetches recent results for this specific test (public_id). Otherwise lists all tests.\",\n ),\n },\n async ({ type, tags, testId }) => {\n log.info(\"Tool called: datadog_synthetics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n // If testId is provided, get results for that specific test\n if (testId) {\n const result = await getDatadogSyntheticResults(\n credentials,\n testId,\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Synthetics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.results.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No recent results found for test: ${testId}`,\n },\n ],\n };\n }\n\n const passedCount = result.results.filter((r) => r.passed).length;\n const failedCount = result.results.length - passedCount;\n\n const formattedResults = result.results.slice(0, 10).map((r) => {\n const date = new Date(r.checkTime * 1000).toISOString();\n const status = r.passed ? \"✓ PASSED\" : \"✗ FAILED\";\n return ` ${date} - ${status}`;\n });\n\n const resultText = [\n `Results for test: ${testId}`,\n `Recent: ${passedCount} passed, ${failedCount} failed (showing last ${Math.min(10, result.results.length)})`,\n \"\",\n ...formattedResults,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n }\n\n // Otherwise list all tests\n const result = await listDatadogSynthetics(\n credentials,\n { type, tags },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Synthetics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.tests.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No synthetic tests found matching the specified criteria.\",\n },\n ],\n };\n }\n\n // Group by status\n const byStatus: Record<string, typeof result.tests> = {};\n for (const test of result.tests) {\n const status = test.status;\n if (!byStatus[status]) {\n byStatus[status] = [];\n }\n byStatus[status].push(test);\n }\n\n const formattedTests: string[] = [];\n for (const [status, tests] of Object.entries(byStatus)) {\n formattedTests.push(`\\n## ${status} (${tests.length})`);\n for (const t of tests) {\n formattedTests.push(` - [${t.publicId}] ${t.name} (${t.type})`);\n }\n }\n\n const resultText = [\n `Found ${result.tests.length} synthetic tests:`,\n ...formattedTests,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_synthetics\");\n\n // Datadog Metrics Tool\n server.tool(\n \"datadog_metrics\",\n \"Query Datadog metrics. Returns timeseries data for the specified metric query. Useful for checking specific metric values.\",\n {\n query: z\n .string()\n .describe(\n \"Metric query. Format: 'aggregation:metric.name{tags}'. Examples: 'avg:system.cpu.user{*}', 'sum:aws.lambda.invocations{function:my-func}.as_count()', 'max:aws.lambda.duration{env:production}'.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('1h', '30m', '1d'), or Unix timestamp. Defaults to '1h'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now' or Unix timestamp. Defaults to 'now'.\",\n ),\n },\n async ({ query, from, to }) => {\n log.info(\"Tool called: datadog_metrics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n // Parse time parameters\n const now = Math.floor(Date.now() / 1000);\n let fromTs: number;\n let toTs: number;\n\n // Parse 'from' parameter\n const fromStr = from || \"1h\";\n if (fromStr.match(/^\\d+$/)) {\n fromTs = parseInt(fromStr, 10);\n } else if (fromStr.match(/^(\\d+)h$/)) {\n const hours = parseInt(fromStr.match(/^(\\d+)h$/)![1], 10);\n fromTs = now - hours * 3600;\n } else if (fromStr.match(/^(\\d+)m$/)) {\n const minutes = parseInt(fromStr.match(/^(\\d+)m$/)![1], 10);\n fromTs = now - minutes * 60;\n } else if (fromStr.match(/^(\\d+)d$/)) {\n const days = parseInt(fromStr.match(/^(\\d+)d$/)![1], 10);\n fromTs = now - days * 86400;\n } else {\n fromTs = now - 3600; // Default 1 hour\n }\n\n // Parse 'to' parameter\n const toStr = to || \"now\";\n if (toStr === \"now\") {\n toTs = now;\n } else if (toStr.match(/^\\d+$/)) {\n toTs = parseInt(toStr, 10);\n } else {\n toTs = now;\n }\n\n const result = await queryDatadogMetrics(\n credentials,\n { query, from: fromTs, to: toTs },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Metrics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.series.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No data found for query: ${query}\\nTime range: ${new Date(fromTs * 1000).toISOString()} to ${new Date(toTs * 1000).toISOString()}`,\n },\n ],\n };\n }\n\n const formattedSeries = result.series.map((s) => {\n const points = s.pointlist.slice(-5); // Last 5 points\n const formattedPoints = points\n .map(([ts, val]) => {\n const date = new Date(ts).toISOString();\n return ` ${date}: ${val !== null ? val.toFixed(4) : \"null\"}`;\n })\n .join(\"\\n\");\n return `\\n ${s.metric} (${s.scope})${s.unit ? ` [${s.unit}]` : \"\"}:\\n${formattedPoints}`;\n });\n\n const resultText = [\n `Query: ${query}`,\n `Time range: ${new Date(fromTs * 1000).toISOString()} to ${new Date(toTs * 1000).toISOString()}`,\n `Found ${result.series.length} series (showing last 5 points each):`,\n ...formattedSeries,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_metrics\");\n\n // Datadog RUM Tool\n server.tool(\n \"datadog_rum\",\n \"Search Datadog RUM (Real User Monitoring) events. Find user sessions, page views, errors, and actions. Useful for debugging frontend issues and understanding user behavior.\",\n {\n query: z\n .string()\n .optional()\n .describe(\n \"RUM search query. E.g., '@type:error', '@session.id:abc123', '@view.url:*checkout*'. Defaults to '*' (all events).\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Max events to return (1-1000). Defaults to 50.\"),\n },\n async ({ query, from, to, limit }) => {\n log.info(\"Tool called: datadog_rum\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n const result = await searchDatadogRum(\n credentials,\n { query, from, to, limit },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog RUM API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.events.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No RUM events found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}`,\n },\n ],\n };\n }\n\n // Group events by type for better readability\n const byType: Record<string, typeof result.events> = {};\n for (const event of result.events) {\n const type = event.type;\n if (!byType[type]) {\n byType[type] = [];\n }\n byType[type].push(event);\n }\n\n const formattedEvents: string[] = [];\n for (const [type, events] of Object.entries(byType)) {\n formattedEvents.push(`\\n## ${type} (${events.length})`);\n for (const e of events.slice(0, 10)) {\n // Limit per type\n const parts = [e.timestamp];\n if (e.viewName || e.viewUrl) {\n parts.push(e.viewName || e.viewUrl || \"\");\n }\n if (e.errorMessage) {\n parts.push(`Error: ${e.errorMessage}`);\n }\n if (e.sessionId) {\n parts.push(`Session: ${e.sessionId.substring(0, 8)}...`);\n }\n formattedEvents.push(` - ${parts.join(\" | \")}`);\n }\n }\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Found ${result.events.length} RUM events:`,\n ...formattedEvents,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_rum\");\n\n // LLM Debug Tools\n server.tool(\n \"llm_debug_call\",\n \"Make a debug LLM API call and inspect the raw response. Useful for understanding how each provider formats responses, especially for reasoning/thinking content. Returns full history, raw responses, and extracted reasoning.\",\n {\n provider: z\n .enum([\"anthropic\", \"gemini\", \"openai\", \"openrouter\"])\n .describe(\"LLM provider to call\"),\n model: z\n .string()\n .optional()\n .describe(\n \"Model to use. If not provided, uses a sensible default. For reasoning tests, try 'o3-mini' with openai.\",\n ),\n message: z\n .string()\n .describe(\n \"Message to send to the LLM. For reasoning tests, try something that requires thinking like 'What is 15 * 17? Think step by step.'\",\n ),\n },\n async ({ provider, model, message }) => {\n log.info(`Tool called: llm_debug_call (provider: ${provider})`);\n\n const result = await debugLlmCall(\n { provider: provider as LlmProvider, model, message },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error calling ${provider}: ${result.error}`,\n },\n ],\n };\n }\n\n const sections = [\n `## LLM Debug Call Result`,\n `Provider: ${result.provider}`,\n `Model: ${result.model}`,\n ``,\n `### Content`,\n result.content || \"(no content)\",\n ``,\n `### Reasoning (${result.reasoning?.length || 0} items, ${result.reasoningTokens || 0} tokens)`,\n result.reasoning && result.reasoning.length > 0\n ? result.reasoning.map((r, i) => `[${i}] ${r}`).join(\"\\n\")\n : \"(no reasoning extracted)\",\n ``,\n `### Usage`,\n JSON.stringify(result.usage, null, 2),\n ``,\n `### History (${result.history?.length || 0} items)`,\n JSON.stringify(result.history, null, 2),\n ``,\n `### Raw Responses (${result.rawResponses?.length || 0} items)`,\n JSON.stringify(result.rawResponses, null, 2),\n ];\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: sections.join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: llm_debug_call\");\n\n server.tool(\n \"llm_list_providers\",\n \"List available LLM providers with their default and reasoning-capable models.\",\n {},\n async () => {\n log.info(\"Tool called: llm_list_providers\");\n\n const { providers } = listLlmProviders();\n\n const formatted = providers.map((p) => {\n const reasoningNote =\n p.reasoningModels.length > 0\n ? `Reasoning models: ${p.reasoningModels.join(\", \")}`\n : \"No known reasoning models\";\n return `- ${p.name}: default=${p.defaultModel}, ${reasoningNote}`;\n });\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n \"## Available LLM Providers\",\n \"\",\n ...formatted,\n \"\",\n \"Use llm_debug_call to test responses from any provider.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: llm_list_providers\");\n\n log.info(\"MCP server configuration complete\");\n\n return server;\n}\n","import { Request, Response } from \"express\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { createMcpServer } from \"./createMcpServer.js\";\n\n// Version will be injected during build\nconst DEFAULT_VERSION = \"0.0.0\";\n\n/**\n * Options for configuring the MCP Express handler\n */\nexport interface McpExpressHandlerOptions {\n /**\n * Version string for the MCP server\n */\n version?: string;\n /**\n * Whether to enable session management (stateful mode)\n * Default: true\n */\n enableSessions?: boolean;\n /**\n * Custom session ID generator function\n */\n sessionIdGenerator?: () => string;\n /**\n * Enable JSON responses instead of SSE streaming\n * Default: false\n */\n enableJsonResponse?: boolean;\n}\n\n/**\n * Creates an Express handler for the Jaypie MCP server using HTTP transport\n *\n * @param options - Configuration options for the handler\n * @returns Promise that resolves to an Express middleware function\n *\n * @example\n * ```typescript\n * import express from 'express';\n * import { mcpExpressHandler } from '@jaypie/mcp';\n *\n * const app = express();\n * app.use(express.json());\n *\n * // Note: mcpExpressHandler is now async\n * app.use('/mcp', await mcpExpressHandler({\n * version: '1.0.0',\n * enableSessions: true\n * }));\n *\n * app.listen(3000, () => {\n * console.log('MCP server running on http://localhost:3000/mcp');\n * });\n * ```\n */\nexport async function mcpExpressHandler(\n options: McpExpressHandlerOptions = {},\n): Promise<(req: Request, res: Response) => Promise<void>> {\n const {\n version = DEFAULT_VERSION,\n enableSessions = true,\n sessionIdGenerator = () => randomUUID(),\n enableJsonResponse = false,\n } = options;\n\n const server = createMcpServer(version);\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: enableSessions ? sessionIdGenerator : undefined,\n enableJsonResponse,\n });\n\n await server.connect(transport);\n\n return async (req: Request, res: Response): Promise<void> => {\n try {\n await transport.handleRequest(req, res, req.body);\n } catch (error) {\n if (!res.headersSent) {\n res.status(500).json({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n };\n}\n","#!/usr/bin/env node\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { createMcpServer } from \"./createMcpServer.js\";\n\n// Version will be injected during build\nconst version = \"0.0.0\";\n\n/**\n * Load environment variables from .env file in current working directory\n * Simple implementation that doesn't require external dependencies\n */\nfunction loadEnvFile() {\n try {\n const envPath = join(process.cwd(), \".env\");\n const content = readFileSync(envPath, \"utf-8\");\n\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n // Skip comments and empty lines\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex === -1) continue;\n\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n\n // Remove surrounding quotes if present\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n // Only set if not already defined (environment takes precedence)\n if (!process.env[key]) {\n process.env[key] = value;\n }\n }\n } catch {\n // .env file not found or not readable - that's fine\n }\n}\n\n// Load .env file before anything else\nloadEnvFile();\n\n// Parse command-line arguments\nconst args = process.argv.slice(2);\nconst verbose = args.includes(\"--verbose\") || args.includes(\"-v\");\n\n// Logger for verbose mode (uses stderr to not interfere with JSON-RPC on stdout)\nconst log = {\n info: (message: string, ...args: unknown[]) => {\n if (verbose) {\n console.error(`[jaypie-mcp] ${message}`, ...args);\n }\n },\n error: (message: string, ...args: unknown[]) => {\n console.error(`[jaypie-mcp ERROR] ${message}`, ...args);\n },\n};\n\nlet server: McpServer | null = null;\nlet isShuttingDown = false;\n\nasync function gracefulShutdown(exitCode = 0) {\n if (isShuttingDown) {\n return;\n }\n isShuttingDown = true;\n\n log.info(\"Shutting down gracefully...\");\n\n try {\n if (server) {\n await server.close();\n log.info(\"Server closed successfully\");\n }\n } catch (error) {\n log.error(\"Error during shutdown:\", error);\n } finally {\n process.exit(exitCode);\n }\n}\n\nasync function main() {\n log.info(\"Starting Jaypie MCP server...\");\n log.info(`Version: ${version}`);\n log.info(`Node version: ${process.version}`);\n log.info(`Verbose mode: ${verbose ? \"enabled\" : \"disabled\"}`);\n\n server = createMcpServer({ version, verbose });\n\n log.info(\"MCP server created successfully\");\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n log.info(\"Connected to stdio transport\");\n log.info(\"Server is ready to accept requests\");\n\n // Handle process termination signals\n process.on(\"SIGINT\", () => {\n log.info(\"Received SIGINT signal\");\n gracefulShutdown(0);\n });\n process.on(\"SIGTERM\", () => {\n log.info(\"Received SIGTERM signal\");\n gracefulShutdown(0);\n });\n\n // Handle stdio stream errors (but let transport handle normal stdin end/close)\n process.stdin.on(\"error\", (error) => {\n if (error.message?.includes(\"EPIPE\") || error.message?.includes(\"EOF\")) {\n log.info(\"stdin closed\");\n gracefulShutdown(0);\n }\n });\n\n process.stdout.on(\"error\", (error) => {\n if (error.message?.includes(\"EPIPE\")) {\n log.info(\"stdout pipe broken\");\n gracefulShutdown(0);\n }\n });\n\n // Server is running on stdio\n}\n\n// Only run main() if this module is executed directly (not imported)\n// This handles npx and symlinks in node_modules/.bin correctly\nif (process.argv[1]) {\n const realPath = realpathSync(process.argv[1]);\n const realPathAsUrl = pathToFileURL(realPath).href;\n if (import.meta.url === realPathAsUrl) {\n main().catch((error) => {\n log.error(\"Fatal error:\", error);\n process.exit(1);\n });\n }\n}\n\nexport { createMcpServer } from \"./createMcpServer.js\";\nexport type { CreateMcpServerOptions } from \"./createMcpServer.js\";\nexport {\n mcpExpressHandler,\n type McpExpressHandlerOptions,\n} from \"./mcpExpressHandler.js\";\n"],"names":["__filename","__dirname"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/datadog.ts","../src/llm.ts","../src/aws.ts","../src/createMcpServer.ts","../src/mcpExpressHandler.ts","../src/index.ts"],"sourcesContent":["/**\n * Datadog API integration module\n */\nimport * as https from \"node:https\";\n\nexport interface DatadogCredentials {\n apiKey: string;\n appKey: string;\n}\n\nexport interface DatadogSearchOptions {\n query?: string;\n source?: string;\n env?: string;\n service?: string;\n from?: string;\n to?: string;\n limit?: number;\n sort?: \"timestamp\" | \"-timestamp\";\n}\n\nexport interface DatadogAnalyticsOptions {\n query?: string;\n source?: string;\n env?: string;\n service?: string;\n from?: string;\n to?: string;\n groupBy: string[];\n compute?: Array<{\n aggregation: \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\" | \"cardinality\";\n metric?: string;\n }>;\n}\n\n// Monitors types\nexport interface DatadogMonitorsOptions {\n tags?: string[];\n monitorTags?: string[];\n name?: string;\n status?: (\"Alert\" | \"Warn\" | \"No Data\" | \"OK\")[];\n}\n\nexport interface DatadogMonitor {\n id: number;\n name: string;\n type: string;\n status: string;\n message?: string;\n tags: string[];\n priority?: number;\n query?: string;\n overallState?: string;\n}\n\nexport interface DatadogMonitorsResult {\n success: boolean;\n monitors: DatadogMonitor[];\n error?: string;\n}\n\n// Synthetics types\nexport interface DatadogSyntheticsOptions {\n tags?: string[];\n type?: \"api\" | \"browser\";\n}\n\nexport interface DatadogSyntheticTest {\n publicId: string;\n name: string;\n type: string;\n status: string;\n tags: string[];\n locations: string[];\n message?: string;\n}\n\nexport interface DatadogSyntheticResult {\n publicId: string;\n resultId: string;\n status: number;\n checkTime: number;\n passed: boolean;\n location?: string;\n}\n\nexport interface DatadogSyntheticsResult {\n success: boolean;\n tests: DatadogSyntheticTest[];\n error?: string;\n}\n\nexport interface DatadogSyntheticResultsResult {\n success: boolean;\n publicId: string;\n results: DatadogSyntheticResult[];\n error?: string;\n}\n\n// Metrics types\nexport interface DatadogMetricsOptions {\n query: string;\n from: number;\n to: number;\n}\n\nexport interface DatadogMetricSeries {\n metric: string;\n scope: string;\n pointlist: Array<[number, number | null]>;\n unit?: string;\n}\n\nexport interface DatadogMetricsResult {\n success: boolean;\n query: string;\n timeRange: { from: number; to: number };\n series: DatadogMetricSeries[];\n error?: string;\n}\n\n// RUM types\nexport interface DatadogRumOptions {\n query?: string;\n from?: string;\n to?: string;\n limit?: number;\n sort?: \"timestamp\" | \"-timestamp\";\n}\n\nexport interface DatadogRumEvent {\n id: string;\n type: string;\n timestamp?: string;\n sessionId?: string;\n viewUrl?: string;\n viewName?: string;\n errorMessage?: string;\n errorType?: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface DatadogRumResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n events: DatadogRumEvent[];\n error?: string;\n}\n\nexport interface DatadogLogEntry {\n id: string;\n timestamp?: string;\n status?: string;\n service?: string;\n message?: string;\n attributes?: Record<string, unknown>;\n}\n\nexport interface DatadogSearchResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n logs: DatadogLogEntry[];\n error?: string;\n}\n\nexport interface DatadogAnalyticsBucket {\n by: Record<string, string>;\n computes: Record<string, number>;\n}\n\nexport interface DatadogAnalyticsResult {\n success: boolean;\n query: string;\n timeRange: { from: string; to: string };\n groupBy: string[];\n buckets: DatadogAnalyticsBucket[];\n error?: string;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nconst nullLogger: Logger = {\n info: () => {},\n error: () => {},\n};\n\n/**\n * Get Datadog credentials from environment variables\n */\nexport function getDatadogCredentials(): DatadogCredentials | null {\n const apiKey = process.env.DATADOG_API_KEY || process.env.DD_API_KEY;\n const appKey =\n process.env.DATADOG_APP_KEY ||\n process.env.DATADOG_APPLICATION_KEY ||\n process.env.DD_APP_KEY ||\n process.env.DD_APPLICATION_KEY;\n\n if (!apiKey || !appKey) {\n return null;\n }\n\n return { apiKey, appKey };\n}\n\n/**\n * Validate Datadog API credentials\n */\nexport async function validateDatadogCredentials(\n credentials: DatadogCredentials,\n): Promise<{ valid: boolean; error?: string }> {\n return new Promise((resolve) => {\n const options = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v1/validate\",\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(options, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n if (res.statusCode === 200) {\n resolve({ valid: true });\n } else {\n resolve({\n valid: false,\n error: `Datadog API returned status ${res.statusCode}: ${data}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n resolve({ valid: false, error: error.message });\n });\n\n req.end();\n });\n}\n\n/**\n * Build query string from environment variables and options\n */\nexport function buildDatadogQuery(options: DatadogSearchOptions): string {\n const ddEnv = process.env.DD_ENV;\n const ddService = process.env.DD_SERVICE;\n const ddSource = process.env.DD_SOURCE;\n const ddQuery = process.env.DD_QUERY;\n\n const queryParts: string[] = [];\n\n // Add source (parameter > env var > default 'lambda')\n const effectiveSource = options.source || ddSource || \"lambda\";\n queryParts.push(`source:${effectiveSource}`);\n\n // Add env (parameter > env var)\n const effectiveEnv = options.env || ddEnv;\n if (effectiveEnv) {\n queryParts.push(`env:${effectiveEnv}`);\n }\n\n // Add service (parameter > env var)\n const effectiveService = options.service || ddService;\n if (effectiveService) {\n queryParts.push(`service:${effectiveService}`);\n }\n\n // Add base query from DD_QUERY if available\n if (ddQuery) {\n queryParts.push(ddQuery);\n }\n\n // Add user-provided query terms\n if (options.query) {\n queryParts.push(options.query);\n }\n\n return queryParts.join(\" \");\n}\n\n/**\n * Search Datadog logs\n */\nexport async function searchDatadogLogs(\n credentials: DatadogCredentials,\n options: DatadogSearchOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogSearchResult> {\n const effectiveQuery = buildDatadogQuery(options);\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const effectiveLimit = Math.min(options.limit || 50, 1000);\n const effectiveSort = options.sort || \"-timestamp\";\n\n logger.info(`Effective query: ${effectiveQuery}`);\n logger.info(\n `Search params: from=${effectiveFrom}, to=${effectiveTo}, limit=${effectiveLimit}, sort=${effectiveSort}`,\n );\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n page: {\n limit: effectiveLimit,\n },\n sort: effectiveSort,\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/logs/events/search\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid query syntax. Check your query: \"${effectiveQuery}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have logs_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: Array<{\n id: string;\n attributes?: {\n timestamp?: string;\n status?: string;\n service?: string;\n message?: string;\n attributes?: Record<string, unknown>;\n };\n }>;\n };\n\n const logs = (response.data || []).map((log) => {\n const attrs = log.attributes || {};\n return {\n id: log.id,\n timestamp: attrs.timestamp,\n status: attrs.status,\n service: attrs.service,\n message: attrs.message,\n attributes: attrs.attributes,\n };\n });\n\n logger.info(`Retrieved ${logs.length} log entries`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog response:\", parseError);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n logs: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n\n/**\n * Aggregate Datadog logs using the Analytics API\n * Groups logs by specified fields and computes aggregations\n */\nexport async function aggregateDatadogLogs(\n credentials: DatadogCredentials,\n options: DatadogAnalyticsOptions,\n logger: Logger = nullLogger,\n): Promise<DatadogAnalyticsResult> {\n const effectiveQuery = buildDatadogQuery(options);\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const groupBy = options.groupBy;\n const compute = options.compute || [{ aggregation: \"count\" as const }];\n\n logger.info(`Analytics query: ${effectiveQuery}`);\n logger.info(`Group by: ${groupBy.join(\", \")}`);\n logger.info(`Time range: ${effectiveFrom} to ${effectiveTo}`);\n\n // Build compute array - each item needs aggregation and type\n const computeItems = compute.map((c) => {\n const item: {\n aggregation: string;\n type: string;\n metric?: string;\n } = {\n aggregation: c.aggregation,\n type: \"total\",\n };\n if (c.metric) {\n item.metric = c.metric;\n }\n return item;\n });\n\n // Build group_by with proper sort configuration\n const groupByItems = groupBy.map((field) => {\n const item: {\n facet: string;\n limit: number;\n sort: {\n type: string;\n order: string;\n aggregation?: string;\n };\n } = {\n facet: field,\n limit: 100,\n sort: {\n type: \"measure\",\n order: \"desc\",\n aggregation: compute[0]?.aggregation || \"count\",\n },\n };\n return item;\n });\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n group_by: groupByItems,\n compute: computeItems,\n page: {\n limit: 100,\n },\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/logs/analytics/aggregate\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Analytics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid query or groupBy fields. Verify facet names exist: ${groupBy.join(\", \")}. Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have logs_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: {\n buckets?: Array<{\n by?: Record<string, string>;\n computes?: Record<string, number>;\n }>;\n };\n };\n\n const buckets = (response.data?.buckets || []).map((bucket) => ({\n by: bucket.by || {},\n computes: bucket.computes || {},\n }));\n\n logger.info(`Retrieved ${buckets.length} aggregation buckets`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog analytics response:\",\n parseError,\n );\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n groupBy,\n buckets: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n\n/**\n * List Datadog monitors with optional filtering\n */\nexport async function listDatadogMonitors(\n credentials: DatadogCredentials,\n options: DatadogMonitorsOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogMonitorsResult> {\n logger.info(\"Fetching Datadog monitors\");\n\n const queryParams = new URLSearchParams();\n\n if (options.tags && options.tags.length > 0) {\n queryParams.set(\"tags\", options.tags.join(\",\"));\n }\n if (options.monitorTags && options.monitorTags.length > 0) {\n queryParams.set(\"monitor_tags\", options.monitorTags.join(\",\"));\n }\n if (options.name) {\n queryParams.set(\"name\", options.name);\n }\n\n const queryString = queryParams.toString();\n const path = `/api/v1/monitor${queryString ? `?${queryString}` : \"\"}`;\n\n logger.info(`Request path: ${path}`);\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Monitors API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have monitors_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n monitors: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as Array<{\n id: number;\n name: string;\n type: string;\n overall_state?: string;\n message?: string;\n tags?: string[];\n priority?: number;\n query?: string;\n }>;\n\n let monitors = response.map((monitor) => ({\n id: monitor.id,\n name: monitor.name,\n type: monitor.type,\n status: monitor.overall_state || \"Unknown\",\n message: monitor.message,\n tags: monitor.tags || [],\n priority: monitor.priority,\n query: monitor.query,\n overallState: monitor.overall_state,\n }));\n\n // Filter by status if specified\n if (options.status && options.status.length > 0) {\n monitors = monitors.filter((m) =>\n options.status!.includes(\n m.status as \"Alert\" | \"Warn\" | \"No Data\" | \"OK\",\n ),\n );\n }\n\n logger.info(`Retrieved ${monitors.length} monitors`);\n\n resolve({\n success: true,\n monitors,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog monitors response:\",\n parseError,\n );\n resolve({\n success: false,\n monitors: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n monitors: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * List Datadog Synthetic tests\n */\nexport async function listDatadogSynthetics(\n credentials: DatadogCredentials,\n options: DatadogSyntheticsOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogSyntheticsResult> {\n logger.info(\"Fetching Datadog Synthetic tests\");\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v1/synthetics/tests\",\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Synthetics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have synthetics_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n tests: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n tests?: Array<{\n public_id: string;\n name: string;\n type: string;\n status: string;\n tags?: string[];\n locations?: string[];\n message?: string;\n }>;\n };\n\n let tests = (response.tests || []).map((test) => ({\n publicId: test.public_id,\n name: test.name,\n type: test.type,\n status: test.status,\n tags: test.tags || [],\n locations: test.locations || [],\n message: test.message,\n }));\n\n // Filter by type if specified\n if (options.type) {\n tests = tests.filter((t) => t.type === options.type);\n }\n\n // Filter by tags if specified\n if (options.tags && options.tags.length > 0) {\n tests = tests.filter((t) =>\n options.tags!.some((tag) => t.tags.includes(tag)),\n );\n }\n\n logger.info(`Retrieved ${tests.length} synthetic tests`);\n\n resolve({\n success: true,\n tests,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog synthetics response:\",\n parseError,\n );\n resolve({\n success: false,\n tests: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n tests: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Get recent results for a specific Synthetic test\n */\nexport async function getDatadogSyntheticResults(\n credentials: DatadogCredentials,\n publicId: string,\n logger: Logger = nullLogger,\n): Promise<DatadogSyntheticResultsResult> {\n logger.info(`Fetching results for Synthetic test: ${publicId}`);\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: `/api/v1/synthetics/tests/${publicId}/results`,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(\n `Datadog Synthetics Results API error: ${res.statusCode}`,\n );\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have synthetics_read permission.\";\n } else if (res.statusCode === 404) {\n errorMessage = `Synthetic test '${publicId}' not found. Use datadog_synthetics (without testId) to list available tests.`;\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again.\";\n }\n resolve({\n success: false,\n publicId,\n results: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n results?: Array<{\n result_id: string;\n status: number;\n check_time: number;\n dc_id?: number;\n result?: {\n passed?: boolean;\n };\n }>;\n };\n\n const results = (response.results || []).map((result) => ({\n publicId,\n resultId: result.result_id,\n status: result.status,\n checkTime: result.check_time,\n passed: result.result?.passed ?? result.status === 0,\n location: result.dc_id?.toString(),\n }));\n\n logger.info(`Retrieved ${results.length} synthetic results`);\n\n resolve({\n success: true,\n publicId,\n results,\n });\n } catch (parseError) {\n logger.error(\n \"Failed to parse Datadog synthetic results:\",\n parseError,\n );\n resolve({\n success: false,\n publicId,\n results: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n publicId,\n results: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Query Datadog metrics\n */\nexport async function queryDatadogMetrics(\n credentials: DatadogCredentials,\n options: DatadogMetricsOptions,\n logger: Logger = nullLogger,\n): Promise<DatadogMetricsResult> {\n logger.info(`Querying metrics: ${options.query}`);\n logger.info(`Time range: ${options.from} to ${options.to}`);\n\n const queryParams = new URLSearchParams({\n query: options.query,\n from: options.from.toString(),\n to: options.to.toString(),\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: `/api/v1/query?${queryParams.toString()}`,\n method: \"GET\",\n headers: {\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog Metrics API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n if (res.statusCode === 400) {\n errorMessage = `Invalid metric query. Check format: 'aggregation:metric.name{tags}'. Query: \"${options.query}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have metrics_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your time range.\";\n }\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n series?: Array<{\n metric: string;\n scope: string;\n pointlist: Array<[number, number | null]>;\n unit?: Array<{ name?: string }>;\n }>;\n };\n\n const series = (response.series || []).map((s) => ({\n metric: s.metric,\n scope: s.scope,\n pointlist: s.pointlist,\n unit: s.unit?.[0]?.name,\n }));\n\n logger.info(`Retrieved ${series.length} metric series`);\n\n resolve({\n success: true,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog metrics response:\", parseError);\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: options.query,\n timeRange: { from: options.from, to: options.to },\n series: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.end();\n });\n}\n\n/**\n * Search Datadog RUM events\n */\nexport async function searchDatadogRum(\n credentials: DatadogCredentials,\n options: DatadogRumOptions = {},\n logger: Logger = nullLogger,\n): Promise<DatadogRumResult> {\n const effectiveQuery = options.query || \"*\";\n const effectiveFrom = options.from || \"now-15m\";\n const effectiveTo = options.to || \"now\";\n const effectiveLimit = Math.min(options.limit || 50, 1000);\n const effectiveSort = options.sort || \"-timestamp\";\n\n logger.info(`RUM query: ${effectiveQuery}`);\n logger.info(`Time range: ${effectiveFrom} to ${effectiveTo}`);\n\n const requestBody = JSON.stringify({\n filter: {\n query: effectiveQuery,\n from: effectiveFrom,\n to: effectiveTo,\n },\n page: {\n limit: effectiveLimit,\n },\n sort: effectiveSort,\n });\n\n return new Promise((resolve) => {\n const requestOptions = {\n hostname: \"api.datadoghq.com\",\n port: 443,\n path: \"/api/v2/rum/events/search\",\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": credentials.apiKey,\n \"DD-APPLICATION-KEY\": credentials.appKey,\n \"Content-Length\": Buffer.byteLength(requestBody),\n },\n };\n\n const req = https.request(requestOptions, (res) => {\n let data = \"\";\n\n res.on(\"data\", (chunk: Buffer) => {\n data += chunk.toString();\n });\n\n res.on(\"end\", () => {\n logger.info(`Response status: ${res.statusCode}`);\n\n if (res.statusCode !== 200) {\n logger.error(`Datadog RUM API error: ${res.statusCode}`);\n let errorMessage = `Datadog API returned status ${res.statusCode}: ${data}`;\n // Check for specific \"No valid indexes\" error which means no RUM app is configured\n if (data.includes(\"No valid indexes\")) {\n errorMessage =\n \"No RUM application found. Ensure you have a RUM application configured in Datadog and it has collected data. \" +\n \"You can create a RUM application at https://app.datadoghq.com/rum/list\";\n } else if (res.statusCode === 400) {\n errorMessage = `Invalid RUM query. Check syntax: \"${effectiveQuery}\". Datadog error: ${data}`;\n } else if (res.statusCode === 403) {\n errorMessage =\n \"Access denied. Verify your API and Application keys have rum_read permission.\";\n } else if (res.statusCode === 429) {\n errorMessage =\n \"Rate limited by Datadog. Wait a moment and try again, or reduce your query scope.\";\n }\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: errorMessage,\n });\n return;\n }\n\n try {\n const response = JSON.parse(data) as {\n data?: Array<{\n id: string;\n type: string;\n attributes?: {\n timestamp?: string;\n attributes?: {\n session?: { id?: string };\n view?: { url?: string; name?: string };\n error?: { message?: string; type?: string };\n [key: string]: unknown;\n };\n };\n }>;\n };\n\n const events = (response.data || []).map((event) => {\n const attrs = event.attributes?.attributes || {};\n return {\n id: event.id,\n type: event.type,\n timestamp: event.attributes?.timestamp,\n sessionId: attrs.session?.id,\n viewUrl: attrs.view?.url,\n viewName: attrs.view?.name,\n errorMessage: attrs.error?.message,\n errorType: attrs.error?.type,\n attributes: attrs,\n };\n });\n\n logger.info(`Retrieved ${events.length} RUM events`);\n\n resolve({\n success: true,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events,\n });\n } catch (parseError) {\n logger.error(\"Failed to parse Datadog RUM response:\", parseError);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: `Failed to parse response: ${parseError instanceof Error ? parseError.message : \"Unknown error\"}`,\n });\n }\n });\n });\n\n req.on(\"error\", (error) => {\n logger.error(\"Request error:\", error);\n resolve({\n success: false,\n query: effectiveQuery,\n timeRange: { from: effectiveFrom, to: effectiveTo },\n events: [],\n error: `Connection error: ${error.message}`,\n });\n });\n\n req.write(requestBody);\n req.end();\n });\n}\n","/**\n * LLM debugging utilities for inspecting raw provider responses\n */\n\nimport { Llm } from \"@jaypie/llm\";\n\nexport type LlmProvider = \"anthropic\" | \"gemini\" | \"openai\" | \"openrouter\";\n\nexport interface LlmDebugCallParams {\n provider: LlmProvider;\n model?: string;\n message: string;\n}\n\nexport interface LlmDebugCallResult {\n success: boolean;\n provider: string;\n model: string;\n content?: string;\n reasoning?: string[];\n reasoningTokens?: number;\n history?: unknown[];\n rawResponses?: unknown[];\n usage?: unknown[];\n error?: string;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\n// Default models for each provider\nconst DEFAULT_MODELS: Record<LlmProvider, string> = {\n anthropic: \"claude-sonnet-4-20250514\",\n gemini: \"gemini-2.0-flash\",\n openai: \"gpt-4o-mini\",\n openrouter: \"openai/gpt-4o-mini\",\n};\n\n// Reasoning-capable models for testing reasoning extraction\nexport const REASONING_MODELS: Record<string, string> = {\n \"openai-o3-mini\": \"o3-mini\",\n \"openai-o1-preview\": \"o1-preview\",\n \"openai-o1-mini\": \"o1-mini\",\n};\n\n/**\n * Make a debug LLM call and return the raw response data for inspection\n */\nexport async function debugLlmCall(\n params: LlmDebugCallParams,\n log: Logger,\n): Promise<LlmDebugCallResult> {\n const { provider, message } = params;\n const model = params.model || DEFAULT_MODELS[provider];\n\n log.info(`Making debug LLM call to ${provider} with model ${model}`);\n\n try {\n const llm = new Llm(provider, { model });\n\n const result = await llm.operate(message, {\n user: \"[jaypie-mcp] Debug LLM Call\",\n });\n\n if (result.error) {\n return {\n success: false,\n provider,\n model,\n error: `${result.error.title}: ${result.error.detail || \"Unknown error\"}`,\n };\n }\n\n // Calculate total reasoning tokens\n const reasoningTokens = result.usage.reduce(\n (sum, u) => sum + (u.reasoning || 0),\n 0,\n );\n\n return {\n success: true,\n provider,\n model,\n content:\n typeof result.content === \"string\"\n ? result.content\n : JSON.stringify(result.content),\n reasoning: result.reasoning,\n reasoningTokens,\n history: result.history,\n rawResponses: result.responses,\n usage: result.usage,\n };\n } catch (error) {\n log.error(`Error calling ${provider}:`, error);\n return {\n success: false,\n provider,\n model,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * List available providers and their default/reasoning models\n */\nexport function listLlmProviders(): {\n providers: Array<{\n name: LlmProvider;\n defaultModel: string;\n reasoningModels: string[];\n }>;\n} {\n return {\n providers: [\n {\n name: \"openai\",\n defaultModel: DEFAULT_MODELS.openai,\n reasoningModels: [\"o3-mini\", \"o1-preview\", \"o1-mini\"],\n },\n {\n name: \"anthropic\",\n defaultModel: DEFAULT_MODELS.anthropic,\n reasoningModels: [], // Anthropic doesn't expose reasoning the same way\n },\n {\n name: \"gemini\",\n defaultModel: DEFAULT_MODELS.gemini,\n reasoningModels: [], // Gemini has thoughtsTokenCount but unclear on content\n },\n {\n name: \"openrouter\",\n defaultModel: DEFAULT_MODELS.openrouter,\n reasoningModels: [\"openai/o3-mini\", \"openai/o1-preview\"],\n },\n ],\n };\n}\n","/**\n * AWS CLI integration module\n * Provides a structured interface for common AWS operations via the AWS CLI\n */\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\n\n// Logger interface matching the pattern from datadog.ts\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nconst nullLogger: Logger = {\n info: () => {},\n error: () => {},\n};\n\n// Common AWS command options\nexport interface AwsCommandOptions {\n profile?: string;\n region?: string;\n}\n\n// Generic result type for AWS commands\nexport interface AwsCommandResult<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\n// Step Functions types\nexport interface StepFunctionExecution {\n executionArn: string;\n stateMachineArn: string;\n name: string;\n status: string;\n startDate: string;\n stopDate?: string;\n}\n\nexport interface StepFunctionsListExecutionsOptions extends AwsCommandOptions {\n stateMachineArn: string;\n statusFilter?:\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\";\n maxResults?: number;\n}\n\nexport interface StepFunctionsStopExecutionOptions extends AwsCommandOptions {\n executionArn: string;\n cause?: string;\n}\n\n// Lambda types\nexport interface LambdaFunction {\n FunctionName: string;\n FunctionArn: string;\n Runtime?: string;\n Handler?: string;\n CodeSize: number;\n Description?: string;\n Timeout?: number;\n MemorySize?: number;\n LastModified: string;\n Version?: string;\n}\n\nexport interface LambdaListFunctionsOptions extends AwsCommandOptions {\n functionNamePrefix?: string;\n maxResults?: number;\n}\n\nexport interface LambdaGetFunctionOptions extends AwsCommandOptions {\n functionName: string;\n}\n\n// CloudWatch Logs types\nexport interface LogEvent {\n timestamp: number;\n message: string;\n ingestionTime?: number;\n logStreamName?: string;\n}\n\nexport interface CloudWatchLogsFilterOptions extends AwsCommandOptions {\n logGroupName: string;\n filterPattern?: string;\n startTime?: string;\n endTime?: string;\n limit?: number;\n}\n\n// S3 types\nexport interface S3Object {\n Key: string;\n LastModified: string;\n ETag: string;\n Size: number;\n StorageClass: string;\n}\n\nexport interface S3ListObjectsOptions extends AwsCommandOptions {\n bucket: string;\n prefix?: string;\n maxResults?: number;\n}\n\n// CloudFormation types\nexport interface CloudFormationStack {\n StackName: string;\n StackId: string;\n StackStatus: string;\n StackStatusReason?: string;\n CreationTime: string;\n LastUpdatedTime?: string;\n Description?: string;\n Outputs?: Array<{\n OutputKey: string;\n OutputValue: string;\n Description?: string;\n }>;\n Parameters?: Array<{\n ParameterKey: string;\n ParameterValue: string;\n }>;\n}\n\nexport interface CloudFormationDescribeStackOptions extends AwsCommandOptions {\n stackName: string;\n}\n\n// DynamoDB types\nexport interface DynamoDBDescribeTableOptions extends AwsCommandOptions {\n tableName: string;\n}\n\nexport interface DynamoDBScanOptions extends AwsCommandOptions {\n tableName: string;\n filterExpression?: string;\n expressionAttributeValues?: string;\n limit?: number;\n}\n\nexport interface DynamoDBQueryOptions extends AwsCommandOptions {\n tableName: string;\n keyConditionExpression: string;\n expressionAttributeValues: string;\n indexName?: string;\n filterExpression?: string;\n limit?: number;\n scanIndexForward?: boolean;\n}\n\nexport interface DynamoDBGetItemOptions extends AwsCommandOptions {\n tableName: string;\n key: string;\n}\n\n// SQS types\nexport interface SQSQueue {\n QueueUrl: string;\n}\n\nexport interface SQSListQueuesOptions extends AwsCommandOptions {\n queueNamePrefix?: string;\n}\n\nexport interface SQSGetQueueAttributesOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\nexport interface SQSReceiveMessageOptions extends AwsCommandOptions {\n queueUrl: string;\n maxNumberOfMessages?: number;\n visibilityTimeout?: number;\n}\n\nexport interface SQSPurgeQueueOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\n// AWS Profile\nexport interface AwsProfile {\n name: string;\n source: \"config\" | \"credentials\";\n region?: string;\n sso_start_url?: string;\n}\n\n/**\n * Parse AWS CLI error messages into user-friendly descriptions\n */\nfunction parseAwsError(\n stderr: string,\n service: string,\n command: string,\n): string {\n if (stderr.includes(\"ExpiredToken\") || stderr.includes(\"Token has expired\")) {\n return \"AWS credentials have expired. Run 'aws sso login' or refresh your credentials.\";\n }\n if (\n stderr.includes(\"NoCredentialProviders\") ||\n stderr.includes(\"Unable to locate credentials\")\n ) {\n return \"No AWS credentials found. Configure credentials with 'aws configure' or 'aws sso login'.\";\n }\n if (stderr.includes(\"AccessDenied\") || stderr.includes(\"Access Denied\")) {\n return `Access denied for ${service}:${command}. Check your IAM permissions.`;\n }\n if (stderr.includes(\"ResourceNotFoundException\")) {\n return `Resource not found. Check that the specified resource exists in the correct region.`;\n }\n if (stderr.includes(\"ValidationException\")) {\n const match = stderr.match(/ValidationException[^:]*:\\s*(.+)/);\n return match\n ? `Validation error: ${match[1].trim()}`\n : \"Validation error in request parameters.\";\n }\n if (\n stderr.includes(\"ThrottlingException\") ||\n stderr.includes(\"Rate exceeded\")\n ) {\n return \"AWS API rate limit exceeded. Wait a moment and try again.\";\n }\n if (stderr.includes(\"InvalidParameterValue\")) {\n const match = stderr.match(/InvalidParameterValue[^:]*:\\s*(.+)/);\n return match\n ? `Invalid parameter: ${match[1].trim()}`\n : \"Invalid parameter value provided.\";\n }\n return stderr.trim();\n}\n\n/**\n * Parse relative time strings like 'now-1h' to Unix timestamps\n */\nfunction parseRelativeTime(timeStr: string): number {\n const now = Date.now();\n\n if (timeStr === \"now\") {\n return now;\n }\n\n // Handle relative time like 'now-15m', 'now-1h', 'now-1d'\n const relativeMatch = timeStr.match(/^now-(\\d+)([smhd])$/);\n if (relativeMatch) {\n const value = parseInt(relativeMatch[1], 10);\n const unit = relativeMatch[2];\n const multipliers: Record<string, number> = {\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n };\n return now - value * multipliers[unit];\n }\n\n // Handle ISO 8601 format\n const parsed = Date.parse(timeStr);\n if (!isNaN(parsed)) {\n return parsed;\n }\n\n // Default to the current time if parsing fails\n return now;\n}\n\n/**\n * Execute an AWS CLI command and return parsed JSON output\n */\nexport async function executeAwsCommand<T>(\n service: string,\n command: string,\n args: string[],\n options: AwsCommandOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<T>> {\n const fullArgs = [service, command, ...args, \"--output\", \"json\"];\n\n if (options.profile) {\n fullArgs.push(\"--profile\", options.profile);\n }\n if (options.region) {\n fullArgs.push(\"--region\", options.region);\n }\n\n logger.info(`Executing: aws ${fullArgs.join(\" \")}`);\n\n return new Promise((resolve) => {\n const proc = spawn(\"aws\", fullArgs);\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n logger.error(`AWS CLI error: ${stderr}`);\n resolve({\n success: false,\n error: parseAwsError(stderr, service, command),\n });\n return;\n }\n\n // Handle empty output (some commands return nothing on success)\n if (!stdout.trim()) {\n resolve({ success: true });\n return;\n }\n\n try {\n const data = JSON.parse(stdout) as T;\n resolve({ success: true, data });\n } catch {\n // Some commands return plain text\n resolve({ success: true, data: stdout.trim() as unknown as T });\n }\n });\n\n proc.on(\"error\", (error) => {\n if (error.message.includes(\"ENOENT\")) {\n resolve({\n success: false,\n error:\n \"AWS CLI not found. Install it from https://aws.amazon.com/cli/\",\n });\n } else {\n resolve({ success: false, error: error.message });\n }\n });\n });\n}\n\n/**\n * List available AWS profiles from ~/.aws/config and ~/.aws/credentials\n */\nexport async function listAwsProfiles(\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<AwsProfile[]>> {\n const profiles: AwsProfile[] = [];\n const homeDir = os.homedir();\n\n try {\n // Parse ~/.aws/config\n const configPath = path.join(homeDir, \".aws\", \"config\");\n try {\n const configContent = await fs.readFile(configPath, \"utf-8\");\n const profileRegex = /\\[profile\\s+([^\\]]+)\\]|\\[default\\]/g;\n let match;\n while ((match = profileRegex.exec(configContent)) !== null) {\n const name = match[1] || \"default\";\n profiles.push({\n name,\n source: \"config\",\n });\n }\n logger.info(`Found ${profiles.length} profiles in config`);\n } catch {\n logger.info(\"No ~/.aws/config file found\");\n }\n\n // Parse ~/.aws/credentials\n const credentialsPath = path.join(homeDir, \".aws\", \"credentials\");\n try {\n const credentialsContent = await fs.readFile(credentialsPath, \"utf-8\");\n const profileRegex = /\\[([^\\]]+)\\]/g;\n let match;\n while ((match = profileRegex.exec(credentialsContent)) !== null) {\n const name = match[1];\n // Only add if not already in the list\n if (!profiles.find((p) => p.name === name)) {\n profiles.push({\n name,\n source: \"credentials\",\n });\n }\n }\n logger.info(`Total profiles after credentials: ${profiles.length}`);\n } catch {\n logger.info(\"No ~/.aws/credentials file found\");\n }\n\n return { success: true, data: profiles };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Error listing profiles: ${errorMessage}`);\n return { success: false, error: errorMessage };\n }\n}\n\n// Step Functions operations\nexport async function listStepFunctionExecutions(\n options: StepFunctionsListExecutionsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ executions: StepFunctionExecution[] }>> {\n const args = [\"--state-machine-arn\", options.stateMachineArn];\n if (options.statusFilter) {\n args.push(\"--status-filter\", options.statusFilter);\n }\n if (options.maxResults) {\n args.push(\"--max-results\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"list-executions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function stopStepFunctionExecution(\n options: StepFunctionsStopExecutionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ stopDate: string }>> {\n const args = [\"--execution-arn\", options.executionArn];\n if (options.cause) {\n args.push(\"--cause\", options.cause);\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"stop-execution\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// Lambda operations\nexport async function listLambdaFunctions(\n options: LambdaListFunctionsOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Functions: LambdaFunction[] }>> {\n const args: string[] = [];\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n const result = await executeAwsCommand<{ Functions: LambdaFunction[] }>(\n \"lambda\",\n \"list-functions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n\n // Filter by prefix if specified\n if (result.success && result.data && options.functionNamePrefix) {\n result.data.Functions = result.data.Functions.filter((f) =>\n f.FunctionName.startsWith(options.functionNamePrefix!),\n );\n }\n\n return result;\n}\n\nexport async function getLambdaFunction(\n options: LambdaGetFunctionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Configuration: LambdaFunction }>> {\n return executeAwsCommand(\n \"lambda\",\n \"get-function\",\n [\"--function-name\", options.functionName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudWatch Logs operations\nexport async function filterLogEvents(\n options: CloudWatchLogsFilterOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ events: LogEvent[] }>> {\n const args = [\"--log-group-name\", options.logGroupName];\n\n if (options.filterPattern) {\n args.push(\"--filter-pattern\", options.filterPattern);\n }\n if (options.startTime) {\n const startMs = parseRelativeTime(options.startTime);\n args.push(\"--start-time\", String(startMs));\n }\n if (options.endTime) {\n const endMs = parseRelativeTime(options.endTime);\n args.push(\"--end-time\", String(endMs));\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"logs\",\n \"filter-log-events\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// S3 operations\nexport async function listS3Objects(\n options: S3ListObjectsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Contents: S3Object[] }>> {\n const args = [\"--bucket\", options.bucket];\n if (options.prefix) {\n args.push(\"--prefix\", options.prefix);\n }\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"s3api\",\n \"list-objects-v2\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudFormation operations\nexport async function describeStack(\n options: CloudFormationDescribeStackOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Stacks: CloudFormationStack[] }>> {\n return executeAwsCommand(\n \"cloudformation\",\n \"describe-stacks\",\n [\"--stack-name\", options.stackName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// DynamoDB operations\nexport async function describeDynamoDBTable(\n options: DynamoDBDescribeTableOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Table: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"describe-table\",\n [\"--table-name\", options.tableName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function scanDynamoDB(\n options: DynamoDBScanOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\"--table-name\", options.tableName];\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.expressionAttributeValues) {\n args.push(\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n );\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"scan\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function queryDynamoDB(\n options: DynamoDBQueryOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\n \"--table-name\",\n options.tableName,\n \"--key-condition-expression\",\n options.keyConditionExpression,\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n ];\n if (options.indexName) {\n args.push(\"--index-name\", options.indexName);\n }\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n if (options.scanIndexForward === false) {\n args.push(\"--no-scan-index-forward\");\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"query\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getDynamoDBItem(\n options: DynamoDBGetItemOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Item: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"get-item\",\n [\"--table-name\", options.tableName, \"--key\", options.key],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// SQS operations\nexport async function listSQSQueues(\n options: SQSListQueuesOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ QueueUrls: string[] }>> {\n const args: string[] = [];\n if (options.queueNamePrefix) {\n args.push(\"--queue-name-prefix\", options.queueNamePrefix);\n }\n\n return executeAwsCommand(\n \"sqs\",\n \"list-queues\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getSQSQueueAttributes(\n options: SQSGetQueueAttributesOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Attributes: Record<string, string> }>> {\n return executeAwsCommand(\n \"sqs\",\n \"get-queue-attributes\",\n [\"--queue-url\", options.queueUrl, \"--attribute-names\", \"All\"],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function receiveSQSMessage(\n options: SQSReceiveMessageOptions,\n logger: Logger = nullLogger,\n): Promise<\n AwsCommandResult<{\n Messages: Array<{\n MessageId: string;\n ReceiptHandle: string;\n Body: string;\n Attributes?: Record<string, string>;\n }>;\n }>\n> {\n const args = [\"--queue-url\", options.queueUrl];\n if (options.maxNumberOfMessages) {\n args.push(\"--max-number-of-messages\", String(options.maxNumberOfMessages));\n }\n if (options.visibilityTimeout) {\n args.push(\"--visibility-timeout\", String(options.visibilityTimeout));\n }\n args.push(\"--attribute-names\", \"All\");\n\n return executeAwsCommand(\n \"sqs\",\n \"receive-message\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function purgeSQSQueue(\n options: SQSPurgeQueueOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<void>> {\n return executeAwsCommand(\n \"sqs\",\n \"purge-queue\",\n [\"--queue-url\", options.queueUrl],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport matter from \"gray-matter\";\n\nimport {\n aggregateDatadogLogs,\n getDatadogCredentials,\n getDatadogSyntheticResults,\n listDatadogMonitors,\n listDatadogSynthetics,\n queryDatadogMetrics,\n searchDatadogLogs,\n searchDatadogRum,\n} from \"./datadog.js\";\nimport { debugLlmCall, listLlmProviders, type LlmProvider } from \"./llm.js\";\nimport {\n describeDynamoDBTable,\n describeStack,\n filterLogEvents,\n getDynamoDBItem,\n getLambdaFunction,\n getSQSQueueAttributes,\n listAwsProfiles,\n listLambdaFunctions,\n listS3Objects,\n listSQSQueues,\n listStepFunctionExecutions,\n purgeSQSQueue,\n queryDynamoDB,\n receiveSQSMessage,\n scanDynamoDB,\n stopStepFunctionExecution,\n} from \"./aws.js\";\n\n// Build-time constants injected by rollup\ndeclare const __BUILD_VERSION_STRING__: string;\nconst BUILD_VERSION_STRING =\n typeof __BUILD_VERSION_STRING__ !== \"undefined\"\n ? __BUILD_VERSION_STRING__\n : \"@jaypie/mcp@0.0.0\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst PROMPTS_PATH = path.join(__dirname, \"..\", \"prompts\");\n\nexport interface CreateMcpServerOptions {\n version?: string;\n verbose?: boolean;\n}\n\n// Logger utility\nfunction createLogger(verbose: boolean) {\n return {\n info: (message: string, ...args: unknown[]) => {\n if (verbose) {\n console.error(`[jaypie-mcp] ${message}`, ...args);\n }\n },\n error: (message: string, ...args: unknown[]) => {\n console.error(`[jaypie-mcp ERROR] ${message}`, ...args);\n },\n };\n}\n\ninterface FrontMatter {\n description?: string;\n include?: string;\n globs?: string;\n}\n\nasync function parseMarkdownFile(filePath: string): Promise<{\n filename: string;\n description?: string;\n include?: string;\n}> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const filename = path.basename(filePath);\n\n if (content.startsWith(\"---\")) {\n const parsed = matter(content);\n const frontMatter = parsed.data as FrontMatter;\n return {\n filename,\n description: frontMatter.description,\n include: frontMatter.include || frontMatter.globs,\n };\n }\n\n return { filename };\n } catch {\n return { filename: path.basename(filePath) };\n }\n}\n\nfunction formatPromptListItem(prompt: {\n filename: string;\n description?: string;\n include?: string;\n}): string {\n const { filename, description, include } = prompt;\n\n if (description && include) {\n return `* ${filename}: ${description} - Required for ${include}`;\n } else if (description) {\n return `* ${filename}: ${description}`;\n } else if (include) {\n return `* ${filename} - Required for ${include}`;\n } else {\n return `* ${filename}`;\n }\n}\n\n/**\n * Creates and configures an MCP server instance with Jaypie tools\n * @param options - Configuration options (or legacy version string)\n * @returns Configured MCP server instance\n */\nexport function createMcpServer(\n options: CreateMcpServerOptions | string = {},\n): McpServer {\n // Support legacy signature: createMcpServer(version: string)\n const config: CreateMcpServerOptions =\n typeof options === \"string\" ? { version: options } : options;\n\n const { version = \"0.0.0\", verbose = false } = config;\n\n const log = createLogger(verbose);\n\n log.info(\"Creating MCP server instance\");\n log.info(`Prompts directory: ${PROMPTS_PATH}`);\n\n const server = new McpServer(\n {\n name: \"jaypie\",\n version,\n },\n {\n capabilities: {},\n },\n );\n\n log.info(\"Registering tools...\");\n\n server.tool(\n \"list_prompts\",\n \"List available Jaypie development prompts and guides. Use this FIRST when starting work on a Jaypie project to discover relevant documentation. Returns filenames, descriptions, and which file patterns each prompt applies to (e.g., 'Required for packages/express/**').\",\n {},\n async () => {\n log.info(\"Tool called: list_prompts\");\n log.info(`Reading directory: ${PROMPTS_PATH}`);\n\n try {\n const files = await fs.readdir(PROMPTS_PATH);\n const mdFiles = files.filter((file) => file.endsWith(\".md\"));\n\n log.info(`Found ${mdFiles.length} .md files`);\n\n const prompts = await Promise.all(\n mdFiles.map((file) =>\n parseMarkdownFile(path.join(PROMPTS_PATH, file)),\n ),\n );\n\n const formattedList = prompts.map(formatPromptListItem).join(\"\\n\");\n\n log.info(\"Successfully listed prompts\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text:\n formattedList || \"No .md files found in the prompts directory.\",\n },\n ],\n };\n } catch (error) {\n log.error(\"Error listing prompts:\", error);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error listing prompts: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n },\n );\n\n log.info(\"Registered tool: list_prompts\");\n\n server.tool(\n \"read_prompt\",\n \"Read a Jaypie prompt/guide by filename. Call list_prompts first to see available prompts. These contain best practices, templates, code patterns, and step-by-step guides for Jaypie development tasks.\",\n {\n filename: z\n .string()\n .describe(\n \"The prompt filename from list_prompts (e.g., 'Jaypie_Express_Package.md', 'Development_Process.md')\",\n ),\n },\n async ({ filename }) => {\n log.info(`Tool called: read_prompt (filename: ${filename})`);\n\n try {\n const filePath = path.join(PROMPTS_PATH, filename);\n\n log.info(`Reading file: ${filePath}`);\n\n const content = await fs.readFile(filePath, \"utf-8\");\n\n log.info(`Successfully read ${filename} (${content.length} bytes)`);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: content,\n },\n ],\n };\n } catch (error) {\n if ((error as { code?: string }).code === \"ENOENT\") {\n log.error(`File not found: ${filename}`);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: Prompt file \"${filename}\" not found in prompts directory`,\n },\n ],\n };\n }\n\n log.error(\"Error reading prompt file:\", error);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error reading prompt file: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n },\n );\n\n log.info(\"Registered tool: read_prompt\");\n\n server.tool(\n \"version\",\n `Prints the current version and hash, \\`${BUILD_VERSION_STRING}\\``,\n {},\n async () => {\n log.info(\"Tool called: version\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: BUILD_VERSION_STRING,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: version\");\n\n // Datadog Logs Tool\n server.tool(\n \"datadog_logs\",\n \"Search and retrieve individual Datadog log entries. Use this to view actual log messages and details. For aggregated counts/statistics (e.g., 'how many errors by service?'), use datadog_log_analytics instead. Requires DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n {\n query: z\n .string()\n .optional()\n .describe(\n \"Search query to filter logs. Examples: 'status:error', '@http.status_code:500', '*timeout*', '@requestId:abc123'. Combined with DD_ENV, DD_SERVICE, DD_SOURCE env vars if set.\",\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Override the log source (e.g., 'lambda', 'auth0', 'nginx'). If not provided, uses DD_SOURCE env var or defaults to 'lambda'.\",\n ),\n env: z\n .string()\n .optional()\n .describe(\n \"Override the environment (e.g., 'sandbox', 'kitchen', 'lab', 'studio', 'production'). If not provided, uses DD_ENV env var.\",\n ),\n service: z\n .string()\n .optional()\n .describe(\n \"Override the service name. If not provided, uses DD_SERVICE env var.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Max logs to return (1-1000). Defaults to 50.\"),\n sort: z\n .enum([\"timestamp\", \"-timestamp\"])\n .optional()\n .describe(\n \"Sort order: 'timestamp' (oldest first) or '-timestamp' (newest first, default).\",\n ),\n },\n async ({ query, source, env, service, from, to, limit, sort }) => {\n log.info(\"Tool called: datadog_logs\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n const missingApiKey =\n !process.env.DATADOG_API_KEY && !process.env.DD_API_KEY;\n const missingAppKey =\n !process.env.DATADOG_APP_KEY &&\n !process.env.DATADOG_APPLICATION_KEY &&\n !process.env.DD_APP_KEY &&\n !process.env.DD_APPLICATION_KEY;\n\n if (missingApiKey) {\n log.error(\"No Datadog API key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog API key found. Please set DATADOG_API_KEY or DD_API_KEY environment variable.\",\n },\n ],\n };\n }\n if (missingAppKey) {\n log.error(\"No Datadog Application key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog Application key found. Please set DATADOG_APP_KEY or DD_APP_KEY environment variable. The Logs Search API requires both an API key and an Application key.\",\n },\n ],\n };\n }\n }\n\n // credentials is guaranteed to be non-null here\n const result = await searchDatadogLogs(\n credentials!,\n {\n query,\n source,\n env,\n service,\n from,\n to,\n limit,\n sort,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.logs.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No logs found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}`,\n },\n ],\n };\n }\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Found ${result.logs.length} log entries:`,\n \"\",\n JSON.stringify(result.logs, null, 2),\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_logs\");\n\n // Datadog Log Analytics Tool\n server.tool(\n \"datadog_log_analytics\",\n \"Aggregate and analyze Datadog logs by grouping them by fields. Use this for statistics and counts (e.g., 'errors by service', 'requests by status code'). For viewing individual log entries, use datadog_logs instead.\",\n {\n groupBy: z\n .array(z.string())\n .describe(\n \"Fields to group by. Examples: ['source'], ['service', 'status'], ['@http.status_code']. Common facets: source, service, status, host, @http.status_code, @env.\",\n ),\n query: z\n .string()\n .optional()\n .describe(\n \"Filter query. Examples: 'status:error', '*timeout*', '@http.method:POST'. Use '*' for all logs.\",\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Override the log source filter. Use '*' to include all sources. If not provided, uses DD_SOURCE env var or defaults to 'lambda'.\",\n ),\n env: z\n .string()\n .optional()\n .describe(\n \"Override the environment filter. If not provided, uses DD_ENV env var.\",\n ),\n service: z\n .string()\n .optional()\n .describe(\n \"Override the service name filter. If not provided, uses DD_SERVICE env var.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n aggregation: z\n .enum([\"count\", \"avg\", \"sum\", \"min\", \"max\", \"cardinality\"])\n .optional()\n .describe(\n \"Aggregation type. 'count' counts logs, others require a metric field. Defaults to 'count'.\",\n ),\n metric: z\n .string()\n .optional()\n .describe(\n \"Metric field to aggregate when using avg, sum, min, max, or cardinality. E.g., '@duration', '@http.response_time'.\",\n ),\n },\n async ({\n groupBy,\n query,\n source,\n env,\n service,\n from,\n to,\n aggregation,\n metric,\n }) => {\n log.info(\"Tool called: datadog_log_analytics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n const missingApiKey =\n !process.env.DATADOG_API_KEY && !process.env.DD_API_KEY;\n const missingAppKey =\n !process.env.DATADOG_APP_KEY &&\n !process.env.DATADOG_APPLICATION_KEY &&\n !process.env.DD_APP_KEY &&\n !process.env.DD_APPLICATION_KEY;\n\n if (missingApiKey) {\n log.error(\"No Datadog API key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog API key found. Please set DATADOG_API_KEY or DD_API_KEY environment variable.\",\n },\n ],\n };\n }\n if (missingAppKey) {\n log.error(\"No Datadog Application key found in environment\");\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No Datadog Application key found. Please set DATADOG_APP_KEY or DD_APP_KEY environment variable.\",\n },\n ],\n };\n }\n }\n\n const compute = aggregation\n ? [{ aggregation, metric }]\n : [{ aggregation: \"count\" as const }];\n\n const result = await aggregateDatadogLogs(\n credentials!,\n {\n query,\n source,\n env,\n service,\n from,\n to,\n groupBy,\n compute,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Analytics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.buckets.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No data found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}\\nGrouped by: ${result.groupBy.join(\", \")}`,\n },\n ],\n };\n }\n\n // Format buckets as a readable table\n const formattedBuckets = result.buckets.map((bucket) => {\n const byParts = Object.entries(bucket.by)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\", \");\n const computeParts = Object.entries(bucket.computes)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\", \");\n return ` ${byParts} => ${computeParts}`;\n });\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Grouped by: ${result.groupBy.join(\", \")}`,\n `Found ${result.buckets.length} groups:`,\n \"\",\n ...formattedBuckets,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_log_analytics\");\n\n // Datadog Monitors Tool\n server.tool(\n \"datadog_monitors\",\n \"List and check Datadog monitors. Shows monitor status (Alert, Warn, No Data, OK), name, type, and tags. Useful for quickly checking if any monitors are alerting.\",\n {\n status: z\n .array(z.enum([\"Alert\", \"Warn\", \"No Data\", \"OK\"]))\n .optional()\n .describe(\n \"Filter monitors by status. E.g., ['Alert', 'Warn'] to see only alerting monitors.\",\n ),\n tags: z\n .array(z.string())\n .optional()\n .describe(\n \"Filter monitors by resource tags (tags on the monitored resources).\",\n ),\n monitorTags: z\n .array(z.string())\n .optional()\n .describe(\n \"Filter monitors by monitor tags (tags on the monitor itself).\",\n ),\n name: z\n .string()\n .optional()\n .describe(\"Filter monitors by name (partial match supported).\"),\n },\n async ({ status, tags, monitorTags, name }) => {\n log.info(\"Tool called: datadog_monitors\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n const result = await listDatadogMonitors(\n credentials,\n { status, tags, monitorTags, name },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Monitors API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.monitors.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No monitors found matching the specified criteria.\",\n },\n ],\n };\n }\n\n // Group monitors by status for better readability\n const byStatus: Record<string, typeof result.monitors> = {};\n for (const monitor of result.monitors) {\n const status = monitor.status;\n if (!byStatus[status]) {\n byStatus[status] = [];\n }\n byStatus[status].push(monitor);\n }\n\n const statusOrder = [\"Alert\", \"Warn\", \"No Data\", \"OK\", \"Unknown\"];\n const formattedMonitors: string[] = [];\n\n for (const status of statusOrder) {\n const monitors = byStatus[status];\n if (monitors && monitors.length > 0) {\n formattedMonitors.push(`\\n## ${status} (${monitors.length})`);\n for (const m of monitors) {\n formattedMonitors.push(` - [${m.id}] ${m.name} (${m.type})`);\n }\n }\n }\n\n const resultText = [\n `Found ${result.monitors.length} monitors:`,\n ...formattedMonitors,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_monitors\");\n\n // Datadog Synthetics Tool\n server.tool(\n \"datadog_synthetics\",\n \"List Datadog Synthetic tests and optionally get recent results for a specific test. Shows test status, type (api/browser), and locations.\",\n {\n type: z\n .enum([\"api\", \"browser\"])\n .optional()\n .describe(\"Filter tests by type: 'api' or 'browser'.\"),\n tags: z.array(z.string()).optional().describe(\"Filter tests by tags.\"),\n testId: z\n .string()\n .optional()\n .describe(\n \"If provided, fetches recent results for this specific test (public_id). Otherwise lists all tests.\",\n ),\n },\n async ({ type, tags, testId }) => {\n log.info(\"Tool called: datadog_synthetics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n // If testId is provided, get results for that specific test\n if (testId) {\n const result = await getDatadogSyntheticResults(\n credentials,\n testId,\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Synthetics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.results.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No recent results found for test: ${testId}`,\n },\n ],\n };\n }\n\n const passedCount = result.results.filter((r) => r.passed).length;\n const failedCount = result.results.length - passedCount;\n\n const formattedResults = result.results.slice(0, 10).map((r) => {\n const date = new Date(r.checkTime * 1000).toISOString();\n const status = r.passed ? \"✓ PASSED\" : \"✗ FAILED\";\n return ` ${date} - ${status}`;\n });\n\n const resultText = [\n `Results for test: ${testId}`,\n `Recent: ${passedCount} passed, ${failedCount} failed (showing last ${Math.min(10, result.results.length)})`,\n \"\",\n ...formattedResults,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n }\n\n // Otherwise list all tests\n const result = await listDatadogSynthetics(\n credentials,\n { type, tags },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Synthetics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.tests.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No synthetic tests found matching the specified criteria.\",\n },\n ],\n };\n }\n\n // Group by status\n const byStatus: Record<string, typeof result.tests> = {};\n for (const test of result.tests) {\n const status = test.status;\n if (!byStatus[status]) {\n byStatus[status] = [];\n }\n byStatus[status].push(test);\n }\n\n const formattedTests: string[] = [];\n for (const [status, tests] of Object.entries(byStatus)) {\n formattedTests.push(`\\n## ${status} (${tests.length})`);\n for (const t of tests) {\n formattedTests.push(` - [${t.publicId}] ${t.name} (${t.type})`);\n }\n }\n\n const resultText = [\n `Found ${result.tests.length} synthetic tests:`,\n ...formattedTests,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_synthetics\");\n\n // Datadog Metrics Tool\n server.tool(\n \"datadog_metrics\",\n \"Query Datadog metrics. Returns timeseries data for the specified metric query. Useful for checking specific metric values.\",\n {\n query: z\n .string()\n .describe(\n \"Metric query. Format: 'aggregation:metric.name{tags}'. Examples: 'avg:system.cpu.user{*}', 'sum:aws.lambda.invocations{function:my-func}.as_count()', 'max:aws.lambda.duration{env:production}'.\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('1h', '30m', '1d'), or Unix timestamp. Defaults to '1h'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now' or Unix timestamp. Defaults to 'now'.\",\n ),\n },\n async ({ query, from, to }) => {\n log.info(\"Tool called: datadog_metrics\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n // Parse time parameters\n const now = Math.floor(Date.now() / 1000);\n let fromTs: number;\n let toTs: number;\n\n // Parse 'from' parameter\n const fromStr = from || \"1h\";\n if (fromStr.match(/^\\d+$/)) {\n fromTs = parseInt(fromStr, 10);\n } else if (fromStr.match(/^(\\d+)h$/)) {\n const hours = parseInt(fromStr.match(/^(\\d+)h$/)![1], 10);\n fromTs = now - hours * 3600;\n } else if (fromStr.match(/^(\\d+)m$/)) {\n const minutes = parseInt(fromStr.match(/^(\\d+)m$/)![1], 10);\n fromTs = now - minutes * 60;\n } else if (fromStr.match(/^(\\d+)d$/)) {\n const days = parseInt(fromStr.match(/^(\\d+)d$/)![1], 10);\n fromTs = now - days * 86400;\n } else {\n fromTs = now - 3600; // Default 1 hour\n }\n\n // Parse 'to' parameter\n const toStr = to || \"now\";\n if (toStr === \"now\") {\n toTs = now;\n } else if (toStr.match(/^\\d+$/)) {\n toTs = parseInt(toStr, 10);\n } else {\n toTs = now;\n }\n\n const result = await queryDatadogMetrics(\n credentials,\n { query, from: fromTs, to: toTs },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog Metrics API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.series.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No data found for query: ${query}\\nTime range: ${new Date(fromTs * 1000).toISOString()} to ${new Date(toTs * 1000).toISOString()}`,\n },\n ],\n };\n }\n\n const formattedSeries = result.series.map((s) => {\n const points = s.pointlist.slice(-5); // Last 5 points\n const formattedPoints = points\n .map(([ts, val]) => {\n const date = new Date(ts).toISOString();\n return ` ${date}: ${val !== null ? val.toFixed(4) : \"null\"}`;\n })\n .join(\"\\n\");\n return `\\n ${s.metric} (${s.scope})${s.unit ? ` [${s.unit}]` : \"\"}:\\n${formattedPoints}`;\n });\n\n const resultText = [\n `Query: ${query}`,\n `Time range: ${new Date(fromTs * 1000).toISOString()} to ${new Date(toTs * 1000).toISOString()}`,\n `Found ${result.series.length} series (showing last 5 points each):`,\n ...formattedSeries,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_metrics\");\n\n // Datadog RUM Tool\n server.tool(\n \"datadog_rum\",\n \"Search Datadog RUM (Real User Monitoring) events. Find user sessions, page views, errors, and actions. Useful for debugging frontend issues and understanding user behavior.\",\n {\n query: z\n .string()\n .optional()\n .describe(\n \"RUM search query. E.g., '@type:error', '@session.id:abc123', '@view.url:*checkout*'. Defaults to '*' (all events).\",\n ),\n from: z\n .string()\n .optional()\n .describe(\n \"Start time. Formats: relative ('now-15m', 'now-1h', 'now-1d'), ISO 8601 ('2024-01-15T10:00:00Z'). Defaults to 'now-15m'.\",\n ),\n to: z\n .string()\n .optional()\n .describe(\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Max events to return (1-1000). Defaults to 50.\"),\n },\n async ({ query, from, to, limit }) => {\n log.info(\"Tool called: datadog_rum\");\n\n const credentials = getDatadogCredentials();\n if (!credentials) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: Datadog credentials not found. Please set DATADOG_API_KEY and DATADOG_APP_KEY environment variables.\",\n },\n ],\n };\n }\n\n const result = await searchDatadogRum(\n credentials,\n { query, from, to, limit },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error from Datadog RUM API: ${result.error}`,\n },\n ],\n };\n }\n\n if (result.events.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No RUM events found for query: ${result.query}\\nTime range: ${result.timeRange.from} to ${result.timeRange.to}`,\n },\n ],\n };\n }\n\n // Group events by type for better readability\n const byType: Record<string, typeof result.events> = {};\n for (const event of result.events) {\n const type = event.type;\n if (!byType[type]) {\n byType[type] = [];\n }\n byType[type].push(event);\n }\n\n const formattedEvents: string[] = [];\n for (const [type, events] of Object.entries(byType)) {\n formattedEvents.push(`\\n## ${type} (${events.length})`);\n for (const e of events.slice(0, 10)) {\n // Limit per type\n const parts = [e.timestamp];\n if (e.viewName || e.viewUrl) {\n parts.push(e.viewName || e.viewUrl || \"\");\n }\n if (e.errorMessage) {\n parts.push(`Error: ${e.errorMessage}`);\n }\n if (e.sessionId) {\n parts.push(`Session: ${e.sessionId.substring(0, 8)}...`);\n }\n formattedEvents.push(` - ${parts.join(\" | \")}`);\n }\n }\n\n const resultText = [\n `Query: ${result.query}`,\n `Time range: ${result.timeRange.from} to ${result.timeRange.to}`,\n `Found ${result.events.length} RUM events:`,\n ...formattedEvents,\n ].join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: resultText,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: datadog_rum\");\n\n // LLM Debug Tools\n server.tool(\n \"llm_debug_call\",\n \"Make a debug LLM API call and inspect the raw response. Useful for understanding how each provider formats responses, especially for reasoning/thinking content. Returns full history, raw responses, and extracted reasoning.\",\n {\n provider: z\n .enum([\"anthropic\", \"gemini\", \"openai\", \"openrouter\"])\n .describe(\"LLM provider to call\"),\n model: z\n .string()\n .optional()\n .describe(\n \"Model to use. If not provided, uses a sensible default. For reasoning tests, try 'o3-mini' with openai.\",\n ),\n message: z\n .string()\n .describe(\n \"Message to send to the LLM. For reasoning tests, try something that requires thinking like 'What is 15 * 17? Think step by step.'\",\n ),\n },\n async ({ provider, model, message }) => {\n log.info(`Tool called: llm_debug_call (provider: ${provider})`);\n\n const result = await debugLlmCall(\n { provider: provider as LlmProvider, model, message },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error calling ${provider}: ${result.error}`,\n },\n ],\n };\n }\n\n const sections = [\n `## LLM Debug Call Result`,\n `Provider: ${result.provider}`,\n `Model: ${result.model}`,\n ``,\n `### Content`,\n result.content || \"(no content)\",\n ``,\n `### Reasoning (${result.reasoning?.length || 0} items, ${result.reasoningTokens || 0} tokens)`,\n result.reasoning && result.reasoning.length > 0\n ? result.reasoning.map((r, i) => `[${i}] ${r}`).join(\"\\n\")\n : \"(no reasoning extracted)\",\n ``,\n `### Usage`,\n JSON.stringify(result.usage, null, 2),\n ``,\n `### History (${result.history?.length || 0} items)`,\n JSON.stringify(result.history, null, 2),\n ``,\n `### Raw Responses (${result.rawResponses?.length || 0} items)`,\n JSON.stringify(result.rawResponses, null, 2),\n ];\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: sections.join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: llm_debug_call\");\n\n server.tool(\n \"llm_list_providers\",\n \"List available LLM providers with their default and reasoning-capable models.\",\n {},\n async () => {\n log.info(\"Tool called: llm_list_providers\");\n\n const { providers } = listLlmProviders();\n\n const formatted = providers.map((p) => {\n const reasoningNote =\n p.reasoningModels.length > 0\n ? `Reasoning models: ${p.reasoningModels.join(\", \")}`\n : \"No known reasoning models\";\n return `- ${p.name}: default=${p.defaultModel}, ${reasoningNote}`;\n });\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n \"## Available LLM Providers\",\n \"\",\n ...formatted,\n \"\",\n \"Use llm_debug_call to test responses from any provider.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: llm_list_providers\");\n\n // AWS CLI Tools\n\n // AWS List Profiles\n server.tool(\n \"aws_list_profiles\",\n \"List available AWS profiles from ~/.aws/config and credentials.\",\n {},\n async () => {\n log.info(\"Tool called: aws_list_profiles\");\n\n const result = await listAwsProfiles(log);\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error listing profiles: ${result.error}`,\n },\n ],\n };\n }\n\n const profiles = result.data || [];\n if (profiles.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No AWS profiles found. Configure profiles in ~/.aws/config or ~/.aws/credentials.\",\n },\n ],\n };\n }\n\n const formatted = profiles\n .map((p) => `- ${p.name} (${p.source})`)\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${profiles.length} AWS profiles:`,\n \"\",\n formatted,\n \"\",\n \"Use the 'profile' parameter in other AWS tools to specify which profile to use.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_list_profiles\");\n\n // Step Functions: List Executions\n server.tool(\n \"aws_stepfunctions_list_executions\",\n \"List Step Function executions for a state machine. Useful for finding stuck or running executions.\",\n {\n stateMachineArn: z.string().describe(\"ARN of the state machine\"),\n statusFilter: z\n .enum([\n \"RUNNING\",\n \"SUCCEEDED\",\n \"FAILED\",\n \"TIMED_OUT\",\n \"ABORTED\",\n \"PENDING_REDRIVE\",\n ])\n .optional()\n .describe(\"Filter by execution status\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n maxResults: z\n .number()\n .optional()\n .describe(\"Max results (1-1000, default 100)\"),\n },\n async ({ stateMachineArn, statusFilter, profile, region, maxResults }) => {\n log.info(\"Tool called: aws_stepfunctions_list_executions\");\n\n const result = await listStepFunctionExecutions(\n {\n stateMachineArn,\n statusFilter,\n profile,\n region,\n maxResults,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const executions = result.data?.executions || [];\n if (executions.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No ${statusFilter || \"\"} executions found for state machine.`,\n },\n ],\n };\n }\n\n const formatted = executions\n .map((e) => `- ${e.name} (${e.status}) started ${e.startDate}`)\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${executions.length} executions:`,\n \"\",\n formatted,\n \"\",\n \"Use aws_stepfunctions_stop_execution to stop running executions.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_stepfunctions_list_executions\");\n\n // Step Functions: Stop Execution\n server.tool(\n \"aws_stepfunctions_stop_execution\",\n \"Stop a running Step Function execution. Use with caution - this will abort the workflow.\",\n {\n executionArn: z.string().describe(\"ARN of the execution to stop\"),\n cause: z\n .string()\n .optional()\n .describe(\"Description of why the execution was stopped\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ executionArn, cause, profile, region }) => {\n log.info(\"Tool called: aws_stepfunctions_stop_execution\");\n\n const result = await stopStepFunctionExecution(\n {\n executionArn,\n cause,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error stopping execution: ${result.error}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Execution stopped successfully at ${result.data?.stopDate || \"unknown time\"}.`,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_stepfunctions_stop_execution\");\n\n // Lambda: List Functions\n server.tool(\n \"aws_lambda_list_functions\",\n \"List Lambda functions in the account. Filter by function name prefix.\",\n {\n functionNamePrefix: z\n .string()\n .optional()\n .describe(\"Filter by function name prefix\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n maxResults: z.number().optional().describe(\"Max results to return\"),\n },\n async ({ functionNamePrefix, profile, region, maxResults }) => {\n log.info(\"Tool called: aws_lambda_list_functions\");\n\n const result = await listLambdaFunctions(\n {\n functionNamePrefix,\n profile,\n region,\n maxResults,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const functions = result.data?.Functions || [];\n if (functions.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: functionNamePrefix\n ? `No functions found with prefix \"${functionNamePrefix}\".`\n : \"No Lambda functions found in this account/region.\",\n },\n ],\n };\n }\n\n const formatted = functions\n .map(\n (f) =>\n `- ${f.FunctionName} (${f.Runtime || \"unknown runtime\"}, ${f.MemorySize}MB)`,\n )\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${functions.length} Lambda functions:`,\n \"\",\n formatted,\n \"\",\n \"Use aws_lambda_get_function for details on a specific function.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_lambda_list_functions\");\n\n // Lambda: Get Function\n server.tool(\n \"aws_lambda_get_function\",\n \"Get configuration and details for a specific Lambda function.\",\n {\n functionName: z.string().describe(\"Function name or ARN\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ functionName, profile, region }) => {\n log.info(\"Tool called: aws_lambda_get_function\");\n\n const result = await getLambdaFunction(\n {\n functionName,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(result.data, null, 2),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_lambda_get_function\");\n\n // CloudWatch Logs: Filter Log Events\n server.tool(\n \"aws_logs_filter_log_events\",\n \"Search CloudWatch Logs for a log group. Filter by pattern and time range.\",\n {\n logGroupName: z\n .string()\n .describe(\"Log group name (e.g., /aws/lambda/my-function)\"),\n filterPattern: z\n .string()\n .optional()\n .describe(\n \"CloudWatch filter pattern (e.g., 'ERROR', '{ $.level = \\\"error\\\" }')\",\n ),\n startTime: z\n .string()\n .optional()\n .describe(\n \"Start time (ISO 8601 or relative like 'now-1h'). Defaults to 'now-15m'.\",\n ),\n endTime: z\n .string()\n .optional()\n .describe(\"End time (ISO 8601 or 'now'). Defaults to 'now'.\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n limit: z\n .number()\n .optional()\n .describe(\"Max events to return (default 100)\"),\n },\n async ({\n logGroupName,\n filterPattern,\n startTime,\n endTime,\n profile,\n region,\n limit,\n }) => {\n log.info(\"Tool called: aws_logs_filter_log_events\");\n\n const result = await filterLogEvents(\n {\n logGroupName,\n filterPattern,\n startTime: startTime || \"now-15m\",\n endTime: endTime || \"now\",\n limit: limit || 100,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const events = result.data?.events || [];\n if (events.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No log events found matching the filter in ${logGroupName}.`,\n },\n ],\n };\n }\n\n const formatted = events\n .map((e) => {\n const timestamp = new Date(e.timestamp).toISOString();\n return `[${timestamp}] ${e.message}`;\n })\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [`Found ${events.length} log events:`, \"\", formatted].join(\n \"\\n\",\n ),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_logs_filter_log_events\");\n\n // S3: List Objects\n server.tool(\n \"aws_s3_list_objects\",\n \"List objects in an S3 bucket with optional prefix filtering.\",\n {\n bucket: z.string().describe(\"S3 bucket name\"),\n prefix: z.string().optional().describe(\"Object key prefix filter\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n maxResults: z.number().optional().describe(\"Max results to return\"),\n },\n async ({ bucket, prefix, profile, region, maxResults }) => {\n log.info(\"Tool called: aws_s3_list_objects\");\n\n const result = await listS3Objects(\n {\n bucket,\n prefix,\n profile,\n region,\n maxResults,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const objects = result.data?.Contents || [];\n if (objects.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: prefix\n ? `No objects found with prefix \"${prefix}\" in bucket ${bucket}.`\n : `Bucket ${bucket} is empty.`,\n },\n ],\n };\n }\n\n const formatted = objects\n .map((o) => {\n const size =\n o.Size < 1024\n ? `${o.Size}B`\n : o.Size < 1024 * 1024\n ? `${(o.Size / 1024).toFixed(1)}KB`\n : `${(o.Size / (1024 * 1024)).toFixed(1)}MB`;\n return `- ${o.Key} (${size}, ${o.LastModified})`;\n })\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${objects.length} objects in ${bucket}:`,\n \"\",\n formatted,\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_s3_list_objects\");\n\n // CloudFormation: Describe Stack\n server.tool(\n \"aws_cloudformation_describe_stack\",\n \"Get details and status of a CloudFormation stack.\",\n {\n stackName: z.string().describe(\"Stack name or ARN\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ stackName, profile, region }) => {\n log.info(\"Tool called: aws_cloudformation_describe_stack\");\n\n const result = await describeStack(\n {\n stackName,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const stack = result.data?.Stacks?.[0];\n if (!stack) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Stack \"${stackName}\" not found.`,\n },\n ],\n };\n }\n\n const outputs = stack.Outputs?.map(\n (o) => ` - ${o.OutputKey}: ${o.OutputValue}`,\n ).join(\"\\n\");\n const params = stack.Parameters?.map(\n (p) => ` - ${p.ParameterKey}: ${p.ParameterValue}`,\n ).join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Stack: ${stack.StackName}`,\n `Status: ${stack.StackStatus}`,\n stack.StackStatusReason\n ? `Reason: ${stack.StackStatusReason}`\n : null,\n `Created: ${stack.CreationTime}`,\n stack.LastUpdatedTime\n ? `Last Updated: ${stack.LastUpdatedTime}`\n : null,\n stack.Description ? `Description: ${stack.Description}` : null,\n \"\",\n outputs ? `Outputs:\\n${outputs}` : null,\n params ? `Parameters:\\n${params}` : null,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_cloudformation_describe_stack\");\n\n // DynamoDB: Describe Table\n server.tool(\n \"aws_dynamodb_describe_table\",\n \"Get metadata about a DynamoDB table including key schema, indexes, and provisioned capacity.\",\n {\n tableName: z.string().describe(\"DynamoDB table name\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ tableName, profile, region }) => {\n log.info(\"Tool called: aws_dynamodb_describe_table\");\n\n const result = await describeDynamoDBTable(\n {\n tableName,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(result.data?.Table, null, 2),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_dynamodb_describe_table\");\n\n // DynamoDB: Scan\n server.tool(\n \"aws_dynamodb_scan\",\n \"Scan a DynamoDB table. Use sparingly on large tables - prefer query when possible.\",\n {\n tableName: z.string().describe(\"DynamoDB table name\"),\n filterExpression: z\n .string()\n .optional()\n .describe(\"Filter expression (e.g., 'status = :s')\"),\n expressionAttributeValues: z\n .string()\n .optional()\n .describe(\n 'JSON object of attribute values (e.g., \\'{\\\\\":s\\\\\":{\\\\\"S\\\\\":\\\\\"active\\\\\"}}\\')',\n ),\n limit: z.number().optional().describe(\"Max items to return (default 25)\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({\n tableName,\n filterExpression,\n expressionAttributeValues,\n limit,\n profile,\n region,\n }) => {\n log.info(\"Tool called: aws_dynamodb_scan\");\n\n const result = await scanDynamoDB(\n {\n tableName,\n filterExpression,\n expressionAttributeValues,\n limit: limit || 25,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const items = result.data?.Items || [];\n if (items.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No items found in table ${tableName}.`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${items.length} items:`,\n \"\",\n JSON.stringify(items, null, 2),\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_dynamodb_scan\");\n\n // DynamoDB: Query\n server.tool(\n \"aws_dynamodb_query\",\n \"Query a DynamoDB table by partition key. More efficient than scan for targeted lookups.\",\n {\n tableName: z.string().describe(\"DynamoDB table name\"),\n keyConditionExpression: z\n .string()\n .describe(\"Key condition (e.g., 'pk = :pk')\"),\n expressionAttributeValues: z\n .string()\n .describe(\"JSON object of attribute values\"),\n indexName: z.string().optional().describe(\"GSI or LSI name to query\"),\n filterExpression: z\n .string()\n .optional()\n .describe(\"Additional filter expression\"),\n limit: z.number().optional().describe(\"Max items to return\"),\n scanIndexForward: z\n .boolean()\n .optional()\n .describe(\"Sort ascending (true) or descending (false)\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({\n tableName,\n keyConditionExpression,\n expressionAttributeValues,\n indexName,\n filterExpression,\n limit,\n scanIndexForward,\n profile,\n region,\n }) => {\n log.info(\"Tool called: aws_dynamodb_query\");\n\n const result = await queryDynamoDB(\n {\n tableName,\n keyConditionExpression,\n expressionAttributeValues,\n indexName,\n filterExpression,\n limit,\n scanIndexForward,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const items = result.data?.Items || [];\n if (items.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No items found matching the query.`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${items.length} items:`,\n \"\",\n JSON.stringify(items, null, 2),\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_dynamodb_query\");\n\n // DynamoDB: Get Item\n server.tool(\n \"aws_dynamodb_get_item\",\n \"Get a single item from a DynamoDB table by its primary key.\",\n {\n tableName: z.string().describe(\"DynamoDB table name\"),\n key: z\n .string()\n .describe(\n 'JSON object of the primary key (e.g., \\'{\\\\\"pk\\\\\":{\\\\\"S\\\\\":\\\\\"user#123\\\\\"},\\\\\"sk\\\\\":{\\\\\"S\\\\\":\\\\\"profile\\\\\"}}\\')',\n ),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ tableName, key, profile, region }) => {\n log.info(\"Tool called: aws_dynamodb_get_item\");\n\n const result = await getDynamoDBItem(\n {\n tableName,\n key,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n if (!result.data?.Item) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Item not found with the specified key.`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: JSON.stringify(result.data.Item, null, 2),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_dynamodb_get_item\");\n\n // SQS: List Queues\n server.tool(\n \"aws_sqs_list_queues\",\n \"List SQS queues in the account. Filter by queue name prefix.\",\n {\n queueNamePrefix: z\n .string()\n .optional()\n .describe(\"Filter by queue name prefix\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ queueNamePrefix, profile, region }) => {\n log.info(\"Tool called: aws_sqs_list_queues\");\n\n const result = await listSQSQueues(\n {\n queueNamePrefix,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const queues = result.data?.QueueUrls || [];\n if (queues.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: queueNamePrefix\n ? `No queues found with prefix \"${queueNamePrefix}\".`\n : \"No SQS queues found in this account/region.\",\n },\n ],\n };\n }\n\n const formatted = queues.map((url) => `- ${url}`).join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Found ${queues.length} queues:`,\n \"\",\n formatted,\n \"\",\n \"Use aws_sqs_get_queue_attributes for details on a specific queue.\",\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_sqs_list_queues\");\n\n // SQS: Get Queue Attributes\n server.tool(\n \"aws_sqs_get_queue_attributes\",\n \"Get attributes for an SQS queue including approximate message count, visibility timeout, and dead-letter config.\",\n {\n queueUrl: z.string().describe(\"SQS queue URL\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ queueUrl, profile, region }) => {\n log.info(\"Tool called: aws_sqs_get_queue_attributes\");\n\n const result = await getSQSQueueAttributes(\n {\n queueUrl,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const attrs = result.data?.Attributes;\n if (!attrs) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No attributes found for queue.`,\n },\n ],\n };\n }\n\n const formatted = Object.entries(attrs)\n .map(([key, value]) => `- ${key}: ${value}`)\n .join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [`Queue Attributes:`, \"\", formatted].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_sqs_get_queue_attributes\");\n\n // SQS: Receive Message\n server.tool(\n \"aws_sqs_receive_message\",\n \"Receive messages from an SQS queue for inspection. Messages are returned to the queue after visibility timeout.\",\n {\n queueUrl: z.string().describe(\"SQS queue URL\"),\n maxNumberOfMessages: z\n .number()\n .optional()\n .describe(\"Max messages to receive (1-10, default 1)\"),\n visibilityTimeout: z\n .number()\n .optional()\n .describe(\"Seconds to hide message (default 30)\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({\n queueUrl,\n maxNumberOfMessages,\n visibilityTimeout,\n profile,\n region,\n }) => {\n log.info(\"Tool called: aws_sqs_receive_message\");\n\n const result = await receiveSQSMessage(\n {\n queueUrl,\n maxNumberOfMessages: maxNumberOfMessages || 1,\n visibilityTimeout: visibilityTimeout || 30,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n const messages = result.data?.Messages || [];\n if (messages.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `No messages available in the queue.`,\n },\n ],\n };\n }\n\n const formatted = messages\n .map((m, i) => {\n return [\n `Message ${i + 1}:`,\n ` ID: ${m.MessageId}`,\n ` Body: ${m.Body}`,\n m.Attributes\n ? ` Attributes: ${JSON.stringify(m.Attributes)}`\n : null,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: [\n `Received ${messages.length} messages (will be returned to queue after visibility timeout):`,\n \"\",\n formatted,\n ].join(\"\\n\"),\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_sqs_receive_message\");\n\n // SQS: Purge Queue\n server.tool(\n \"aws_sqs_purge_queue\",\n \"Delete all messages from an SQS queue. Use with caution - this is irreversible.\",\n {\n queueUrl: z.string().describe(\"SQS queue URL\"),\n profile: z.string().optional().describe(\"AWS profile to use\"),\n region: z.string().optional().describe(\"AWS region\"),\n },\n async ({ queueUrl, profile, region }) => {\n log.info(\"Tool called: aws_sqs_purge_queue\");\n\n const result = await purgeSQSQueue(\n {\n queueUrl,\n profile,\n region,\n },\n log,\n );\n\n if (!result.success) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${result.error}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Queue purged successfully. All messages have been deleted.`,\n },\n ],\n };\n },\n );\n\n log.info(\"Registered tool: aws_sqs_purge_queue\");\n\n log.info(\"MCP server configuration complete\");\n\n return server;\n}\n","import { Request, Response } from \"express\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { createMcpServer } from \"./createMcpServer.js\";\n\n// Version will be injected during build\nconst DEFAULT_VERSION = \"0.0.0\";\n\n/**\n * Options for configuring the MCP Express handler\n */\nexport interface McpExpressHandlerOptions {\n /**\n * Version string for the MCP server\n */\n version?: string;\n /**\n * Whether to enable session management (stateful mode)\n * Default: true\n */\n enableSessions?: boolean;\n /**\n * Custom session ID generator function\n */\n sessionIdGenerator?: () => string;\n /**\n * Enable JSON responses instead of SSE streaming\n * Default: false\n */\n enableJsonResponse?: boolean;\n}\n\n/**\n * Creates an Express handler for the Jaypie MCP server using HTTP transport\n *\n * @param options - Configuration options for the handler\n * @returns Promise that resolves to an Express middleware function\n *\n * @example\n * ```typescript\n * import express from 'express';\n * import { mcpExpressHandler } from '@jaypie/mcp';\n *\n * const app = express();\n * app.use(express.json());\n *\n * // Note: mcpExpressHandler is now async\n * app.use('/mcp', await mcpExpressHandler({\n * version: '1.0.0',\n * enableSessions: true\n * }));\n *\n * app.listen(3000, () => {\n * console.log('MCP server running on http://localhost:3000/mcp');\n * });\n * ```\n */\nexport async function mcpExpressHandler(\n options: McpExpressHandlerOptions = {},\n): Promise<(req: Request, res: Response) => Promise<void>> {\n const {\n version = DEFAULT_VERSION,\n enableSessions = true,\n sessionIdGenerator = () => randomUUID(),\n enableJsonResponse = false,\n } = options;\n\n const server = createMcpServer(version);\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: enableSessions ? sessionIdGenerator : undefined,\n enableJsonResponse,\n });\n\n await server.connect(transport);\n\n return async (req: Request, res: Response): Promise<void> => {\n try {\n await transport.handleRequest(req, res, req.body);\n } catch (error) {\n if (!res.headersSent) {\n res.status(500).json({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n };\n}\n","#!/usr/bin/env node\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { createMcpServer } from \"./createMcpServer.js\";\n\n// Version will be injected during build\nconst version = \"0.0.0\";\n\n/**\n * Load environment variables from .env file in current working directory\n * Simple implementation that doesn't require external dependencies\n */\nfunction loadEnvFile() {\n try {\n const envPath = join(process.cwd(), \".env\");\n const content = readFileSync(envPath, \"utf-8\");\n\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n // Skip comments and empty lines\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex === -1) continue;\n\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n\n // Remove surrounding quotes if present\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n // Only set if not already defined (environment takes precedence)\n if (!process.env[key]) {\n process.env[key] = value;\n }\n }\n } catch {\n // .env file not found or not readable - that's fine\n }\n}\n\n// Load .env file before anything else\nloadEnvFile();\n\n// Parse command-line arguments\nconst args = process.argv.slice(2);\nconst verbose = args.includes(\"--verbose\") || args.includes(\"-v\");\n\n// Logger for verbose mode (uses stderr to not interfere with JSON-RPC on stdout)\nconst log = {\n info: (message: string, ...args: unknown[]) => {\n if (verbose) {\n console.error(`[jaypie-mcp] ${message}`, ...args);\n }\n },\n error: (message: string, ...args: unknown[]) => {\n console.error(`[jaypie-mcp ERROR] ${message}`, ...args);\n },\n};\n\nlet server: McpServer | null = null;\nlet isShuttingDown = false;\n\nasync function gracefulShutdown(exitCode = 0) {\n if (isShuttingDown) {\n return;\n }\n isShuttingDown = true;\n\n log.info(\"Shutting down gracefully...\");\n\n try {\n if (server) {\n await server.close();\n log.info(\"Server closed successfully\");\n }\n } catch (error) {\n log.error(\"Error during shutdown:\", error);\n } finally {\n process.exit(exitCode);\n }\n}\n\nasync function main() {\n log.info(\"Starting Jaypie MCP server...\");\n log.info(`Version: ${version}`);\n log.info(`Node version: ${process.version}`);\n log.info(`Verbose mode: ${verbose ? \"enabled\" : \"disabled\"}`);\n\n server = createMcpServer({ version, verbose });\n\n log.info(\"MCP server created successfully\");\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n log.info(\"Connected to stdio transport\");\n log.info(\"Server is ready to accept requests\");\n\n // Handle process termination signals\n process.on(\"SIGINT\", () => {\n log.info(\"Received SIGINT signal\");\n gracefulShutdown(0);\n });\n process.on(\"SIGTERM\", () => {\n log.info(\"Received SIGTERM signal\");\n gracefulShutdown(0);\n });\n\n // Handle stdio stream errors (but let transport handle normal stdin end/close)\n process.stdin.on(\"error\", (error) => {\n if (error.message?.includes(\"EPIPE\") || error.message?.includes(\"EOF\")) {\n log.info(\"stdin closed\");\n gracefulShutdown(0);\n }\n });\n\n process.stdout.on(\"error\", (error) => {\n if (error.message?.includes(\"EPIPE\")) {\n log.info(\"stdout pipe broken\");\n gracefulShutdown(0);\n }\n });\n\n // Server is running on stdio\n}\n\n// Only run main() if this module is executed directly (not imported)\n// This handles npx and symlinks in node_modules/.bin correctly\nif (process.argv[1]) {\n const realPath = realpathSync(process.argv[1]);\n const realPathAsUrl = pathToFileURL(realPath).href;\n if (import.meta.url === realPathAsUrl) {\n main().catch((error) => {\n log.error(\"Fatal error:\", error);\n process.exit(1);\n });\n }\n}\n\nexport { createMcpServer } from \"./createMcpServer.js\";\nexport type { CreateMcpServerOptions } from \"./createMcpServer.js\";\nexport {\n mcpExpressHandler,\n type McpExpressHandlerOptions,\n} from \"./mcpExpressHandler.js\";\n"],"names":["nullLogger","__filename","__dirname"],"mappings":"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"}
|