@jaypie/mcp 0.3.2 → 0.4.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.
Files changed (79) hide show
  1. package/dist/createMcpServer.d.ts +7 -1
  2. package/dist/index.js +26 -3135
  3. package/dist/index.js.map +1 -1
  4. package/dist/suite.d.ts +1 -0
  5. package/dist/suite.js +2442 -0
  6. package/dist/suite.js.map +1 -0
  7. package/package.json +8 -3
  8. package/release-notes/constructs/1.2.17.md +11 -0
  9. package/release-notes/fabric/0.1.2.md +11 -0
  10. package/release-notes/fabric/0.1.3.md +25 -0
  11. package/release-notes/fabric/0.1.4.md +42 -0
  12. package/release-notes/mcp/0.3.3.md +12 -0
  13. package/release-notes/mcp/0.3.4.md +36 -0
  14. package/release-notes/mcp/0.4.0.md +27 -0
  15. package/release-notes/testkit/1.2.15.md +23 -0
  16. package/skills/agents.md +25 -0
  17. package/skills/aws.md +107 -0
  18. package/skills/cdk.md +141 -0
  19. package/skills/cicd.md +152 -0
  20. package/skills/datadog.md +129 -0
  21. package/skills/debugging.md +148 -0
  22. package/skills/dns.md +134 -0
  23. package/skills/dynamodb.md +140 -0
  24. package/skills/errors.md +142 -0
  25. package/skills/fabric.md +191 -0
  26. package/skills/index.md +7 -0
  27. package/skills/jaypie.md +100 -0
  28. package/skills/legacy.md +97 -0
  29. package/skills/logs.md +160 -0
  30. package/skills/mocks.md +174 -0
  31. package/skills/models.md +195 -0
  32. package/skills/releasenotes.md +94 -0
  33. package/skills/secrets.md +155 -0
  34. package/skills/services.md +175 -0
  35. package/skills/style.md +190 -0
  36. package/skills/tests.md +209 -0
  37. package/skills/tools.md +127 -0
  38. package/skills/topics.md +116 -0
  39. package/skills/variables.md +146 -0
  40. package/skills/writing.md +153 -0
  41. package/prompts/Branch_Management.md +0 -34
  42. package/prompts/Development_Process.md +0 -89
  43. package/prompts/Jaypie_Agent_Rules.md +0 -110
  44. package/prompts/Jaypie_Auth0_Express_Mongoose.md +0 -736
  45. package/prompts/Jaypie_Browser_and_Frontend_Web_Packages.md +0 -18
  46. package/prompts/Jaypie_CDK_Constructs_and_Patterns.md +0 -430
  47. package/prompts/Jaypie_CICD_with_GitHub_Actions.md +0 -371
  48. package/prompts/Jaypie_Commander_CLI_Package.md +0 -166
  49. package/prompts/Jaypie_Core_Errors_and_Logging.md +0 -39
  50. package/prompts/Jaypie_DynamoDB_Package.md +0 -774
  51. package/prompts/Jaypie_Eslint_NPM_Package.md +0 -78
  52. package/prompts/Jaypie_Express_Package.md +0 -630
  53. package/prompts/Jaypie_Fabric_Commander.md +0 -411
  54. package/prompts/Jaypie_Fabric_LLM.md +0 -312
  55. package/prompts/Jaypie_Fabric_Lambda.md +0 -308
  56. package/prompts/Jaypie_Fabric_MCP.md +0 -316
  57. package/prompts/Jaypie_Fabric_Package.md +0 -513
  58. package/prompts/Jaypie_Fabricator.md +0 -617
  59. package/prompts/Jaypie_Ideal_Project_Structure.md +0 -78
  60. package/prompts/Jaypie_Init_CICD_with_GitHub_Actions.md +0 -1186
  61. package/prompts/Jaypie_Init_Express_on_Lambda.md +0 -115
  62. package/prompts/Jaypie_Init_Jaypie_CDK_Package.md +0 -35
  63. package/prompts/Jaypie_Init_Lambda_Package.md +0 -505
  64. package/prompts/Jaypie_Init_Monorepo_Project.md +0 -44
  65. package/prompts/Jaypie_Init_Project_Subpackage.md +0 -65
  66. package/prompts/Jaypie_Legacy_Patterns.md +0 -15
  67. package/prompts/Jaypie_Llm_Calls.md +0 -449
  68. package/prompts/Jaypie_Llm_Tools.md +0 -155
  69. package/prompts/Jaypie_MCP_Package.md +0 -281
  70. package/prompts/Jaypie_Mocks_and_Testkit.md +0 -137
  71. package/prompts/Jaypie_Repokit.md +0 -103
  72. package/prompts/Jaypie_Scrub.md +0 -177
  73. package/prompts/Jaypie_Streaming.md +0 -467
  74. package/prompts/Templates_CDK_Subpackage.md +0 -115
  75. package/prompts/Templates_Express_Subpackage.md +0 -187
  76. package/prompts/Templates_Project_Monorepo.md +0 -326
  77. package/prompts/Templates_Project_Subpackage.md +0 -93
  78. package/prompts/Write_Efficient_Prompt_Guides.md +0 -48
  79. package/prompts/Write_and_Maintain_Engaging_Readme.md +0 -67
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suite.js","sources":["../src/datadog.ts","../src/llm.ts","../src/aws.ts","../src/suite.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","// ServiceSuite for @jaypie/mcp\n// Provides metadata and direct execution for Jaypie MCP services\n\nimport { createServiceSuite, fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport matter from \"gray-matter\";\nimport { gt } from \"semver\";\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\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\");\nconst RELEASE_NOTES_PATH = path.join(__dirname, \"..\", \"release-notes\");\nconst SKILLS_PATH = path.join(__dirname, \"..\", \"skills\");\n\n// Silent logger for direct execution\nconst log = {\n info: () => {},\n error: () => {},\n};\n\n// Helper functions from createMcpServer.ts\ninterface FrontMatter {\n description?: string;\n include?: string;\n globs?: string;\n}\n\ninterface ReleaseNoteFrontMatter {\n date?: string;\n summary?: string;\n version?: 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\nasync function parseReleaseNoteFile(filePath: string): Promise<{\n date?: string;\n filename: string;\n summary?: string;\n version?: string;\n}> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const filename = path.basename(filePath, \".md\");\n\n if (content.startsWith(\"---\")) {\n const parsed = matter(content);\n const frontMatter = parsed.data as ReleaseNoteFrontMatter;\n return {\n date: frontMatter.date,\n filename,\n summary: frontMatter.summary,\n version: frontMatter.version || filename,\n };\n }\n\n return { filename, version: filename };\n } catch {\n return { filename: path.basename(filePath, \".md\") };\n }\n}\n\nfunction formatReleaseNoteListItem(note: {\n date?: string;\n filename: string;\n packageName: string;\n summary?: string;\n version?: string;\n}): string {\n const { date, packageName, summary, version } = note;\n const parts = [`* ${packageName}@${version}`];\n\n if (date) {\n parts.push(`(${date})`);\n }\n\n if (summary) {\n parts.push(`- ${summary}`);\n }\n\n return parts.join(\" \");\n}\n\n// Skill helper functions\ninterface SkillFrontMatter {\n description?: string;\n}\n\nfunction isValidSkillAlias(alias: string): boolean {\n const normalized = alias.toLowerCase().trim();\n // Reject if contains path separators or traversal\n if (\n normalized.includes(\"/\") ||\n normalized.includes(\"\\\\\") ||\n normalized.includes(\"..\")\n ) {\n return false;\n }\n // Only allow alphanumeric, hyphens, underscores\n return /^[a-z0-9_-]+$/.test(normalized);\n}\n\nasync function parseSkillFile(filePath: string): Promise<{\n alias: string;\n description?: string;\n}> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const alias = path.basename(filePath, \".md\");\n\n if (content.startsWith(\"---\")) {\n const parsed = matter(content);\n const frontMatter = parsed.data as SkillFrontMatter;\n return {\n alias,\n description: frontMatter.description,\n };\n }\n\n return { alias };\n } catch {\n return { alias: path.basename(filePath, \".md\") };\n }\n}\n\nfunction formatSkillListItem(skill: {\n alias: string;\n description?: string;\n}): string {\n const { alias, description } = skill;\n if (description) {\n return `* ${alias} - ${description}`;\n }\n return `* ${alias}`;\n}\n\nasync function getPackageReleaseNotes(packageName: string): Promise<\n Array<{\n date?: string;\n filename: string;\n packageName: string;\n summary?: string;\n version?: string;\n }>\n> {\n const packageDir = path.join(RELEASE_NOTES_PATH, packageName);\n try {\n const files = await fs.readdir(packageDir);\n const mdFiles = files.filter((file) => file.endsWith(\".md\"));\n\n const notes = await Promise.all(\n mdFiles.map(async (file) => {\n const parsed = await parseReleaseNoteFile(path.join(packageDir, file));\n return { ...parsed, packageName };\n }),\n );\n\n return notes.sort((a, b) => {\n if (!a.version || !b.version) return 0;\n try {\n return gt(a.version, b.version) ? -1 : 1;\n } catch {\n return b.version.localeCompare(a.version);\n }\n });\n } catch {\n return [];\n }\n}\n\nfunction filterReleaseNotesSince(\n notes: Array<{\n date?: string;\n filename: string;\n packageName: string;\n summary?: string;\n version?: string;\n }>,\n sinceVersion: string,\n): Array<{\n date?: string;\n filename: string;\n packageName: string;\n summary?: string;\n version?: string;\n}> {\n return notes.filter((note) => {\n if (!note.version) return false;\n try {\n return gt(note.version, sinceVersion);\n } catch {\n return false;\n }\n });\n}\n\n// =============================================================================\n// DOCS SERVICES\n// =============================================================================\n\nconst version = fabricService({\n alias: \"version\",\n description: `Prints the current version and hash, \\`${BUILD_VERSION_STRING}\\``,\n input: {},\n service: async () => BUILD_VERSION_STRING,\n});\n\nconst skill = fabricService({\n alias: \"skill\",\n description:\n \"Access Jaypie development documentation. Pass a skill alias (e.g., 'aws', 'tests', 'errors') to get that documentation. Pass 'index' or no argument to list all available skills.\",\n input: {\n alias: {\n type: String,\n required: false,\n description:\n \"Skill alias (e.g., 'aws', 'tests'). Omit or use 'index' to list all skills.\",\n },\n },\n service: async ({ alias: inputAlias }: { alias?: string }) => {\n const alias = (inputAlias || \"index\").toLowerCase().trim();\n\n // Security: validate alias to prevent path traversal\n if (!isValidSkillAlias(alias)) {\n throw new Error(\n `Invalid skill alias \"${alias}\". Use alphanumeric characters, hyphens, and underscores only.`,\n );\n }\n\n // If requesting index, return list of all skills with descriptions\n if (alias === \"index\") {\n const indexPath = path.join(SKILLS_PATH, \"index.md\");\n let indexContent = \"\";\n\n try {\n indexContent = await fs.readFile(indexPath, \"utf-8\");\n // Strip frontmatter for display\n if (indexContent.startsWith(\"---\")) {\n const parsed = matter(indexContent);\n indexContent = parsed.content.trim();\n }\n } catch {\n // Index file doesn't exist, will just show skill list\n }\n\n // Get all skill files\n const files = await fs.readdir(SKILLS_PATH);\n const mdFiles = files.filter(\n (file) => file.endsWith(\".md\") && file !== \"index.md\",\n );\n\n const skills = await Promise.all(\n mdFiles.map((file) => parseSkillFile(path.join(SKILLS_PATH, file))),\n );\n\n // Sort alphabetically\n skills.sort((a, b) => a.alias.localeCompare(b.alias));\n\n const skillList = skills.map(formatSkillListItem).join(\"\\n\");\n\n if (indexContent) {\n return `${indexContent}\\n\\n## Available Skills\\n\\n${skillList}`;\n }\n return `# Jaypie Skills\\n\\n## Available Skills\\n\\n${skillList}`;\n }\n\n // Read specific skill file\n const skillPath = path.join(SKILLS_PATH, `${alias}.md`);\n try {\n return await fs.readFile(skillPath, \"utf-8\");\n } catch {\n throw new Error(\n `Skill \"${alias}\" not found. Use skill(\"index\") to list available skills.`,\n );\n }\n },\n});\n\nconst listPrompts = fabricService({\n alias: \"list_prompts\",\n description:\n \"[DEPRECATED: Use skill('index') instead] 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 input: {},\n service: async () => {\n const files = await fs.readdir(PROMPTS_PATH);\n const mdFiles = files.filter((file) => file.endsWith(\".md\"));\n const prompts = await Promise.all(\n mdFiles.map((file) => parseMarkdownFile(path.join(PROMPTS_PATH, file))),\n );\n return (\n prompts.map(formatPromptListItem).join(\"\\n\") ||\n \"No .md files found in the prompts directory.\"\n );\n },\n});\n\nconst readPrompt = fabricService({\n alias: \"read_prompt\",\n description:\n \"[DEPRECATED: Use skill(alias) instead] 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 input: {\n filename: {\n type: String,\n required: true,\n description:\n \"The prompt filename from list_prompts (e.g., 'Jaypie_Express_Package.md', 'Development_Process.md')\",\n },\n },\n service: async ({ filename }: { filename: string }) => {\n const filePath = path.join(PROMPTS_PATH, filename);\n return fs.readFile(filePath, \"utf-8\");\n },\n});\n\nconst listReleaseNotes = fabricService({\n alias: \"list_release_notes\",\n description:\n \"List available release notes for Jaypie packages. Filter by package name and/or get only versions newer than a specified version.\",\n input: {\n package: {\n type: String,\n required: false,\n description:\n \"Filter by package name (e.g., 'jaypie', 'mcp'). If not provided, lists release notes for all packages.\",\n },\n since_version: {\n type: String,\n required: false,\n description:\n \"Only show versions newer than this (e.g., '1.0.0'). Uses semver comparison.\",\n },\n },\n service: async ({\n package: packageFilter,\n since_version: sinceVersion,\n }: {\n package?: string;\n since_version?: string;\n }) => {\n const entries = await fs.readdir(RELEASE_NOTES_PATH, {\n withFileTypes: true,\n });\n const packageDirs = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n const packagesToList = packageFilter\n ? packageDirs.filter((pkg) => pkg === packageFilter)\n : packageDirs;\n\n if (packagesToList.length === 0 && packageFilter) {\n return `No release notes found for package \"${packageFilter}\".`;\n }\n\n const allNotes = await Promise.all(\n packagesToList.map((pkg) => getPackageReleaseNotes(pkg)),\n );\n let flatNotes = allNotes.flat();\n\n if (sinceVersion) {\n flatNotes = filterReleaseNotesSince(flatNotes, sinceVersion);\n }\n\n if (flatNotes.length === 0) {\n const filterDesc = sinceVersion ? ` newer than ${sinceVersion}` : \"\";\n return `No release notes found${filterDesc}.`;\n }\n\n return flatNotes.map(formatReleaseNoteListItem).join(\"\\n\");\n },\n});\n\nconst readReleaseNote = fabricService({\n alias: \"read_release_note\",\n description:\n \"Read the full content of a specific release note. Call list_release_notes first to see available versions.\",\n input: {\n package: {\n type: String,\n required: true,\n description: \"Package name (e.g., 'jaypie', 'mcp')\",\n },\n version: {\n type: String,\n required: true,\n description: \"Version number (e.g., '1.2.3')\",\n },\n },\n service: async ({\n package: packageName,\n version: ver,\n }: {\n package: string;\n version: string;\n }) => {\n const filePath = path.join(RELEASE_NOTES_PATH, packageName, `${ver}.md`);\n return fs.readFile(filePath, \"utf-8\");\n },\n});\n\n// =============================================================================\n// DATADOG SERVICES\n// =============================================================================\n\nconst datadogLogs = fabricService({\n alias: \"datadog_logs\",\n description:\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 input: {\n query: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\n \"Override the environment (e.g., 'sandbox', 'kitchen', 'lab', 'studio', 'production'). If not provided, uses DD_ENV env var.\",\n },\n service: {\n type: String,\n required: false,\n description:\n \"Override the service name. If not provided, uses DD_SERVICE env var.\",\n },\n from: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n },\n limit: {\n type: Number,\n required: false,\n description: \"Max logs to return (1-1000). Defaults to 50.\",\n },\n sort: {\n type: [\"timestamp\", \"-timestamp\"] as const,\n required: false,\n description:\n \"Sort order: 'timestamp' (oldest first) or '-timestamp' (newest first, default).\",\n },\n },\n service: async (input: {\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 const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n const result = await searchDatadogLogs(credentials, input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst datadogLogAnalytics = fabricService({\n alias: \"datadog_log_analytics\",\n description:\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 input: {\n groupBy: {\n type: [String],\n required: true,\n description:\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: {\n type: String,\n required: false,\n description:\n \"Filter query. Examples: 'status:error', '*timeout*', '@http.method:POST'. Use '*' for all logs.\",\n },\n source: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\n \"Override the environment filter. If not provided, uses DD_ENV env var.\",\n },\n service: {\n type: String,\n required: false,\n description:\n \"Override the service name filter. If not provided, uses DD_SERVICE env var.\",\n },\n from: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n },\n aggregation: {\n type: [\"count\", \"avg\", \"sum\", \"min\", \"max\", \"cardinality\"] as const,\n required: false,\n description:\n \"Aggregation type. 'count' counts logs, others require a metric field. Defaults to 'count'.\",\n },\n metric: {\n type: String,\n required: false,\n description:\n \"Metric field to aggregate when using avg, sum, min, max, or cardinality. E.g., '@duration', '@http.response_time'.\",\n },\n },\n service: async (input: {\n groupBy: string[];\n query?: string;\n source?: string;\n env?: string;\n service?: string;\n from?: string;\n to?: string;\n aggregation?: \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\" | \"cardinality\";\n metric?: string;\n }) => {\n const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n const compute = input.aggregation\n ? [{ aggregation: input.aggregation, metric: input.metric }]\n : [{ aggregation: \"count\" as const }];\n const result = await aggregateDatadogLogs(\n credentials,\n { ...input, compute },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst datadogMonitors = fabricService({\n alias: \"datadog_monitors\",\n description:\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 input: {\n status: {\n type: Array,\n required: false,\n description:\n \"Filter monitors by status. E.g., ['Alert', 'Warn'] to see only alerting monitors.\",\n },\n tags: {\n type: Array,\n required: false,\n description:\n \"Filter monitors by resource tags (tags on the monitored resources).\",\n },\n monitorTags: {\n type: Array,\n required: false,\n description:\n \"Filter monitors by monitor tags (tags on the monitor itself).\",\n },\n name: {\n type: String,\n required: false,\n description: \"Filter monitors by name (partial match supported).\",\n },\n },\n service: async (input: {\n status?: (\"Alert\" | \"Warn\" | \"No Data\" | \"OK\")[];\n tags?: string[];\n monitorTags?: string[];\n name?: string;\n }) => {\n const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n const result = await listDatadogMonitors(credentials, input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst datadogSynthetics = fabricService({\n alias: \"datadog_synthetics\",\n description:\n \"List Datadog Synthetic tests and optionally get recent results for a specific test. Shows test status, type (api/browser), and locations.\",\n input: {\n type: {\n type: [\"api\", \"browser\"] as const,\n required: false,\n description: \"Filter tests by type: 'api' or 'browser'.\",\n },\n tags: {\n type: Array,\n required: false,\n description: \"Filter tests by tags.\",\n },\n testId: {\n type: String,\n required: false,\n description:\n \"If provided, fetches recent results for this specific test (public_id). Otherwise lists all tests.\",\n },\n },\n service: async (input: {\n type?: \"api\" | \"browser\";\n tags?: string[];\n testId?: string;\n }) => {\n const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n if (input.testId) {\n const result = await getDatadogSyntheticResults(\n credentials,\n input.testId,\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n }\n const result = await listDatadogSynthetics(credentials, input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst datadogMetrics = fabricService({\n alias: \"datadog_metrics\",\n description:\n \"Query Datadog metrics. Returns timeseries data for the specified metric query. Useful for checking specific metric values.\",\n input: {\n query: {\n type: String,\n required: true,\n description:\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: {\n type: String,\n required: false,\n description:\n \"Start time. Formats: relative ('1h', '30m', '1d'), or Unix timestamp. Defaults to '1h'.\",\n },\n to: {\n type: String,\n required: false,\n description:\n \"End time. Formats: 'now' or Unix timestamp. Defaults to 'now'.\",\n },\n },\n service: async (input: { query: string; from?: string; to?: string }) => {\n const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n const now = Math.floor(Date.now() / 1000);\n const fromStr = input.from || \"1h\";\n let fromTs: number;\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;\n }\n const toStr = input.to || \"now\";\n const toTs = toStr === \"now\" ? now : parseInt(toStr, 10);\n const result = await queryDatadogMetrics(\n credentials,\n { query: input.query, from: fromTs, to: toTs },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst datadogRum = fabricService({\n alias: \"datadog_rum\",\n description:\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 input: {\n query: {\n type: String,\n required: false,\n description:\n \"RUM search query. E.g., '@type:error', '@session.id:abc123', '@view.url:*checkout*'. Defaults to '*' (all events).\",\n },\n from: {\n type: String,\n required: false,\n description:\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: {\n type: String,\n required: false,\n description:\n \"End time. Formats: 'now', relative ('now-5m'), or ISO 8601. Defaults to 'now'.\",\n },\n limit: {\n type: Number,\n required: false,\n description: \"Max events to return (1-1000). Defaults to 50.\",\n },\n },\n service: async (input: {\n query?: string;\n from?: string;\n to?: string;\n limit?: number;\n }) => {\n const credentials = getDatadogCredentials();\n if (!credentials) {\n throw new Error(\n \"Datadog credentials not found. Set DATADOG_API_KEY and DATADOG_APP_KEY.\",\n );\n }\n const result = await searchDatadogRum(credentials, input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\n// =============================================================================\n// LLM SERVICES\n// =============================================================================\n\nconst llmDebugCall = fabricService({\n alias: \"llm_debug_call\",\n description:\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 input: {\n provider: {\n type: [\"anthropic\", \"gemini\", \"openai\", \"openrouter\"] as const,\n required: true,\n description: \"LLM provider to call\",\n },\n model: {\n type: String,\n required: false,\n description:\n \"Model to use. If not provided, uses a sensible default. For reasoning tests, try 'o3-mini' with openai.\",\n },\n message: {\n type: String,\n required: true,\n description:\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 service: async (input: {\n provider: \"anthropic\" | \"gemini\" | \"openai\" | \"openrouter\";\n model?: string;\n message: string;\n }) => {\n const result = await debugLlmCall(\n {\n provider: input.provider as LlmProvider,\n model: input.model,\n message: input.message,\n },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result;\n },\n});\n\nconst llmListProviders = fabricService({\n alias: \"llm_list_providers\",\n description:\n \"List available LLM providers with their default and reasoning-capable models.\",\n input: {},\n service: async () => listLlmProviders(),\n});\n\n// =============================================================================\n// AWS SERVICES\n// =============================================================================\n\nconst awsListProfiles = fabricService({\n alias: \"aws_list_profiles\",\n description:\n \"List available AWS profiles from ~/.aws/config and credentials.\",\n input: {},\n service: async () => {\n const result = await listAwsProfiles(log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsStepfunctionsListExecutions = fabricService({\n alias: \"aws_stepfunctions_list_executions\",\n description:\n \"List Step Function executions for a state machine. Useful for finding stuck or running executions.\",\n input: {\n stateMachineArn: {\n type: String,\n required: true,\n description: \"ARN of the state machine\",\n },\n statusFilter: {\n type: [\n \"RUNNING\",\n \"SUCCEEDED\",\n \"FAILED\",\n \"TIMED_OUT\",\n \"ABORTED\",\n \"PENDING_REDRIVE\",\n ] as const,\n required: false,\n description: \"Filter by execution status\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n maxResults: {\n type: Number,\n required: false,\n description: \"Max results (1-1000, default 100)\",\n },\n },\n service: async (input: {\n stateMachineArn: string;\n statusFilter?:\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\";\n profile?: string;\n region?: string;\n maxResults?: number;\n }) => {\n const result = await listStepFunctionExecutions(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsStepfunctionsStopExecution = fabricService({\n alias: \"aws_stepfunctions_stop_execution\",\n description:\n \"Stop a running Step Function execution. Use with caution - this will abort the workflow.\",\n input: {\n executionArn: {\n type: String,\n required: true,\n description: \"ARN of the execution to stop\",\n },\n cause: {\n type: String,\n required: false,\n description: \"Description of why the execution was stopped\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n executionArn: string;\n cause?: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await stopStepFunctionExecution(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsLambdaListFunctions = fabricService({\n alias: \"aws_lambda_list_functions\",\n description:\n \"List Lambda functions in the account. Filter by function name prefix.\",\n input: {\n functionNamePrefix: {\n type: String,\n required: false,\n description: \"Filter by function name prefix\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n maxResults: {\n type: Number,\n required: false,\n description: \"Max results to return\",\n },\n },\n service: async (input: {\n functionNamePrefix?: string;\n profile?: string;\n region?: string;\n maxResults?: number;\n }) => {\n const result = await listLambdaFunctions(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsLambdaGetFunction = fabricService({\n alias: \"aws_lambda_get_function\",\n description: \"Get configuration and details for a specific Lambda function.\",\n input: {\n functionName: {\n type: String,\n required: true,\n description: \"Function name or ARN\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n functionName: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await getLambdaFunction(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsLogsFilterLogEvents = fabricService({\n alias: \"aws_logs_filter_log_events\",\n description:\n \"Search CloudWatch Logs for a log group. Filter by pattern and time range.\",\n input: {\n logGroupName: {\n type: String,\n required: true,\n description: \"Log group name (e.g., /aws/lambda/my-function)\",\n },\n filterPattern: {\n type: String,\n required: false,\n description:\n \"CloudWatch filter pattern (e.g., 'ERROR', '{ $.level = \\\"error\\\" }')\",\n },\n startTime: {\n type: String,\n required: false,\n description:\n \"Start time (ISO 8601 or relative like 'now-1h'). Defaults to 'now-15m'.\",\n },\n endTime: {\n type: String,\n required: false,\n description: \"End time (ISO 8601 or 'now'). Defaults to 'now'.\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n limit: {\n type: Number,\n required: false,\n description: \"Max events to return (default 100)\",\n },\n },\n service: async (input: {\n logGroupName: string;\n filterPattern?: string;\n startTime?: string;\n endTime?: string;\n profile?: string;\n region?: string;\n limit?: number;\n }) => {\n const result = await filterLogEvents(\n {\n ...input,\n startTime: input.startTime || \"now-15m\",\n endTime: input.endTime || \"now\",\n limit: input.limit || 100,\n },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsS3ListObjects = fabricService({\n alias: \"aws_s3_list_objects\",\n description: \"List objects in an S3 bucket with optional prefix filtering.\",\n input: {\n bucket: {\n type: String,\n required: true,\n description: \"S3 bucket name\",\n },\n prefix: {\n type: String,\n required: false,\n description: \"Object key prefix filter\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n maxResults: {\n type: Number,\n required: false,\n description: \"Max results to return\",\n },\n },\n service: async (input: {\n bucket: string;\n prefix?: string;\n profile?: string;\n region?: string;\n maxResults?: number;\n }) => {\n const result = await listS3Objects(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsCloudformationDescribeStack = fabricService({\n alias: \"aws_cloudformation_describe_stack\",\n description: \"Get details and status of a CloudFormation stack.\",\n input: {\n stackName: {\n type: String,\n required: true,\n description: \"Stack name or ARN\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n stackName: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await describeStack(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsDynamodbDescribeTable = fabricService({\n alias: \"aws_dynamodb_describe_table\",\n description:\n \"Get metadata about a DynamoDB table including key schema, indexes, and provisioned capacity.\",\n input: {\n tableName: {\n type: String,\n required: true,\n description: \"DynamoDB table name\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n tableName: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await describeDynamoDBTable(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsDynamodbScan = fabricService({\n alias: \"aws_dynamodb_scan\",\n description:\n \"Scan a DynamoDB table. Use sparingly on large tables - prefer query when possible.\",\n input: {\n tableName: {\n type: String,\n required: true,\n description: \"DynamoDB table name\",\n },\n filterExpression: {\n type: String,\n required: false,\n description: \"Filter expression (e.g., 'status = :s')\",\n },\n expressionAttributeValues: {\n type: String,\n required: false,\n description:\n 'JSON object of attribute values (e.g., \\'{\\\\\":s\\\\\":{\\\\\"S\\\\\":\\\\\"active\\\\\"}}\\')',\n },\n limit: {\n type: Number,\n required: false,\n description: \"Max items to return (default 25)\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n tableName: string;\n filterExpression?: string;\n expressionAttributeValues?: string;\n limit?: number;\n profile?: string;\n region?: string;\n }) => {\n const result = await scanDynamoDB(\n { ...input, limit: input.limit || 25 },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsDynamodbQuery = fabricService({\n alias: \"aws_dynamodb_query\",\n description:\n \"Query a DynamoDB table by partition key. More efficient than scan for targeted lookups.\",\n input: {\n tableName: {\n type: String,\n required: true,\n description: \"DynamoDB table name\",\n },\n keyConditionExpression: {\n type: String,\n required: true,\n description: \"Key condition (e.g., 'pk = :pk')\",\n },\n expressionAttributeValues: {\n type: String,\n required: true,\n description: \"JSON object of attribute values\",\n },\n indexName: {\n type: String,\n required: false,\n description: \"GSI or LSI name to query\",\n },\n filterExpression: {\n type: String,\n required: false,\n description: \"Additional filter expression\",\n },\n limit: {\n type: Number,\n required: false,\n description: \"Max items to return\",\n },\n scanIndexForward: {\n type: Boolean,\n required: false,\n description: \"Sort ascending (true) or descending (false)\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n tableName: string;\n keyConditionExpression: string;\n expressionAttributeValues: string;\n indexName?: string;\n filterExpression?: string;\n limit?: number;\n scanIndexForward?: boolean;\n profile?: string;\n region?: string;\n }) => {\n const result = await queryDynamoDB(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsDynamodbGetItem = fabricService({\n alias: \"aws_dynamodb_get_item\",\n description: \"Get a single item from a DynamoDB table by its primary key.\",\n input: {\n tableName: {\n type: String,\n required: true,\n description: \"DynamoDB table name\",\n },\n key: {\n type: String,\n required: true,\n description:\n 'JSON object of the primary key (e.g., \\'{\\\\\"pk\\\\\":{\\\\\"S\\\\\":\\\\\"user#123\\\\\"},\\\\\"sk\\\\\":{\\\\\"S\\\\\":\\\\\"profile\\\\\"}}\\')',\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n tableName: string;\n key: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await getDynamoDBItem(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsSqsListQueues = fabricService({\n alias: \"aws_sqs_list_queues\",\n description: \"List SQS queues in the account. Filter by queue name prefix.\",\n input: {\n queueNamePrefix: {\n type: String,\n required: false,\n description: \"Filter by queue name prefix\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n queueNamePrefix?: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await listSQSQueues(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsSqsGetQueueAttributes = fabricService({\n alias: \"aws_sqs_get_queue_attributes\",\n description:\n \"Get attributes for an SQS queue including approximate message count, visibility timeout, and dead-letter config.\",\n input: {\n queueUrl: {\n type: String,\n required: true,\n description: \"SQS queue URL\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n queueUrl: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await getSQSQueueAttributes(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsSqsReceiveMessage = fabricService({\n alias: \"aws_sqs_receive_message\",\n description:\n \"Receive messages from an SQS queue for inspection. Messages are returned to the queue after visibility timeout.\",\n input: {\n queueUrl: {\n type: String,\n required: true,\n description: \"SQS queue URL\",\n },\n maxNumberOfMessages: {\n type: Number,\n required: false,\n description: \"Max messages to receive (1-10, default 1)\",\n },\n visibilityTimeout: {\n type: Number,\n required: false,\n description: \"Seconds to hide message (default 30)\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n queueUrl: string;\n maxNumberOfMessages?: number;\n visibilityTimeout?: number;\n profile?: string;\n region?: string;\n }) => {\n const result = await receiveSQSMessage(\n {\n ...input,\n maxNumberOfMessages: input.maxNumberOfMessages || 1,\n visibilityTimeout: input.visibilityTimeout || 30,\n },\n log,\n );\n if (!result.success) {\n throw new Error(result.error);\n }\n return result.data;\n },\n});\n\nconst awsSqsPurgeQueue = fabricService({\n alias: \"aws_sqs_purge_queue\",\n description:\n \"Delete all messages from an SQS queue. Use with caution - this is irreversible.\",\n input: {\n queueUrl: {\n type: String,\n required: true,\n description: \"SQS queue URL\",\n },\n profile: {\n type: String,\n required: false,\n description: \"AWS profile to use\",\n },\n region: {\n type: String,\n required: false,\n description: \"AWS region\",\n },\n },\n service: async (input: {\n queueUrl: string;\n profile?: string;\n region?: string;\n }) => {\n const result = await purgeSQSQueue(input, log);\n if (!result.success) {\n throw new Error(result.error);\n }\n return { success: true };\n },\n});\n\n// =============================================================================\n// SUITE CREATION\n// =============================================================================\n\nconst VERSION = \"0.3.4\";\n\nexport const suite = createServiceSuite({\n name: \"jaypie\",\n version: VERSION,\n});\n\n// Register docs services\nsuite.register(skill, \"docs\");\nsuite.register(version, \"docs\");\nsuite.register(listPrompts, \"docs\");\nsuite.register(readPrompt, \"docs\");\nsuite.register(listReleaseNotes, \"docs\");\nsuite.register(readReleaseNote, \"docs\");\n\n// Register Datadog services\nsuite.register(datadogLogs, \"datadog\");\nsuite.register(datadogLogAnalytics, \"datadog\");\nsuite.register(datadogMonitors, \"datadog\");\nsuite.register(datadogSynthetics, \"datadog\");\nsuite.register(datadogMetrics, \"datadog\");\nsuite.register(datadogRum, \"datadog\");\n\n// Register LLM services\nsuite.register(llmDebugCall, \"llm\");\nsuite.register(llmListProviders, \"llm\");\n\n// Register AWS services\nsuite.register(awsListProfiles, \"aws\");\nsuite.register(awsStepfunctionsListExecutions, \"aws\");\nsuite.register(awsStepfunctionsStopExecution, \"aws\");\nsuite.register(awsLambdaListFunctions, \"aws\");\nsuite.register(awsLambdaGetFunction, \"aws\");\nsuite.register(awsLogsFilterLogEvents, \"aws\");\nsuite.register(awsS3ListObjects, \"aws\");\nsuite.register(awsCloudformationDescribeStack, \"aws\");\nsuite.register(awsDynamodbDescribeTable, \"aws\");\nsuite.register(awsDynamodbScan, \"aws\");\nsuite.register(awsDynamodbQuery, \"aws\");\nsuite.register(awsDynamodbGetItem, \"aws\");\nsuite.register(awsSqsListQueues, \"aws\");\nsuite.register(awsSqsGetQueueAttributes, \"aws\");\nsuite.register(awsSqsReceiveMessage, \"aws\");\nsuite.register(awsSqsPurgeQueue, \"aws\");\n"],"names":["nullLogger","__filename","__dirname"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,6 +13,10 @@
13
13
  ".": {
14
14
  "types": "./dist/index.d.ts",
15
15
  "import": "./dist/index.js"
16
+ },
17
+ "./suite": {
18
+ "types": "./dist/suite.d.ts",
19
+ "import": "./dist/suite.js"
16
20
  }
