@tinyweb_dev/tracking-mcp-server 0.1.0 → 0.2.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/CHANGELOG.md CHANGED
@@ -5,6 +5,71 @@ All notable changes to `@tinyweb_dev/tracking-mcp-server` will be documented in
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.0] — 2026-05-27
9
+
10
+ Per-service ingest tokens. Realigns the MCP surface with the backend's new
11
+ `services` model where each project owns one or more services, and each
12
+ service has its own `tt_svc_…` ingest API key (replacing the previous
13
+ project-level key).
14
+
15
+ ### Breaking
16
+
17
+ - **Removed 3 project-level API-key tools.** Agents currently calling these
18
+ must migrate to the new `service_*` tools below; the corresponding backend
19
+ routes (`GET /api/projects/:id/api-key`, `GET /api/projects/:id/api-key/reveal`,
20
+ `POST /api/projects/:id/regenerate-key`) were deleted server-side and now
21
+ return 404. There is **no legacy fallback** (the product is still
22
+ pre-golive on the dashboard side).
23
+ - `project_get_api_key_prefix`
24
+ - `project_reveal_api_key`
25
+ - `project_regenerate_api_key`
26
+ - **`project_create` response shape changed.** Returns the plaintext key of
27
+ the auto-provisioned default service in `apiKey`, plus new fields
28
+ `defaultServiceId` and `apiKeyPrefix`. Same one-time-only semantics.
29
+
30
+ ### Added
31
+
32
+ - **7 new `service_*` tools** wrapping `/api/projects/:id/services` and
33
+ `/api/projects/:id/services/:serviceId/...`:
34
+ - `service_list` — list services in a project (with `apiKeyPrefix`,
35
+ `isDefault`)
36
+ - `service_get` — fetch one service
37
+ - `service_create` — create a service; response includes the plaintext
38
+ `apiKey` exactly once (admin only)
39
+ - `service_update` — patch `name` / `language` (admin only)
40
+ - `service_reveal_api_key` 🔐 — reveal full plaintext key (admin only)
41
+ - `service_regenerate_api_key` 🔴 — rotate key, requires
42
+ `confirm_service_id` (admin only)
43
+ - `service_delete` 🔴 — delete a service, requires `confirm_service_id`
44
+ (admin only; the project's default service cannot be deleted)
45
+ - **New `service` zod schema module** (`createServiceSchema`,
46
+ `updateServiceSchema`, `serviceSchema`, `serviceLanguageSchema`).
47
+
48
+ ### Changed
49
+
50
+ - Tool count: **62 → 66** across **9** resource groups (services is the
51
+ new ninth group). The integration-bootstrap test matrix and README tables
52
+ were updated to match.
53
+ - `project_create` description now explains the auto-provisioned default
54
+ service and the one-time `apiKey` payload.
55
+ - README "Bảo mật & confirmation pattern" table refreshed: replaced
56
+ `project_regenerate_api_key` with `service_regenerate_api_key` and
57
+ `service_delete`.
58
+
59
+ ### Engineering
60
+
61
+ - **+11 unit tests** in [`test/tools-services.test.ts`](test/tools-services.test.ts:1)
62
+ covering each new tool, both confirmation flows, and registration count.
63
+ - Total test count: **219 → 230** passing across 18 test files.
64
+
65
+ ### Backend dependencies (required server-side, shipped in the same release)
66
+
67
+ This MCP release **requires** a backend build that contains task 0004's
68
+ schema changes (new `services` table; `error_groups`/`error_occurrences`
69
+ gain a non-nullable `serviceId` column; project-level `apiKey*` columns
70
+ dropped). Pointing this MCP server at an older backend will produce 404s
71
+ on the new `service_*` routes.
72
+
8
73
  ## [0.1.0] — 2026-05-26
9
74
 
10
75
  Initial public release.
package/README.md CHANGED
@@ -178,23 +178,36 @@ Tổng **62 tools** chia theo 8 resource groups. Naming convention: `<resource>_
178
178
  | `org_update_member_role` | Đổi role (owner/member/viewer) |
179
179
  | `org_remove_member` | 🔴 Remove user khỏi org (yêu cầu `confirm_user_id`) |
180
180
 
181
- ### Projects (12 tools)
181
+ ### Projects (9 tools)
182
182
 
183
183
  | Tool | Mô tả |
184
184
  |---|---|
185
185
  | `project_list` | List projects trong 1 org |
186
- | `project_create` | Tạo project mới (trả về API key) |
186
+ | `project_create` | Tạo project mới (auto-tạo default service + trả về `apiKey` của service đó 1 lần duy nhất) |
187
187
  | `project_get` | Lấy chi tiết project |
188
188
  | `project_update` | Update project |
189
189
  | `project_delete` | 🔴 Xóa project + monitors + errors (yêu cầu `confirm_name`) |
190
- | `project_get_api_key_prefix` | Lấy prefix API key (an toàn share) |
191
- | `project_reveal_api_key` | 🔐 Reveal full API key (admin only) |
192
- | `project_regenerate_api_key` | 🔴 Rotate API key — invalidate key cũ |
193
190
  | `project_list_members` | List members + roles |
194
191
  | `project_add_member` | Thêm user vào project |
195
192
  | `project_update_member_role` | Đổi role (admin/editor/viewer) |
196
193
  | `project_remove_member` | 🔴 Remove member |
197
194
 
195
+ > API key cấp **project** đã được thay thế bằng API key cấp **service** — xem nhóm `service_*` bên dưới.
196
+
197
+ ### Services (7 tools)
198
+
199
+ Mỗi project sở hữu 1 hoặc nhiều service (`backend`, `frontend`, `mobile`,…), mỗi service có 1 ingest API key dạng `tt_svc_…` riêng. Errors được attribute theo service và key có thể rotate độc lập per-runtime.
200
+
201
+ | Tool | Mô tả |
202
+ |---|---|
203
+ | `service_list` | List services trong project (kèm `apiKeyPrefix`, `isDefault`) |
204
+ | `service_get` | Lấy chi tiết 1 service |
205
+ | `service_create` | Tạo service mới (trả về `apiKey` plaintext 1 lần duy nhất) — admin only |
206
+ | `service_update` | Update tên / language hint — admin only |
207
+ | `service_reveal_api_key` | 🔐 Reveal full API key (admin only) |
208
+ | `service_regenerate_api_key` | 🔴 Rotate key (yêu cầu `confirm_service_id`) — admin only |
209
+ | `service_delete` | 🔴 Xóa service (yêu cầu `confirm_service_id`, không xóa được default service) — admin only |
210
+
198
211
  ### Monitors (7 tools)
199
212
 
200
213
  | Tool | Mô tả |
@@ -310,8 +323,9 @@ Các tool xóa/rotate/revoke đều yêu cầu một field xác nhận matching
310
323
  |---|---|---|
311
324
  | `org_delete` | `confirm_slug` | Org slug |
312
325
  | `project_delete` | `confirm_name` | Project name |
313
- | `project_regenerate_api_key` | `confirm_project_id` | Project UUID |
314
326
  | `project_remove_member` | `confirm_user_id` | User UUID |
327
+ | `service_regenerate_api_key` | `confirm_service_id` | Service UUID |
328
+ | `service_delete` | `confirm_service_id` | Service UUID |
315
329
  | `monitor_delete` | `confirm_name` | Monitor name |
316
330
  | `status_page_delete` | `confirm_slug` | Status page slug |
317
331
  | `status_page_delete_component` | `confirm_component_id` | Component UUID |
@@ -325,7 +339,7 @@ Pattern này đảm bảo agent phải explicitly "repeat back" identifier — p
325
339
 
326
340
  - `TT_API_KEY` **không bao giờ** được hard-code vào file commit. Luôn đọc từ env hoặc MCP client config.
327
341
  - Logger tự động redact các field nhạy cảm: `authorization`, `apiKey`, `token`, `password`, `secret`.
328
- - `project_reveal_api_key` trả full key — đừng share log của tool call này.
342
+ - `service_reveal_api_key` và `service_create` trả full key plaintext — đừng share log của các tool call này.
329
343
 
330
344
  ### Audit
331
345
 
@@ -4,6 +4,7 @@
4
4
  export * from './common.js';
5
5
  export * from './organization.js';
6
6
  export * from './project.js';
7
+ export * from './service.js';
7
8
  export * from './monitor.js';
8
9
  export * from './status-page.js';
9
10
  export * from './incident.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
@@ -4,6 +4,7 @@
4
4
  export * from './common.js';
5
5
  export * from './organization.js';
6
6
  export * from './project.js';
7
+ export * from './service.js';
7
8
  export * from './monitor.js';
8
9
  export * from './status-page.js';
9
10
  export * from './incident.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
@@ -42,7 +42,13 @@ export declare const projectSchema: z.ZodObject<{
42
42
  id: z.ZodString;
43
43
  organizationId: z.ZodString;
44
44
  name: z.ZodString;
45
+ /**
46
+ * Only present on the response from `project_create` — backend returns the
47
+ * plaintext key of the auto-provisioned default service exactly once.
48
+ */
45
49
  apiKey: z.ZodOptional<z.ZodString>;
50
+ defaultServiceId: z.ZodOptional<z.ZodString>;
51
+ apiKeyPrefix: z.ZodOptional<z.ZodString>;
46
52
  createdAt: z.ZodOptional<z.ZodString>;
47
53
  updatedAt: z.ZodOptional<z.ZodString>;
48
54
  }, "strip", z.ZodTypeAny, {
@@ -52,6 +58,8 @@ export declare const projectSchema: z.ZodObject<{
52
58
  createdAt?: string | undefined;
53
59
  updatedAt?: string | undefined;
54
60
  apiKey?: string | undefined;
61
+ defaultServiceId?: string | undefined;
62
+ apiKeyPrefix?: string | undefined;
55
63
  }, {
56
64
  name: string;
57
65
  id: string;
@@ -59,6 +67,8 @@ export declare const projectSchema: z.ZodObject<{
59
67
  createdAt?: string | undefined;
60
68
  updatedAt?: string | undefined;
61
69
  apiKey?: string | undefined;
70
+ defaultServiceId?: string | undefined;
71
+ apiKeyPrefix?: string | undefined;
62
72
  }>;
63
73
  export declare const projectMemberSchema: z.ZodObject<{
64
74
  userId: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB,0CAAwC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;EAExC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAOxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB,0CAAwC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;EAExC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;IAIxB;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;EAMH,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC"}
@@ -24,7 +24,13 @@ export const projectSchema = z.object({
24
24
  id: idSchema,
25
25
  organizationId: idSchema,
26
26
  name: z.string(),
27
+ /**
28
+ * Only present on the response from `project_create` — backend returns the
29
+ * plaintext key of the auto-provisioned default service exactly once.
30
+ */
27
31
  apiKey: z.string().optional(),
32
+ defaultServiceId: idSchema.optional(),
33
+ apiKeyPrefix: z.string().optional(),
28
34
  createdAt: z.string().optional(),
29
35
  updatedAt: z.string().optional(),
30
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,QAAQ;IACZ,cAAc,EAAE,QAAQ;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,QAAQ;IACZ,cAAc,EAAE,QAAQ;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB;;;OAGG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE;IACrC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Service schemas.
3
+ *
4
+ * A service is the per-runtime credential holder inside a project. Each project
5
+ * owns one or more services (e.g. `backend`, `frontend`, `mobile`), and each
6
+ * service has its own `tt_svc_…` API key that SDKs use to ingest errors.
7
+ *
8
+ * Mirrors backend DTOs:
9
+ * - CreateServiceDto
10
+ * - UpdateServiceDto
11
+ */
12
+ import { z } from 'zod';
13
+ /**
14
+ * Free-form language hint that influences which SDK snippet is highlighted
15
+ * in the dashboard. The backend currently treats this as an opaque string;
16
+ * the list below mirrors what the UI offers as a default tab.
17
+ */
18
+ export declare const serviceLanguageSchema: z.ZodString;
19
+ export declare const createServiceSchema: z.ZodObject<{
20
+ name: z.ZodString;
21
+ slug: z.ZodOptional<z.ZodString>;
22
+ language: z.ZodOptional<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ name: string;
25
+ slug?: string | undefined;
26
+ language?: string | undefined;
27
+ }, {
28
+ name: string;
29
+ slug?: string | undefined;
30
+ language?: string | undefined;
31
+ }>;
32
+ export declare const updateServiceSchema: z.ZodObject<{
33
+ name: z.ZodOptional<z.ZodString>;
34
+ language: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ name?: string | undefined;
37
+ language?: string | undefined;
38
+ }, {
39
+ name?: string | undefined;
40
+ language?: string | undefined;
41
+ }>;
42
+ export declare const serviceSchema: z.ZodObject<{
43
+ id: z.ZodString;
44
+ projectId: z.ZodString;
45
+ name: z.ZodString;
46
+ slug: z.ZodString;
47
+ language: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ apiKeyPrefix: z.ZodOptional<z.ZodString>;
49
+ isDefault: z.ZodBoolean;
50
+ createdAt: z.ZodOptional<z.ZodString>;
51
+ updatedAt: z.ZodOptional<z.ZodString>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ name: string;
54
+ slug: string;
55
+ id: string;
56
+ projectId: string;
57
+ isDefault: boolean;
58
+ createdAt?: string | undefined;
59
+ updatedAt?: string | undefined;
60
+ apiKeyPrefix?: string | undefined;
61
+ language?: string | null | undefined;
62
+ }, {
63
+ name: string;
64
+ slug: string;
65
+ id: string;
66
+ projectId: string;
67
+ isDefault: boolean;
68
+ createdAt?: string | undefined;
69
+ updatedAt?: string | undefined;
70
+ apiKeyPrefix?: string | undefined;
71
+ language?: string | null | undefined;
72
+ }>;
73
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/schemas/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,aAM/B,CAAC;AAEJ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAU9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUxB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Service schemas.
3
+ *
4
+ * A service is the per-runtime credential holder inside a project. Each project
5
+ * owns one or more services (e.g. `backend`, `frontend`, `mobile`), and each
6
+ * service has its own `tt_svc_…` API key that SDKs use to ingest errors.
7
+ *
8
+ * Mirrors backend DTOs:
9
+ * - CreateServiceDto
10
+ * - UpdateServiceDto
11
+ */
12
+ import { z } from 'zod';
13
+ import { idSchema } from './common.js';
14
+ /**
15
+ * Free-form language hint that influences which SDK snippet is highlighted
16
+ * in the dashboard. The backend currently treats this as an opaque string;
17
+ * the list below mirrors what the UI offers as a default tab.
18
+ */
19
+ export const serviceLanguageSchema = z
20
+ .string()
21
+ .min(1)
22
+ .max(50)
23
+ .describe('Free-form language / runtime hint (e.g. "node", "react", "vue", "nestjs", "express", "other").');
24
+ export const createServiceSchema = z.object({
25
+ name: z.string().min(1).max(100),
26
+ slug: z
27
+ .string()
28
+ .min(1)
29
+ .max(100)
30
+ .regex(/^[a-z0-9-]+$/, 'slug must be lowercase letters, digits, or hyphens')
31
+ .optional()
32
+ .describe('Optional URL-safe slug. Auto-derived from name if omitted.'),
33
+ language: serviceLanguageSchema.optional(),
34
+ });
35
+ export const updateServiceSchema = z.object({
36
+ name: z.string().min(1).max(100).optional(),
37
+ language: serviceLanguageSchema.optional(),
38
+ });
39
+ export const serviceSchema = z.object({
40
+ id: idSchema,
41
+ projectId: idSchema,
42
+ name: z.string(),
43
+ slug: z.string(),
44
+ language: z.string().nullable().optional(),
45
+ apiKeyPrefix: z.string().optional(),
46
+ isDefault: z.boolean(),
47
+ createdAt: z.string().optional(),
48
+ updatedAt: z.string().optional(),
49
+ });
50
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/schemas/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,CACP,gGAAgG,CACjG,CAAC;AAEJ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,KAAK,CAAC,cAAc,EAAE,oDAAoD,CAAC;SAC3E,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,QAAQ;IACZ,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC1C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAUxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAWxD"}
@@ -1,5 +1,6 @@
1
1
  import { registerOrganizationTools } from './organizations.js';
2
2
  import { registerProjectTools } from './projects.js';
3
+ import { registerServiceTools } from './services.js';
3
4
  import { registerMonitorTools } from './monitors.js';
4
5
  import { registerStatusPageTools } from './status-pages.js';
5
6
  import { registerIncidentTools } from './incidents.js';
@@ -10,13 +11,14 @@ import { childLogger } from '../logger.js';
10
11
  const log = childLogger({ module: 'tools' });
11
12
  export function registerAllTools(server) {
12
13
  registerOrganizationTools(server); // 8 tools
13
- registerProjectTools(server); // 12 tools
14
+ registerProjectTools(server); // 9 tools (api-key tools moved to services)
15
+ registerServiceTools(server); // 7 tools
14
16
  registerMonitorTools(server); // 7 tools
15
17
  registerStatusPageTools(server); // 9 tools
16
18
  registerIncidentTools(server); // 6 tools
17
19
  registerErrorTools(server); // 12 tools
18
20
  registerRecipientGroupTools(server); // 4 tools
19
21
  registerInvitationTools(server); // 4 tools
20
- log.info('Registered all MCP tools (62 total)');
22
+ log.info('Registered all MCP tools (66 total)');
21
23
  }
22
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAE7C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;IAC9C,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;IAC/C,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;IAC/C,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;IAC/C,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB;IAC/C,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;IAC/C,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;IAC/C,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;IAC/C,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAE7C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;IAC9C,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,mDAAmD;IACjF,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;IAC/C,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB;IAC/C,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;IAC/C,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB;IAC/C,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;IAC/C,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;IAC/C,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;IAC/C,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;AAClD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Project tools (10).
2
+ * Project tools (9).
3
3
  *
4
4
  * Backend endpoints:
5
5
  * - GET /api/organizations/:orgId/projects → project_list
@@ -7,15 +7,15 @@
7
7
  * - GET /api/projects/:id → project_get
8
8
  * - PUT /api/projects/:id → project_update
9
9
  * - DELETE /api/projects/:id → project_delete
10
- * - GET /api/projects/:id/api-key → project_get_api_key_prefix
11
- * - GET /api/projects/:id/api-key/reveal → project_reveal_api_key
12
- * - POST /api/projects/:id/regenerate-key → project_regenerate_api_key
13
10
  * - GET /api/projects/:id/members → project_list_members
14
11
  * - POST /api/projects/:id/members → project_add_member
15
12
  * - PATCH /api/projects/:id/members/:userId → project_update_member_role
16
13
  * - DELETE /api/projects/:id/members/:userId → project_remove_member
17
14
  *
18
- * (12 tools total slightly over the original count because member CRUD is split.)
15
+ * NOTE: Project-level API keys were removed in favor of per-service keys.
16
+ * The `service_*` tools (see `tools/services.ts`) handle key prefix / reveal /
17
+ * regenerate now. `project_create` still returns a one-off `apiKey` field —
18
+ * that is the plaintext key of the auto-provisioned default service.
19
19
  */
20
20
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
21
21
  export declare function registerProjectTools(server: McpServer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgS5D"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+N5D"}
@@ -24,8 +24,11 @@ export function registerProjectTools(server) {
24
24
  /* ---------------- project_create ---------------- */
25
25
  server.registerTool('project_create', {
26
26
  title: 'Create project',
27
- description: 'Create a new project within an organization. Returns the new project ' +
28
- 'including its initial API key (used by SDK to ingest errors).',
27
+ description: 'Create a new project within an organization. The backend auto-provisions ' +
28
+ 'a default service for the project and the response includes that ' +
29
+ 'service\'s plaintext `apiKey` (along with `defaultServiceId` and ' +
30
+ '`apiKeyPrefix`) exactly once — copy it immediately and configure your ' +
31
+ 'SDK with it. Use `service_create` to add more services per runtime.',
29
32
  inputSchema: {
30
33
  org_id: idSchema.optional(),
31
34
  ...createProjectSchema.shape,
@@ -96,56 +99,6 @@ export function registerProjectTools(server) {
96
99
  });
97
100
  return buildToolResult({ deleted: true, projectId: project_id, name: project.name });
98
101
  }));
99
- /* ---------------- project_get_api_key_prefix ---------------- */
100
- server.registerTool('project_get_api_key_prefix', {
101
- title: 'Get project API key prefix',
102
- description: 'Return only the public prefix portion of the project API key ' +
103
- '(safe to share). Available to project viewers and above.',
104
- inputSchema: {
105
- project_id: idSchema,
106
- },
107
- }, wrapHandler('project_get_api_key_prefix', async ({ project_id }) => {
108
- const data = await request({
109
- method: 'GET',
110
- url: `/api/projects/${encodeURIComponent(project_id)}/api-key`,
111
- });
112
- return buildToolResult(data);
113
- }));
114
- /* ---------------- project_reveal_api_key (sensitive) ---------------- */
115
- server.registerTool('project_reveal_api_key', {
116
- title: 'Reveal full project API key',
117
- description: 'SENSITIVE: Return the full API key for a project. Requires project admin role. ' +
118
- 'Returns `{ fullKey: null, prefix }` for legacy projects without a stored copy ' +
119
- '(use project_regenerate_api_key to rotate in that case). ' +
120
- 'NEVER share or log this value.',
121
- inputSchema: {
122
- project_id: idSchema,
123
- },
124
- }, wrapHandler('project_reveal_api_key', async ({ project_id }) => {
125
- const data = await request({
126
- method: 'GET',
127
- url: `/api/projects/${encodeURIComponent(project_id)}/api-key/reveal`,
128
- });
129
- return buildToolResult(data);
130
- }));
131
- /* ---------------- project_regenerate_api_key (destructive) ---------------- */
132
- server.registerTool('project_regenerate_api_key', {
133
- title: 'Regenerate project API key',
134
- description: 'DESTRUCTIVE: Invalidate the existing API key and issue a new one. ' +
135
- 'All SDKs/agents using the old key will stop working until updated. ' +
136
- 'Requires project admin role. Pass `confirm_project_id` matching the project UUID.',
137
- inputSchema: {
138
- project_id: idSchema,
139
- confirm_project_id: idSchema.describe('Repeat project_id to confirm rotation.'),
140
- },
141
- }, wrapHandler('project_regenerate_api_key', async ({ project_id, confirm_project_id }) => {
142
- requireConfirmation(confirm_project_id, project_id, `project ${project_id}'s API key`);
143
- const data = await request({
144
- method: 'POST',
145
- url: `/api/projects/${encodeURIComponent(project_id)}/regenerate-key`,
146
- });
147
- return buildToolResult(data);
148
- }));
149
102
  /* ---------------- project_list_members ---------------- */
