instatus-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.
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ # instatus-mcp
2
+
3
+ MCP (Model Context Protocol) server for [Instatus](https://instatus.com) - manage status pages, incidents, components, and more via Claude Code or any MCP-compatible client.
4
+
5
+ ## Features
6
+
7
+ - **Status Pages**: Create, list, update, and delete status pages
8
+ - **Components**: Manage service components and their statuses
9
+ - **Incidents**: Create and manage incidents with status updates
10
+ - **Maintenances**: Schedule and manage planned maintenance windows
11
+ - **Subscribers**: Manage email subscribers for status updates
12
+ - **Metrics**: Track and visualize custom metrics with datapoints
13
+ - **Teammates**: Manage team member access to status pages
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install -g instatus-mcp
19
+ ```
20
+
21
+ Or run directly with npx:
22
+
23
+ ```bash
24
+ npx instatus-mcp
25
+ ```
26
+
27
+ ## Configuration
28
+
29
+ Set your Instatus API key as an environment variable:
30
+
31
+ ```bash
32
+ export INSTATUS_API_KEY="your-api-key-here"
33
+ ```
34
+
35
+ You can get your API key from [Instatus User Settings > Developer Settings](https://dashboard.instatus.com/developer).
36
+
37
+ ### Claude Code Configuration
38
+
39
+ Add to your Claude Code MCP settings (`~/.claude/claude_desktop_config.json`):
40
+
41
+ ```json
42
+ {
43
+ "mcpServers": {
44
+ "instatus": {
45
+ "command": "npx",
46
+ "args": ["instatus-mcp"],
47
+ "env": {
48
+ "INSTATUS_API_KEY": "your-api-key-here"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ ## Available Tools
56
+
57
+ ### User Profile
58
+ | Tool | Description |
59
+ |------|-------------|
60
+ | `instatus_get_user_profile` | Get the authenticated user's profile |
61
+
62
+ ### Status Pages
63
+ | Tool | Description |
64
+ |------|-------------|
65
+ | `instatus_list_status_pages` | List all status pages |
66
+ | `instatus_create_status_page` | Create a new status page |
67
+ | `instatus_update_status_page` | Update an existing status page |
68
+ | `instatus_delete_status_page` | Delete a status page |
69
+
70
+ ### Components
71
+ | Tool | Description |
72
+ |------|-------------|
73
+ | `instatus_list_components` | List all components for a status page |
74
+ | `instatus_get_component` | Get a specific component |
75
+ | `instatus_create_component` | Create a new component |
76
+ | `instatus_update_component` | Update an existing component |
77
+ | `instatus_delete_component` | Delete a component |
78
+
79
+ ### Incidents
80
+ | Tool | Description |
81
+ |------|-------------|
82
+ | `instatus_list_incidents` | List all incidents for a status page |
83
+ | `instatus_get_incident` | Get a specific incident |
84
+ | `instatus_create_incident` | Create a new incident |
85
+ | `instatus_create_incident_from_template` | Create an incident from a template |
86
+ | `instatus_update_incident` | Update an existing incident |
87
+ | `instatus_delete_incident` | Delete an incident |
88
+
89
+ ### Maintenances
90
+ | Tool | Description |
91
+ |------|-------------|
92
+ | `instatus_list_maintenances` | List all scheduled maintenances |
93
+ | `instatus_get_maintenance` | Get a specific maintenance |
94
+ | `instatus_create_maintenance` | Create a scheduled maintenance |
95
+ | `instatus_update_maintenance` | Update a scheduled maintenance |
96
+ | `instatus_delete_maintenance` | Delete a scheduled maintenance |
97
+
98
+ ### Subscribers
99
+ | Tool | Description |
100
+ |------|-------------|
101
+ | `instatus_list_subscribers` | List all subscribers |
102
+ | `instatus_add_subscriber` | Add a new subscriber |
103
+ | `instatus_remove_subscriber` | Remove a subscriber |
104
+
105
+ ### Metrics
106
+ | Tool | Description |
107
+ |------|-------------|
108
+ | `instatus_list_metrics` | List all metrics |
109
+ | `instatus_get_metric` | Get a specific metric with data |
110
+ | `instatus_create_metric` | Create a new metric |
111
+ | `instatus_update_metric` | Update a metric |
112
+ | `instatus_delete_metric` | Delete a metric |
113
+ | `instatus_add_metric_datapoint` | Add a single datapoint |
114
+ | `instatus_add_metric_datapoints` | Add multiple datapoints |
115
+ | `instatus_delete_metric_datapoints` | Delete all datapoints from a metric |
116
+
117
+ ### Teammates
118
+ | Tool | Description |
119
+ |------|-------------|
120
+ | `instatus_list_teammates` | List all team members |
121
+ | `instatus_add_teammate` | Add a team member |
122
+ | `instatus_remove_teammate` | Remove a team member |
123
+
124
+ ## Component Status Values
125
+
126
+ - `OPERATIONAL` - Component is functioning normally
127
+ - `UNDERMAINTENANCE` - Component is under maintenance
128
+ - `DEGRADEDPERFORMANCE` - Component has degraded performance
129
+ - `PARTIALOUTAGE` - Component has partial outage
130
+ - `MAJOROUTAGE` - Component has major outage
131
+
132
+ ## Incident Status Values
133
+
134
+ - `INVESTIGATING` - Investigating the issue
135
+ - `IDENTIFIED` - Issue has been identified
136
+ - `MONITORING` - Monitoring the fix
137
+ - `RESOLVED` - Issue has been resolved
138
+
139
+ ## Maintenance Status Values
140
+
141
+ - `NOTSTARTEDYET` - Maintenance hasn't started
142
+ - `INPROGRESS` - Maintenance is in progress
143
+ - `COMPLETED` - Maintenance is complete
144
+
145
+ ## Development
146
+
147
+ ```bash
148
+ # Clone the repository
149
+ git clone https://github.com/TechnicalRhino/instatus-mcp.git
150
+ cd instatus-mcp
151
+
152
+ # Install dependencies
153
+ npm install
154
+
155
+ # Build
156
+ npm run build
157
+
158
+ # Run in development mode
159
+ npm run dev
160
+ ```
161
+
162
+ ## License
163
+
164
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,717 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ // Environment configuration
6
+ const INSTATUS_API_KEY = process.env.INSTATUS_API_KEY || "";
7
+ if (!INSTATUS_API_KEY) {
8
+ console.error("Warning: INSTATUS_API_KEY environment variable is not set");
9
+ }
10
+ // Instatus API client
11
+ class InstatusClient {
12
+ baseUrl = "https://api.instatus.com";
13
+ apiKey;
14
+ constructor(apiKey) {
15
+ this.apiKey = apiKey;
16
+ }
17
+ async request(method, endpoint, body) {
18
+ const url = `${this.baseUrl}${endpoint}`;
19
+ const headers = {
20
+ Authorization: `Bearer ${this.apiKey}`,
21
+ "Content-Type": "application/json",
22
+ };
23
+ const response = await fetch(url, {
24
+ method,
25
+ headers,
26
+ body: body ? JSON.stringify(body) : undefined,
27
+ });
28
+ if (!response.ok) {
29
+ const errorText = await response.text();
30
+ throw new Error(`Instatus API error (${response.status}): ${errorText}`);
31
+ }
32
+ return response.json();
33
+ }
34
+ // User Profile
35
+ async getUserProfile() {
36
+ return this.request("GET", "/v1/user");
37
+ }
38
+ // Status Pages
39
+ async listStatusPages(page = 1, perPage = 50) {
40
+ return this.request("GET", `/v2/pages?page=${page}&per_page=${perPage}`);
41
+ }
42
+ async createStatusPage(data) {
43
+ return this.request("POST", "/v1/pages", data);
44
+ }
45
+ async updateStatusPage(pageId, data) {
46
+ return this.request("PUT", `/v2/${pageId}`, data);
47
+ }
48
+ async deleteStatusPage(pageId) {
49
+ return this.request("DELETE", `/v2/${pageId}`);
50
+ }
51
+ // Components
52
+ async listComponents(pageId, page = 1, perPage = 50) {
53
+ return this.request("GET", `/v2/${pageId}/components?page=${page}&per_page=${perPage}`);
54
+ }
55
+ async getComponent(pageId, componentId) {
56
+ return this.request("GET", `/v2/${pageId}/components/${componentId}`);
57
+ }
58
+ async createComponent(pageId, data) {
59
+ return this.request("POST", `/v1/${pageId}/components`, data);
60
+ }
61
+ async updateComponent(pageId, componentId, data) {
62
+ return this.request("PUT", `/v2/${pageId}/components/${componentId}`, data);
63
+ }
64
+ async deleteComponent(pageId, componentId) {
65
+ return this.request("DELETE", `/v1/${pageId}/components/${componentId}`);
66
+ }
67
+ // Incidents
68
+ async listIncidents(pageId, page = 1, perPage = 50, status) {
69
+ let url = `/v1/${pageId}/incidents?page=${page}&per_page=${perPage}`;
70
+ if (status)
71
+ url += `&status=${status}`;
72
+ return this.request("GET", url);
73
+ }
74
+ async getIncident(pageId, incidentId) {
75
+ return this.request("GET", `/v1/${pageId}/incidents/${incidentId}`);
76
+ }
77
+ async createIncident(pageId, data) {
78
+ return this.request("POST", `/v1/${pageId}/incidents`, data);
79
+ }
80
+ async createIncidentFromTemplate(pageId, templateId) {
81
+ return this.request("POST", `/v1/${pageId}/incidents/${templateId}`);
82
+ }
83
+ async updateIncident(pageId, incidentId, data) {
84
+ return this.request("PUT", `/v1/${pageId}/incidents/${incidentId}`, data);
85
+ }
86
+ async deleteIncident(pageId, incidentId) {
87
+ return this.request("DELETE", `/v1/${pageId}/incidents/${incidentId}`);
88
+ }
89
+ // Maintenances
90
+ async listMaintenances(pageId, page = 1, perPage = 50) {
91
+ return this.request("GET", `/v2/${pageId}/maintenances?page=${page}&per_page=${perPage}`);
92
+ }
93
+ async getMaintenance(pageId, maintenanceId) {
94
+ return this.request("GET", `/v1/${pageId}/maintenances/${maintenanceId}`);
95
+ }
96
+ async createMaintenance(pageId, data) {
97
+ return this.request("POST", `/v1/${pageId}/maintenances`, data);
98
+ }
99
+ async updateMaintenance(pageId, maintenanceId, data) {
100
+ return this.request("PUT", `/v1/${pageId}/maintenances/${maintenanceId}`, data);
101
+ }
102
+ async deleteMaintenance(pageId, maintenanceId) {
103
+ return this.request("DELETE", `/v1/${pageId}/maintenances/${maintenanceId}`);
104
+ }
105
+ // Subscribers
106
+ async listSubscribers(pageId, page = 1, perPage = 50, search) {
107
+ let url = `/v2/${pageId}/subscribers?page=${page}&per_page=${perPage}`;
108
+ if (search)
109
+ url += `&search=${encodeURIComponent(search)}`;
110
+ return this.request("GET", url);
111
+ }
112
+ async addSubscriber(pageId, data) {
113
+ return this.request("POST", `/v1/${pageId}/subscribers`, data);
114
+ }
115
+ async removeSubscriber(pageId, subscriberId) {
116
+ return this.request("DELETE", `/v1/${pageId}/subscribers/${subscriberId}`);
117
+ }
118
+ // Metrics
119
+ async listMetrics(pageId, page = 1, perPage = 50) {
120
+ return this.request("GET", `/v1/${pageId}/metrics?page=${page}&per_page=${perPage}`);
121
+ }
122
+ async getMetric(pageId, metricId) {
123
+ return this.request("GET", `/v1/${pageId}/metrics/${metricId}`);
124
+ }
125
+ async createMetric(pageId, data) {
126
+ return this.request("POST", `/v1/${pageId}/metrics`, data);
127
+ }
128
+ async updateMetric(pageId, metricId, data) {
129
+ return this.request("PUT", `/v1/${pageId}/metrics/${metricId}`, data);
130
+ }
131
+ async deleteMetric(pageId, metricId) {
132
+ return this.request("DELETE", `/v1/${pageId}/metrics/${metricId}`);
133
+ }
134
+ async addMetricDatapoint(pageId, metricId, data) {
135
+ return this.request("POST", `/v1/${pageId}/metrics/${metricId}`, data);
136
+ }
137
+ async addMetricDatapoints(pageId, metricId, data) {
138
+ return this.request("POST", `/v1/${pageId}/metrics/${metricId}/data`, { data });
139
+ }
140
+ async deleteMetricDatapoints(pageId, metricId) {
141
+ return this.request("DELETE", `/v1/${pageId}/metrics/${metricId}/data`);
142
+ }
143
+ // Teammates
144
+ async listTeammates(pageId, page = 1, perPage = 50) {
145
+ return this.request("GET", `/v1/${pageId}/team?page=${page}&per_page=${perPage}`);
146
+ }
147
+ async addTeammate(pageId, email) {
148
+ return this.request("POST", `/v1/${pageId}/team`, { email });
149
+ }
150
+ async removeTeammate(pageId, memberId) {
151
+ return this.request("DELETE", `/v1/${pageId}/team/${memberId}`);
152
+ }
153
+ }
154
+ const client = new InstatusClient(INSTATUS_API_KEY);
155
+ // Create MCP server
156
+ const server = new McpServer({
157
+ name: "instatus-mcp",
158
+ version: "1.0.0",
159
+ });
160
+ // Helper to format response
161
+ function formatResponse(result) {
162
+ return {
163
+ content: [
164
+ {
165
+ type: "text",
166
+ text: JSON.stringify(result, null, 2),
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ function formatError(error) {
172
+ const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
173
+ return {
174
+ content: [
175
+ {
176
+ type: "text",
177
+ text: `Error: ${errorMessage}`,
178
+ },
179
+ ],
180
+ isError: true,
181
+ };
182
+ }
183
+ // ==================== User Profile ====================
184
+ server.tool("instatus_get_user_profile", "Get the authenticated user's profile information", {}, async () => {
185
+ try {
186
+ const result = await client.getUserProfile();
187
+ return formatResponse(result);
188
+ }
189
+ catch (error) {
190
+ return formatError(error);
191
+ }
192
+ });
193
+ // ==================== Status Pages ====================
194
+ server.tool("instatus_list_status_pages", "List all status pages", {
195
+ page: z.number().optional().describe("Page number (default: 1)"),
196
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
197
+ }, async ({ page, per_page }) => {
198
+ try {
199
+ const result = await client.listStatusPages(page, per_page);
200
+ return formatResponse(result);
201
+ }
202
+ catch (error) {
203
+ return formatError(error);
204
+ }
205
+ });
206
+ server.tool("instatus_create_status_page", "Create a new status page", {
207
+ email: z.string().describe("Email address for the status page"),
208
+ name: z.string().describe("Name of the status page"),
209
+ subdomain: z.string().describe("Subdomain for the status page (e.g., 'mycompany' for mycompany.instatus.com)"),
210
+ components: z.array(z.string()).optional().describe("Array of initial component names"),
211
+ logoUrl: z.string().optional().describe("URL for the logo image"),
212
+ websiteUrl: z.string().optional().describe("Company website URL"),
213
+ language: z.string().optional().describe("Language code (e.g., 'en')"),
214
+ brandColor: z.string().optional().describe("Brand color hex code"),
215
+ }, async ({ email, name, subdomain, components, logoUrl, websiteUrl, language, brandColor }) => {
216
+ try {
217
+ const result = await client.createStatusPage({
218
+ email,
219
+ name,
220
+ subdomain,
221
+ components,
222
+ logoUrl,
223
+ websiteUrl,
224
+ language,
225
+ brandColor,
226
+ });
227
+ return formatResponse(result);
228
+ }
229
+ catch (error) {
230
+ return formatError(error);
231
+ }
232
+ });
233
+ server.tool("instatus_update_status_page", "Update an existing status page", {
234
+ page_id: z.string().describe("The ID of the status page to update"),
235
+ name: z.string().optional().describe("New name for the status page"),
236
+ logoUrl: z.string().optional().describe("URL for the logo image"),
237
+ websiteUrl: z.string().optional().describe("Company website URL"),
238
+ language: z.string().optional().describe("Language code"),
239
+ brandColor: z.string().optional().describe("Brand color hex code"),
240
+ }, async ({ page_id, ...data }) => {
241
+ try {
242
+ const result = await client.updateStatusPage(page_id, data);
243
+ return formatResponse(result);
244
+ }
245
+ catch (error) {
246
+ return formatError(error);
247
+ }
248
+ });
249
+ server.tool("instatus_delete_status_page", "Delete a status page", {
250
+ page_id: z.string().describe("The ID of the status page to delete"),
251
+ }, async ({ page_id }) => {
252
+ try {
253
+ const result = await client.deleteStatusPage(page_id);
254
+ return formatResponse(result);
255
+ }
256
+ catch (error) {
257
+ return formatError(error);
258
+ }
259
+ });
260
+ // ==================== Components ====================
261
+ server.tool("instatus_list_components", "List all components for a status page", {
262
+ page_id: z.string().describe("The ID of the status page"),
263
+ page: z.number().optional().describe("Page number (default: 1)"),
264
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
265
+ }, async ({ page_id, page, per_page }) => {
266
+ try {
267
+ const result = await client.listComponents(page_id, page, per_page);
268
+ return formatResponse(result);
269
+ }
270
+ catch (error) {
271
+ return formatError(error);
272
+ }
273
+ });
274
+ server.tool("instatus_get_component", "Get a specific component", {
275
+ page_id: z.string().describe("The ID of the status page"),
276
+ component_id: z.string().describe("The ID of the component"),
277
+ }, async ({ page_id, component_id }) => {
278
+ try {
279
+ const result = await client.getComponent(page_id, component_id);
280
+ return formatResponse(result);
281
+ }
282
+ catch (error) {
283
+ return formatError(error);
284
+ }
285
+ });
286
+ server.tool("instatus_create_component", "Create a new component", {
287
+ page_id: z.string().describe("The ID of the status page"),
288
+ name: z.string().describe("Name of the component"),
289
+ description: z.string().optional().describe("Description of the component"),
290
+ status: z.enum(["OPERATIONAL", "UNDERMAINTENANCE", "DEGRADEDPERFORMANCE", "PARTIALOUTAGE", "MAJOROUTAGE"]).optional().describe("Current status"),
291
+ order: z.number().optional().describe("Display order"),
292
+ showUptime: z.boolean().optional().describe("Whether to show uptime statistics"),
293
+ grouped: z.boolean().optional().describe("Whether this is a group"),
294
+ }, async ({ page_id, name, description, status, order, showUptime, grouped }) => {
295
+ try {
296
+ const result = await client.createComponent(page_id, {
297
+ name,
298
+ description,
299
+ status,
300
+ order,
301
+ showUptime,
302
+ grouped,
303
+ });
304
+ return formatResponse(result);
305
+ }
306
+ catch (error) {
307
+ return formatError(error);
308
+ }
309
+ });
310
+ server.tool("instatus_update_component", "Update an existing component", {
311
+ page_id: z.string().describe("The ID of the status page"),
312
+ component_id: z.string().describe("The ID of the component to update"),
313
+ name: z.string().optional().describe("New name for the component"),
314
+ description: z.string().optional().describe("New description"),
315
+ status: z.enum(["OPERATIONAL", "UNDERMAINTENANCE", "DEGRADEDPERFORMANCE", "PARTIALOUTAGE", "MAJOROUTAGE"]).optional().describe("New status"),
316
+ order: z.number().optional().describe("New display order"),
317
+ showUptime: z.boolean().optional().describe("Whether to show uptime statistics"),
318
+ }, async ({ page_id, component_id, ...data }) => {
319
+ try {
320
+ const result = await client.updateComponent(page_id, component_id, data);
321
+ return formatResponse(result);
322
+ }
323
+ catch (error) {
324
+ return formatError(error);
325
+ }
326
+ });
327
+ server.tool("instatus_delete_component", "Delete a component", {
328
+ page_id: z.string().describe("The ID of the status page"),
329
+ component_id: z.string().describe("The ID of the component to delete"),
330
+ }, async ({ page_id, component_id }) => {
331
+ try {
332
+ const result = await client.deleteComponent(page_id, component_id);
333
+ return formatResponse(result);
334
+ }
335
+ catch (error) {
336
+ return formatError(error);
337
+ }
338
+ });
339
+ // ==================== Incidents ====================
340
+ server.tool("instatus_list_incidents", "List all incidents for a status page", {
341
+ page_id: z.string().describe("The ID of the status page"),
342
+ page: z.number().optional().describe("Page number (default: 1)"),
343
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
344
+ status: z.string().optional().describe("Filter by status (comma-separated)"),
345
+ }, async ({ page_id, page, per_page, status }) => {
346
+ try {
347
+ const result = await client.listIncidents(page_id, page, per_page, status);
348
+ return formatResponse(result);
349
+ }
350
+ catch (error) {
351
+ return formatError(error);
352
+ }
353
+ });
354
+ server.tool("instatus_get_incident", "Get a specific incident", {
355
+ page_id: z.string().describe("The ID of the status page"),
356
+ incident_id: z.string().describe("The ID of the incident"),
357
+ }, async ({ page_id, incident_id }) => {
358
+ try {
359
+ const result = await client.getIncident(page_id, incident_id);
360
+ return formatResponse(result);
361
+ }
362
+ catch (error) {
363
+ return formatError(error);
364
+ }
365
+ });
366
+ server.tool("instatus_create_incident", "Create a new incident", {
367
+ page_id: z.string().describe("The ID of the status page"),
368
+ name: z.string().describe("Title of the incident"),
369
+ message: z.string().describe("Description/message for the incident"),
370
+ components: z.array(z.string()).optional().describe("Array of component IDs affected"),
371
+ started: z.string().optional().describe("Start timestamp (ISO format)"),
372
+ status: z.enum(["INVESTIGATING", "IDENTIFIED", "MONITORING", "RESOLVED"]).optional().describe("Incident status"),
373
+ notify: z.boolean().optional().describe("Whether to notify subscribers"),
374
+ }, async ({ page_id, name, message, components, started, status, notify }) => {
375
+ try {
376
+ const result = await client.createIncident(page_id, {
377
+ name,
378
+ message,
379
+ components,
380
+ started,
381
+ status,
382
+ notify,
383
+ });
384
+ return formatResponse(result);
385
+ }
386
+ catch (error) {
387
+ return formatError(error);
388
+ }
389
+ });
390
+ server.tool("instatus_create_incident_from_template", "Create an incident from a template", {
391
+ page_id: z.string().describe("The ID of the status page"),
392
+ template_id: z.string().describe("The ID of the incident template"),
393
+ }, async ({ page_id, template_id }) => {
394
+ try {
395
+ const result = await client.createIncidentFromTemplate(page_id, template_id);
396
+ return formatResponse(result);
397
+ }
398
+ catch (error) {
399
+ return formatError(error);
400
+ }
401
+ });
402
+ server.tool("instatus_update_incident", "Update an existing incident", {
403
+ page_id: z.string().describe("The ID of the status page"),
404
+ incident_id: z.string().describe("The ID of the incident to update"),
405
+ name: z.string().optional().describe("New title"),
406
+ message: z.string().optional().describe("New message/update"),
407
+ status: z.enum(["INVESTIGATING", "IDENTIFIED", "MONITORING", "RESOLVED"]).optional().describe("New status"),
408
+ notify: z.boolean().optional().describe("Whether to notify subscribers"),
409
+ }, async ({ page_id, incident_id, ...data }) => {
410
+ try {
411
+ const result = await client.updateIncident(page_id, incident_id, data);
412
+ return formatResponse(result);
413
+ }
414
+ catch (error) {
415
+ return formatError(error);
416
+ }
417
+ });
418
+ server.tool("instatus_delete_incident", "Delete an incident", {
419
+ page_id: z.string().describe("The ID of the status page"),
420
+ incident_id: z.string().describe("The ID of the incident to delete"),
421
+ }, async ({ page_id, incident_id }) => {
422
+ try {
423
+ const result = await client.deleteIncident(page_id, incident_id);
424
+ return formatResponse(result);
425
+ }
426
+ catch (error) {
427
+ return formatError(error);
428
+ }
429
+ });
430
+ // ==================== Maintenances ====================
431
+ server.tool("instatus_list_maintenances", "List all scheduled maintenances for a status page", {
432
+ page_id: z.string().describe("The ID of the status page"),
433
+ page: z.number().optional().describe("Page number (default: 1)"),
434
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
435
+ }, async ({ page_id, page, per_page }) => {
436
+ try {
437
+ const result = await client.listMaintenances(page_id, page, per_page);
438
+ return formatResponse(result);
439
+ }
440
+ catch (error) {
441
+ return formatError(error);
442
+ }
443
+ });
444
+ server.tool("instatus_get_maintenance", "Get a specific maintenance", {
445
+ page_id: z.string().describe("The ID of the status page"),
446
+ maintenance_id: z.string().describe("The ID of the maintenance"),
447
+ }, async ({ page_id, maintenance_id }) => {
448
+ try {
449
+ const result = await client.getMaintenance(page_id, maintenance_id);
450
+ return formatResponse(result);
451
+ }
452
+ catch (error) {
453
+ return formatError(error);
454
+ }
455
+ });
456
+ server.tool("instatus_create_maintenance", "Create a scheduled maintenance", {
457
+ page_id: z.string().describe("The ID of the status page"),
458
+ name: z.string().describe("Title of the maintenance"),
459
+ message: z.string().describe("Description/message for the maintenance"),
460
+ components: z.array(z.string()).optional().describe("Array of component IDs affected"),
461
+ start: z.string().describe("Start timestamp (ISO format)"),
462
+ end: z.string().optional().describe("End timestamp (ISO format)"),
463
+ status: z.enum(["NOTSTARTEDYET", "INPROGRESS", "COMPLETED"]).optional().describe("Maintenance status"),
464
+ notify: z.boolean().optional().describe("Whether to notify subscribers"),
465
+ duration: z.number().optional().describe("Duration in minutes"),
466
+ }, async ({ page_id, name, message, components, start, end, status, notify, duration }) => {
467
+ try {
468
+ const result = await client.createMaintenance(page_id, {
469
+ name,
470
+ message,
471
+ components,
472
+ start,
473
+ end,
474
+ status,
475
+ notify,
476
+ duration,
477
+ });
478
+ return formatResponse(result);
479
+ }
480
+ catch (error) {
481
+ return formatError(error);
482
+ }
483
+ });
484
+ server.tool("instatus_update_maintenance", "Update a scheduled maintenance", {
485
+ page_id: z.string().describe("The ID of the status page"),
486
+ maintenance_id: z.string().describe("The ID of the maintenance to update"),
487
+ name: z.string().optional().describe("New title"),
488
+ message: z.string().optional().describe("New message"),
489
+ start: z.string().optional().describe("New start timestamp"),
490
+ end: z.string().optional().describe("New end timestamp"),
491
+ status: z.enum(["NOTSTARTEDYET", "INPROGRESS", "COMPLETED"]).optional().describe("New status"),
492
+ notify: z.boolean().optional().describe("Whether to notify subscribers"),
493
+ }, async ({ page_id, maintenance_id, ...data }) => {
494
+ try {
495
+ const result = await client.updateMaintenance(page_id, maintenance_id, data);
496
+ return formatResponse(result);
497
+ }
498
+ catch (error) {
499
+ return formatError(error);
500
+ }
501
+ });
502
+ server.tool("instatus_delete_maintenance", "Delete a scheduled maintenance", {
503
+ page_id: z.string().describe("The ID of the status page"),
504
+ maintenance_id: z.string().describe("The ID of the maintenance to delete"),
505
+ }, async ({ page_id, maintenance_id }) => {
506
+ try {
507
+ const result = await client.deleteMaintenance(page_id, maintenance_id);
508
+ return formatResponse(result);
509
+ }
510
+ catch (error) {
511
+ return formatError(error);
512
+ }
513
+ });
514
+ // ==================== Subscribers ====================
515
+ server.tool("instatus_list_subscribers", "List all subscribers for a status page", {
516
+ page_id: z.string().describe("The ID of the status page"),
517
+ page: z.number().optional().describe("Page number (default: 1)"),
518
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
519
+ search: z.string().optional().describe("Search by email or phone number"),
520
+ }, async ({ page_id, page, per_page, search }) => {
521
+ try {
522
+ const result = await client.listSubscribers(page_id, page, per_page, search);
523
+ return formatResponse(result);
524
+ }
525
+ catch (error) {
526
+ return formatError(error);
527
+ }
528
+ });
529
+ server.tool("instatus_add_subscriber", "Add a new subscriber", {
530
+ page_id: z.string().describe("The ID of the status page"),
531
+ email: z.string().describe("Email address of the subscriber"),
532
+ all: z.boolean().describe("Subscribe to all components (true) or specific ones (false)"),
533
+ autoConfirm: z.boolean().optional().describe("Skip confirmation email (paid feature)"),
534
+ components: z.array(z.string()).optional().describe("Array of component IDs to subscribe to (if all is false)"),
535
+ }, async ({ page_id, email, all, autoConfirm, components }) => {
536
+ try {
537
+ const result = await client.addSubscriber(page_id, {
538
+ email,
539
+ all,
540
+ autoConfirm,
541
+ components,
542
+ });
543
+ return formatResponse(result);
544
+ }
545
+ catch (error) {
546
+ return formatError(error);
547
+ }
548
+ });
549
+ server.tool("instatus_remove_subscriber", "Remove a subscriber", {
550
+ page_id: z.string().describe("The ID of the status page"),
551
+ subscriber_id: z.string().describe("The ID of the subscriber to remove"),
552
+ }, async ({ page_id, subscriber_id }) => {
553
+ try {
554
+ const result = await client.removeSubscriber(page_id, subscriber_id);
555
+ return formatResponse(result);
556
+ }
557
+ catch (error) {
558
+ return formatError(error);
559
+ }
560
+ });
561
+ // ==================== Metrics ====================
562
+ server.tool("instatus_list_metrics", "List all metrics for a status page", {
563
+ page_id: z.string().describe("The ID of the status page"),
564
+ page: z.number().optional().describe("Page number (default: 1)"),
565
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
566
+ }, async ({ page_id, page, per_page }) => {
567
+ try {
568
+ const result = await client.listMetrics(page_id, page, per_page);
569
+ return formatResponse(result);
570
+ }
571
+ catch (error) {
572
+ return formatError(error);
573
+ }
574
+ });
575
+ server.tool("instatus_get_metric", "Get a specific metric with its data", {
576
+ page_id: z.string().describe("The ID of the status page"),
577
+ metric_id: z.string().describe("The ID of the metric"),
578
+ }, async ({ page_id, metric_id }) => {
579
+ try {
580
+ const result = await client.getMetric(page_id, metric_id);
581
+ return formatResponse(result);
582
+ }
583
+ catch (error) {
584
+ return formatError(error);
585
+ }
586
+ });
587
+ server.tool("instatus_create_metric", "Create a new metric", {
588
+ page_id: z.string().describe("The ID of the status page"),
589
+ subdomain: z.string().describe("Subdomain of the status page"),
590
+ name: z.string().describe("Name of the metric"),
591
+ suffix: z.string().describe("Suffix for the metric value (e.g., 'ms', '%')"),
592
+ }, async ({ page_id, subdomain, name, suffix }) => {
593
+ try {
594
+ const result = await client.createMetric(page_id, { subdomain, name, suffix });
595
+ return formatResponse(result);
596
+ }
597
+ catch (error) {
598
+ return formatError(error);
599
+ }
600
+ });
601
+ server.tool("instatus_update_metric", "Update a metric", {
602
+ page_id: z.string().describe("The ID of the status page"),
603
+ metric_id: z.string().describe("The ID of the metric to update"),
604
+ name: z.string().optional().describe("New name for the metric"),
605
+ suffix: z.string().optional().describe("New suffix for the metric value"),
606
+ }, async ({ page_id, metric_id, name, suffix }) => {
607
+ try {
608
+ const result = await client.updateMetric(page_id, metric_id, { name, suffix });
609
+ return formatResponse(result);
610
+ }
611
+ catch (error) {
612
+ return formatError(error);
613
+ }
614
+ });
615
+ server.tool("instatus_delete_metric", "Delete a metric", {
616
+ page_id: z.string().describe("The ID of the status page"),
617
+ metric_id: z.string().describe("The ID of the metric to delete"),
618
+ }, async ({ page_id, metric_id }) => {
619
+ try {
620
+ const result = await client.deleteMetric(page_id, metric_id);
621
+ return formatResponse(result);
622
+ }
623
+ catch (error) {
624
+ return formatError(error);
625
+ }
626
+ });
627
+ server.tool("instatus_add_metric_datapoint", "Add a single datapoint to a metric", {
628
+ page_id: z.string().describe("The ID of the status page"),
629
+ metric_id: z.string().describe("The ID of the metric"),
630
+ timestamp: z.number().describe("Unix timestamp for the datapoint"),
631
+ value: z.number().describe("Value for the datapoint"),
632
+ }, async ({ page_id, metric_id, timestamp, value }) => {
633
+ try {
634
+ const result = await client.addMetricDatapoint(page_id, metric_id, { timestamp, value });
635
+ return formatResponse(result);
636
+ }
637
+ catch (error) {
638
+ return formatError(error);
639
+ }
640
+ });
641
+ server.tool("instatus_add_metric_datapoints", "Add multiple datapoints to a metric", {
642
+ page_id: z.string().describe("The ID of the status page"),
643
+ metric_id: z.string().describe("The ID of the metric"),
644
+ data: z.array(z.object({
645
+ timestamp: z.number().describe("Unix timestamp"),
646
+ value: z.number().describe("Value"),
647
+ })).describe("Array of datapoints to add"),
648
+ }, async ({ page_id, metric_id, data }) => {
649
+ try {
650
+ const result = await client.addMetricDatapoints(page_id, metric_id, data);
651
+ return formatResponse(result);
652
+ }
653
+ catch (error) {
654
+ return formatError(error);
655
+ }
656
+ });
657
+ server.tool("instatus_delete_metric_datapoints", "Delete all datapoints from a metric", {
658
+ page_id: z.string().describe("The ID of the status page"),
659
+ metric_id: z.string().describe("The ID of the metric"),
660
+ }, async ({ page_id, metric_id }) => {
661
+ try {
662
+ const result = await client.deleteMetricDatapoints(page_id, metric_id);
663
+ return formatResponse(result);
664
+ }
665
+ catch (error) {
666
+ return formatError(error);
667
+ }
668
+ });
669
+ // ==================== Teammates ====================
670
+ server.tool("instatus_list_teammates", "List all team members for a status page", {
671
+ page_id: z.string().describe("The ID of the status page"),
672
+ page: z.number().optional().describe("Page number (default: 1)"),
673
+ per_page: z.number().optional().describe("Results per page (default: 50, max: 100)"),
674
+ }, async ({ page_id, page, per_page }) => {
675
+ try {
676
+ const result = await client.listTeammates(page_id, page, per_page);
677
+ return formatResponse(result);
678
+ }
679
+ catch (error) {
680
+ return formatError(error);
681
+ }
682
+ });
683
+ server.tool("instatus_add_teammate", "Add a team member to a status page", {
684
+ page_id: z.string().describe("The ID of the status page"),
685
+ email: z.string().describe("Email address of the team member to add"),
686
+ }, async ({ page_id, email }) => {
687
+ try {
688
+ const result = await client.addTeammate(page_id, email);
689
+ return formatResponse(result);
690
+ }
691
+ catch (error) {
692
+ return formatError(error);
693
+ }
694
+ });
695
+ server.tool("instatus_remove_teammate", "Remove a team member from a status page", {
696
+ page_id: z.string().describe("The ID of the status page"),
697
+ member_id: z.string().describe("The ID of the team member to remove"),
698
+ }, async ({ page_id, member_id }) => {
699
+ try {
700
+ const result = await client.removeTeammate(page_id, member_id);
701
+ return formatResponse(result);
702
+ }
703
+ catch (error) {
704
+ return formatError(error);
705
+ }
706
+ });
707
+ // Start server
708
+ async function main() {
709
+ const transport = new StdioServerTransport();
710
+ await server.connect(transport);
711
+ console.error("Instatus MCP server running on stdio");
712
+ }
713
+ main().catch((error) => {
714
+ console.error("Fatal error:", error);
715
+ process.exit(1);
716
+ });
717
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "instatus-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Instatus - manage status pages, incidents, components, and more via Claude Code",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "instatus-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "prepublishOnly": "npm run build",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsx src/index.ts",
19
+ "watch": "tsc --watch"
20
+ },
21
+ "dependencies": {
22
+ "@modelcontextprotocol/sdk": "^1.0.0",
23
+ "zod": "^3.23.8"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^20.10.0",
27
+ "tsx": "^4.7.0",
28
+ "typescript": "^5.3.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=18.0.0"
32
+ },
33
+ "keywords": [
34
+ "mcp",
35
+ "instatus",
36
+ "model-context-protocol",
37
+ "claude",
38
+ "ai",
39
+ "anthropic",
40
+ "status-page",
41
+ "incidents",
42
+ "monitoring"
43
+ ],
44
+ "author": "Agnibha Bose",
45
+ "license": "MIT",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/TechnicalRhino/instatus-mcp.git"
49
+ },
50
+ "bugs": {
51
+ "url": "https://github.com/TechnicalRhino/instatus-mcp/issues"
52
+ },
53
+ "homepage": "https://github.com/TechnicalRhino/instatus-mcp#readme"
54
+ }