17
21
  },
18
22
  "main": "dist/index.js",
@@ -22,8 +26,8 @@
22
26
  },
23
27
  "files": [
24
28
  "dist",
25
- "prompts",
26
- "release-notes"
29
+ "release-notes",
30
+ "skills"
27
31
  ],
28
32
  "scripts": {
29
33
  "build": "rollup --config && chmod +x dist/index.js",
@@ -35,6 +39,7 @@
35
39
  "typecheck": "tsc --noEmit"
36
40
  },
37
41
  "dependencies": {
42
+ "@jaypie/fabric": "^0.1.0",
38
43
  "@jaypie/llm": "^1.2.2",
39
44
  "@modelcontextprotocol/sdk": "^1.17.0",
40
45
  "commander": "^14.0.0",
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 1.2.17
3
+ date: 2025-01-20
4
+ summary: Added CloudFormation outputs for bucket deployment automation
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `DestinationBucketName` CfnOutput to `JaypieWebDeploymentBucket` for workflow automation
10
+ - Added `DistributionId` CfnOutput to `JaypieWebDeploymentBucket` for CloudFront cache invalidation
11
+ - Workflows can now dynamically fetch deployment outputs from CloudFormation instead of requiring manual GitHub variable configuration
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 0.1.2
3
+ date: 2025-01-20
4
+ summary: Added ServiceSuite for grouping and discovering fabricService instances
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `createServiceSuite` function for grouping fabricService instances
10
+ - ServiceSuite provides service discovery, metadata export, and direct execution
11
+ - New exports: `createServiceSuite`, `CreateServiceSuiteConfig`, `ServiceInput`, `ServiceMeta`, `ServiceSuite`
@@ -0,0 +1,25 @@
1
+ ---
2
+ version: 0.1.3
3
+ date: 2025-01-20
4
+ summary: Added FabricMcpServer for multi-service MCP tool registration
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `FabricMcpServer` function for creating MCP servers with multiple services registered as tools
10
+ - Added `isFabricMcpServer` type guard for runtime type checking
11
+ - Added `isService` export from main package for checking if a value is a fabricated service
12
+ - New types: `FabricMcpServerConfig`, `FabricMcpServerServiceEntry`, `FabricMcpServerToolConfig`, `RegisteredTool`
13
+
14
+ ## Usage
15
+
16
+ ```typescript
17
+ import { fabricService } from "@jaypie/fabric";
18
+ import { FabricMcpServer } from "@jaypie/fabric/mcp";
19
+
20
+ const server = FabricMcpServer({
21
+ name: "my-server",
22
+ version: "1.0.0",
23
+ services: [greetService, echoService],
24
+ });
25
+ ```
@@ -0,0 +1,42 @@
1
+ ---
2
+ version: 0.1.4
3
+ date: 2025-01-20
4
+ summary: Added ServiceSuite bridge for MCP servers
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `getServiceFunctions()` method to `ServiceSuite` - returns all registered service functions for transport adapters
10
+ - Added `getServiceFunction(name)` method to `ServiceSuite` - returns a specific service function by name
11
+ - Added `createMcpServerFromSuite()` function in `@jaypie/fabric/mcp` - creates FabricMcpServer from a ServiceSuite
12
+ - New type: `CreateMcpServerFromSuiteConfig`
13
+
14
+ ## Usage
15
+
16
+ ServiceSuites now connect directly to MCP servers:
17
+
18
+ ```typescript
19
+ import { createServiceSuite, fabricService } from "@jaypie/fabric";
20
+ import { createMcpServerFromSuite } from "@jaypie/fabric/mcp";
21
+
22
+ const suite = createServiceSuite({ name: "my-suite", version: "1.0.0" });
23
+ suite.register(myService, "category");
24
+
25
+ // Create MCP server from suite
26
+ const server = createMcpServerFromSuite(suite);
27
+ // All suite services are now registered as MCP tools
28
+
29
+ // Access service functions directly
30
+ const functions = suite.getServiceFunctions();
31
+ const specific = suite.getServiceFunction("my-service");
32
+ ```
33
+
34
+ ## Architecture
35
+
36
+ This enables a pattern where services are defined once and deployed to multiple transports:
37
+
38
+ ```
39
+ fabricService() → ServiceSuite → createMcpServerFromSuite() → MCP Server
40
+ → FabricHttpServer → HTTP/Lambda
41
+ → FabricRouter → Express
42
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ version: 0.3.3
3
+ date: 2025-01-20
4
+ summary: Added suite export for direct service execution
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `@jaypie/mcp/suite` export exposing a pre-built ServiceSuite with all MCP tools
10
+ - Suite enables programmatic discovery and execution of MCP services
11
+ - Added `@jaypie/fabric` dependency for ServiceSuite support
12
+ - Updated rollup config to build suite entry point