newrelic-mcp 1.0.0 → 2.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 (52) hide show
  1. package/README.md +30 -7
  2. package/dist/client/newrelic-client.d.ts +11 -2
  3. package/dist/client/newrelic-client.d.ts.map +1 -1
  4. package/dist/client/newrelic-client.js +11 -10
  5. package/dist/client/newrelic-client.js.map +1 -1
  6. package/dist/client/rest-client.d.ts +38 -0
  7. package/dist/client/rest-client.d.ts.map +1 -0
  8. package/dist/client/rest-client.js +116 -0
  9. package/dist/client/rest-client.js.map +1 -0
  10. package/dist/server.d.ts +5 -1
  11. package/dist/server.d.ts.map +1 -1
  12. package/dist/server.js +95 -15
  13. package/dist/server.js.map +1 -1
  14. package/dist/tools/alert.d.ts +14 -4
  15. package/dist/tools/alert.d.ts.map +1 -1
  16. package/dist/tools/alert.js +7 -1
  17. package/dist/tools/alert.js.map +1 -1
  18. package/dist/tools/apm.d.ts +3 -1
  19. package/dist/tools/apm.d.ts.map +1 -1
  20. package/dist/tools/apm.js.map +1 -1
  21. package/dist/tools/entity.d.ts +11 -2
  22. package/dist/tools/entity.d.ts.map +1 -1
  23. package/dist/tools/entity.js +2 -2
  24. package/dist/tools/entity.js.map +1 -1
  25. package/dist/tools/nerdgraph.d.ts +1 -1
  26. package/dist/tools/nerdgraph.d.ts.map +1 -1
  27. package/dist/tools/nerdgraph.js +12 -4
  28. package/dist/tools/nerdgraph.js.map +1 -1
  29. package/dist/tools/nrql.d.ts +4 -1
  30. package/dist/tools/nrql.d.ts.map +1 -1
  31. package/dist/tools/nrql.js.map +1 -1
  32. package/dist/tools/rest/alerts.d.ts +24 -0
  33. package/dist/tools/rest/alerts.d.ts.map +1 -0
  34. package/dist/tools/rest/alerts.js +94 -0
  35. package/dist/tools/rest/alerts.js.map +1 -0
  36. package/dist/tools/rest/apm.d.ts +18 -0
  37. package/dist/tools/rest/apm.d.ts.map +1 -0
  38. package/dist/tools/rest/apm.js +63 -0
  39. package/dist/tools/rest/apm.js.map +1 -0
  40. package/dist/tools/rest/deployments.d.ts +33 -0
  41. package/dist/tools/rest/deployments.d.ts.map +1 -0
  42. package/dist/tools/rest/deployments.js +111 -0
  43. package/dist/tools/rest/deployments.js.map +1 -0
  44. package/dist/tools/rest/metrics.d.ts +42 -0
  45. package/dist/tools/rest/metrics.d.ts.map +1 -0
  46. package/dist/tools/rest/metrics.js +144 -0
  47. package/dist/tools/rest/metrics.js.map +1 -0
  48. package/dist/tools/synthetics.d.ts +11 -2
  49. package/dist/tools/synthetics.d.ts.map +1 -1
  50. package/dist/tools/synthetics.js +3 -3
  51. package/dist/tools/synthetics.js.map +1 -1
  52. package/package.json +13 -5
package/README.md CHANGED
@@ -50,6 +50,7 @@ Add to your Claude Desktop configuration file:
50
50
  }
51
51
  }
52
52
  ```
53
+
53
54
  </details>
54
55
 
55
56
  <details>
@@ -72,6 +73,7 @@ Add to your Cline settings in VS Code:
72
73
  ]
73
74
  }
74
75
  ```
76
+
75
77
  </details>
76
78
 
77
79
  <details>
@@ -97,6 +99,7 @@ Add to your Zed configuration file at `~/.config/zed/settings.json`:
97
99
  }
