@us-all/datadog-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +275 -0
  3. package/dist/client.d.ts +21 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +37 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +8 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +17 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +100 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/tools/account.d.ts +48 -0
  16. package/dist/tools/account.d.ts.map +1 -0
  17. package/dist/tools/account.js +64 -0
  18. package/dist/tools/account.js.map +1 -0
  19. package/dist/tools/apm.d.ts +36 -0
  20. package/dist/tools/apm.d.ts.map +1 -0
  21. package/dist/tools/apm.js +40 -0
  22. package/dist/tools/apm.js.map +1 -0
  23. package/dist/tools/dashboards.d.ts +82 -0
  24. package/dist/tools/dashboards.d.ts.map +1 -0
  25. package/dist/tools/dashboards.js +124 -0
  26. package/dist/tools/dashboards.js.map +1 -0
  27. package/dist/tools/downtimes.d.ts +51 -0
  28. package/dist/tools/downtimes.d.ts.map +1 -0
  29. package/dist/tools/downtimes.js +96 -0
  30. package/dist/tools/downtimes.js.map +1 -0
  31. package/dist/tools/events.d.ts +52 -0
  32. package/dist/tools/events.d.ts.map +1 -0
  33. package/dist/tools/events.js +70 -0
  34. package/dist/tools/events.js.map +1 -0
  35. package/dist/tools/hosts.d.ts +38 -0
  36. package/dist/tools/hosts.d.ts.map +1 -0
  37. package/dist/tools/hosts.js +55 -0
  38. package/dist/tools/hosts.js.map +1 -0
  39. package/dist/tools/incidents.d.ts +23 -0
  40. package/dist/tools/incidents.d.ts.map +1 -0
  41. package/dist/tools/incidents.js +29 -0
  42. package/dist/tools/incidents.js.map +1 -0
  43. package/dist/tools/logs.d.ts +67 -0
  44. package/dist/tools/logs.d.ts.map +1 -0
  45. package/dist/tools/logs.js +98 -0
  46. package/dist/tools/logs.js.map +1 -0
  47. package/dist/tools/metrics.d.ts +61 -0
  48. package/dist/tools/metrics.d.ts.map +1 -0
  49. package/dist/tools/metrics.js +94 -0
  50. package/dist/tools/metrics.js.map +1 -0
  51. package/dist/tools/monitors.d.ts +92 -0
  52. package/dist/tools/monitors.d.ts.map +1 -0
  53. package/dist/tools/monitors.js +157 -0
  54. package/dist/tools/monitors.js.map +1 -0
  55. package/dist/tools/notebooks.d.ts +41 -0
  56. package/dist/tools/notebooks.d.ts.map +1 -0
  57. package/dist/tools/notebooks.js +60 -0
  58. package/dist/tools/notebooks.js.map +1 -0
  59. package/dist/tools/oncall.d.ts +18 -0
  60. package/dist/tools/oncall.d.ts.map +1 -0
  61. package/dist/tools/oncall.js +31 -0
  62. package/dist/tools/oncall.js.map +1 -0
  63. package/dist/tools/rum.d.ts +50 -0
  64. package/dist/tools/rum.d.ts.map +1 -0
  65. package/dist/tools/rum.js +65 -0
  66. package/dist/tools/rum.js.map +1 -0
  67. package/dist/tools/security.d.ts +25 -0
  68. package/dist/tools/security.d.ts.map +1 -0
  69. package/dist/tools/security.js +37 -0
  70. package/dist/tools/security.js.map +1 -0
  71. package/dist/tools/slos.d.ts +59 -0
  72. package/dist/tools/slos.d.ts.map +1 -0
  73. package/dist/tools/slos.js +82 -0
  74. package/dist/tools/slos.js.map +1 -0
  75. package/dist/tools/synthetics.d.ts +115 -0
  76. package/dist/tools/synthetics.d.ts.map +1 -0
  77. package/dist/tools/synthetics.js +185 -0
  78. package/dist/tools/synthetics.js.map +1 -0
  79. package/dist/tools/utils.d.ts +18 -0
  80. package/dist/tools/utils.d.ts.map +1 -0
  81. package/dist/tools/utils.js +97 -0
  82. package/dist/tools/utils.js.map +1 -0
  83. package/package.json +54 -0
