@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.
Files changed (163) hide show
  1. package/.claude/commands/tool-builder.md +37 -0
  2. package/.claude/commands/ws-pull.md +44 -0
  3. package/.claude/settings.json +8 -0
  4. package/.claude/settings.local.json +49 -0
  5. package/.claude/skills/activity-api/SKILL.md +96 -0
  6. package/.claude/skills/activity-api/references/activity-endpoints.md +845 -0
  7. package/.claude/skills/add-app-member-skill/SKILL.md +977 -0
  8. package/.claude/skills/agent-building/SKILL.md +243 -0
  9. package/.claude/skills/agent-building/references/architecture-patterns.md +446 -0
  10. package/.claude/skills/agent-building/references/code-examples.md +587 -0
  11. package/.claude/skills/agent-building/references/implementation-guide.md +619 -0
  12. package/.claude/skills/app-api/SKILL.md +219 -0
  13. package/.claude/skills/app-api/references/app-endpoints.md +759 -0
  14. package/.claude/skills/building-hailer-apps-skill/SKILL.md +548 -0
  15. package/.claude/skills/create-app-skill/SKILL.md +1101 -0
  16. package/.claude/skills/create-insight-skill/SKILL.md +1317 -0
  17. package/.claude/skills/get-insight-data-skill/SKILL.md +1053 -0
  18. package/.claude/skills/hailer-api/SKILL.md +283 -0
  19. package/.claude/skills/hailer-api/references/activities.md +620 -0
  20. package/.claude/skills/hailer-api/references/authentication.md +216 -0
  21. package/.claude/skills/hailer-api/references/datasets.md +437 -0
  22. package/.claude/skills/hailer-api/references/files.md +301 -0
  23. package/.claude/skills/hailer-api/references/insights.md +469 -0
  24. package/.claude/skills/hailer-api/references/workflows.md +720 -0
  25. package/.claude/skills/hailer-api/references/workspaces-users.md +445 -0
  26. package/.claude/skills/insight-api/SKILL.md +185 -0
  27. package/.claude/skills/insight-api/references/insight-endpoints.md +514 -0
  28. package/.claude/skills/install-workflow-skill/SKILL.md +1056 -0
  29. package/.claude/skills/list-apps-skill/SKILL.md +1010 -0
  30. package/.claude/skills/list-workflows-minimal-skill/SKILL.md +992 -0
  31. package/.claude/skills/local-first-skill/SKILL.md +570 -0
  32. package/.claude/skills/mcp-tools/SKILL.md +419 -0
  33. package/.claude/skills/mcp-tools/references/api-endpoints.md +499 -0
  34. package/.claude/skills/mcp-tools/references/data-structures.md +554 -0
  35. package/.claude/skills/mcp-tools/references/implementation-patterns.md +717 -0
  36. package/.claude/skills/preview-insight-skill/SKILL.md +1290 -0
  37. package/.claude/skills/publish-hailer-app-skill/SKILL.md +453 -0
  38. package/.claude/skills/remove-app-member-skill/SKILL.md +671 -0
  39. package/.claude/skills/remove-app-skill/SKILL.md +985 -0
  40. package/.claude/skills/remove-insight-skill/SKILL.md +1011 -0
  41. package/.claude/skills/remove-workflow-skill/SKILL.md +920 -0
  42. package/.claude/skills/scaffold-hailer-app-skill/SKILL.md +1034 -0
  43. package/.claude/skills/skill-testing/README.md +137 -0
  44. package/.claude/skills/skill-testing/SKILL.md +348 -0
  45. package/.claude/skills/skill-testing/references/test-patterns.md +705 -0
  46. package/.claude/skills/skill-testing/references/testing-guide.md +603 -0
  47. package/.claude/skills/skill-testing/references/validation-checklist.md +537 -0
  48. package/.claude/skills/tool-builder/SKILL.md +328 -0
  49. package/.claude/skills/update-app-skill/SKILL.md +970 -0
  50. package/.claude/skills/update-workflow-field-skill/SKILL.md +1098 -0
  51. package/.env.example +81 -0
  52. package/.mcp.json +13 -0
  53. package/README.md +297 -0
  54. package/dist/app.d.ts +4 -0
  55. package/dist/app.js +74 -0
  56. package/dist/cli.d.ts +3 -0
  57. package/dist/cli.js +5 -0
  58. package/dist/client/adaptive-documentation-bot.d.ts +108 -0
  59. package/dist/client/adaptive-documentation-bot.js +475 -0
  60. package/dist/client/adaptive-documentation-types.d.ts +66 -0
  61. package/dist/client/adaptive-documentation-types.js +9 -0
  62. package/dist/client/agent-activity-bot.d.ts +51 -0
  63. package/dist/client/agent-activity-bot.js +166 -0
  64. package/dist/client/agent-tracker.d.ts +499 -0
  65. package/dist/client/agent-tracker.js +659 -0
  66. package/dist/client/description-updater.d.ts +56 -0
  67. package/dist/client/description-updater.js +259 -0
  68. package/dist/client/log-parser.d.ts +72 -0
  69. package/dist/client/log-parser.js +387 -0
  70. package/dist/client/mcp-client.d.ts +50 -0
  71. package/dist/client/mcp-client.js +532 -0
  72. package/dist/client/message-processor.d.ts +35 -0
  73. package/dist/client/message-processor.js +352 -0
  74. package/dist/client/multi-bot-manager.d.ts +24 -0
  75. package/dist/client/multi-bot-manager.js +74 -0
  76. package/dist/client/providers/anthropic-provider.d.ts +19 -0
  77. package/dist/client/providers/anthropic-provider.js +631 -0
  78. package/dist/client/providers/llm-provider.d.ts +47 -0
  79. package/dist/client/providers/llm-provider.js +367 -0
  80. package/dist/client/providers/openai-provider.d.ts +23 -0
  81. package/dist/client/providers/openai-provider.js +621 -0
  82. package/dist/client/simple-llm-caller.d.ts +19 -0
  83. package/dist/client/simple-llm-caller.js +100 -0
  84. package/dist/client/skill-generator.d.ts +81 -0
  85. package/dist/client/skill-generator.js +386 -0
  86. package/dist/client/test-adaptive-bot.d.ts +9 -0
  87. package/dist/client/test-adaptive-bot.js +82 -0
  88. package/dist/client/token-pricing.d.ts +38 -0
  89. package/dist/client/token-pricing.js +127 -0
  90. package/dist/client/token-tracker.d.ts +232 -0
  91. package/dist/client/token-tracker.js +457 -0
  92. package/dist/client/token-usage-bot.d.ts +53 -0
  93. package/dist/client/token-usage-bot.js +153 -0
  94. package/dist/client/tool-executor.d.ts +69 -0
  95. package/dist/client/tool-executor.js +159 -0
  96. package/dist/client/tool-schema-loader.d.ts +60 -0
  97. package/dist/client/tool-schema-loader.js +178 -0
  98. package/dist/client/types.d.ts +69 -0
  99. package/dist/client/types.js +7 -0
  100. package/dist/config.d.ts +162 -0
  101. package/dist/config.js +296 -0
  102. package/dist/core.d.ts +26 -0
  103. package/dist/core.js +147 -0
  104. package/dist/lib/context-manager.d.ts +111 -0
  105. package/dist/lib/context-manager.js +431 -0
  106. package/dist/lib/logger.d.ts +74 -0
  107. package/dist/lib/logger.js +277 -0
  108. package/dist/lib/materialize.d.ts +3 -0
  109. package/dist/lib/materialize.js +101 -0
  110. package/dist/lib/normalizedName.d.ts +7 -0
  111. package/dist/lib/normalizedName.js +48 -0
  112. package/dist/lib/prompt-length-manager.d.ts +81 -0
  113. package/dist/lib/prompt-length-manager.js +457 -0
  114. package/dist/lib/terminal-prompt.d.ts +9 -0
  115. package/dist/lib/terminal-prompt.js +108 -0
  116. package/dist/mcp/UserContextCache.d.ts +56 -0
  117. package/dist/mcp/UserContextCache.js +163 -0
  118. package/dist/mcp/auth.d.ts +2 -0
  119. package/dist/mcp/auth.js +29 -0
  120. package/dist/mcp/hailer-clients.d.ts +42 -0
  121. package/dist/mcp/hailer-clients.js +246 -0
  122. package/dist/mcp/signal-handler.d.ts +45 -0
  123. package/dist/mcp/signal-handler.js +317 -0
  124. package/dist/mcp/tool-registry.d.ts +100 -0
  125. package/dist/mcp/tool-registry.js +306 -0
  126. package/dist/mcp/tools/activity.d.ts +15 -0
  127. package/dist/mcp/tools/activity.js +955 -0
  128. package/dist/mcp/tools/app.d.ts +20 -0
  129. package/dist/mcp/tools/app.js +1488 -0
  130. package/dist/mcp/tools/discussion.d.ts +19 -0
  131. package/dist/mcp/tools/discussion.js +950 -0
  132. package/dist/mcp/tools/file.d.ts +15 -0
  133. package/dist/mcp/tools/file.js +119 -0
  134. package/dist/mcp/tools/insight.d.ts +17 -0
  135. package/dist/mcp/tools/insight.js +806 -0
  136. package/dist/mcp/tools/skill.d.ts +10 -0
  137. package/dist/mcp/tools/skill.js +279 -0
  138. package/dist/mcp/tools/user.d.ts +10 -0
  139. package/dist/mcp/tools/user.js +108 -0
  140. package/dist/mcp/tools/workflow-template.d.ts +19 -0
  141. package/dist/mcp/tools/workflow-template.js +822 -0
  142. package/dist/mcp/tools/workflow.d.ts +18 -0
  143. package/dist/mcp/tools/workflow.js +1362 -0
  144. package/dist/mcp/utils/api-errors.d.ts +45 -0
  145. package/dist/mcp/utils/api-errors.js +160 -0
  146. package/dist/mcp/utils/data-transformers.d.ts +102 -0
  147. package/dist/mcp/utils/data-transformers.js +194 -0
  148. package/dist/mcp/utils/file-upload.d.ts +33 -0
  149. package/dist/mcp/utils/file-upload.js +148 -0
  150. package/dist/mcp/utils/hailer-api-client.d.ts +120 -0
  151. package/dist/mcp/utils/hailer-api-client.js +323 -0
  152. package/dist/mcp/utils/index.d.ts +13 -0
  153. package/dist/mcp/utils/index.js +39 -0
  154. package/dist/mcp/utils/logger.d.ts +42 -0
  155. package/dist/mcp/utils/logger.js +103 -0
  156. package/dist/mcp/utils/types.d.ts +286 -0
  157. package/dist/mcp/utils/types.js +7 -0
  158. package/dist/mcp/workspace-cache.d.ts +42 -0
  159. package/dist/mcp/workspace-cache.js +97 -0
  160. package/dist/mcp-server.d.ts +42 -0
  161. package/dist/mcp-server.js +280 -0
  162. package/package.json +56 -0
  163. 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