98
100
  }
99
101
  ```
102
+
100
103
  </details>
101
104
 
102
105
  <details>
@@ -118,24 +121,28 @@ Add to your Windsurf Cascade configuration:
118
121
  }
119
122
  }
120
123
  ```
124
+
121
125
  </details>
122
126
 
123
127
  <details>
124
128
  <summary>Local Development</summary>
125
129
 
126
130
  1. Clone the repository:
131
+
127
132
  ```bash
128
133
  git clone https://github.com/cloudbring/newrelic-mcp.git
129
134
  cd newrelic-mcp
130
135
  ```
131
136
 
132
137
  2. Install dependencies and build:
138
+
133
139
  ```bash
134
140
  npm install
135
141
  npm run build
136
142
  ```
137
143
 
138
144
  3. Add to your MCP client configuration:
145
+
139
146
  ```json
140
147
  {
141
148
  "mcpServers": {
@@ -150,6 +157,7 @@ npm run build
150
157
  }
151
158
  }
152
159
  ```
160
+
153
161
  </details>
154
162
 
155
163
  ## Configuration
@@ -161,7 +169,7 @@ npm run build
161
169
 
162
170
  ### Getting Your New Relic Credentials
163
171
 
164
- 1. **API Key**:
172
+ 1. **API Key**:
165
173
  - Log in to [New Relic](https://one.newrelic.com)
166
174
  - Navigate to **API Keys** in the left sidebar
167
175
  - Create a new User API Key with appropriate permissions
@@ -177,28 +185,32 @@ For detailed setup instructions, see [docs/new-relic-setup.md](docs/new-relic-se
177
185
  Once configured, you can interact with New Relic through your MCP client:
178
186
 
179
187
  ### Query Your Data
180
- ```
188
+
189
+ ```text
181
190
  "Show me the average response time for my web application over the last hour"
182
191
  "What are the top 10 slowest database queries today?"
183
192
  "Display error rate trends for the production environment"
184
193
  ```
185
194
 
186
195
  ### Monitor Applications
187
- ```
196
+
197
+ ```text
188
198
  "List all my APM applications and their current status"
189
199
  "Show me the health of my Node.js services"
190
200
  "Which applications have active alerts?"
191
201
  ```
192
202
 
193
203
  ### Manage Alerts
194
- ```
204
+
205
+ ```text
195
206
  "Show me all open incidents"
196
207
  "What critical alerts fired in the last 24 hours?"
197
208
  "Acknowledge incident #12345"
198
209
  ```
199
210
 
200
211
  ### Search Infrastructure
201
- ```
212
+
213
+ ```text
202
214
  "Find all Redis databases in production"
203
215
  "Show me entities with high CPU usage"
204
216
  "List all synthetic monitors and their success rates"
@@ -228,6 +240,7 @@ Once configured, you can interact with New Relic through your MCP client:
228
240
  If you're having trouble connecting:
229
241
 
230
242
  1. Verify your API key is valid:
243
+
231
244
  ```bash
232
245
  curl -X POST https://api.newrelic.com/graphql \
233
246
  -H 'Content-Type: application/json' \
@@ -238,6 +251,7 @@ If you're having trouble connecting:
238
251
  2. Check that your Account ID is correct
239
252
  3. Ensure your API key has the necessary permissions
240
253
  4. Check the MCP client logs for detailed error messages
254
+
241
255
  </details>
242
256
 
243
257
  <details>
@@ -251,13 +265,14 @@ If you receive permission errors:
251
265
  - For alerts: `Alerts` read/write permissions
252
266
 
253
267
  2. Create a new API key with broader permissions if needed
268
+
254
269
  </details>
255
270
 
256
271
  ## Development
257
272
 
258
273
  ### Project Structure
259
274
 
260
- ```
275
+ ```text
261
276
  src/
262
277
  ├── server.ts # Main MCP server implementation
263
278
  ├── client/
@@ -274,23 +289,27 @@ src/
274
289
  ### Setup Development Environment
275
290
 
276
291
  1. Clone the repository:
292
+
277
293
  ```bash
278
294
  git clone https://github.com/cloudbring/newrelic-mcp.git
279
295
  cd newrelic-mcp
280
296
  ```
281
297
 
282
298
  2. Install dependencies:
299
+
283
300
  ```bash
284
301
  npm install
285
302
  ```
286
303
 
287
304
  3. Create a `.env` file:
305
+
288
306
  ```bash
289
307
  NEW_RELIC_API_KEY=your-api-key-here
290
308
  NEW_RELIC_ACCOUNT_ID=your-account-id
291
309
  ```
292
310
 
293
311
  4. Build the project:
312
+
294
313
  ```bash
295
314
  npm run build
296
315
  ```
@@ -323,6 +342,7 @@ npm run test:server
323
342
  ### Testing
324
343
 
325
344
  The project uses Test-Driven Development (TDD) with:
345
+
326
346
  - **Vitest** for unit testing
327
347
  - **Gherkin** for BDD testing
328
348
  - **Evalite** for LLM response validation
@@ -361,11 +381,13 @@ See [docs/mcp-inspector-setup.md](docs/mcp-inspector-setup.md) for detailed inst
361
381
  ### Architecture
362
382
 
363
383
  The server follows a modular architecture with:
384
+
364
385
  - **Client Layer**: Handles New Relic API communication
365
386
  - **Tools Layer**: Implements MCP tool specifications
366
387
  - **Server Layer**: Manages MCP protocol and tool routing
367
388
 
368
389
  Each tool:
390
+
369
391
  - Has a single, focused purpose
370
392
  - Validates inputs using Zod schemas
371
393
  - Returns structured, typed responses
@@ -391,6 +413,7 @@ We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.
391
413
  ### Code Style
392
414
 
393
415
  This project uses:
416
+
394
417
  - **Biome** for linting and formatting
395
418
  - **TypeScript** with strict mode
396
419
  - **2 spaces** for indentation
@@ -427,4 +450,4 @@ This project is not affiliated with, endorsed by, or supported by New Relic, Inc
427
450
 
428
451
  ---
429
452
 
430
- Made with ❤️ by [@cloudbring](https://github.com/cloudbring) using Cursor and Claude Code
453
+ Made with ❤️ by [@cloudbring](https://github.com/cloudbring) using Cursor and Claude Code
@@ -1,5 +1,13 @@
1
+ type GraphQLError = {
2
+ message: string;
3
+ [key: string]: unknown;
4
+ };
5
+ type GraphQLResponse<T> = {
6
+ data?: T;
7
+ errors?: GraphQLError[];
8
+ };
1
9
  export interface NrqlQueryResult {
2
- results: any[];
10
+ results: Array<Record<string, unknown>>;
3
11
  metadata: {
4
12
  eventTypes?: string[];
5
13
  timeWindow?: {
@@ -35,6 +43,7 @@ export declare class NewRelicClient {
35
43
  }): Promise<NrqlQueryResult>;
36
44
  listApmApplications(accountId?: string): Promise<ApmApplication[]>;
37
45
  private parseTags;
38
- executeNerdGraphQuery(query: string, variables?: any): Promise<any>;
46
+ executeNerdGraphQuery<T = unknown>(query: string, variables?: Record<string, unknown>): Promise<GraphQLResponse<T>>;
39
47
  }
48
+ export {};
40
49
  //# sourceMappingURL=newrelic-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"newrelic-client.d.ts","sourceRoot":"","sources":["../../src/client/newrelic-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE;YACX,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAKhD,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBvC,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2B9D,YAAY,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IA2DnF,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyCxE,OAAO,CAAC,SAAS;IAYX,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAwB1E"}
1
+ {"version":3,"file":"newrelic-client.d.ts","sourceRoot":"","sources":["../../src/client/newrelic-client.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAChE,KAAK,eAAe,CAAC,CAAC,IAAI;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE;YACX,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAKhD,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBvC,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA8B9D,YAAY,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IA2EnF,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkExE,OAAO,CAAC,SAAS;IAaX,qBAAqB,CAAC,CAAC,GAAG,OAAO,EACrC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAwB/B"}
@@ -19,7 +19,7 @@ class NewRelicClient {
19
19
  }
20
20
  }
21
21
  }`;
22
- const response = await this.executeNerdGraphQuery(query);
22
+ const response = (await this.executeNerdGraphQuery(query));
23
23
  return !!response.data?.actor?.user;
24
24
  }
25
25
  catch (_error) {
@@ -39,7 +39,7 @@ class NewRelicClient {
39
39
  }
40
40
  }
41
41
  }`;
42
- const response = await this.executeNerdGraphQuery(query);
42
+ const response = (await this.executeNerdGraphQuery(query));
43
43
  if (!response.data?.actor?.account) {
44
44
  throw new Error(`Account ${id} not found`);
45
45
  }
@@ -73,7 +73,7 @@ class NewRelicClient {
73
73
  }
74
74
  }`;
75
75
  try {
76
- const response = await this.executeNerdGraphQuery(query);
76
+ const response = (await this.executeNerdGraphQuery(query));
77
77
  if (response.errors) {
78
78
  const errorMessage = response.errors[0]?.message || 'NRQL query failed';
79
79
  throw new Error(errorMessage);
@@ -93,10 +93,10 @@ class NewRelicClient {
93
93
  };
94
94
  }
95
95
  catch (error) {
96
- if (error.message.includes('Syntax error')) {
96
+ if (error instanceof Error && error.message.includes('Syntax error')) {
97
97
  throw new Error(`NRQL Syntax error: ${error.message}`);
98
98
  }
99
- throw error;
99
+ throw error instanceof Error ? error : new Error(String(error));
100
100
  }
101
101
  }
102
102
  async listApmApplications(accountId) {
@@ -125,8 +125,8 @@ class NewRelicClient {
125
125
  }
126
126
  }
127
127
  }`;
128
- const response = await this.executeNerdGraphQuery(query);
129
- const entities = response.data?.actor?.entitySearch?.results?.entities || [];
128
+ const response = (await this.executeNerdGraphQuery(query));
129
+ const entities = (response.data?.actor?.entitySearch?.results?.entities || []);
130
130
  return entities.map((entity) => ({
131
131
  guid: entity.guid,
132
132
  name: entity.name,
@@ -141,8 +141,9 @@ class NewRelicClient {
141
141
  return {};
142
142
  const result = {};
143
143
  tags.forEach((tag) => {
144
- if (tag.key && tag.values?.length > 0) {
145
- result[tag.key] = tag.values[0];
144
+ const values = Array.isArray(tag.values) ? tag.values : [];
145
+ if (tag.key && values.length > 0) {
146
+ result[tag.key] = values[0];
146
147
  }
147
148
  });
148
149
  return result;
@@ -166,7 +167,7 @@ class NewRelicClient {
166
167
  }
167
168
  throw new Error(`NerdGraph API error: ${response.status} ${response.statusText}`);
168
169
  }
169
- return await response.json();
170
+ return (await response.json());
170
171
  }
171
172
  }
172
173
  exports.NewRelicClient = NewRelicClient;
@@ -1 +1 @@
1
- {"version":3,"file":"newrelic-client.js","sourceRoot":"","sources":["../../src/client/newrelic-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"newrelic-client.js","sourceRoot":"","sources":["../../src/client/newrelic-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ export declare const RestClientOptions: z.ZodObject<{
3
+ apiKey: z.ZodString;
4
+ region: z.ZodDefault<z.ZodEnum<["US", "EU"]>>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ region: "US" | "EU";
7
+ apiKey: string;
8
+ }, {
9
+ apiKey: string;
10
+ region?: "US" | "EU" | undefined;
11
+ }>;
12
+ export type RestClientOptions = z.infer<typeof RestClientOptions>;
13
+ export type Region = 'US' | 'EU';
14
+ declare function baseUrlForRegion(region: Region): string;
15
+ declare function serializeQuery(params: Record<string, unknown> | undefined): string;
16
+ declare function parseLinkHeader(linkHeader: string | null): Record<string, string>;
17
+ export interface RestResponse<T> {
18
+ status: number;
19
+ data: T;
20
+ links?: Record<string, string>;
21
+ url: string;
22
+ }
23
+ export declare class NewRelicRestClient {
24
+ private readonly apiKey;
25
+ private readonly region;
26
+ constructor(options: RestClientOptions);
27
+ private buildUrl;
28
+ get<T>(path: string, query?: Record<string, unknown>): Promise<RestResponse<T>>;
29
+ post<T>(path: string, body: unknown): Promise<RestResponse<T>>;
30
+ delete<T>(path: string): Promise<RestResponse<T>>;
31
+ }
32
+ export declare const __test__: {
33
+ serializeQuery: typeof serializeQuery;
34
+ parseLinkHeader: typeof parseLinkHeader;
35
+ baseUrlForRegion: typeof baseUrlForRegion;
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=rest-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.d.ts","sourceRoot":"","sources":["../../src/client/rest-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAc3E;AAED,iBAAS,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe1E;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,iBAAiB;IAMtC,OAAO,CAAC,QAAQ;IAQV,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAiB/E,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAkB9D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAgBxD;AAED,eAAO,MAAM,QAAQ;;;;CAAwD,CAAC"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.__test__ = exports.NewRelicRestClient = exports.RestClientOptions = void 0;
4
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
5
+ const zod_1 = require("zod");
6
+ exports.RestClientOptions = zod_1.z.object({
7
+ apiKey: zod_1.z.string().min(1),
8
+ region: zod_1.z.enum(['US', 'EU']).default('US'),
9
+ });
10
+ function baseUrlForRegion(region) {
11
+ return region === 'EU' ? 'https://api.eu.newrelic.com/v2' : 'https://api.newrelic.com/v2';
12
+ }
13
+ function serializeQuery(params) {
14
+ if (!params)
15
+ return '';
16
+ const query = new URLSearchParams();
17
+ for (const [key, value] of Object.entries(params)) {
18
+ if (value === undefined || value === null)
19
+ continue;
20
+ if (Array.isArray(value)) {
21
+ // arrays as repeated params: names[]=a&names[]=b
22
+ value.forEach((v) => query.append(`${key}[]`, String(v)));
23
+ }
24
+ else {
25
+ query.set(key, String(value));
26
+ }
27
+ }
28
+ const qs = query.toString();
29
+ return qs ? `?${qs}` : '';
30
+ }
31
+ function parseLinkHeader(linkHeader) {
32
+ if (!linkHeader)
33
+ return {};
34
+ const parts = linkHeader.split(',');
35
+ const links = {};
36
+ for (const part of parts) {
37
+ const section = part.split(';');
38
+ if (section.length < 2)
39
+ continue;
40
+ const url = section[0].trim().replace(/^<|>$/g, '');
41
+ const relMatch = section[1].match(/rel="(.*)"/);
42
+ const rel = relMatch?.[1];
43
+ if (rel) {
44
+ links[rel] = url;
45
+ }
46
+ }
47
+ return links;
48
+ }
49
+ class NewRelicRestClient {
50
+ apiKey;
51
+ region;
52
+ constructor(options) {
53
+ const parsed = exports.RestClientOptions.parse(options);
54
+ this.apiKey = parsed.apiKey;
55
+ this.region = parsed.region;
56
+ }
57
+ buildUrl(path, query) {
58
+ const base = baseUrlForRegion(this.region);
59
+ const normalizedPath = path.startsWith('/') ? path : `/${path}`;
60
+ const hasJson = normalizedPath.endsWith('.json');
61
+ const qs = serializeQuery(query);
62
+ return `${base}${hasJson ? normalizedPath : `${normalizedPath}.json`}${qs}`;
63
+ }
64
+ async get(path, query) {
65
+ const url = this.buildUrl(path, query);
66
+ const response = await fetch(url, {
67
+ method: 'GET',
68
+ headers: {
69
+ 'Content-Type': 'application/json',
70
+ 'Api-Key': this.apiKey,
71
+ },
72
+ });
73
+ const links = parseLinkHeader(response.headers.get('link'));
74
+ const data = (await response.json());
75
+ if (!response.ok) {
76
+ throw new Error(`REST API error: ${response.status} ${response.statusText}`);
77
+ }
78
+ return { status: response.status, data, links, url };
79
+ }
80
+ async post(path, body) {
81
+ const url = this.buildUrl(path);
82
+ const response = await fetch(url, {
83
+ method: 'POST',
84
+ headers: {
85
+ 'Content-Type': 'application/json',
86
+ 'Api-Key': this.apiKey,
87
+ },
88
+ body: JSON.stringify(body),
89
+ });
90
+ const links = parseLinkHeader(response.headers.get('link'));
91
+ const data = (await response.json());
92
+ if (!response.ok) {
93
+ throw new Error(`REST API error: ${response.status} ${response.statusText}`);
94
+ }
95
+ return { status: response.status, data, links, url };
96
+ }
97
+ async delete(path) {
98
+ const url = this.buildUrl(path);
99
+ const response = await fetch(url, {
100
+ method: 'DELETE',
101
+ headers: {
102
+ 'Content-Type': 'application/json',
103
+ 'Api-Key': this.apiKey,
104
+ },
105
+ });
106
+ const links = parseLinkHeader(response.headers.get('link'));
107
+ const data = (await response.json());
108
+ if (!response.ok) {
109
+ throw new Error(`REST API error: ${response.status} ${response.statusText}`);
110
+ }
111
+ return { status: response.status, data, links, url };
112
+ }
113
+ }
114
+ exports.NewRelicRestClient = NewRelicRestClient;
115
+ exports.__test__ = { serializeQuery, parseLinkHeader, baseUrlForRegion };
116
+ //# sourceMappingURL=rest-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../src/client/rest-client.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -10,7 +10,11 @@ export declare class NewRelicMCPServer {
10
10
  private registerTools;
11
11
  private setupHandlers;
12
12
  start(): Promise<void>;
13
- executeTool(name: string, args: any): Promise<any>;
13
+ executeTool(name: string, args: {
14
+ target_account_id?: string;
15
+ account_id?: string;
16
+ [key: string]: unknown;
17
+ }): Promise<unknown>;
14
18
  private requiresAccountId;
15
19
  getMetadata(): {
16
20
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAIA,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,MAAM,CAAC,EAAE,cAAc;IA0BnC,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,aAAa;IA6Bf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA6DxD,OAAO,CAAC,iBAAiB;IAczB,WAAW;;;;;IAQX,kBAAkB,IAAI,MAAM,EAAE;IAI9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvC,mBAAmB,IAAI,MAAM,GAAG,SAAS;CAG1C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAIA,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAW1D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,MAAM,CAAC,EAAE,cAAc;IA4BnC,OAAO,CAAC,aAAa;IAmDrB,OAAO,CAAC,aAAa;IA8Bf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAChF,OAAO,CAAC,OAAO,CAAC;IA2InB,OAAO,CAAC,iBAAiB;IAczB,WAAW;;;;;IAQX,kBAAkB,IAAI,MAAM,EAAE;IAI9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvC,mBAAmB,IAAI,MAAM,GAAG,SAAS;CAG1C"}