@hield/mcp-server 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.
Files changed (46) hide show
  1. package/README.md +135 -0
  2. package/dist/client.d.ts +30 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +51 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/config.d.ts +6 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +12 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +35 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/collaborators.d.ts +4 -0
  15. package/dist/tools/collaborators.d.ts.map +1 -0
  16. package/dist/tools/collaborators.js +156 -0
  17. package/dist/tools/collaborators.js.map +1 -0
  18. package/dist/tools/events.d.ts +4 -0
  19. package/dist/tools/events.d.ts.map +1 -0
  20. package/dist/tools/events.js +282 -0
  21. package/dist/tools/events.js.map +1 -0
  22. package/dist/tools/fields.d.ts +4 -0
  23. package/dist/tools/fields.d.ts.map +1 -0
  24. package/dist/tools/fields.js +197 -0
  25. package/dist/tools/fields.js.map +1 -0
  26. package/dist/tools/public.d.ts +4 -0
  27. package/dist/tools/public.d.ts.map +1 -0
  28. package/dist/tools/public.js +164 -0
  29. package/dist/tools/public.js.map +1 -0
  30. package/dist/tools/registrations.d.ts +4 -0
  31. package/dist/tools/registrations.d.ts.map +1 -0
  32. package/dist/tools/registrations.js +160 -0
  33. package/dist/tools/registrations.js.map +1 -0
  34. package/dist/tools/stats.d.ts +4 -0
  35. package/dist/tools/stats.d.ts.map +1 -0
  36. package/dist/tools/stats.js +71 -0
  37. package/dist/tools/stats.js.map +1 -0
  38. package/dist/tools/tenant.d.ts +4 -0
  39. package/dist/tools/tenant.d.ts.map +1 -0
  40. package/dist/tools/tenant.js +109 -0
  41. package/dist/tools/tenant.js.map +1 -0
  42. package/dist/types.d.ts +70 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +2 -0
  45. package/dist/types.js.map +1 -0
  46. package/package.json +30 -0
