@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.
- package/README.md +135 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +51 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/collaborators.d.ts +4 -0
- package/dist/tools/collaborators.d.ts.map +1 -0
- package/dist/tools/collaborators.js +156 -0
- package/dist/tools/collaborators.js.map +1 -0
- package/dist/tools/events.d.ts +4 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +282 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/fields.d.ts +4 -0
- package/dist/tools/fields.d.ts.map +1 -0
- package/dist/tools/fields.js +197 -0
- package/dist/tools/fields.js.map +1 -0
- package/dist/tools/public.d.ts +4 -0
- package/dist/tools/public.d.ts.map +1 -0
- package/dist/tools/public.js +164 -0
- package/dist/tools/public.js.map +1 -0
- package/dist/tools/registrations.d.ts +4 -0
- package/dist/tools/registrations.d.ts.map +1 -0
- package/dist/tools/registrations.js +160 -0
- package/dist/tools/registrations.js.map +1 -0
- package/dist/tools/stats.d.ts +4 -0
- package/dist/tools/stats.d.ts.map +1 -0
- package/dist/tools/stats.js +71 -0
- package/dist/tools/stats.js.map +1 -0
- package/dist/tools/tenant.d.ts +4 -0
- package/dist/tools/tenant.d.ts.map +1 -0
- package/dist/tools/tenant.js +109 -0
- package/dist/tools/tenant.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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
|
package/dist/client.d.ts
ADDED
|
@@ -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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|