150
103
  server.registerTool('project_list_members', {
151
104
  title: 'List project members',
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,oDAAoD;IACpD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,iEAAiE;YACjE,mDAAmD;QACrD,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;SAC5B;KACF,EACD,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,WAAW;SAC7D,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEF,sDAAsD;IACtD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,uEAAuE;YACvE,+DAA+D;QACjE,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC3B,GAAG,mBAAmB,CAAC,KAAK;SAC7B;KACF,EACD,WAAW,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,KAAsD,CAAC;QACnF,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,WAAW;YAC5D,IAAI;SACL,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,mDAAmD;IACnD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;SACrB;KACF,EACD,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE;SACvD,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,sDAAsD;IACtD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,GAAG,mBAAmB,CAAC,KAAK;SAC7B;KACF,EACD,WAAW,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,GAAG,KAEN,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE;YACtD,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,oEAAoE;IACpE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,yEAAyE;YACzE,2EAA2E;YAC3E,oDAAoD;QACtD,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,2CAA2C,CAAC;SACzD;KACF,EACD,WAAW,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAmB;YAC9C,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE;SACvD,CAAC,CAAC;QACH,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7E,MAAM,OAAO,CAAU;YACrB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE;SACvD,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CACH,CAAC;IAEF,kEAAkE;IAClE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,+DAA+D;YAC/D,0DAA0D;QAC5D,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;SACrB;KACF,EACD,WAAW,CAAC,4BAA4B,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,UAAU;SAC/D,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,0EAA0E;IAC1E,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,iFAAiF;YACjF,gFAAgF;YAChF,2DAA2D;YAC3D,gCAAgC;QAClC,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;SACrB;KACF,EACD,WAAW,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,iBAAiB;SACtE,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,gFAAgF;IAChF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,oEAAoE;YACpE,qEAAqE;YACrE,mFAAmF;QACrF,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,kBAAkB,EAAE,QAAQ,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAChF;KACF,EACD,WAAW,CAAC,4BAA4B,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,EAAE;QACrF,mBAAmB,CAAC,kBAAkB,EAAE,UAAU,EAAE,WAAW,UAAU,YAAY,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,iBAAiB;SACtE,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,4DAA4D;IAC5D,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,uEAAuE;QACzE,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;SACrB;KACF,EACD,WAAW,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,UAAU;SAC/D,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CACH,CAAC;IAEF,0DAA0D;IAC1D,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,8DAA8D;YAC9D,8BAA8B;QAChC,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,GAAG,sBAAsB,CAAC,KAAK;SAChC;KACF,EACD,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAEL,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,UAAU;YAC9D,IAAI;SACL,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,kEAAkE;IAClE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,wEAAwE;QAC1E,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,QAAQ;YACjB,GAAG,6BAA6B,CAAC,KAAK;SACvC;KACF,EACD,WAAW,CAAC,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,KAGf,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,OAAO;YACf,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAC7F,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,2EAA2E;YAC3E,4DAA4D;QAC9D,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,QAAQ;YACjB,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SACzE;KACF,EACD,WAAW,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE;QACtF,mBAAmB,CAAC,eAAe,EAAE,OAAO,EAAE,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,OAAO,CAAU;YACrB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE;SAC9F,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Service tools (7).
3
+ *
4
+ * A "service" is the per-runtime credential holder inside a project. Each
5
+ * project owns one or more services (e.g. `backend`, `frontend`, `mobile`),
6
+ * and each service has its own `tt_svc_…` API key that SDKs use to ingest
7
+ * errors. Service keys replaced the previous project-level API key.
8
+ *
9
+ * Backend endpoints:
10
+ * - GET /api/projects/:id/services → service_list
11
+ * - GET /api/projects/:id/services/:serviceId → service_get
12
+ * - POST /api/projects/:id/services → service_create
13
+ * - PATCH /api/projects/:id/services/:serviceId → service_update
14
+ * - DELETE /api/projects/:id/services/:serviceId → service_delete
15
+ * - GET /api/projects/:id/services/:serviceId/api-key/reveal → service_reveal_api_key
16
+ * - POST /api/projects/:id/services/:serviceId/api-key/regenerate → service_regenerate_api_key
17
+ */
18
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
19
+ export declare function registerServiceTools(server: McpServer): void;
20
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/tools/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyM5D"}
@@ -0,0 +1,148 @@
1
+ import { buildToolResult, requireConfirmation, wrapHandler } from './_helpers.js';
2
+ import { request } from '../http-client.js';
3
+ import { createServiceSchema, updateServiceSchema, idSchema, } from '../schemas/index.js';
4
+ function serviceBaseUrl(projectId) {
5
+ return `/api/projects/${encodeURIComponent(projectId)}/services`;
6
+ }
7
+ function serviceUrl(projectId, serviceId) {
8
+ return `${serviceBaseUrl(projectId)}/${encodeURIComponent(serviceId)}`;
9
+ }
10
+ export function registerServiceTools(server) {
11
+ /* ---------------- service_list ---------------- */
12
+ server.registerTool('service_list', {
13
+ title: 'List services in a project',
14
+ description: 'List every service (SDK source) configured under a project. Each ' +
15
+ 'service has its own `tt_svc_…` ingest API key. Available to project ' +
16
+ 'viewers and above. The default service is marked with `isDefault: true`.',
17
+ inputSchema: {
18
+ project_id: idSchema,
19
+ },
20
+ }, wrapHandler('service_list', async ({ project_id }) => {
21
+ const data = await request({
22
+ method: 'GET',
23
+ url: serviceBaseUrl(project_id),
24
+ });
25
+ return buildToolResult({ services: data });
26
+ }));
27
+ /* ---------------- service_get ---------------- */
28
+ server.registerTool('service_get', {
29
+ title: 'Get a service',
30
+ description: 'Fetch a single service by id within its project. Returns the public ' +
31
+ 'metadata (`name`, `slug`, `language`, `apiKeyPrefix`, `isDefault`); ' +
32
+ 'use `service_reveal_api_key` to get the full plaintext key.',
33
+ inputSchema: {
34
+ project_id: idSchema,
35
+ service_id: idSchema,
36
+ },
37
+ }, wrapHandler('service_get', async ({ project_id, service_id }) => {
38
+ const data = await request({
39
+ method: 'GET',
40
+ url: serviceUrl(project_id, service_id),
41
+ });
42
+ return buildToolResult(data);
43
+ }));
44
+ /* ---------------- service_create ---------------- */
45
+ server.registerTool('service_create', {
46
+ title: 'Create a service',
47
+ description: 'Create a new service under a project. The response includes the ' +
48
+ 'plaintext `apiKey` exactly once — copy it immediately and configure ' +
49
+ 'the SDK with it. Requires project admin role. ' +
50
+ 'Optional `slug` (lowercase + hyphens) is auto-derived from `name` if omitted; ' +
51
+ '`language` is a free-form hint ("node", "react", "vue", "nestjs", "express", "other").',
52
+ inputSchema: {
53
+ project_id: idSchema,
54
+ ...createServiceSchema.shape,
55
+ },
56
+ }, wrapHandler('service_create', async (input) => {
57
+ const { project_id, ...body } = input;
58
+ const data = await request({
59
+ method: 'POST',
60
+ url: serviceBaseUrl(project_id),
61
+ body,
62
+ });
63
+ return buildToolResult(data);
64
+ }));
65
+ /* ---------------- service_update ---------------- */
66
+ server.registerTool('service_update', {
67
+ title: 'Update a service',
68
+ description: 'Update a service\'s display `name` and/or `language` hint. The slug ' +
69
+ 'is immutable. Requires project admin role.',
70
+ inputSchema: {
71
+ project_id: idSchema,
72
+ service_id: idSchema,
73
+ ...updateServiceSchema.shape,
74
+ },
75
+ }, wrapHandler('service_update', async (input) => {
76
+ const { project_id, service_id, ...patch } = input;
77
+ const data = await request({
78
+ method: 'PATCH',
79
+ url: serviceUrl(project_id, service_id),
80
+ body: patch,
81
+ });
82
+ return buildToolResult(data);
83
+ }));
84
+ /* ---------------- service_reveal_api_key (sensitive) ---------------- */
85
+ server.registerTool('service_reveal_api_key', {
86
+ title: 'Reveal full service API key',
87
+ description: 'SENSITIVE: Return the full plaintext API key for a service. Requires ' +
88
+ 'project admin role. Returns `{ fullKey: null, prefix }` if the ' +
89
+ 'plaintext was never stored (use `service_regenerate_api_key` to rotate ' +
90
+ 'in that case). NEVER share or log this value.',
91
+ inputSchema: {
92
+ project_id: idSchema,
93
+ service_id: idSchema,
94
+ },
95
+ }, wrapHandler('service_reveal_api_key', async ({ project_id, service_id }) => {
96
+ const data = await request({
97
+ method: 'GET',
98
+ url: `${serviceUrl(project_id, service_id)}/api-key/reveal`,
99
+ });
100
+ return buildToolResult(data);
101
+ }));
102
+ /* ---------------- service_regenerate_api_key (destructive) ---------------- */
103
+ server.registerTool('service_regenerate_api_key', {
104
+ title: 'Regenerate service API key',
105
+ description: 'DESTRUCTIVE: Invalidate the existing API key for a service and issue ' +
106
+ 'a new one. Every SDK / agent still using the old key will stop ' +
107
+ 'ingesting until updated. Requires project admin role. Pass ' +
108
+ '`confirm_service_id` matching `service_id`.',
109
+ inputSchema: {
110
+ project_id: idSchema,
111
+ service_id: idSchema,
112
+ confirm_service_id: idSchema.describe('Repeat service_id to confirm rotation.'),
113
+ },
114
+ }, wrapHandler('service_regenerate_api_key', async ({ project_id, service_id, confirm_service_id }) => {
115
+ requireConfirmation(confirm_service_id, service_id, `service ${service_id}'s API key`);
116
+ const data = await request({
117
+ method: 'POST',
118
+ url: `${serviceUrl(project_id, service_id)}/api-key/regenerate`,
119
+ });
120
+ return buildToolResult(data);
121
+ }));
122
+ /* ---------------- service_delete (destructive) ---------------- */
123
+ server.registerTool('service_delete', {
124
+ title: 'Delete a service',
125
+ description: 'DESTRUCTIVE: Permanently delete a service. The backend refuses to ' +
126
+ 'delete the project\'s default service (use a different default first). ' +
127
+ 'Existing error groups and occurrences keep their `serviceId` reference ' +
128
+ 'so historical data is preserved. Pass `confirm_service_id` matching ' +
129
+ '`service_id`. Requires project admin role.',
130
+ inputSchema: {
131
+ project_id: idSchema,
132
+ service_id: idSchema,
133
+ confirm_service_id: idSchema.describe('Repeat service_id to confirm deletion.'),
134
+ },
135
+ }, wrapHandler('service_delete', async ({ project_id, service_id, confirm_service_id }) => {
136
+ requireConfirmation(confirm_service_id, service_id, `service ${service_id}`);
137
+ await request({
138
+ method: 'DELETE',
139
+ url: serviceUrl(project_id, service_id),
140
+ });
141
+ return buildToolResult({
142
+ deleted: true,
143
+ projectId: project_id,
144
+ serviceId: service_id,
145
+ });
146
+ }));
147
+ }
148
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/tools/services.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinyweb_dev/tracking-mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for Tiny Tracking — lets AI agents manage organizations, projects, monitors, status pages, incidents, errors, and more via REST API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",