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.
- package/README.md +30 -7
- package/dist/client/newrelic-client.d.ts +11 -2
- package/dist/client/newrelic-client.d.ts.map +1 -1
- package/dist/client/newrelic-client.js +11 -10
- package/dist/client/newrelic-client.js.map +1 -1
- package/dist/client/rest-client.d.ts +38 -0
- package/dist/client/rest-client.d.ts.map +1 -0
- package/dist/client/rest-client.js +116 -0
- package/dist/client/rest-client.js.map +1 -0
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -15
- package/dist/server.js.map +1 -1
- package/dist/tools/alert.d.ts +14 -4
- package/dist/tools/alert.d.ts.map +1 -1
- package/dist/tools/alert.js +7 -1
- package/dist/tools/alert.js.map +1 -1
- package/dist/tools/apm.d.ts +3 -1
- package/dist/tools/apm.d.ts.map +1 -1
- package/dist/tools/apm.js.map +1 -1
- package/dist/tools/entity.d.ts +11 -2
- package/dist/tools/entity.d.ts.map +1 -1
- package/dist/tools/entity.js +2 -2
- package/dist/tools/entity.js.map +1 -1
- package/dist/tools/nerdgraph.d.ts +1 -1
- package/dist/tools/nerdgraph.d.ts.map +1 -1
- package/dist/tools/nerdgraph.js +12 -4
- package/dist/tools/nerdgraph.js.map +1 -1
- package/dist/tools/nrql.d.ts +4 -1
- package/dist/tools/nrql.d.ts.map +1 -1
- package/dist/tools/nrql.js.map +1 -1
- package/dist/tools/rest/alerts.d.ts +24 -0
- package/dist/tools/rest/alerts.d.ts.map +1 -0
- package/dist/tools/rest/alerts.js +94 -0
- package/dist/tools/rest/alerts.js.map +1 -0
- package/dist/tools/rest/apm.d.ts +18 -0
- package/dist/tools/rest/apm.d.ts.map +1 -0
- package/dist/tools/rest/apm.js +63 -0
- package/dist/tools/rest/apm.js.map +1 -0
- package/dist/tools/rest/deployments.d.ts +33 -0
- package/dist/tools/rest/deployments.d.ts.map +1 -0
- package/dist/tools/rest/deployments.js +111 -0
- package/dist/tools/rest/deployments.js.map +1 -0
- package/dist/tools/rest/metrics.d.ts +42 -0
- package/dist/tools/rest/metrics.d.ts.map +1 -0
- package/dist/tools/rest/metrics.js +144 -0
- package/dist/tools/rest/metrics.js.map +1 -0
- package/dist/tools/synthetics.d.ts +11 -2
- package/dist/tools/synthetics.d.ts.map +1 -1
- package/dist/tools/synthetics.js +3 -3
- package/dist/tools/synthetics.js.map +1 -1
- 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:
|
|
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?:
|
|
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,
|
|
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
|
-
|
|
145
|
-
|
|
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":";;;AAAA,MAAM,aAAa,GAAG,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"newrelic-client.js","sourceRoot":"","sources":["../../src/client/newrelic-client.ts"],"names":[],"mappings":";;;AAAA,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAiCzD,MAAa,cAAc;IACjB,MAAM,CAAS;IACf,gBAAgB,CAAU;IAElC,YAAY,MAAe,EAAE,gBAAyB;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC;YAEH,MAAM,KAAK,GAAG;;;;;;;QAOZ,CAAC;YAEH,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAChD,KAAK,CACN,CAAkC,CAAC;YACpC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QACtC,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAkB;QACxC,MAAM,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAGD,MAAM,KAAK,GAAG;;sBAEI,EAAE;;;;;MAKlB,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAChD,KAAK,CACN,CAAqC,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACzC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;SACvC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAA2C;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG;;sBAEI,MAAM,CAAC,SAAS;yBACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;;;;;;;;;;MAanD,CAAC;QAEH,IAAI,CAAC;YAeH,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAChD,KAAK,CACN,CAAkC,CAAC;YAEpC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,mBAAmB,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;YAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,qCAAqC;YACrC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAEtE,OAAO;gBACL,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE;gBACjC,QAAQ,EAAE;oBACR,GAAG,UAAU,CAAC,QAAQ;oBACtB,UAAU,EAAE,YAAY;iBACzB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,SAAkB;QAC1C,MAAM,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,KAAK,GAAG;;wFAEsE,EAAE;;;;;;;;;;;;;;;;;;MAkBpF,CAAC;QAkBH,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAChD,KAAK,CACN,CAA0C,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,CAO3E,CAAC;QAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;YACpC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,SAAS,CAAC,IAAiD;QACjE,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAW,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,KAAa,EACb,SAAmC;QAEnC,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,IAAI,CAAC,MAAM;aACvB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IACvD,CAAC;CACF;AAjPD,wCAiPC"}
|
|
@@ -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:
|
|
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;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|