@@ -0,0 +1,82 @@
1
+ import { z } from "zod/v4";
2
+ import { slosApi } from "../client.js";
3
+ export const listSlosSchema = z.object({
4
+ ids: z.string().optional().describe("Comma-separated list of SLO IDs to filter. Example: abc123,def456"),
5
+ query: z.string().optional().describe("Search query for SLO names. Example: api-latency"),
6
+ tagsQuery: z.string().optional().describe("Filter by tags. Example: env:prod,team:backend"),
7
+ limit: z.number().optional().default(100).describe("Max results (default 100)"),
8
+ offset: z.number().optional().default(0).describe("Pagination offset"),
9
+ });
10
+ export async function listSlos(params) {
11
+ const response = await slosApi.listSLOs({
12
+ ids: params.ids,
13
+ query: params.query,
14
+ tagsQuery: params.tagsQuery,
15
+ limit: params.limit,
16
+ offset: params.offset,
17
+ });
18
+ const slos = response.data ?? [];
19
+ return {
20
+ count: slos.length,
21
+ slos: slos.map((s) => ({
22
+ id: s.id,
23
+ name: s.name,
24
+ description: s.description,
25
+ type: s.type,
26
+ tags: s.tags,
27
+ thresholds: s.thresholds,
28
+ targetThreshold: s.targetThreshold,
29
+ warningThreshold: s.warningThreshold,
30
+ monitorIds: s.monitorIds,
31
+ created: s.createdAt,
32
+ modified: s.modifiedAt,
33
+ creator: s.creator,
34
+ })),
35
+ };
36
+ }
37
+ export const getSloSchema = z.object({
38
+ sloId: z.string().describe("SLO ID. Example: abc123def456abc123def456abc123de"),
39
+ });
40
+ export async function getSlo(params) {
41
+ const response = await slosApi.getSLO({
42
+ sloId: params.sloId,
43
+ });
44
+ const s = response.data;
45
+ return {
46
+ id: s?.id,
47
+ name: s?.name,
48
+ description: s?.description,
49
+ type: s?.type,
50
+ tags: s?.tags,
51
+ thresholds: s?.thresholds,
52
+ targetThreshold: s?.targetThreshold,
53
+ warningThreshold: s?.warningThreshold,
54
+ monitorIds: s?.monitorIds,
55
+ groups: s?.groups,
56
+ query: s?.query,
57
+ created: s?.createdAt,
58
+ modified: s?.modifiedAt,
59
+ creator: s?.creator,
60
+ };
61
+ }
62
+ export const getSloHistorySchema = z.object({
63
+ sloId: z.string().describe("SLO ID. Example: abc123def456abc123def456abc123de"),
64
+ fromTs: z.number().describe("Start time as Unix epoch seconds. Example: 1740000000"),
65
+ toTs: z.number().describe("End time as Unix epoch seconds. Example: 1740086400"),
66
+ target: z.number().optional().describe("Target SLO value. Example: 99.9"),
67
+ });
68
+ export async function getSloHistory(params) {
69
+ const response = await slosApi.getSLOHistory({
70
+ sloId: params.sloId,
71
+ fromTs: params.fromTs,
72
+ toTs: params.toTs,
73
+ target: params.target,
74
+ });
75
+ return {
76
+ thresholds: response.data?.thresholds,
77
+ overall: response.data?.overall,
78
+ series: response.data?.series,
79
+ errors: response.errors,
80
+ };
81
+ }
82
+ //# sourceMappingURL=slos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slos.js","sourceRoot":"","sources":["../../src/tools/slos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { z } from "zod/v4";
2
+ export declare const listSyntheticsSchema: z.ZodObject<{
3
+ pageSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
4
+ pageNumber: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ }, z.core.$strip>;
6
+ export declare function listSynthetics(params: z.infer<typeof listSyntheticsSchema>): Promise<{
7
+ count: number;
8
+ tests: {
9
+ publicId: string | undefined;
10
+ name: string | undefined;
11
+ type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestDetailsType | undefined;
12
+ subtype: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestDetailsSubType | undefined;
13
+ status: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestPauseStatus | undefined;
14
+ message: string | undefined;
15
+ tags: string[] | undefined;
16
+ locations: string[] | undefined;
17
+ monitorId: number | undefined;
18
+ creator: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").Creator | undefined;
19
+ config: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestConfig | undefined;
20
+ options: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestOptions | undefined;
21
+ }[];
22
+ }>;
23
+ export declare const getSyntheticsResultSchema: z.ZodObject<{
24
+ publicId: z.ZodString;
25
+ fromTs: z.ZodOptional<z.ZodNumber>;
26
+ toTs: z.ZodOptional<z.ZodNumber>;
27
+ probeDc: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ }, z.core.$strip>;
29
+ export declare function getSyntheticsResult(params: z.infer<typeof getSyntheticsResultSchema>): Promise<{
30
+ count: number;
31
+ results: {
32
+ resultId: string | undefined;
33
+ status: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestMonitorStatus | undefined;
34
+ checkTime: number | undefined;
35
+ probeDc: string | undefined;
36
+ result: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsAPITestResultShortResult | undefined;
37
+ }[];
38
+ lastTimestamp: number | undefined;
39
+ }>;
40
+ export declare const triggerSyntheticsSchema: z.ZodObject<{
41
+ tests: z.ZodArray<z.ZodObject<{
42
+ publicId: z.ZodString;
43
+ }, z.core.$strip>>;
44
+ }, z.core.$strip>;
45
+ export declare function triggerSynthetics(params: z.infer<typeof triggerSyntheticsSchema>): Promise<{
46
+ triggeredCheckIds: string[] | undefined;
47
+ results: {
48
+ publicId: string | undefined;
49
+ resultId: string | undefined;
50
+ location: number | undefined;
51
+ }[] | undefined;
52
+ locations: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTriggerCITestLocation[] | undefined;
53
+ }>;
54
+ export declare const createSyntheticsTestSchema: z.ZodObject<{
55
+ name: z.ZodString;
56
+ type: z.ZodEnum<{
57
+ api: "api";
58
+ }>;
59
+ subtype: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
60
+ http: "http";
61
+ ssl: "ssl";
62
+ tcp: "tcp";
63
+ dns: "dns";
64
+ multi: "multi";
65
+ icmp: "icmp";
66
+ udp: "udp";
67
+ websocket: "websocket";
68
+ grpc: "grpc";
69
+ }>>>;
70
+ url: z.ZodString;
71
+ method: z.ZodDefault<z.ZodOptional<z.ZodString>>;
72
+ locations: z.ZodArray<z.ZodString>;
73
+ message: z.ZodDefault<z.ZodOptional<z.ZodString>>;
74
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ status: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
76
+ live: "live";
77
+ paused: "paused";
78
+ }>>>;
79
+ assertions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>;
80
+ }, z.core.$strip>;
81
+ export declare function createSyntheticsTest(params: z.infer<typeof createSyntheticsTestSchema>): Promise<{
82
+ publicId: string | undefined;
83
+ name: string;
84
+ type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsAPITestType;
85
+ subtype: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestDetailsSubType | undefined;
86
+ status: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestPauseStatus | undefined;
87
+ monitorId: number | undefined;
88
+ }>;
89
+ export declare const updateSyntheticsTestSchema: z.ZodObject<{
90
+ publicId: z.ZodString;
91
+ name: z.ZodOptional<z.ZodString>;
92
+ url: z.ZodOptional<z.ZodString>;
93
+ method: z.ZodOptional<z.ZodString>;
94
+ locations: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
+ message: z.ZodOptional<z.ZodString>;
96
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
97
+ status: z.ZodOptional<z.ZodEnum<{
98
+ live: "live";
99
+ paused: "paused";
100
+ }>>;
101
+ assertions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>;
102
+ }, z.core.$strip>;
103
+ export declare function updateSyntheticsTest(params: z.infer<typeof updateSyntheticsTestSchema>): Promise<{
104
+ publicId: string | undefined;
105
+ name: string;
106
+ status: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsTestPauseStatus | undefined;
107
+ }>;
108
+ export declare const deleteSyntheticsTestSchema: z.ZodObject<{
109
+ publicIds: z.ZodArray<z.ZodString>;
110
+ forceDeleteDependencies: z.ZodOptional<z.ZodBoolean>;
111
+ }, z.core.$strip>;
112
+ export declare function deleteSyntheticsTest(params: z.infer<typeof deleteSyntheticsTestSchema>): Promise<{
113
+ deletedTests: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").SyntheticsDeletedTest[] | undefined;
114
+ }>;
115
+ //# sourceMappingURL=synthetics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetics.d.ts","sourceRoot":"","sources":["../../src/tools/synthetics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,wBAAsB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;;;;;;;;;;;;;;;;GAwBhF;AAED,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAEH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC;;;;;;;;;;GAoB1F;AAED,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC;;;;;;;;GAmBtF;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWrC,CAAC;AAEH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC;;;;;;;GAkC5F;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;iBAUrC,CAAC;AAEH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC;;;;GA+B5F;AAED,eAAO,MAAM,0BAA0B;;;iBAGrC,CAAC;AAEH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC;;GAY5F"}
@@ -0,0 +1,185 @@
1
+ import { z } from "zod/v4";
2
+ import { syntheticsApi } from "../client.js";
3
+ import { assertWriteAllowed } from "./utils.js";
4
+ export const listSyntheticsSchema = z.object({
5
+ pageSize: z.number().optional().default(100).describe("Number of tests per page"),
6
+ pageNumber: z.number().optional().default(0).describe("Page number (0-based)"),
7
+ });
8
+ export async function listSynthetics(params) {
9
+ const response = await syntheticsApi.listTests({
10
+ pageSize: params.pageSize,
11
+ pageNumber: params.pageNumber,
12
+ });
13
+ const tests = response.tests ?? [];
14
+ return {
15
+ count: tests.length,
16
+ tests: tests.map((t) => ({
17
+ publicId: t.publicId,
18
+ name: t.name,
19
+ type: t.type,
20
+ subtype: t.subtype,
21
+ status: t.status,
22
+ message: t.message,
23
+ tags: t.tags,
24
+ locations: t.locations,
25
+ monitorId: t.monitorId,
26
+ creator: t.creator,
27
+ config: t.config,
28
+ options: t.options,
29
+ })),
30
+ };
31
+ }
32
+ export const getSyntheticsResultSchema = z.object({
33
+ publicId: z.string().describe("Synthetics test public ID. Example: abc-def-ghi"),
34
+ fromTs: z.number().optional().describe("Start time in milliseconds. Example: 1740000000000"),
35
+ toTs: z.number().optional().describe("End time in milliseconds. Example: 1740003600000"),
36
+ probeDc: z.array(z.string()).optional().describe("Filter by probe locations. Example: [\"aws:us-east-1\"]"),
37
+ });
38
+ export async function getSyntheticsResult(params) {
39
+ const response = await syntheticsApi.getAPITestLatestResults({
40
+ publicId: params.publicId,
41
+ fromTs: params.fromTs,
42
+ toTs: params.toTs,
43
+ probeDc: params.probeDc,
44
+ });
45
+ const results = response.results ?? [];
46
+ return {
47
+ count: results.length,
48
+ results: results.map((r) => ({
49
+ resultId: r.resultId,
50
+ status: r.status,
51
+ checkTime: r.checkTime,
52
+ probeDc: r.probeDc,
53
+ result: r.result,
54
+ })),
55
+ lastTimestamp: response.lastTimestampFetched,
56
+ };
57
+ }
58
+ export const triggerSyntheticsSchema = z.object({
59
+ tests: z.array(z.object({
60
+ publicId: z.string().describe("Synthetics test public ID. Example: abc-def-ghi"),
61
+ })).describe("List of tests to trigger"),
62
+ });
63
+ export async function triggerSynthetics(params) {
64
+ assertWriteAllowed();
65
+ const response = await syntheticsApi.triggerTests({
66
+ body: {
67
+ tests: params.tests.map((t) => ({
68
+ publicId: t.publicId,
69
+ })),
70
+ },
71
+ });
72
+ return {
73
+ triggeredCheckIds: response.triggeredCheckIds,
74
+ results: response.results?.map((r) => ({
75
+ publicId: r.publicId,
76
+ resultId: r.resultId,
77
+ location: r.location,
78
+ })),
79
+ locations: response.locations,
80
+ };
81
+ }
82
+ export const createSyntheticsTestSchema = z.object({
83
+ name: z.string().describe("Test name. Example: API Health Check - Production"),
84
+ type: z.enum(["api"]).describe("Test type (api)"),
85
+ subtype: z.enum(["http", "ssl", "tcp", "dns", "icmp", "udp", "websocket", "grpc", "multi"]).optional().default("http").describe("Test subtype. Example: http"),
86
+ url: z.string().describe("URL to test. Example: https://api.example.com/health"),
87
+ method: z.string().optional().default("GET").describe("HTTP method. Example: GET, POST, PUT"),
88
+ locations: z.array(z.string()).describe("Test locations. Example: [\"aws:us-east-1\", \"aws:eu-west-1\"]"),
89
+ message: z.string().optional().default("").describe("Notification message. Example: API is down @slack-alerts"),
90
+ tags: z.array(z.string()).optional().describe("Tags for the test. Example: [\"env:prod\", \"team:platform\"]"),
91
+ status: z.enum(["live", "paused"]).optional().default("paused").describe("Initial test status"),
92
+ assertions: z.array(z.record(z.string(), z.any())).optional().describe("Response assertions. Example: [{\"type\":\"statusCode\",\"operator\":\"is\",\"target\":200}]"),
93
+ });
94
+ export async function createSyntheticsTest(params) {
95
+ assertWriteAllowed();
96
+ const response = await syntheticsApi.createSyntheticsAPITest({
97
+ body: {
98
+ name: params.name,
99
+ type: "api",
100
+ subtype: params.subtype,
101
+ config: {
102
+ request: {
103
+ url: params.url,
104
+ method: params.method,
105
+ },
106
+ assertions: (params.assertions ?? [
107
+ { type: "statusCode", operator: "is", target: 200 },
108
+ ]),
109
+ },
110
+ locations: params.locations,
111
+ message: params.message ?? "",
112
+ options: {
113
+ tickEvery: 60,
114
+ },
115
+ tags: params.tags,
116
+ status: params.status,
117
+ },
118
+ });
119
+ return {
120
+ publicId: response.publicId,
121
+ name: response.name,
122
+ type: response.type,
123
+ subtype: response.subtype,
124
+ status: response.status,
125
+ monitorId: response.monitorId,
126
+ };
127
+ }
128
+ export const updateSyntheticsTestSchema = z.object({
129
+ publicId: z.string().describe("Test public ID to update. Example: abc-def-ghi"),
130
+ name: z.string().optional().describe("New test name"),
131
+ url: z.string().optional().describe("New URL to test"),
132
+ method: z.string().optional().describe("New HTTP method"),
133
+ locations: z.array(z.string()).optional().describe("New test locations"),
134
+ message: z.string().optional().describe("New notification message"),
135
+ tags: z.array(z.string()).optional().describe("New tags"),
136
+ status: z.enum(["live", "paused"]).optional().describe("New test status"),
137
+ assertions: z.array(z.record(z.string(), z.any())).optional().describe("New assertions"),
138
+ });
139
+ export async function updateSyntheticsTest(params) {
140
+ assertWriteAllowed();
141
+ const current = await syntheticsApi.getAPITest({ publicId: params.publicId });
142
+ const response = await syntheticsApi.updateAPITest({
143
+ publicId: params.publicId,
144
+ body: {
145
+ name: params.name ?? current.name,
146
+ type: "api",
147
+ config: {
148
+ ...current.config,
149
+ request: {
150
+ ...current.config?.request,
151
+ ...(params.url ? { url: params.url } : {}),
152
+ ...(params.method ? { method: params.method } : {}),
153
+ },
154
+ ...(params.assertions ? { assertions: params.assertions } : {}),
155
+ },
156
+ locations: params.locations ?? current.locations,
157
+ message: params.message ?? current.message ?? "",
158
+ options: current.options,
159
+ tags: params.tags ?? current.tags,
160
+ status: (params.status ?? current.status),
161
+ },
162
+ });
163
+ return {
164
+ publicId: response.publicId,
165
+ name: response.name,
166
+ status: response.status,
167
+ };
168
+ }
169
+ export const deleteSyntheticsTestSchema = z.object({
170
+ publicIds: z.array(z.string()).describe("Array of test public IDs to delete. Example: [\"abc-def-ghi\"]"),
171
+ forceDeleteDependencies: z.boolean().optional().describe("Force delete even if referenced by other resources"),
172
+ });
173
+ export async function deleteSyntheticsTest(params) {
174
+ assertWriteAllowed();
175
+ const response = await syntheticsApi.deleteTests({
176
+ body: {
177
+ publicIds: params.publicIds,
178
+ forceDeleteDependencies: params.forceDeleteDependencies,
179
+ },
180
+ });
181
+ return {
182
+ deletedTests: response.deletedTests,
183
+ };
184
+ }
185
+ //# sourceMappingURL=synthetics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetics.js","sourceRoot":"","sources":["../../src/tools/synthetics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare class WriteBlockedError extends Error {
2
+ constructor();
3
+ }
4
+ export declare function assertWriteAllowed(): void;
5
+ export declare function wrapToolHandler<T>(fn: (params: T) => Promise<unknown>): (params: T) => Promise<{
6
+ content: {
7
+ type: "text";
8
+ text: string;
9
+ }[];
10
+ isError?: undefined;
11
+ } | {
12
+ content: {
13
+ type: "text";
14
+ text: string;
15
+ }[];
16
+ isError: boolean;
17
+ }>;
18
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"AAmCA,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAgBD,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IACtD,QAAQ,CAAC;;;;;;;;;;;;GAyCxB"}
@@ -0,0 +1,97 @@
1
+ import { config } from "../config.js";
2
+ const SENSITIVE_PATTERNS = [
3
+ /DD_API_KEY/i,
4
+ /DD_APP_KEY/i,
5
+ /api[_-]?key/i,
6
+ /app[_-]?key/i,
7
+ /authorization/i,
8
+ /bearer\s+\S+/i,
9
+ ];
10
+ function sanitize(text) {
11
+ let result = text;
12
+ for (const pattern of SENSITIVE_PATTERNS) {
13
+ result = result.replace(pattern, "[REDACTED]");
14
+ }
15
+ return result;
16
+ }
17
+ function isRecord(value) {
18
+ return typeof value === "object" && value !== null && !Array.isArray(value);
19
+ }
20
+ function hasNumericProp(obj, key) {
21
+ return key in obj && typeof obj[key] === "number";
22
+ }
23
+ function hasStringProp(obj, key) {
24
+ return key in obj && typeof obj[key] === "string";
25
+ }
26
+ function hasProp(obj, key) {
27
+ return key in obj && obj[key] != null;
28
+ }
29
+ export class WriteBlockedError extends Error {
30
+ constructor() {
31
+ super("Write operations are disabled. Set DD_ALLOW_WRITE=true to enable.");
32
+ this.name = "WriteBlockedError";
33
+ }
34
+ }
35
+ export function assertWriteAllowed() {
36
+ if (!config.allowWrite) {
37
+ throw new WriteBlockedError();
38
+ }
39
+ }
40
+ function extractDatadogError(body) {
41
+ try {
42
+ const parsed = typeof body === "string" ? JSON.parse(body) : body;
43
+ if (isRecord(parsed)) {
44
+ if (parsed.errors != null)
45
+ return parsed.errors;
46
+ if (typeof parsed.message === "string")
47
+ return parsed.message;
48
+ }
49
+ const str = typeof body === "string" ? body : JSON.stringify(body);
50
+ return sanitize(str);
51
+ }
52
+ catch {
53
+ return sanitize(String(body));
54
+ }
55
+ }
56
+ export function wrapToolHandler(fn) {
57
+ return async (params) => {
58
+ try {
59
+ const result = await fn(params);
60
+ return {
61
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
62
+ };
63
+ }
64
+ catch (error) {
65
+ if (error instanceof WriteBlockedError) {
66
+ return {
67
+ content: [{ type: "text", text: error.message }],
68
+ isError: true,
69
+ };
70
+ }
71
+ const structured = {
72
+ message: "Unknown error",
73
+ };
74
+ if (error instanceof Error) {
75
+ structured.message = sanitize(error.message);
76
+ // Datadog SDK ApiException exposes .code (HTTP status) and .body
77
+ if (hasNumericProp(error, "code")) {
78
+ structured.status = error.code;
79
+ }
80
+ if (hasProp(error, "body")) {
81
+ structured.datadogError = extractDatadogError(error.body);
82
+ }
83
+ if (hasStringProp(error, "requestId")) {
84
+ structured.requestId = error.requestId;
85
+ }
86
+ }
87
+ else {
88
+ structured.message = sanitize(String(error));
89
+ }
90
+ return {
91
+ content: [{ type: "text", text: JSON.stringify(structured, null, 2) }],
92
+ isError: true,
93
+ };
94
+ }
95
+ };
96
+ }
97
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@us-all/datadog-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Datadog MCP server - 46 tools for metrics, monitors, logs, APM, RUM, and more",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "datadog-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "engines": {
16
+ "node": ">=18.0.0"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/us-all/datadog-mcp-server.git"
21
+ },
22
+ "homepage": "https://github.com/us-all/datadog-mcp-server#readme",
23
+ "bugs": "https://github.com/us-all/datadog-mcp-server/issues",
24
+ "keywords": [
25
+ "mcp",
26
+ "datadog",
27
+ "monitoring",
28
+ "observability",
29
+ "apm",
30
+ "rum",
31
+ "model-context-protocol"
32
+ ],
33
+ "author": "us-all",
34
+ "license": "MIT",
35
+ "packageManager": "pnpm@10.30.2",
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "start": "node dist/index.js",
40
+ "prepublishOnly": "pnpm run build",
41
+ "presmoke": "pnpm run build",
42
+ "smoke": "node scripts/smoke-test.mjs"
43
+ },
44
+ "dependencies": {
45
+ "@datadog/datadog-api-client": "^1.52.0",
46
+ "@modelcontextprotocol/sdk": "^1.27.1",
47
+ "dotenv": "^17.3.1",
48
+ "zod": "^4.3.6"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^25.3.1",
52
+ "typescript": "^5.9.3"
53
+ }
54
+ }