@tinyweb_dev/tracking-mcp-server 0.2.0 → 0.3.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 +70 -0
- package/README.md +7 -5
- package/dist/schemas/common.d.ts +21 -0
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +28 -0
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/invitation.js +2 -2
- package/dist/schemas/invitation.js.map +1 -1
- package/dist/schemas/organization.js +2 -2
- package/dist/schemas/organization.js.map +1 -1
- package/dist/schemas/project.d.ts +20 -7
- package/dist/schemas/project.d.ts.map +1 -1
- package/dist/schemas/project.js +25 -5
- package/dist/schemas/project.js.map +1 -1
- package/dist/tools/invitations.js +4 -4
- package/dist/tools/invitations.js.map +1 -1
- package/dist/tools/organizations.d.ts.map +1 -1
- package/dist/tools/organizations.js +5 -4
- package/dist/tools/organizations.js.map +1 -1
- package/dist/tools/projects.d.ts +2 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +19 -11
- package/dist/tools/projects.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,76 @@ 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.3.0] — 2026-05-27
|
|
9
|
+
|
|
10
|
+
### Breaking
|
|
11
|
+
|
|
12
|
+
- **`project_add_member` now takes `email` instead of `userId`.** The backend
|
|
13
|
+
contract (`AddProjectMemberDto`) was changed earlier to accept an email so
|
|
14
|
+
it can branch:
|
|
15
|
+
- If the email matches an existing org member → the backend inserts a
|
|
16
|
+
`ProjectMember` row immediately and the response is
|
|
17
|
+
`{ status: 'added', member }`.
|
|
18
|
+
- Otherwise → the backend creates an org invitation with this project +
|
|
19
|
+
role pre-attached and the response is `{ status: 'invited', invitation }`
|
|
20
|
+
— no separate `invitation_create` call required.
|
|
21
|
+
|
|
22
|
+
MCP `0.2.1` was still sending the old `{ userId, role }` body, so every
|
|
23
|
+
`project_add_member` call failed with HTTP 400
|
|
24
|
+
`"property userId should not exist; email must be an email"`. Migration:
|
|
25
|
+
replace `userId: "<token>"` with `email: "<user@example.com>"` at every
|
|
26
|
+
call site.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- `addProjectMemberSchema` now validates `{ email: string().email(), role }`
|
|
31
|
+
(was `{ userId: userIdSchema, role }`).
|
|
32
|
+
- `project_add_member` tool description rewritten to document the
|
|
33
|
+
`added` vs `invited` branching, so agents know they don't need a
|
|
34
|
+
follow-up `invitation_create` call for non-org emails.
|
|
35
|
+
- `README.md` row for `project_add_member` clarifies the by-email semantics.
|
|
36
|
+
|
|
37
|
+
### Notes
|
|
38
|
+
|
|
39
|
+
- `userIdSchema` / `invitationIdSchema` / `textIdSchema` from `0.2.1` are
|
|
40
|
+
still used for response shapes (`orgMemberSchema.userId`,
|
|
41
|
+
`projectMemberSchema.userId`, `invitationSchema.id`) and for the
|
|
42
|
+
member-mutation tool inputs that still take a `user_id` path param
|
|
43
|
+
(`project_update_member_role`, `project_remove_member`,
|
|
44
|
+
`org_update_member_role`, `org_remove_member`). Only the
|
|
45
|
+
`project_add_member` body changed shape.
|
|
46
|
+
|
|
47
|
+
See task `.manager/tasks/archive/0006-mcp-project-add-member-field-name-mismatch-userid-vs-email.md`.
|
|
48
|
+
|
|
49
|
+
## [0.2.1] — 2026-05-27
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- **`project_add_member`, `project_update_member_role`, `project_remove_member`,
|
|
54
|
+
`org_update_member_role`, `org_remove_member` no longer require `user_id` /
|
|
55
|
+
`userId` to be a UUID.** The backend's `user` table uses Better-Auth's text
|
|
56
|
+
PK (e.g. `CQZpWvRcgTq1n8uHBiSz0Kg0NKUcTVzA`), so the previous
|
|
57
|
+
`z.string().uuid()` validation rejected real user IDs returned by
|
|
58
|
+
`org_list_members` and forced agents to fall back to the dashboard UI.
|
|
59
|
+
Schemas now use a new `userIdSchema` (non-empty, ≤128 chars, charset
|
|
60
|
+
`[A-Za-z0-9_-]`) — backward compatible with UUID values.
|
|
61
|
+
- **`invitation_resend`, `invitation_revoke` no longer require
|
|
62
|
+
`invitation_id` to be a UUID.** The backend's `invitation` table also uses
|
|
63
|
+
a Better-Auth text PK. Schemas now use `invitationIdSchema` (same shape as
|
|
64
|
+
`userIdSchema`).
|
|
65
|
+
- **`invitationSchema.id`, `orgMemberSchema.userId`, `projectMemberSchema.userId`,
|
|
66
|
+
`addProjectMemberSchema.userId`** updated to the new non-UUID id schemas so
|
|
67
|
+
response parsing matches request validation. `pendingProjectId` (which
|
|
68
|
+
references a project — UUID PK) remains UUID-validated.
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- `userIdSchema`, `invitationIdSchema`, `textIdSchema` exports in
|
|
73
|
+
`src/schemas/common.ts` for member / invitation identifiers stored as
|
|
74
|
+
Better-Auth text PKs.
|
|
75
|
+
|
|
76
|
+
See task `.manager/tasks/archive/0005-update-mcp-tiny-tracking-add-member-supports-non-uuid-user-i.md`.
|
|
77
|
+
|
|
8
78
|
## [0.2.0] — 2026-05-27
|
|
9
79
|
|
|
10
80
|
Per-service ingest tokens. Realigns the MCP surface with the backend's new
|
package/README.md
CHANGED
|
@@ -188,7 +188,7 @@ Tổng **62 tools** chia theo 8 resource groups. Naming convention: `<resource>_
|
|
|
188
188
|
| `project_update` | Update project |
|
|
189
189
|
| `project_delete` | 🔴 Xóa project + monitors + errors (yêu cầu `confirm_name`) |
|
|
190
190
|
| `project_list_members` | List members + roles |
|
|
191
|
-
| `project_add_member` |
|
|
191
|
+
| `project_add_member` | Add user vào project **by email**. Nếu email đã là org member → insert trực tiếp (`status: "added"`); nếu chưa → tự động tạo invitation kèm pending project assignment (`status: "invited"`). |
|
|
192
192
|
| `project_update_member_role` | Đổi role (admin/editor/viewer) |
|
|
193
193
|
| `project_remove_member` | 🔴 Remove member |
|
|
194
194
|
|
|
@@ -323,17 +323,19 @@ Các tool xóa/rotate/revoke đều yêu cầu một field xác nhận matching
|
|
|
323
323
|
|---|---|---|
|
|
324
324
|
| `org_delete` | `confirm_slug` | Org slug |
|
|
325
325
|
| `project_delete` | `confirm_name` | Project name |
|
|
326
|
-
| `project_remove_member` | `confirm_user_id` | User
|
|
326
|
+
| `project_remove_member` | `confirm_user_id` | User ID (text PK) |
|
|
327
327
|
| `service_regenerate_api_key` | `confirm_service_id` | Service UUID |
|
|
328
328
|
| `service_delete` | `confirm_service_id` | Service UUID |
|
|
329
329
|
| `monitor_delete` | `confirm_name` | Monitor name |
|
|
330
330
|
| `status_page_delete` | `confirm_slug` | Status page slug |
|
|
331
331
|
| `status_page_delete_component` | `confirm_component_id` | Component UUID |
|
|
332
332
|
| `recipient_group_delete` | `confirm_group_id` | Group UUID |
|
|
333
|
-
| `invitation_revoke` | `confirm_invitation_id` | Invitation
|
|
334
|
-
| `org_remove_member` | `confirm_user_id` | User
|
|
333
|
+
| `invitation_revoke` | `confirm_invitation_id` | Invitation ID (text PK) |
|
|
334
|
+
| `org_remove_member` | `confirm_user_id` | User ID (text PK) |
|
|
335
335
|
|
|
336
|
-
Pattern này đảm bảo agent phải explicitly "repeat back" identifier — phòng case prompt injection hoặc nhầm lẫn
|
|
336
|
+
Pattern này đảm bảo agent phải explicitly "repeat back" identifier — phòng case prompt injection hoặc nhầm lẫn ID.
|
|
337
|
+
|
|
338
|
+
> **Note**: `user_id` và `invitation_id` là **text identifier** do Better-Auth sinh (ví dụ `CQZpWvRcgTq1n8uHBiSz0Kg0NKUcTVzA`), không phải UUID. Lấy đúng giá trị từ `org_list_members` / `project_list_members` / `invitation_list` và truyền nguyên bản — schema không enforce UUID format cho các field này.
|
|
337
339
|
|
|
338
340
|
### Secrets
|
|
339
341
|
|
package/dist/schemas/common.d.ts
CHANGED
|
@@ -4,6 +4,27 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
/** UUIDv4 string used by most NestJS entities. */
|
|
6
6
|
export declare const idSchema: z.ZodString;
|
|
7
|
+
/**
|
|
8
|
+
* Opaque text identifier used by Better-Auth-managed entities (`user`,
|
|
9
|
+
* `member`, `account`, `invitation`, `session`, `verification`).
|
|
10
|
+
*
|
|
11
|
+
* These tables use `@PrimaryColumn('text')` rather than UUIDs because
|
|
12
|
+
* Better-Auth generates short random tokens (e.g.
|
|
13
|
+
* `CQZpWvRcgTq1n8uHBiSz0Kg0NKUcTVzA`). The schema only enforces
|
|
14
|
+
* "non-empty, reasonably bounded printable string" so the agent can pipe
|
|
15
|
+
* IDs from `org_list_members` / `project_list_members` straight into
|
|
16
|
+
* member-management tools without UUID coercion. See task 0005.
|
|
17
|
+
*/
|
|
18
|
+
export declare const textIdSchema: z.ZodString;
|
|
19
|
+
/**
|
|
20
|
+
* User identifier as stored by the backend. Today the `user` table uses a
|
|
21
|
+
* Better-Auth text PK (see `backend/src/entities/user.entity.ts`), so this
|
|
22
|
+
* is an alias for {@link textIdSchema}. Kept as a distinct export so
|
|
23
|
+
* tooling intent ("this field references a user") stays explicit.
|
|
24
|
+
*/
|
|
25
|
+
export declare const userIdSchema: z.ZodString;
|
|
26
|
+
/** Invitation identifier (Better-Auth text PK, see `invitation.entity.ts`). */
|
|
27
|
+
export declare const invitationIdSchema: z.ZodString;
|
|
7
28
|
/** ISO-8601 timestamp string returned by TypeORM. */
|
|
8
29
|
export declare const isoDateSchema: z.ZodString;
|
|
9
30
|
/** URL-safe slug (lowercase letters, digits, hyphens). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,eAAO,MAAM,QAAQ,aAAoC,CAAC;AAE1D,qDAAqD;AACrD,eAAO,MAAM,aAAa,aAAwC,CAAC;AAEnE,0DAA0D;AAC1D,eAAO,MAAM,UAAU,aAImE,CAAC;AAE3F,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,aAMvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,eAAO,MAAM,QAAQ,aAAoC,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,aAOtB,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,YAAY,aAIxB,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,aAG9B,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,aAAa,aAAwC,CAAC;AAEnE,0DAA0D;AAC1D,eAAO,MAAM,UAAU,aAImE,CAAC;AAE3F,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,aAMvB,CAAC"}
|
package/dist/schemas/common.js
CHANGED
|
@@ -4,6 +4,34 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
/** UUIDv4 string used by most NestJS entities. */
|
|
6
6
|
export const idSchema = z.string().uuid('Must be a UUID');
|
|
7
|
+
/**
|
|
8
|
+
* Opaque text identifier used by Better-Auth-managed entities (`user`,
|
|
9
|
+
* `member`, `account`, `invitation`, `session`, `verification`).
|
|
10
|
+
*
|
|
11
|
+
* These tables use `@PrimaryColumn('text')` rather than UUIDs because
|
|
12
|
+
* Better-Auth generates short random tokens (e.g.
|
|
13
|
+
* `CQZpWvRcgTq1n8uHBiSz0Kg0NKUcTVzA`). The schema only enforces
|
|
14
|
+
* "non-empty, reasonably bounded printable string" so the agent can pipe
|
|
15
|
+
* IDs from `org_list_members` / `project_list_members` straight into
|
|
16
|
+
* member-management tools without UUID coercion. See task 0005.
|
|
17
|
+
*/
|
|
18
|
+
export const textIdSchema = z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1, 'Must be a non-empty identifier')
|
|
21
|
+
.max(128, 'Identifier exceeds 128 chars')
|
|
22
|
+
.regex(/^[A-Za-z0-9_-]+$/, 'Identifier may only contain letters, digits, underscore, or hyphen');
|
|
23
|
+
/**
|
|
24
|
+
* User identifier as stored by the backend. Today the `user` table uses a
|
|
25
|
+
* Better-Auth text PK (see `backend/src/entities/user.entity.ts`), so this
|
|
26
|
+
* is an alias for {@link textIdSchema}. Kept as a distinct export so
|
|
27
|
+
* tooling intent ("this field references a user") stays explicit.
|
|
28
|
+
*/
|
|
29
|
+
export const userIdSchema = textIdSchema.describe('User identifier as returned by org_list_members / project_list_members. ' +
|
|
30
|
+
'Accepts the backend\'s text PK (e.g. "CQZpWvRcgTq1n8uHBiSz0Kg0NKUcTVzA"); ' +
|
|
31
|
+
'not constrained to UUID format.');
|
|
32
|
+
/** Invitation identifier (Better-Auth text PK, see `invitation.entity.ts`). */
|
|
33
|
+
export const invitationIdSchema = textIdSchema.describe('Invitation identifier as returned by invitation_list. Accepts the ' +
|
|
34
|
+
'backend\'s text PK; not constrained to UUID format.');
|
|
7
35
|
/** ISO-8601 timestamp string returned by TypeORM. */
|
|
8
36
|
export const isoDateSchema = z.string().datetime({ offset: true });
|
|
9
37
|
/** URL-safe slug (lowercase letters, digits, hyphens). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEnE,0DAA0D;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,4BAA4B,EAAE,kDAAkD,CAAC,CAAC;AAE3F,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC/E,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CACP,yFAAyF;IACvF,+CAA+C,CAClD,CAAC"}
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;KACxC,GAAG,CAAC,GAAG,EAAE,8BAA8B,CAAC;KACxC,KAAK,CACJ,kBAAkB,EAClB,oEAAoE,CACrE,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAC/C,0EAA0E;IACxE,4EAA4E;IAC5E,iCAAiC,CACpC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,QAAQ,CACrD,oEAAoE;IAClE,qDAAqD,CACxD,CAAC;AAEF,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEnE,0DAA0D;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,4BAA4B,EAAE,kDAAkD,CAAC,CAAC;AAE3F,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC/E,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CACP,yFAAyF;IACvF,+CAA+C,CAClD,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* - CreateInvitationDto
|
|
5
5
|
*/
|
|
6
6
|
import { z } from 'zod';
|
|
7
|
-
import { idSchema } from './common.js';
|
|
7
|
+
import { idSchema, invitationIdSchema } from './common.js';
|
|
8
8
|
import { projectRoleSchema } from './project.js';
|
|
9
9
|
export const invitationRoleSchema = z.enum(['member', 'viewer']);
|
|
10
10
|
export const invitationStatusSchema = z.enum([
|
|
@@ -32,7 +32,7 @@ export const createInvitationSchema = z
|
|
|
32
32
|
path: ['pendingProjectId'],
|
|
33
33
|
});
|
|
34
34
|
export const invitationSchema = z.object({
|
|
35
|
-
id:
|
|
35
|
+
id: invitationIdSchema,
|
|
36
36
|
organizationId: idSchema,
|
|
37
37
|
email: z.string().email(),
|
|
38
38
|
role: invitationRoleSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitation.js","sourceRoot":"","sources":["../../src/schemas/invitation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"invitation.js","sourceRoot":"","sources":["../../src/schemas/invitation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3C,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,IAAI,EAAE,oBAAoB;IAC1B,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5C,gEAAgE;QAC9D,oDAAoD,CACvD;IACD,kBAAkB,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvD,8EAA8E,CAC/E;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC,qBAAqB,CAAC;KAC7B,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAClE,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,EACpE;IACE,OAAO,EAAE,8DAA8D;IACvE,IAAI,EAAE,CAAC,kBAAkB,CAAC;CAC3B,CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,kBAAkB;IACtB,cAAc,EAAE,QAAQ;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,sBAAsB;IAC9B,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,kBAAkB,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - UpdateMemberRoleDto
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { idSchema, slugSchema } from './common.js';
|
|
8
|
+
import { idSchema, slugSchema, userIdSchema } from './common.js';
|
|
9
9
|
export const orgRoleSchema = z.enum(['owner', 'member', 'viewer']);
|
|
10
10
|
export const createOrganizationSchema = z.object({
|
|
11
11
|
name: z.string().min(1).max(100),
|
|
@@ -29,7 +29,7 @@ export const organizationSchema = z.object({
|
|
|
29
29
|
updatedAt: z.string().optional(),
|
|
30
30
|
});
|
|
31
31
|
export const orgMemberSchema = z.object({
|
|
32
|
-
userId:
|
|
32
|
+
userId: userIdSchema,
|
|
33
33
|
organizationId: idSchema,
|
|
34
34
|
role: orgRoleSchema,
|
|
35
35
|
email: z.string().email().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/schemas/organization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/schemas/organization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3C,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,aAAa;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,YAAY;IACpB,cAAc,EAAE,QAAQ;IACxB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|
|
@@ -21,15 +21,28 @@ export declare const updateProjectSchema: z.ZodObject<{
|
|
|
21
21
|
}, {
|
|
22
22
|
name?: string | undefined;
|
|
23
23
|
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Body for `POST /api/projects/:id/members`.
|
|
26
|
+
*
|
|
27
|
+
* The backend branches on the email (`AddProjectMemberDto` in
|
|
28
|
+
* `backend/src/projects/members/dto/add-project-member.dto.ts`):
|
|
29
|
+
* - If the email matches an existing org member → inserts a
|
|
30
|
+
* `ProjectMember` row directly and returns `{ status: 'added', member }`.
|
|
31
|
+
* - Otherwise → creates an org invitation with the pending project
|
|
32
|
+
* assignment attached and returns `{ status: 'invited', invitation }`.
|
|
33
|
+
*
|
|
34
|
+
* The previous `userId` field was removed in MCP `0.3.0` to match this
|
|
35
|
+
* backend contract — see task 0006.
|
|
36
|
+
*/
|
|
24
37
|
export declare const addProjectMemberSchema: z.ZodObject<{
|
|
25
|
-
|
|
38
|
+
email: z.ZodString;
|
|
26
39
|
role: z.ZodEnum<["admin", "editor", "viewer"]>;
|
|
27
40
|
}, "strip", z.ZodTypeAny, {
|
|
28
41
|
role: "viewer" | "admin" | "editor";
|
|
29
|
-
|
|
42
|
+
email: string;
|
|
30
43
|
}, {
|
|
31
44
|
role: "viewer" | "admin" | "editor";
|
|
32
|
-
|
|
45
|
+
email: string;
|
|
33
46
|
}>;
|
|
34
47
|
export declare const updateProjectMemberRoleSchema: z.ZodObject<{
|
|
35
48
|
role: z.ZodEnum<["admin", "editor", "viewer"]>;
|
|
@@ -44,10 +57,10 @@ export declare const projectSchema: z.ZodObject<{
|
|
|
44
57
|
name: z.ZodString;
|
|
45
58
|
/**
|
|
46
59
|
* Only present on the response from `project_create` — backend returns the
|
|
47
|
-
* plaintext key of the auto-provisioned
|
|
60
|
+
* plaintext key of the auto-provisioned initial service exactly once.
|
|
48
61
|
*/
|
|
49
62
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
50
|
-
|
|
63
|
+
initialServiceId: z.ZodOptional<z.ZodString>;
|
|
51
64
|
apiKeyPrefix: z.ZodOptional<z.ZodString>;
|
|
52
65
|
createdAt: z.ZodOptional<z.ZodString>;
|
|
53
66
|
updatedAt: z.ZodOptional<z.ZodString>;
|
|
@@ -58,7 +71,7 @@ export declare const projectSchema: z.ZodObject<{
|
|
|
58
71
|
createdAt?: string | undefined;
|
|
59
72
|
updatedAt?: string | undefined;
|
|
60
73
|
apiKey?: string | undefined;
|
|
61
|
-
|
|
74
|
+
initialServiceId?: string | undefined;
|
|
62
75
|
apiKeyPrefix?: string | undefined;
|
|
63
76
|
}, {
|
|
64
77
|
name: string;
|
|
@@ -67,7 +80,7 @@ export declare const projectSchema: z.ZodObject<{
|
|
|
67
80
|
createdAt?: string | undefined;
|
|
68
81
|
updatedAt?: string | undefined;
|
|
69
82
|
apiKey?: string | undefined;
|
|
70
|
-
|
|
83
|
+
initialServiceId?: string | undefined;
|
|
71
84
|
apiKeyPrefix?: string | undefined;
|
|
72
85
|
}>;
|
|
73
86
|
export declare const projectMemberSchema: z.ZodObject<{
|
|
@@ -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;
|
|
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;AAIxB,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;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;EAWjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;EAExC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;IAIxB;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;EAMH,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC"}
|
package/dist/schemas/project.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* - AddProjectMemberDto, UpdateProjectMemberRoleDto
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { idSchema } from './common.js';
|
|
8
|
+
import { idSchema, userIdSchema } from './common.js';
|
|
9
|
+
// userIdSchema is still referenced by projectMemberSchema (response shape).
|
|
9
10
|
export const projectRoleSchema = z.enum(['admin', 'editor', 'viewer']);
|
|
10
11
|
export const createProjectSchema = z.object({
|
|
11
12
|
name: z.string().min(1).max(100),
|
|
@@ -13,8 +14,27 @@ export const createProjectSchema = z.object({
|
|
|
13
14
|
export const updateProjectSchema = z.object({
|
|
14
15
|
name: z.string().min(1).max(100).optional(),
|
|
15
16
|
});
|
|
17
|
+
/**
|
|
18
|
+
* Body for `POST /api/projects/:id/members`.
|
|
19
|
+
*
|
|
20
|
+
* The backend branches on the email (`AddProjectMemberDto` in
|
|
21
|
+
* `backend/src/projects/members/dto/add-project-member.dto.ts`):
|
|
22
|
+
* - If the email matches an existing org member → inserts a
|
|
23
|
+
* `ProjectMember` row directly and returns `{ status: 'added', member }`.
|
|
24
|
+
* - Otherwise → creates an org invitation with the pending project
|
|
25
|
+
* assignment attached and returns `{ status: 'invited', invitation }`.
|
|
26
|
+
*
|
|
27
|
+
* The previous `userId` field was removed in MCP `0.3.0` to match this
|
|
28
|
+
* backend contract — see task 0006.
|
|
29
|
+
*/
|
|
16
30
|
export const addProjectMemberSchema = z.object({
|
|
17
|
-
|
|
31
|
+
email: z
|
|
32
|
+
.string()
|
|
33
|
+
.email('Must be a valid email address')
|
|
34
|
+
.describe('Email of the user to add. If the email belongs to an existing org ' +
|
|
35
|
+
'member they are added to the project immediately; otherwise the ' +
|
|
36
|
+
'backend creates a pending invitation with this project + role ' +
|
|
37
|
+
'pre-attached (no extra MCP call needed).'),
|
|
18
38
|
role: projectRoleSchema,
|
|
19
39
|
});
|
|
20
40
|
export const updateProjectMemberRoleSchema = z.object({
|
|
@@ -26,16 +46,16 @@ export const projectSchema = z.object({
|
|
|
26
46
|
name: z.string(),
|
|
27
47
|
/**
|
|
28
48
|
* Only present on the response from `project_create` — backend returns the
|
|
29
|
-
* plaintext key of the auto-provisioned
|
|
49
|
+
* plaintext key of the auto-provisioned initial service exactly once.
|
|
30
50
|
*/
|
|
31
51
|
apiKey: z.string().optional(),
|
|
32
|
-
|
|
52
|
+
initialServiceId: idSchema.optional(),
|
|
33
53
|
apiKeyPrefix: z.string().optional(),
|
|
34
54
|
createdAt: z.string().optional(),
|
|
35
55
|
updatedAt: z.string().optional(),
|
|
36
56
|
});
|
|
37
57
|
export const projectMemberSchema = z.object({
|
|
38
|
-
userId:
|
|
58
|
+
userId: userIdSchema,
|
|
39
59
|
projectId: idSchema,
|
|
40
60
|
role: projectRoleSchema,
|
|
41
61
|
email: z.string().email().optional(),
|
|
@@ -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;
|
|
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,YAAY,EAAE,MAAM,aAAa,CAAC;AACrD,4EAA4E;AAE5E,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;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,KAAK,CAAC,+BAA+B,CAAC;SACtC,QAAQ,CACP,oEAAoE;QAClE,kEAAkE;QAClE,gEAAgE;QAChE,0CAA0C,CAC7C;IACH,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,YAAY;IACpB,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,7 +1,7 @@
|
|
|
1
1
|
import { request } from '../http-client.js';
|
|
2
2
|
import { loadConfig } from '../config.js';
|
|
3
3
|
import { buildToolResult, requireConfirmation, resolveOrgId, wrapHandler, } from './_helpers.js';
|
|
4
|
-
import { createInvitationShape, idSchema } from '../schemas/index.js';
|
|
4
|
+
import { createInvitationShape, idSchema, invitationIdSchema } from '../schemas/index.js';
|
|
5
5
|
export function registerInvitationTools(server) {
|
|
6
6
|
const config = loadConfig();
|
|
7
7
|
/* ---------------- invitation_list ---------------- */
|
|
@@ -45,7 +45,7 @@ export function registerInvitationTools(server) {
|
|
|
45
45
|
description: 'Regenerate the invitation token and re-send the email. Owner role required.',
|
|
46
46
|
inputSchema: {
|
|
47
47
|
org_id: idSchema.optional(),
|
|
48
|
-
invitation_id:
|
|
48
|
+
invitation_id: invitationIdSchema,
|
|
49
49
|
},
|
|
50
50
|
}, wrapHandler('invitation_resend', async ({ org_id, invitation_id }) => {
|
|
51
51
|
const id = resolveOrgId(org_id, config.TT_DEFAULT_ORG_ID);
|
|
@@ -62,8 +62,8 @@ export function registerInvitationTools(server) {
|
|
|
62
62
|
'Owner role required. Pass `confirm_invitation_id` matching `invitation_id`.',
|
|
63
63
|
inputSchema: {
|
|
64
64
|
org_id: idSchema.optional(),
|
|
65
|
-
invitation_id:
|
|
66
|
-
confirm_invitation_id:
|
|
65
|
+
invitation_id: invitationIdSchema,
|
|
66
|
+
confirm_invitation_id: invitationIdSchema.describe('Repeat invitation_id to confirm revocation.'),
|
|
67
67
|
},
|
|
68
68
|
}, wrapHandler('invitation_revoke', async ({ org_id, invitation_id, confirm_invitation_id }) => {
|
|
69
69
|
const id = resolveOrgId(org_id, config.TT_DEFAULT_ORG_ID);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invitations.js","sourceRoot":"","sources":["../../src/tools/invitations.ts"],"names":[],"mappings":"AAUA,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,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"invitations.js","sourceRoot":"","sources":["../../src/tools/invitations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/tools/organizations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/tools/organizations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuMjE"}
|
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { request } from '../http-client.js';
|
|
3
3
|
import { loadConfig } from '../config.js';
|
|
4
4
|
import { buildToolResult, requireConfirmation, resolveOrgId, wrapHandler, } from './_helpers.js';
|
|
5
|
-
import { createOrganizationSchema, updateOrganizationSchema, updateMemberRoleSchema, idSchema, } from '../schemas/index.js';
|
|
5
|
+
import { createOrganizationSchema, updateOrganizationSchema, updateMemberRoleSchema, idSchema, userIdSchema, } from '../schemas/index.js';
|
|
6
6
|
export function registerOrganizationTools(server) {
|
|
7
7
|
const config = loadConfig();
|
|
8
8
|
/* ---------------- org_list ---------------- */
|
|
@@ -116,7 +116,8 @@ export function registerOrganizationTools(server) {
|
|
|
116
116
|
'Owner role required to call.',
|
|
117
117
|
inputSchema: {
|
|
118
118
|
org_id: idSchema.optional(),
|
|
119
|
-
user_id:
|
|
119
|
+
user_id: userIdSchema.describe('Target user identifier (text PK as returned by org_list_members; ' +
|
|
120
|
+
'not constrained to UUID format).'),
|
|
120
121
|
...updateMemberRoleSchema.shape,
|
|
121
122
|
},
|
|
122
123
|
}, wrapHandler('org_update_member_role', async (input) => {
|
|
@@ -136,8 +137,8 @@ export function registerOrganizationTools(server) {
|
|
|
136
137
|
'all org resources (projects, monitors, etc.). Owner role required.',
|
|
137
138
|
inputSchema: {
|
|
138
139
|
org_id: idSchema.optional(),
|
|
139
|
-
user_id:
|
|
140
|
-
confirm_user_id:
|
|
140
|
+
user_id: userIdSchema,
|
|
141
|
+
confirm_user_id: userIdSchema.describe('Repeat the user_id to confirm removal.'),
|
|
141
142
|
},
|
|
142
143
|
}, wrapHandler('org_remove_member', async ({ org_id, user_id, confirm_user_id }) => {
|
|
143
144
|
const id = resolveOrgId(org_id, config.TT_DEFAULT_ORG_ID);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../src/tools/organizations.ts"],"names":[],"mappings":"AAcA,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,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,QAAQ,
|
|
1
|
+
{"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../src/tools/organizations.ts"],"names":[],"mappings":"AAcA,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,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,QAAQ,EACR,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,gDAAgD;IAChD,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,+DAA+D;YAC/D,+DAA+D;QACjE,WAAW,EAAE,EAAE;KAChB,EACD,WAAW,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,oBAAoB;SAC1B,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CACH,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ;iBACb,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;SACxE;KACF,EACD,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,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,EAAE;SACpD,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,uEAAuE;YACvE,kEAAkE;QACpE,WAAW,EAAE,wBAAwB,CAAC,KAAK;KAC5C,EACD,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU;YAClC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,oBAAoB;YACzB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,qEAAqE;QACvE,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC3B,GAAG,wBAAwB,CAAC,KAAK;SAClC;KACF,EACD,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,KAAsD,CAAC;QACpF,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,EAAE;YACnD,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,wEAAwE;YACxE,4DAA4D;YAC5D,uEAAuE;QACzE,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC3B,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,gDAAgD,CAAC;SAC9D;KACF,EACD,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;QAC3D,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1D,wDAAwD;QACxD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAiC;YACxD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACpD,CAAC,CAAC;QACH,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7F,MAAM,OAAO,CAAU;YACrB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACpD,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CACH,CAAC;IAEF,wDAAwD;IACxD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;SAC5B;KACF,EACD,WAAW,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnD,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,UAAU;SAC5D,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CACH,CAAC;IAEF,8DAA8D;IAC9D,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,4EAA4E;YAC5E,8BAA8B;QAChC,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC3B,OAAO,EAAE,YAAY,CAAC,QAAQ,CAC5B,mEAAmE;gBACjE,kCAAkC,CACrC;YACD,GAAG,sBAAsB,CAAC,KAAK;SAChC;KACF,EACD,WAAW,CAAC,wBAAwB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,KAGX,CAAC;QAC5B,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,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAC1F,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;IAEF,uEAAuE;IACvE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,4EAA4E;YAC5E,oEAAoE;QACtE,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC3B,OAAO,EAAE,YAAY;YACrB,eAAe,EAAE,YAAY,CAAC,QAAQ,CACpC,wCAAwC,CACzC;SACF;KACF,EACD,WAAW,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE;QAC9E,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1D,mBAAmB,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,CAAU;YACrB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE;SAC3F,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/tools/projects.d.ts
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* NOTE: Project-level API keys were removed in favor of per-service keys.
|
|
16
16
|
* The `service_*` tools (see `tools/services.ts`) handle key prefix / reveal /
|
|
17
17
|
* regenerate now. `project_create` still returns a one-off `apiKey` field —
|
|
18
|
-
* that is the plaintext key of the auto-provisioned
|
|
18
|
+
* that is the plaintext key of the auto-provisioned initial service (slug
|
|
19
|
+
* `default`), which itself can be renamed / deleted like any other service.
|
|
19
20
|
*/
|
|
20
21
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
21
22
|
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
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuO5D"}
|
package/dist/tools/projects.js
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { request } from '../http-client.js';
|
|
3
3
|
import { loadConfig } from '../config.js';
|
|
4
4
|
import { buildToolResult, requireConfirmation, resolveOrgId, wrapHandler, } from './_helpers.js';
|
|
5
|
-
import { createProjectSchema, updateProjectSchema, addProjectMemberSchema, updateProjectMemberRoleSchema, idSchema, } from '../schemas/index.js';
|
|
5
|
+
import { createProjectSchema, updateProjectSchema, addProjectMemberSchema, updateProjectMemberRoleSchema, idSchema, userIdSchema, } from '../schemas/index.js';
|
|
6
6
|
export function registerProjectTools(server) {
|
|
7
7
|
const config = loadConfig();
|
|
8
8
|
/* ---------------- project_list ---------------- */
|
|
@@ -25,10 +25,12 @@ export function registerProjectTools(server) {
|
|
|
25
25
|
server.registerTool('project_create', {
|
|
26
26
|
title: 'Create project',
|
|
27
27
|
description: 'Create a new project within an organization. The backend auto-provisions ' +
|
|
28
|
-
'
|
|
29
|
-
'service\'s plaintext `apiKey` (along with
|
|
30
|
-
'`apiKeyPrefix`) exactly once — copy it
|
|
31
|
-
'SDK with it.
|
|
28
|
+
'an initial service named "Default" for the project and the response ' +
|
|
29
|
+
'includes that service\'s plaintext `apiKey` (along with ' +
|
|
30
|
+
'`initialServiceId` and `apiKeyPrefix`) exactly once — copy it ' +
|
|
31
|
+
'immediately and configure your SDK with it. The initial service has ' +
|
|
32
|
+
'no special flag — it can be renamed / deleted like any other. Use ' +
|
|
33
|
+
'`service_create` to add more services per runtime.',
|
|
32
34
|
inputSchema: {
|
|
33
35
|
org_id: idSchema.optional(),
|
|
34
36
|
...createProjectSchema.shape,
|
|
@@ -115,9 +117,15 @@ export function registerProjectTools(server) {
|
|
|
115
117
|
}));
|
|
116
118
|
/* ---------------- project_add_member ---------------- */
|
|
117
119
|
server.registerTool('project_add_member', {
|
|
118
|
-
title: 'Add project member',
|
|
119
|
-
description: 'Add
|
|
120
|
-
'
|
|
120
|
+
title: 'Add project member (by email)',
|
|
121
|
+
description: 'Add a user to a project by email. ' +
|
|
122
|
+
'If the email belongs to an existing org member, the backend inserts ' +
|
|
123
|
+
'a ProjectMember row directly and the response is ' +
|
|
124
|
+
'`{ status: "added", member }`. If the email does NOT belong to any ' +
|
|
125
|
+
'org member, the backend creates a pending org invitation with this ' +
|
|
126
|
+
'project + role pre-attached and the response is ' +
|
|
127
|
+
'`{ status: "invited", invitation }` — no separate `invitation_create` ' +
|
|
128
|
+
'call needed. Requires project admin role.',
|
|
121
129
|
inputSchema: {
|
|
122
130
|
project_id: idSchema,
|
|
123
131
|
...addProjectMemberSchema.shape,
|
|
@@ -137,7 +145,7 @@ export function registerProjectTools(server) {
|
|
|
137
145
|
description: 'Change a member\'s role within a project. Requires project admin role.',
|
|
138
146
|
inputSchema: {
|
|
139
147
|
project_id: idSchema,
|
|
140
|
-
user_id:
|
|
148
|
+
user_id: userIdSchema,
|
|
141
149
|
...updateProjectMemberRoleSchema.shape,
|
|
142
150
|
},
|
|
143
151
|
}, wrapHandler('project_update_member_role', async (input) => {
|
|
@@ -156,8 +164,8 @@ export function registerProjectTools(server) {
|
|
|
156
164
|
'loses access to this project. Requires project admin role.',
|
|
157
165
|
inputSchema: {
|
|
158
166
|
project_id: idSchema,
|
|
159
|
-
user_id:
|
|
160
|
-
confirm_user_id:
|
|
167
|
+
user_id: userIdSchema,
|
|
168
|
+
confirm_user_id: userIdSchema.describe('Repeat user_id to confirm removal.'),
|
|
161
169
|
},
|
|
162
170
|
}, wrapHandler('project_remove_member', async ({ project_id, user_id, confirm_user_id }) => {
|
|
163
171
|
requireConfirmation(confirm_user_id, user_id, `project member ${user_id}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.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.
|
|
3
|
+
"version": "0.3.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",
|