@hailer/mcp 0.0.1
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/.claude/commands/tool-builder.md +37 -0
- package/.claude/commands/ws-pull.md +44 -0
- package/.claude/settings.json +8 -0
- package/.claude/settings.local.json +49 -0
- package/.claude/skills/activity-api/SKILL.md +96 -0
- package/.claude/skills/activity-api/references/activity-endpoints.md +845 -0
- package/.claude/skills/add-app-member-skill/SKILL.md +977 -0
- package/.claude/skills/agent-building/SKILL.md +243 -0
- package/.claude/skills/agent-building/references/architecture-patterns.md +446 -0
- package/.claude/skills/agent-building/references/code-examples.md +587 -0
- package/.claude/skills/agent-building/references/implementation-guide.md +619 -0
- package/.claude/skills/app-api/SKILL.md +219 -0
- package/.claude/skills/app-api/references/app-endpoints.md +759 -0
- package/.claude/skills/building-hailer-apps-skill/SKILL.md +548 -0
- package/.claude/skills/create-app-skill/SKILL.md +1101 -0
- package/.claude/skills/create-insight-skill/SKILL.md +1317 -0
- package/.claude/skills/get-insight-data-skill/SKILL.md +1053 -0
- package/.claude/skills/hailer-api/SKILL.md +283 -0
- package/.claude/skills/hailer-api/references/activities.md +620 -0
- package/.claude/skills/hailer-api/references/authentication.md +216 -0
- package/.claude/skills/hailer-api/references/datasets.md +437 -0
- package/.claude/skills/hailer-api/references/files.md +301 -0
- package/.claude/skills/hailer-api/references/insights.md +469 -0
- package/.claude/skills/hailer-api/references/workflows.md +720 -0
- package/.claude/skills/hailer-api/references/workspaces-users.md +445 -0
- package/.claude/skills/insight-api/SKILL.md +185 -0
- package/.claude/skills/insight-api/references/insight-endpoints.md +514 -0
- package/.claude/skills/install-workflow-skill/SKILL.md +1056 -0
- package/.claude/skills/list-apps-skill/SKILL.md +1010 -0
- package/.claude/skills/list-workflows-minimal-skill/SKILL.md +992 -0
- package/.claude/skills/local-first-skill/SKILL.md +570 -0
- package/.claude/skills/mcp-tools/SKILL.md +419 -0
- package/.claude/skills/mcp-tools/references/api-endpoints.md +499 -0
- package/.claude/skills/mcp-tools/references/data-structures.md +554 -0
- package/.claude/skills/mcp-tools/references/implementation-patterns.md +717 -0
- package/.claude/skills/preview-insight-skill/SKILL.md +1290 -0
- package/.claude/skills/publish-hailer-app-skill/SKILL.md +453 -0
- package/.claude/skills/remove-app-member-skill/SKILL.md +671 -0
- package/.claude/skills/remove-app-skill/SKILL.md +985 -0
- package/.claude/skills/remove-insight-skill/SKILL.md +1011 -0
- package/.claude/skills/remove-workflow-skill/SKILL.md +920 -0
- package/.claude/skills/scaffold-hailer-app-skill/SKILL.md +1034 -0
- package/.claude/skills/skill-testing/README.md +137 -0
- package/.claude/skills/skill-testing/SKILL.md +348 -0
- package/.claude/skills/skill-testing/references/test-patterns.md +705 -0
- package/.claude/skills/skill-testing/references/testing-guide.md +603 -0
- package/.claude/skills/skill-testing/references/validation-checklist.md +537 -0
- package/.claude/skills/tool-builder/SKILL.md +328 -0
- package/.claude/skills/update-app-skill/SKILL.md +970 -0
- package/.claude/skills/update-workflow-field-skill/SKILL.md +1098 -0
- package/.env.example +81 -0
- package/.mcp.json +13 -0
- package/README.md +297 -0
- package/dist/app.d.ts +4 -0
- package/dist/app.js +74 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +5 -0
- package/dist/client/adaptive-documentation-bot.d.ts +108 -0
- package/dist/client/adaptive-documentation-bot.js +475 -0
- package/dist/client/adaptive-documentation-types.d.ts +66 -0
- package/dist/client/adaptive-documentation-types.js +9 -0
- package/dist/client/agent-activity-bot.d.ts +51 -0
- package/dist/client/agent-activity-bot.js +166 -0
- package/dist/client/agent-tracker.d.ts +499 -0
- package/dist/client/agent-tracker.js +659 -0
- package/dist/client/description-updater.d.ts +56 -0
- package/dist/client/description-updater.js +259 -0
- package/dist/client/log-parser.d.ts +72 -0
- package/dist/client/log-parser.js +387 -0
- package/dist/client/mcp-client.d.ts +50 -0
- package/dist/client/mcp-client.js +532 -0
- package/dist/client/message-processor.d.ts +35 -0
- package/dist/client/message-processor.js +352 -0
- package/dist/client/multi-bot-manager.d.ts +24 -0
- package/dist/client/multi-bot-manager.js +74 -0
- package/dist/client/providers/anthropic-provider.d.ts +19 -0
- package/dist/client/providers/anthropic-provider.js +631 -0
- package/dist/client/providers/llm-provider.d.ts +47 -0
- package/dist/client/providers/llm-provider.js +367 -0
- package/dist/client/providers/openai-provider.d.ts +23 -0
- package/dist/client/providers/openai-provider.js +621 -0
- package/dist/client/simple-llm-caller.d.ts +19 -0
- package/dist/client/simple-llm-caller.js +100 -0
- package/dist/client/skill-generator.d.ts +81 -0
- package/dist/client/skill-generator.js +386 -0
- package/dist/client/test-adaptive-bot.d.ts +9 -0
- package/dist/client/test-adaptive-bot.js +82 -0
- package/dist/client/token-pricing.d.ts +38 -0
- package/dist/client/token-pricing.js +127 -0
- package/dist/client/token-tracker.d.ts +232 -0
- package/dist/client/token-tracker.js +457 -0
- package/dist/client/token-usage-bot.d.ts +53 -0
- package/dist/client/token-usage-bot.js +153 -0
- package/dist/client/tool-executor.d.ts +69 -0
- package/dist/client/tool-executor.js +159 -0
- package/dist/client/tool-schema-loader.d.ts +60 -0
- package/dist/client/tool-schema-loader.js +178 -0
- package/dist/client/types.d.ts +69 -0
- package/dist/client/types.js +7 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.js +296 -0
- package/dist/core.d.ts +26 -0
- package/dist/core.js +147 -0
- package/dist/lib/context-manager.d.ts +111 -0
- package/dist/lib/context-manager.js +431 -0
- package/dist/lib/logger.d.ts +74 -0
- package/dist/lib/logger.js +277 -0
- package/dist/lib/materialize.d.ts +3 -0
- package/dist/lib/materialize.js +101 -0
- package/dist/lib/normalizedName.d.ts +7 -0
- package/dist/lib/normalizedName.js +48 -0
- package/dist/lib/prompt-length-manager.d.ts +81 -0
- package/dist/lib/prompt-length-manager.js +457 -0
- package/dist/lib/terminal-prompt.d.ts +9 -0
- package/dist/lib/terminal-prompt.js +108 -0
- package/dist/mcp/UserContextCache.d.ts +56 -0
- package/dist/mcp/UserContextCache.js +163 -0
- package/dist/mcp/auth.d.ts +2 -0
- package/dist/mcp/auth.js +29 -0
- package/dist/mcp/hailer-clients.d.ts +42 -0
- package/dist/mcp/hailer-clients.js +246 -0
- package/dist/mcp/signal-handler.d.ts +45 -0
- package/dist/mcp/signal-handler.js +317 -0
- package/dist/mcp/tool-registry.d.ts +100 -0
- package/dist/mcp/tool-registry.js +306 -0
- package/dist/mcp/tools/activity.d.ts +15 -0
- package/dist/mcp/tools/activity.js +955 -0
- package/dist/mcp/tools/app.d.ts +20 -0
- package/dist/mcp/tools/app.js +1488 -0
- package/dist/mcp/tools/discussion.d.ts +19 -0
- package/dist/mcp/tools/discussion.js +950 -0
- package/dist/mcp/tools/file.d.ts +15 -0
- package/dist/mcp/tools/file.js +119 -0
- package/dist/mcp/tools/insight.d.ts +17 -0
- package/dist/mcp/tools/insight.js +806 -0
- package/dist/mcp/tools/skill.d.ts +10 -0
- package/dist/mcp/tools/skill.js +279 -0
- package/dist/mcp/tools/user.d.ts +10 -0
- package/dist/mcp/tools/user.js +108 -0
- package/dist/mcp/tools/workflow-template.d.ts +19 -0
- package/dist/mcp/tools/workflow-template.js +822 -0
- package/dist/mcp/tools/workflow.d.ts +18 -0
- package/dist/mcp/tools/workflow.js +1362 -0
- package/dist/mcp/utils/api-errors.d.ts +45 -0
- package/dist/mcp/utils/api-errors.js +160 -0
- package/dist/mcp/utils/data-transformers.d.ts +102 -0
- package/dist/mcp/utils/data-transformers.js +194 -0
- package/dist/mcp/utils/file-upload.d.ts +33 -0
- package/dist/mcp/utils/file-upload.js +148 -0
- package/dist/mcp/utils/hailer-api-client.d.ts +120 -0
- package/dist/mcp/utils/hailer-api-client.js +323 -0
- package/dist/mcp/utils/index.d.ts +13 -0
- package/dist/mcp/utils/index.js +39 -0
- package/dist/mcp/utils/logger.d.ts +42 -0
- package/dist/mcp/utils/logger.js +103 -0
- package/dist/mcp/utils/types.d.ts +286 -0
- package/dist/mcp/utils/types.js +7 -0
- package/dist/mcp/workspace-cache.d.ts +42 -0
- package/dist/mcp/workspace-cache.js +97 -0
- package/dist/mcp-server.d.ts +42 -0
- package/dist/mcp-server.js +280 -0
- package/package.json +56 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,759 @@
|
|
|
1
|
+
# App API Endpoints Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for Hailer App API endpoints. Apps are custom web applications that extend Hailer workspace functionality.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
### Core App Management
|
|
8
|
+
- [v3.app.create](#v3appcreate) - Create new app
|
|
9
|
+
- [v3.app.list](#v3applist) - List all apps in workspace
|
|
10
|
+
- [v3.app.update](#v3appupdate) - Update existing app
|
|
11
|
+
- [v3.app.remove](#v3appremove) - Delete app
|
|
12
|
+
|
|
13
|
+
### App Permissions
|
|
14
|
+
- [v3.app.member.add](#v3appmemberadd) - Add member permissions
|
|
15
|
+
- [v3.app.member.remove](#v3appmemberremove) - Remove member permissions
|
|
16
|
+
|
|
17
|
+
### App Configuration
|
|
18
|
+
- [v3.app.config.update](#v3appconfigupdate) - Edit app configuration
|
|
19
|
+
|
|
20
|
+
### Marketplace Operations
|
|
21
|
+
- [v3.app.product.create](#v3appproductcreate) - Create marketplace product
|
|
22
|
+
- [v3.app.product.get](#v3appproductget) - Get product details
|
|
23
|
+
- [v3.app.product.getManifest](#v3appproductgetmanifest) - Get app manifest
|
|
24
|
+
- [v3.app.product.install](#v3appproductinstall) - Install marketplace app
|
|
25
|
+
- [v3.app.product.getInstalledVersion](#v3appproductgetinstalledversion) - Get installed version
|
|
26
|
+
- [v3.app.product.isProductInstalled](#v3appproductisproductinstalled) - Check installation
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Prerequisites
|
|
31
|
+
|
|
32
|
+
Before using Apps API:
|
|
33
|
+
1. Must have workspace administrator permissions for app creation
|
|
34
|
+
2. Understand difference between app entry (metadata) and app code
|
|
35
|
+
3. For development: Need app scaffolded with `@hailer/create-app`
|
|
36
|
+
4. For publishing: Need app built and manifest configured
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## v3.app.create
|
|
41
|
+
|
|
42
|
+
Create new app entry in Hailer workspace.
|
|
43
|
+
|
|
44
|
+
**Endpoint**: `POST /v3/app/create`
|
|
45
|
+
|
|
46
|
+
**Request Body**:
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"0": {
|
|
50
|
+
"cid": "workspaceId", // Optional workspace ID
|
|
51
|
+
"name": "string", // App name (required)
|
|
52
|
+
"description": "string", // App description
|
|
53
|
+
"url": "string", // App URL (empty for published apps)
|
|
54
|
+
"image": "imageId", // Optional app icon (24 char ObjectId)
|
|
55
|
+
"config": {} // Optional configuration object
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Parameters**:
|
|
61
|
+
- `name` (string, required): App display name
|
|
62
|
+
- `description` (string, optional): App description
|
|
63
|
+
- `url` (string, optional): App URL or empty for auto-generated
|
|
64
|
+
- `image` (string, optional): Image/icon ID (24 characters)
|
|
65
|
+
- `config` (object, optional): App configuration
|
|
66
|
+
- `cid` (string, optional): Workspace ID (defaults to current)
|
|
67
|
+
|
|
68
|
+
**Response** (success):
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"code": 0,
|
|
72
|
+
"msg": "App created successfully",
|
|
73
|
+
"details": {
|
|
74
|
+
"appId": "507f1f77bcf86cd799439011"
|
|
75
|
+
},
|
|
76
|
+
"debug": null
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Response** (error):
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"code": 403,
|
|
84
|
+
"msg": "Permission denied",
|
|
85
|
+
"details": {},
|
|
86
|
+
"debug": null
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Example Usage**:
|
|
91
|
+
|
|
92
|
+
Development App:
|
|
93
|
+
```javascript
|
|
94
|
+
v3.app.create({
|
|
95
|
+
name: 'Local Development',
|
|
96
|
+
description: 'App pointing to local server',
|
|
97
|
+
url: 'http://localhost:3000'
|
|
98
|
+
})
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Published App:
|
|
102
|
+
```javascript
|
|
103
|
+
v3.app.create({
|
|
104
|
+
name: 'Published App',
|
|
105
|
+
description: 'Production app',
|
|
106
|
+
url: '' // Empty for auto URL assignment
|
|
107
|
+
})
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Notes**:
|
|
111
|
+
- Only workspace administrators can create apps
|
|
112
|
+
- URL can be empty (Hailer will assign default publication URL)
|
|
113
|
+
- App icon must be uploaded first to get image ID
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## v3.app.list
|
|
118
|
+
|
|
119
|
+
List all apps in the current workspace.
|
|
120
|
+
|
|
121
|
+
**Endpoint**: `POST /v3/app/list`
|
|
122
|
+
|
|
123
|
+
**Request Body**:
|
|
124
|
+
```json
|
|
125
|
+
{}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Parameters**: None (uses current workspace context)
|
|
129
|
+
|
|
130
|
+
**Response** (success):
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"code": 0,
|
|
134
|
+
"msg": "Apps retrieved successfully",
|
|
135
|
+
"details": {
|
|
136
|
+
"apps": [
|
|
137
|
+
{
|
|
138
|
+
"_id": "507f1f77bcf86cd799439011",
|
|
139
|
+
"name": "My App",
|
|
140
|
+
"description": "Cool app",
|
|
141
|
+
"url": "http://localhost:3000",
|
|
142
|
+
"image": "imageId123",
|
|
143
|
+
"config": {},
|
|
144
|
+
"created": 1234567890,
|
|
145
|
+
"updated": 1234567890,
|
|
146
|
+
"creator": "userId123"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"debug": null
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Response** (error):
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"code": 403,
|
|
158
|
+
"msg": "Permission denied",
|
|
159
|
+
"details": {},
|
|
160
|
+
"debug": null
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Example Usage**:
|
|
165
|
+
```javascript
|
|
166
|
+
v3.app.list()
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Notes**:
|
|
170
|
+
- Returns apps user has access to (creator + admins + shared apps)
|
|
171
|
+
- Apps with permissions set may be visible to more users
|
|
172
|
+
- Empty array if no apps exist in workspace
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## v3.app.update
|
|
177
|
+
|
|
178
|
+
Update existing app properties.
|
|
179
|
+
|
|
180
|
+
**Endpoint**: `POST /v3/app/update`
|
|
181
|
+
|
|
182
|
+
**Request Body**:
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"0": "appId", // App ID (24 chars)
|
|
186
|
+
"1": {
|
|
187
|
+
"cid": "workspaceId", // Optional workspace ID
|
|
188
|
+
"name": "string", // Optional new name
|
|
189
|
+
"description": "string", // Optional new description
|
|
190
|
+
"url": "string", // Optional new URL
|
|
191
|
+
"image": "imageId", // Optional new icon
|
|
192
|
+
"config": {} // Optional new config
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Parameters**:
|
|
198
|
+
- `appId` (string, required): App ID to update
|
|
199
|
+
- Object with properties to update (all optional):
|
|
200
|
+
- `name`: New app name
|
|
201
|
+
- `description`: New description
|
|
202
|
+
- `url`: New URL
|
|
203
|
+
- `image`: New image ID
|
|
204
|
+
- `config`: New configuration
|
|
205
|
+
|
|
206
|
+
**Response** (success):
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"code": 0,
|
|
210
|
+
"msg": "App updated successfully",
|
|
211
|
+
"details": {},
|
|
212
|
+
"debug": null
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Response** (error - not found):
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"code": 403,
|
|
220
|
+
"msg": "App not found",
|
|
221
|
+
"details": {},
|
|
222
|
+
"debug": null
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Example Usage**:
|
|
227
|
+
|
|
228
|
+
Update name and description:
|
|
229
|
+
```javascript
|
|
230
|
+
v3.app.update(
|
|
231
|
+
'507f1f77bcf86cd799439011',
|
|
232
|
+
{
|
|
233
|
+
name: 'Updated App Name',
|
|
234
|
+
description: 'New description'
|
|
235
|
+
}
|
|
236
|
+
)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Change URL (switch from dev to prod):
|
|
240
|
+
```javascript
|
|
241
|
+
v3.app.update(
|
|
242
|
+
'507f1f77bcf86cd799439011',
|
|
243
|
+
{
|
|
244
|
+
url: 'https://apps.hailer.com/app/myapp'
|
|
245
|
+
}
|
|
246
|
+
)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Notes**:
|
|
250
|
+
- Only app creator or workspace admin can update
|
|
251
|
+
- Only specified properties are updated
|
|
252
|
+
- Empty URL switches to auto-generated publication URL
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## v3.app.remove
|
|
257
|
+
|
|
258
|
+
Delete app entry from workspace.
|
|
259
|
+
|
|
260
|
+
**Endpoint**: `POST /v3/app/remove`
|
|
261
|
+
|
|
262
|
+
**Request Body**:
|
|
263
|
+
```json
|
|
264
|
+
{
|
|
265
|
+
"0": "appId" // App ID (24 characters)
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Parameters**:
|
|
270
|
+
- `appId` (string, required): App ID to remove
|
|
271
|
+
|
|
272
|
+
**Response** (success):
|
|
273
|
+
```json
|
|
274
|
+
{
|
|
275
|
+
"code": 0,
|
|
276
|
+
"msg": "App removed successfully",
|
|
277
|
+
"details": {},
|
|
278
|
+
"debug": null
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Response** (error):
|
|
283
|
+
```json
|
|
284
|
+
{
|
|
285
|
+
"code": 403,
|
|
286
|
+
"msg": "App not found or permission denied",
|
|
287
|
+
"details": {},
|
|
288
|
+
"debug": null
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Example Usage**:
|
|
293
|
+
```javascript
|
|
294
|
+
v3.app.remove('507f1f77bcf86cd799439011')
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
**Notes**:
|
|
298
|
+
- Only app creator or workspace admin can remove
|
|
299
|
+
- Removes app entry (metadata) only, not the app code
|
|
300
|
+
- Published app code remains on server even after entry removal
|
|
301
|
+
- Permanent operation, cannot be undone
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## v3.app.member.add
|
|
306
|
+
|
|
307
|
+
Add member permissions to app (grant access).
|
|
308
|
+
|
|
309
|
+
**Endpoint**: `POST /v3/app/member/add`
|
|
310
|
+
|
|
311
|
+
**Request Body**:
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"0": "appId", // App ID (24 chars)
|
|
315
|
+
"1": "member" // Member identifier
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Parameters**:
|
|
320
|
+
- `appId` (string, required): App ID
|
|
321
|
+
- `member` (string, required): Member identifier in format:
|
|
322
|
+
- `network_<networkId>` - Entire workspace
|
|
323
|
+
- `team_<teamId>` - Specific team
|
|
324
|
+
- `user_<userId>` - Individual user
|
|
325
|
+
- `group_<groupId>` - Custom group
|
|
326
|
+
|
|
327
|
+
**Response** (success):
|
|
328
|
+
```json
|
|
329
|
+
{
|
|
330
|
+
"code": 0,
|
|
331
|
+
"msg": "Member added successfully",
|
|
332
|
+
"details": {},
|
|
333
|
+
"debug": null
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Response** (error):
|
|
338
|
+
```json
|
|
339
|
+
{
|
|
340
|
+
"code": 403,
|
|
341
|
+
"msg": "Permission denied or invalid member",
|
|
342
|
+
"details": {},
|
|
343
|
+
"debug": null
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Example Usage**:
|
|
348
|
+
|
|
349
|
+
Share with entire workspace:
|
|
350
|
+
```javascript
|
|
351
|
+
v3.app.member.add(
|
|
352
|
+
'507f1f77bcf86cd799439011',
|
|
353
|
+
'network_68446c045b30685f67c6fc8c'
|
|
354
|
+
)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Share with specific team:
|
|
358
|
+
```javascript
|
|
359
|
+
v3.app.member.add(
|
|
360
|
+
'507f1f77bcf86cd799439011',
|
|
361
|
+
'team_507f1f77bcf86cd799439012'
|
|
362
|
+
)
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
Share with individual user:
|
|
366
|
+
```javascript
|
|
367
|
+
v3.app.member.add(
|
|
368
|
+
'507f1f77bcf86cd799439011',
|
|
369
|
+
'user_507f1f77bcf86cd799439013'
|
|
370
|
+
)
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Notes**:
|
|
374
|
+
- Only app creator or workspace admin can manage permissions
|
|
375
|
+
- Adding workspace grants access to all workspace members
|
|
376
|
+
- Members can see and use the app once permission granted
|
|
377
|
+
- Duplicate additions are ignored (no error)
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## v3.app.member.remove
|
|
382
|
+
|
|
383
|
+
Remove member permissions from app (revoke access).
|
|
384
|
+
|
|
385
|
+
**Endpoint**: `POST /v3/app/member/remove`
|
|
386
|
+
|
|
387
|
+
**Request Body**:
|
|
388
|
+
```json
|
|
389
|
+
{
|
|
390
|
+
"0": "appId", // App ID (24 chars)
|
|
391
|
+
"1": "member" // Member identifier
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Parameters**:
|
|
396
|
+
- `appId` (string, required): App ID
|
|
397
|
+
- `member` (string, required): Member identifier (same format as add)
|
|
398
|
+
|
|
399
|
+
**Response** (success):
|
|
400
|
+
```json
|
|
401
|
+
{
|
|
402
|
+
"code": 0,
|
|
403
|
+
"msg": "Member removed successfully",
|
|
404
|
+
"details": {},
|
|
405
|
+
"debug": null
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Response** (error):
|
|
410
|
+
```json
|
|
411
|
+
{
|
|
412
|
+
"code": 403,
|
|
413
|
+
"msg": "Permission denied",
|
|
414
|
+
"details": {},
|
|
415
|
+
"debug": null
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Example Usage**:
|
|
420
|
+
```javascript
|
|
421
|
+
v3.app.member.remove(
|
|
422
|
+
'507f1f77bcf86cd799439011',
|
|
423
|
+
'team_507f1f77bcf86cd799439012'
|
|
424
|
+
)
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**Notes**:
|
|
428
|
+
- Only app creator or workspace admin can remove permissions
|
|
429
|
+
- Removing workspace revokes access from all workspace members
|
|
430
|
+
- Creator and admins always retain access
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## v3.app.config.update
|
|
435
|
+
|
|
436
|
+
Edit app configuration.
|
|
437
|
+
|
|
438
|
+
**Endpoint**: `POST /v3/app/config/update`
|
|
439
|
+
|
|
440
|
+
**Request Body**:
|
|
441
|
+
```json
|
|
442
|
+
{
|
|
443
|
+
"0": "appId", // App ID (24 chars)
|
|
444
|
+
"1": {
|
|
445
|
+
"fields": {} // Configuration fields
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Parameters**:
|
|
451
|
+
- `appId` (string, required): App ID
|
|
452
|
+
- Configuration object with `fields` property
|
|
453
|
+
|
|
454
|
+
**Response** (success):
|
|
455
|
+
```json
|
|
456
|
+
{
|
|
457
|
+
"code": 0,
|
|
458
|
+
"msg": "Config updated successfully",
|
|
459
|
+
"details": {},
|
|
460
|
+
"debug": null
|
|
461
|
+
}
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Example Usage**:
|
|
465
|
+
```javascript
|
|
466
|
+
v3.app.config.update(
|
|
467
|
+
'507f1f77bcf86cd799439011',
|
|
468
|
+
{
|
|
469
|
+
fields: {
|
|
470
|
+
apiKey: 'secret-key',
|
|
471
|
+
maxItems: 100
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
)
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
**Notes**:
|
|
478
|
+
- Configuration structure depends on app requirements
|
|
479
|
+
- Used for app-specific settings
|
|
480
|
+
- Not exposed in app UI by default
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
## v3.app.product.create
|
|
485
|
+
|
|
486
|
+
Create marketplace product listing.
|
|
487
|
+
|
|
488
|
+
**Endpoint**: `POST /v3.app.product.create`
|
|
489
|
+
|
|
490
|
+
**Request Body**:
|
|
491
|
+
```json
|
|
492
|
+
{
|
|
493
|
+
"0": {
|
|
494
|
+
"name": "string" // Product name
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Response**:
|
|
500
|
+
```json
|
|
501
|
+
{
|
|
502
|
+
"code": 0,
|
|
503
|
+
"msg": "Product created",
|
|
504
|
+
"details": {
|
|
505
|
+
"productId": "507f1f77bcf86cd799439011"
|
|
506
|
+
},
|
|
507
|
+
"debug": null
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
**Example Usage**:
|
|
512
|
+
```javascript
|
|
513
|
+
v3.app.product.create({
|
|
514
|
+
name: 'Task Manager Pro'
|
|
515
|
+
})
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## v3.app.product.get
|
|
521
|
+
|
|
522
|
+
Get marketplace product details.
|
|
523
|
+
|
|
524
|
+
**Endpoint**: `POST /v3/app/product/get`
|
|
525
|
+
|
|
526
|
+
**Request Body**:
|
|
527
|
+
```json
|
|
528
|
+
{
|
|
529
|
+
"0": "productId" // Product ID in Hailer market
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
**Response**:
|
|
534
|
+
```json
|
|
535
|
+
{
|
|
536
|
+
"code": 0,
|
|
537
|
+
"msg": "Product retrieved",
|
|
538
|
+
"details": {
|
|
539
|
+
"product": {
|
|
540
|
+
"_id": "productId",
|
|
541
|
+
"name": "Task Manager Pro",
|
|
542
|
+
"description": "...",
|
|
543
|
+
"version": "1.0.0"
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
"debug": null
|
|
547
|
+
}
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
## v3.app.product.getManifest
|
|
553
|
+
|
|
554
|
+
Get app manifest from marketplace product.
|
|
555
|
+
|
|
556
|
+
**Endpoint**: `POST /v3/app/product/getManifest`
|
|
557
|
+
|
|
558
|
+
**Request Body**:
|
|
559
|
+
```json
|
|
560
|
+
{
|
|
561
|
+
"0": "productId"
|
|
562
|
+
}
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
**Response**:
|
|
566
|
+
```json
|
|
567
|
+
{
|
|
568
|
+
"code": 0,
|
|
569
|
+
"msg": "Manifest retrieved",
|
|
570
|
+
"details": {
|
|
571
|
+
"manifest": {
|
|
572
|
+
"name": "Task Manager",
|
|
573
|
+
"version": "1.0.0",
|
|
574
|
+
"permissions": []
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
"debug": null
|
|
578
|
+
}
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
## v3.app.product.install
|
|
584
|
+
|
|
585
|
+
Install marketplace app into workspace.
|
|
586
|
+
|
|
587
|
+
**Endpoint**: `POST /v3/app/product/install`
|
|
588
|
+
|
|
589
|
+
**Request Body**:
|
|
590
|
+
```json
|
|
591
|
+
{
|
|
592
|
+
"0": "productId", // Product ID in market
|
|
593
|
+
"1": "workspaceId" // Target workspace
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
**Response**:
|
|
598
|
+
```json
|
|
599
|
+
{
|
|
600
|
+
"code": 0,
|
|
601
|
+
"msg": "App installed successfully",
|
|
602
|
+
"details": {
|
|
603
|
+
"appId": "507f1f77bcf86cd799439011"
|
|
604
|
+
},
|
|
605
|
+
"debug": null
|
|
606
|
+
}
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
**Example Usage**:
|
|
610
|
+
```javascript
|
|
611
|
+
v3.app.product.install(
|
|
612
|
+
'marketProductId123',
|
|
613
|
+
'68446c045b30685f67c6fc8c'
|
|
614
|
+
)
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
## v3.app.product.getInstalledVersion
|
|
620
|
+
|
|
621
|
+
Get installed version of marketplace app.
|
|
622
|
+
|
|
623
|
+
**Endpoint**: `POST /v3/app/product/getInstalledVersion`
|
|
624
|
+
|
|
625
|
+
**Request Body**:
|
|
626
|
+
```json
|
|
627
|
+
{
|
|
628
|
+
"0": "productId"
|
|
629
|
+
}
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
**Response**:
|
|
633
|
+
```json
|
|
634
|
+
{
|
|
635
|
+
"code": 0,
|
|
636
|
+
"msg": "Version retrieved",
|
|
637
|
+
"details": {
|
|
638
|
+
"version": "1.0.0"
|
|
639
|
+
},
|
|
640
|
+
"debug": null
|
|
641
|
+
}
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
---
|
|
645
|
+
|
|
646
|
+
## v3.app.product.isProductInstalled
|
|
647
|
+
|
|
648
|
+
Check if marketplace app is installed in workspace.
|
|
649
|
+
|
|
650
|
+
**Endpoint**: `POST /v3/app/product/isProductInstalled`
|
|
651
|
+
|
|
652
|
+
**Request Body**:
|
|
653
|
+
```json
|
|
654
|
+
{
|
|
655
|
+
"0": "productId",
|
|
656
|
+
"1": "workspaceId"
|
|
657
|
+
}
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
**Response**:
|
|
661
|
+
```json
|
|
662
|
+
{
|
|
663
|
+
"code": 0,
|
|
664
|
+
"msg": "Check complete",
|
|
665
|
+
"details": {
|
|
666
|
+
"installed": true,
|
|
667
|
+
"appId": "507f1f77bcf86cd799439011"
|
|
668
|
+
},
|
|
669
|
+
"debug": null
|
|
670
|
+
}
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
## Common Response Format
|
|
676
|
+
|
|
677
|
+
All endpoints return this format:
|
|
678
|
+
|
|
679
|
+
```json
|
|
680
|
+
{
|
|
681
|
+
"code": 0, // 0 = success, 403 = error
|
|
682
|
+
"msg": "string", // Success/error message
|
|
683
|
+
"details": {}, // Response data
|
|
684
|
+
"debug": null // Optional debug info
|
|
685
|
+
}
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## Error Handling
|
|
691
|
+
|
|
692
|
+
**Common Error Codes:**
|
|
693
|
+
- `403` - Permission denied (not admin/creator)
|
|
694
|
+
- `403` - App not found
|
|
695
|
+
- `403` - Invalid member format
|
|
696
|
+
- `403` - Invalid app configuration
|
|
697
|
+
|
|
698
|
+
**Error Categories:**
|
|
699
|
+
|
|
700
|
+
**Permission Errors**:
|
|
701
|
+
- User is not app creator or workspace admin
|
|
702
|
+
- User doesn't have access to workspace
|
|
703
|
+
|
|
704
|
+
**Not Found Errors**:
|
|
705
|
+
- App ID doesn't exist
|
|
706
|
+
- Product ID invalid
|
|
707
|
+
|
|
708
|
+
**Validation Errors**:
|
|
709
|
+
- Invalid app structure
|
|
710
|
+
- Missing required fields
|
|
711
|
+
- Invalid member format (must be network_*, team_*, user_*, group_*)
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Permissions Summary
|
|
716
|
+
|
|
717
|
+
### Can Manage Apps:
|
|
718
|
+
✅ Workspace administrators
|
|
719
|
+
✅ App creators
|
|
720
|
+
|
|
721
|
+
### Can Use Apps:
|
|
722
|
+
✅ Creator
|
|
723
|
+
✅ Workspace administrators
|
|
724
|
+
✅ Members with explicit permissions
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
## Development Workflow
|
|
729
|
+
|
|
730
|
+
1. **Create Dev App Entry** → `v3.app.create` with localhost URL
|
|
731
|
+
2. **Scaffold App** → `npm create @hailer/app@latest`
|
|
732
|
+
3. **Develop Locally** → `npm run dev`
|
|
733
|
+
4. **Create Prod App Entry** → `v3.app.create` with empty URL
|
|
734
|
+
5. **Configure Manifest** → Set appId in manifest.json
|
|
735
|
+
6. **Publish** → `npm run publish-production`
|
|
736
|
+
7. **Manage Permissions** → `v3.app.member.add` to share
|
|
737
|
+
|
|
738
|
+
---
|
|
739
|
+
|
|
740
|
+
## Best Practices
|
|
741
|
+
|
|
742
|
+
1. **Use descriptive names** - Clear app names help users identify purpose
|
|
743
|
+
2. **Set descriptions** - Explain what the app does
|
|
744
|
+
3. **Manage permissions carefully** - Don't over-share sensitive apps
|
|
745
|
+
4. **Use dev apps for development** - Keep localhost apps separate from production
|
|
746
|
+
5. **Empty URL for production** - Let Hailer manage production URLs
|
|
747
|
+
6. **Version your apps** - Track changes in manifest.json
|
|
748
|
+
7. **Test before publishing** - Always test in dev app first
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
## Next Steps
|
|
753
|
+
|
|
754
|
+
When building App MCP tools:
|
|
755
|
+
1. **Check permissions**: Verify user is admin or creator
|
|
756
|
+
2. **Handle both app types**: Support dev (with URL) and prod (empty URL)
|
|
757
|
+
3. **Member management**: Support all member formats (network, team, user, group)
|
|
758
|
+
4. **Clear feedback**: Show app ID, URL, and permissions
|
|
759
|
+
5. **Error handling**: Handle permission, not found, and validation errors
|