package/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # @hield/mcp-server
2
+
3
+ MCP server for the [Hield](https://github.com/weishih/hield) event registration API. Enables AI assistants to manage events, registrations, form fields, collaborators, and stats through natural language.
4
+
5
+ ## Installation
6
+
7
+ ### Claude Desktop
8
+
9
+ Add to your `claude_desktop_config.json`:
10
+
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "hield": {
15
+ "command": "npx",
16
+ "args": ["-y", "@hield/mcp-server"],
17
+ "env": {
18
+ "HIELD_API_KEY": "hld_your_api_key_here",
19
+ "HIELD_API_URL": "https://your-hield-api-url.amazonaws.com"
20
+ }
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
26
+ ### Claude Code
27
+
28
+ Add to your project's `.mcp.json`:
29
+
30
+ ```json
31
+ {
32
+ "mcpServers": {
33
+ "hield": {
34
+ "command": "npx",
35
+ "args": ["-y", "@hield/mcp-server"],
36
+ "env": {
37
+ "HIELD_API_KEY": "hld_your_api_key_here",
38
+ "HIELD_API_URL": "https://your-hield-api-url.amazonaws.com"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ ## Configuration
46
+
47
+ | Environment Variable | Required | Description |
48
+ |---|---|---|
49
+ | `HIELD_API_KEY` | Yes | Your Hield tenant API key (starts with `hld_`) |
50
+ | `HIELD_API_URL` | Yes | Hield API base URL |
51
+
52
+ ## Available Tools (27)
53
+
54
+ ### Event Management
55
+ | Tool | Description |
56
+ |---|---|
57
+ | `hield_create_event` | Create a new event (starts as draft) |
58
+ | `hield_list_events` | List all your events (paginated) |
59
+ | `hield_get_event` | Get event details |
60
+ | `hield_update_event` | Update event properties |
61
+ | `hield_delete_event` | Delete an event |
62
+ | `hield_update_event_status` | Change event status (draft/published/closed) |
63
+
64
+ ### Form Fields
65
+ | Tool | Description |
66
+ |---|---|
67
+ | `hield_create_form_field` | Add a custom form field to an event |
68
+ | `hield_list_form_fields` | List form fields for an event |
69
+ | `hield_update_form_field` | Update a form field |
70
+ | `hield_delete_form_field` | Delete a form field |
71
+
72
+ ### Registration Management
73
+ | Tool | Description |
74
+ |---|---|
75
+ | `hield_list_registrations` | List registrations for an event (paginated) |
76
+ | `hield_get_registration` | Get registration details |
77
+ | `hield_update_registration` | Update registration status |
78
+ | `hield_delete_registration` | Delete a registration |
79
+
80
+ ### Collaborators
81
+ | Tool | Description |
82
+ |---|---|
83
+ | `hield_invite_collaborator` | Invite a collaborator by email |
84
+ | `hield_list_collaborators` | List event collaborators |
85
+ | `hield_update_collaborator` | Change collaborator role |
86
+ | `hield_remove_collaborator` | Remove a collaborator |
87
+
88
+ ### Statistics
89
+ | Tool | Description |
90
+ |---|---|
91
+ | `hield_get_event_stats` | Get registration stats for an event |
92
+ | `hield_get_overview_stats` | Get stats across all events |
93
+
94
+ ### Tenant Profile
95
+ | Tool | Description |
96
+ |---|---|
97
+ | `hield_get_tenant` | Get your tenant profile |
98
+ | `hield_update_tenant` | Update tenant name |
99
+ | `hield_rotate_api_key` | Generate a new API key |
100
+
101
+ ### Public (No Auth)
102
+ | Tool | Description |
103
+ |---|---|
104
+ | `hield_public_get_event` | View a published event |
105
+ | `hield_public_register` | Register for an event |
106
+ | `hield_public_get_registration` | Check registration status |
107
+ | `hield_public_cancel_registration` | Cancel a registration |
108
+
109
+ ## Usage Examples
110
+
111
+ Ask your AI assistant:
112
+
113
+ - "Create an event called Tech Conference 2026 for 200 people on June 1st in Singapore"
114
+ - "Add a t-shirt size dropdown with S, M, L, XL options to my event"
115
+ - "Publish the event so people can register"
116
+ - "Show me the registration stats for my conference"
117
+ - "Invite alice@example.com as an editor on my event"
118
+ - "Build me a registration page for my published event"
119
+
120
+ ## Development
121
+
122
+ ```bash
123
+ cd mcp
124
+ npm install
125
+ npm run build
126
+ ```
127
+
128
+ Test locally:
129
+ ```bash
130
+ HIELD_API_KEY=hld_xxx HIELD_API_URL=http://localhost:8942 node dist/index.js
131
+ ```
132
+
133
+ ## License
134
+
135
+ MIT
@@ -0,0 +1,30 @@
1
+ import { Config } from "./config.js";
2
+ export interface HieldResponse<T = unknown> {
3
+ success: boolean;
4
+ data?: T;
5
+ meta?: {
6
+ page: number;
7
+ per_page: number;
8
+ total: number;
9
+ };
10
+ error?: {
11
+ code: string;
12
+ message: string;
13
+ };
14
+ }
15
+ export declare class HieldClient {
16
+ private config;
17
+ constructor(config: Config);
18
+ private request;
19
+ get<T>(path: string): Promise<HieldResponse<T>>;
20
+ post<T>(path: string, body?: unknown): Promise<HieldResponse<T>>;
21
+ put<T>(path: string, body?: unknown): Promise<HieldResponse<T>>;
22
+ delete<T>(path: string): Promise<HieldResponse<T>>;
23
+ }
24
+ export declare class HieldApiError extends Error {
25
+ statusCode: number;
26
+ code: string;
27
+ message: string;
28
+ constructor(statusCode: number, code: string, message: string);
29
+ }
30
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;YAEpB,OAAO;IA0Bf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI/C,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIhE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI/D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAGzD;AAED,qBAAa,aAAc,SAAQ,KAAK;IAE7B,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,MAAM;IACH,OAAO,EAAE,MAAM;gBAFxB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACH,OAAO,EAAE,MAAM;CAKlC"}
package/dist/client.js ADDED
@@ -0,0 +1,51 @@
1
+ export class HieldClient {
2
+ config;
3
+ constructor(config) {
4
+ this.config = config;
5
+ }
6
+ async request(method, path, body) {
7
+ const url = `${this.config.apiBaseUrl}${path}`;
8
+ const headers = {
9
+ "Content-Type": "application/json",
10
+ };
11
+ // Add API key for management endpoints
12
+ if (!path.startsWith("/api/v1/public/")) {
13
+ headers["Authorization"] = `ApiKey ${this.config.apiKey}`;
14
+ }
15
+ const res = await fetch(url, {
16
+ method,
17
+ headers,
18
+ body: body ? JSON.stringify(body) : undefined,
19
+ });
20
+ const json = (await res.json());
21
+ if (!json.success && json.error) {
22
+ throw new HieldApiError(res.status, json.error.code, json.error.message);
23
+ }
24
+ return json;
25
+ }
26
+ async get(path) {
27
+ return this.request("GET", path);
28
+ }
29
+ async post(path, body) {
30
+ return this.request("POST", path, body);
31
+ }
32
+ async put(path, body) {
33
+ return this.request("PUT", path, body);
34
+ }
35
+ async delete(path) {
36
+ return this.request("DELETE", path);
37
+ }
38
+ }
39
+ export class HieldApiError extends Error {
40
+ statusCode;
41
+ code;
42
+ message;
43
+ constructor(statusCode, code, message) {
44
+ super(`${code}: ${message}`);
45
+ this.statusCode = statusCode;
46
+ this.code = code;
47
+ this.message = message;
48
+ this.name = "HieldApiError";
49
+ }
50
+ }
51
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE9B,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5D,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAc;QACxC,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,IAAc;QACvC,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,IAAY;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE7B;IACA;IACS;IAHlB,YACS,UAAkB,EAClB,IAAY,EACH,OAAe;QAE/B,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAJtB,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACH,YAAO,GAAP,OAAO,CAAQ;QAG/B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export interface Config {
2
+ apiKey: string;
3
+ apiBaseUrl: string;
4
+ }
5
+ export declare function loadConfig(): Config;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAYnC"}
package/dist/config.js ADDED
@@ -0,0 +1,12 @@
1
+ export function loadConfig() {
2
+ const apiKey = process.env.HIELD_API_KEY;
3
+ const apiBaseUrl = process.env.HIELD_API_URL;
4
+ if (!apiKey) {
5
+ throw new Error("HIELD_API_KEY environment variable is required");
6
+ }
7
+ if (!apiBaseUrl) {
8
+ throw new Error("HIELD_API_URL environment variable is required");
9
+ }
10
+ return { apiKey, apiBaseUrl: apiBaseUrl.replace(/\/$/, "") };
11
+ }
12
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC"}
@@ -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,35 @@
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 { loadConfig } from "./config.js";
5
+ import { HieldClient } from "./client.js";
6
+ import { registerEventTools } from "./tools/events.js";
7
+ import { registerFieldTools } from "./tools/fields.js";
8
+ import { registerRegistrationTools } from "./tools/registrations.js";
9
+ import { registerCollaboratorTools } from "./tools/collaborators.js";
10
+ import { registerStatsTools } from "./tools/stats.js";
11
+ import { registerTenantTools } from "./tools/tenant.js";
12
+ import { registerPublicTools } from "./tools/public.js";
13
+ async function main() {
14
+ const config = loadConfig();
15
+ const client = new HieldClient(config);
16
+ const server = new McpServer({
17
+ name: "hield",
18
+ version: "1.0.0",
19
+ });
20
+ registerEventTools(server, client);
21
+ registerFieldTools(server, client);
22
+ registerRegistrationTools(server, client);
23
+ registerCollaboratorTools(server, client);
24
+ registerStatsTools(server, client);
25
+ registerTenantTools(server, client);
26
+ registerPublicTools(server, client);
27
+ const transport = new StdioServerTransport();
28
+ await server.connect(transport);
29
+ console.error("Hield MCP server running on stdio");
30
+ }
31
+ main().catch((error) => {
32
+ console.error("Fatal error:", error);
33
+ process.exit(1);
34
+ });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { HieldClient } from "../client.js";
3
+ export declare function registerCollaboratorTools(server: McpServer, client: HieldClient): void;
4
+ //# sourceMappingURL=collaborators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaborators.d.ts","sourceRoot":"","sources":["../../src/tools/collaborators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAiB,MAAM,cAAc,CAAC;AAE1D,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,QAsLpB"}
@@ -0,0 +1,156 @@
1
+ import { z } from "zod";
2
+ import { HieldApiError } from "../client.js";
3
+ export function registerCollaboratorTools(server, client) {
4
+ server.registerTool("hield_list_collaborators", {
5
+ description: "List all collaborators for an event. Collaborators are other tenants who have been granted access to manage this event.",
6
+ inputSchema: {
7
+ event_id: z.string().describe("The event ID"),
8
+ },
9
+ }, async (params) => {
10
+ try {
11
+ const res = await client.get(`/api/v1/manage/events/${params.event_id}/collaborators`);
12
+ return {
13
+ content: [
14
+ { type: "text", text: JSON.stringify(res.data, null, 2) },
15
+ ],
16
+ };
17
+ }
18
+ catch (err) {
19
+ if (err instanceof HieldApiError) {
20
+ return {
21
+ content: [
22
+ { type: "text", text: `Error [${err.code}]: ${err.message}` },
23
+ ],
24
+ isError: true,
25
+ };
26
+ }
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
32
+ },
33
+ ],
34
+ isError: true,
35
+ };
36
+ }
37
+ });
38
+ server.registerTool("hield_invite_collaborator", {
39
+ description: "Invite a collaborator to an event by email. Roles: 'owner' (full control), 'editor' (can edit event and manage registrations), 'viewer' (read-only access).",
40
+ inputSchema: {
41
+ event_id: z.string().describe("The event ID"),
42
+ email: z
43
+ .string()
44
+ .describe("Email address of the tenant to invite"),
45
+ role: z
46
+ .enum(["owner", "editor", "viewer"])
47
+ .describe("Role to assign: 'owner', 'editor', or 'viewer'"),
48
+ },
49
+ }, async (params) => {
50
+ try {
51
+ const res = await client.post(`/api/v1/manage/events/${params.event_id}/collaborators`, { email: params.email, role: params.role });
52
+ return {
53
+ content: [
54
+ { type: "text", text: JSON.stringify(res.data, null, 2) },
55
+ ],
56
+ };
57
+ }
58
+ catch (err) {
59
+ if (err instanceof HieldApiError) {
60
+ return {
61
+ content: [
62
+ { type: "text", text: `Error [${err.code}]: ${err.message}` },
63
+ ],
64
+ isError: true,
65
+ };
66
+ }
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
72
+ },
73
+ ],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ server.registerTool("hield_update_collaborator", {
79
+ description: "Update a collaborator's role on an event. Use this to promote or demote a collaborator's access level.",
80
+ inputSchema: {
81
+ event_id: z.string().describe("The event ID"),
82
+ collaborator_id: z
83
+ .string()
84
+ .describe("The collaborator ID to update"),
85
+ role: z
86
+ .enum(["owner", "editor", "viewer"])
87
+ .describe("New role: 'owner', 'editor', or 'viewer'"),
88
+ },
89
+ }, async (params) => {
90
+ try {
91
+ const res = await client.put(`/api/v1/manage/events/${params.event_id}/collaborators/${params.collaborator_id}`, { role: params.role });
92
+ return {
93
+ content: [
94
+ { type: "text", text: JSON.stringify(res.data, null, 2) },
95
+ ],
96
+ };
97
+ }
98
+ catch (err) {
99
+ if (err instanceof HieldApiError) {
100
+ return {
101
+ content: [
102
+ { type: "text", text: `Error [${err.code}]: ${err.message}` },
103
+ ],
104
+ isError: true,
105
+ };
106
+ }
107
+ return {
108
+ content: [
109
+ {
110
+ type: "text",
111
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
112
+ },
113
+ ],
114
+ isError: true,
115
+ };
116
+ }
117
+ });
118
+ server.registerTool("hield_remove_collaborator", {
119
+ description: "Remove a collaborator from an event. They will lose all access to this event immediately.",
120
+ inputSchema: {
121
+ event_id: z.string().describe("The event ID"),
122
+ collaborator_id: z
123
+ .string()
124
+ .describe("The collaborator ID to remove"),
125
+ },
126
+ }, async (params) => {
127
+ try {
128
+ const res = await client.delete(`/api/v1/manage/events/${params.event_id}/collaborators/${params.collaborator_id}`);
129
+ return {
130
+ content: [
131
+ { type: "text", text: JSON.stringify(res.data, null, 2) },
132
+ ],
133
+ };
134
+ }
135
+ catch (err) {
136
+ if (err instanceof HieldApiError) {
137
+ return {
138
+ content: [
139
+ { type: "text", text: `Error [${err.code}]: ${err.message}` },
140
+ ],
141
+ isError: true,
142
+ };
143
+ }
144
+ return {
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
149
+ },
150
+ ],
151
+ isError: true,
152
+ };
153
+ }
154
+ });
155
+ }
156
+ //# sourceMappingURL=collaborators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaborators.js","sourceRoot":"","sources":["../../src/tools/collaborators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { HieldClient } from "../client.js";
3
+ export declare function registerEventTools(server: McpServer, client: HieldClient): void;
4
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/tools/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAiB,MAAM,cAAc,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,QAkUxE"}