@tokenlabai/mcp-server 0.6.22 → 0.6.24
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 +16 -8
- package/contract/mcp-overlay.json +213 -34
- package/contract/openapi.json +2115 -588
- package/generated/public-contract.json +25 -11
- package/generated/tools.json +717 -12
- package/llms-install.md +1 -1
- package/package.json +2 -2
- package/scripts/generate-contract.mjs +9 -1
- package/src/index.js +15 -3
- package/src/tool-schema.js +2 -2
package/README.md
CHANGED
|
@@ -4,21 +4,21 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@tokenlabai/mcp-server)
|
|
5
5
|
[](https://www.npmjs.com/package/@tokenlabai/mcp-server)
|
|
6
6
|
|
|
7
|
-
OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, multimodal generation, async tasks, files, embeddings, rerank, translation, resources, prompts, and the broader developer API.
|
|
7
|
+
OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, typed decisions, multimodal generation, async tasks, files, embeddings, rerank, translation, resources, prompts, and the broader developer API.
|
|
8
8
|
|
|
9
|
-
It exposes public catalog tools for agents that need to choose models, inspect supported request formats, or compare pricing before calling TokenLab APIs. Credentialed tools cover text inference, image generation and editing, video, music, 3D, async task polling, embeddings, rerank, and text translation.
|
|
9
|
+
It exposes public catalog tools for agents that need to choose models, inspect supported request formats, or compare pricing before calling TokenLab APIs. Credentialed tools cover text inference, image generation and editing, video, music, 3D, async task polling, embeddings, rerank, typed decisions, and text translation.
|
|
10
10
|
|
|
11
11
|
## Generated Tool Profiles
|
|
12
12
|
|
|
13
|
-
The checked-in `generated/tools.json` manifest is generated from TokenLab's public OpenAPI document plus the small MCP-only overlay in `contract/mcp-overlay.json`. Version 0.6.
|
|
13
|
+
The checked-in `generated/tools.json` manifest is generated from TokenLab's public OpenAPI document plus the small MCP-only overlay in `contract/mcp-overlay.json`. Version 0.6.24 generates 87 endpoint tools; with the two MCP-only composite discovery tools, the full profile returns 89 tools from `tools/list`.
|
|
14
14
|
|
|
15
15
|
| Profile | Endpoint tools | Total registered tools | Model-facing schema | Coverage |
|
|
16
16
|
| --- | ---: | ---: | --- | --- |
|
|
17
17
|
| `catalog` | 4 | 6 | Exact | Public model discovery and pricing only; no API key required |
|
|
18
|
-
| `core` (default) |
|
|
19
|
-
| `full` |
|
|
18
|
+
| `core` (default) | 30 | 32 | Portable | Catalog and pricing; Chat Completions, Responses, Anthropic Messages, Gemini generateContent; System One typed decisions; images, video, music, 3D, speech and transcription; async tasks; files; embeddings, rerank, and translation |
|
|
19
|
+
| `full` | 87 | 89 | Portable | Every allowlisted developer API operation in the checked-in OpenAPI snapshot, including core plus response lifecycle, batches, worlds, and native model discovery |
|
|
20
20
|
|
|
21
|
-
The total registered count is the number returned by `tools/list`. All profiles include `compare_models` and `get_api_overview`, producing totals of 6,
|
|
21
|
+
The total registered count is the number returned by `tools/list`. All profiles include `compare_models` and `get_api_overview`, producing totals of 6, 32, and 89 tools. Realtime and streaming-only operations are excluded because stdio MCP tool calls return one final result. API operations that accept `stream` fix it internally to `false` without exposing a boolean `const` to provider adapters, and the Gemini query-string API key is intentionally hidden from tool arguments.
|
|
22
22
|
|
|
23
23
|
The portable projection keeps every top-level argument but bounds deeply nested model-facing shapes. The server still validates calls against the complete generated OpenAPI schema before issuing an API request. Compatibility budgets keep `core` at no more than 60 KB and depth 8, and `full` at no more than 100 KB and depth 8 for the complete `tools/list` response. Tests also run the full profile through the Google AI SDK version used by the observed OpenCode/Gemini failure.
|
|
24
24
|
|
|
@@ -105,7 +105,7 @@ Use `delivery.mode` instead of assuming all image requests are synchronous. For
|
|
|
105
105
|
## Environment
|
|
106
106
|
|
|
107
107
|
- `TOKENLAB_API_BASE`: optional, defaults to `https://api.tokenlab.sh`
|
|
108
|
-
- `TOKENLAB_API_KEY`: optional; required for text inference, multimodal generation, async task, embedding, rerank, and translation tools
|
|
108
|
+
- `TOKENLAB_API_KEY`: optional; required for text inference, multimodal generation, async task, embedding, rerank, decision, and translation tools
|
|
109
109
|
- `TOKENLAB_MCP_TOOL_PROFILE`: optional, `catalog`, `core` (default), or `full`
|
|
110
110
|
- `TOKENLAB_MCP_SCHEMA_MODE`: optional, `portable`, `exact`, or `strict`; defaults to the selected profile's tested mode
|
|
111
111
|
- `TOKENLAB_REQUEST_TIMEOUT_MS`: optional request timeout in milliseconds, defaults to `120000`
|
|
@@ -134,7 +134,7 @@ This repository includes `server.json` for the official MCP Registry.
|
|
|
134
134
|
|
|
135
135
|
Release metadata:
|
|
136
136
|
|
|
137
|
-
- npm package: `@tokenlabai/mcp-server@0.6.
|
|
137
|
+
- npm package: `@tokenlabai/mcp-server@0.6.24`
|
|
138
138
|
- MCP registry name: `io.github.hedging8563/tokenlab`
|
|
139
139
|
- `package.json.mcpName`: `io.github.hedging8563/tokenlab`
|
|
140
140
|
|
|
@@ -157,3 +157,11 @@ Use the `catalog` profile when no credentialed tools are needed. Keep `TOKENLAB_
|
|
|
157
157
|
- OpenAPI: https://docs.tokenlab.sh/openapi.json
|
|
158
158
|
- Model catalog: https://api.tokenlab.sh/v1/models
|
|
159
159
|
- Skills: https://github.com/hedging8563/tokenlab-skills
|
|
160
|
+
|
|
161
|
+
## Webhook management
|
|
162
|
+
|
|
163
|
+
Use the `full` profile to configure workspace webhooks with `list_webhooks`, `create_webhook`, `get_webhook`, `update_webhook`, `delete_webhook`, `rotate_webhook_secret`, `test_webhook` and `list_webhook_deliveries`.
|
|
164
|
+
|
|
165
|
+
Set `TOKENLAB_MANAGEMENT_TOKEN=mt-...` separately from `TOKENLAB_API_KEY=sk-...`. Create the management token at [Dashboard → API → Management Tokens](https://tokenlab.sh/dashboard/api?tab=tokens). It authorizes management operations only within its workspace and is not limited to webhooks. The inference key cannot substitute for it; the `whsec_...` returned by creation/rotation is for receiver signature verification only. Keep all credentials out of tool arguments and prompts.
|
|
166
|
+
|
|
167
|
+
Webhook notifications avoid continuous task polling. On a polling fallback, stop on terminal status, 401/403/404 or `retryable: false`; back off on transient failures. See the [complete webhook guide](https://docs.tokenlab.sh/guides/webhooks) for payloads, signing, deduplication and delivery history.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"core": {
|
|
22
22
|
"schema_mode": "portable",
|
|
23
23
|
"compatibility_budget": {
|
|
24
|
-
"max_endpoint_tools":
|
|
24
|
+
"max_endpoint_tools": 30,
|
|
25
25
|
"max_input_schema_bytes": 48000,
|
|
26
26
|
"max_input_schema_depth": 8,
|
|
27
27
|
"max_tools_list_bytes": 60000
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"createResponse",
|
|
36
36
|
"createAnthropicMessage",
|
|
37
37
|
"geminiGenerateContent",
|
|
38
|
+
"createSystemOneDecision",
|
|
38
39
|
"createEmbedding",
|
|
39
40
|
"createMultimodalEmbedding",
|
|
40
41
|
"rerankDocuments",
|
|
@@ -59,10 +60,10 @@
|
|
|
59
60
|
"full": {
|
|
60
61
|
"schema_mode": "portable",
|
|
61
62
|
"compatibility_budget": {
|
|
62
|
-
"max_endpoint_tools":
|
|
63
|
-
"max_input_schema_bytes":
|
|
63
|
+
"max_endpoint_tools": 87,
|
|
64
|
+
"max_input_schema_bytes": 78000,
|
|
64
65
|
"max_input_schema_depth": 8,
|
|
65
|
-
"max_tools_list_bytes":
|
|
66
|
+
"max_tools_list_bytes": 115000
|
|
66
67
|
},
|
|
67
68
|
"include_tags": [
|
|
68
69
|
"Chat",
|
|
@@ -78,8 +79,10 @@
|
|
|
78
79
|
"Files",
|
|
79
80
|
"Batches",
|
|
80
81
|
"Text",
|
|
82
|
+
"Decisions",
|
|
81
83
|
"Worlds",
|
|
82
|
-
"Seedance Volc Compatible"
|
|
84
|
+
"Seedance Volc Compatible",
|
|
85
|
+
"Webhooks"
|
|
83
86
|
],
|
|
84
87
|
"exclude_operations": [
|
|
85
88
|
"geminiStreamGenerateContent",
|
|
@@ -134,7 +137,11 @@
|
|
|
134
137
|
"composite_tools": [
|
|
135
138
|
{
|
|
136
139
|
"name": "compare_models",
|
|
137
|
-
"profiles": [
|
|
140
|
+
"profiles": [
|
|
141
|
+
"catalog",
|
|
142
|
+
"core",
|
|
143
|
+
"full"
|
|
144
|
+
],
|
|
138
145
|
"auth": "optional",
|
|
139
146
|
"annotations": {
|
|
140
147
|
"readOnlyHint": true,
|
|
@@ -145,7 +152,11 @@
|
|
|
145
152
|
},
|
|
146
153
|
{
|
|
147
154
|
"name": "get_api_overview",
|
|
148
|
-
"profiles": [
|
|
155
|
+
"profiles": [
|
|
156
|
+
"catalog",
|
|
157
|
+
"core",
|
|
158
|
+
"full"
|
|
159
|
+
],
|
|
149
160
|
"auth": "optional",
|
|
150
161
|
"annotations": {
|
|
151
162
|
"readOnlyHint": true,
|
|
@@ -160,26 +171,68 @@
|
|
|
160
171
|
"id": "discover",
|
|
161
172
|
"authentication": "none",
|
|
162
173
|
"tool_rows": [
|
|
163
|
-
[
|
|
164
|
-
|
|
174
|
+
[
|
|
175
|
+
"list_models",
|
|
176
|
+
"get_model",
|
|
177
|
+
"get_pricing"
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
"get_model_pricing",
|
|
181
|
+
"compare_models",
|
|
182
|
+
"get_api_overview"
|
|
183
|
+
]
|
|
165
184
|
]
|
|
166
185
|
},
|
|
167
186
|
{
|
|
168
187
|
"id": "create",
|
|
169
188
|
"authentication": "api_key",
|
|
170
189
|
"tool_rows": [
|
|
171
|
-
[
|
|
172
|
-
|
|
173
|
-
|
|
190
|
+
[
|
|
191
|
+
"create_chat_completion",
|
|
192
|
+
"create_response",
|
|
193
|
+
"create_anthropic_message",
|
|
194
|
+
"create_gemini_content"
|
|
195
|
+
],
|
|
196
|
+
[
|
|
197
|
+
"create_image",
|
|
198
|
+
"create_image_file",
|
|
199
|
+
"edit_image",
|
|
200
|
+
"edit_image_file"
|
|
201
|
+
],
|
|
202
|
+
[
|
|
203
|
+
"create_video",
|
|
204
|
+
"create_music",
|
|
205
|
+
"create_3d_model",
|
|
206
|
+
"create_speech",
|
|
207
|
+
"transcribe_audio",
|
|
208
|
+
"translate_audio"
|
|
209
|
+
]
|
|
174
210
|
]
|
|
175
211
|
},
|
|
176
212
|
{
|
|
177
213
|
"id": "operate",
|
|
178
214
|
"authentication": "api_key",
|
|
179
215
|
"tool_rows": [
|
|
180
|
-
[
|
|
181
|
-
|
|
182
|
-
|
|
216
|
+
[
|
|
217
|
+
"upload_file",
|
|
218
|
+
"list_files",
|
|
219
|
+
"retrieve_file"
|
|
220
|
+
],
|
|
221
|
+
[
|
|
222
|
+
"retrieve_file_content",
|
|
223
|
+
"delete_file",
|
|
224
|
+
"get_task_status",
|
|
225
|
+
"cancel_task"
|
|
226
|
+
],
|
|
227
|
+
[
|
|
228
|
+
"create_embedding",
|
|
229
|
+
"create_multimodal_embedding",
|
|
230
|
+
"rerank_documents",
|
|
231
|
+
"translate_text"
|
|
232
|
+
],
|
|
233
|
+
[
|
|
234
|
+
"evaluate_decisions"
|
|
235
|
+
]
|
|
183
236
|
]
|
|
184
237
|
}
|
|
185
238
|
],
|
|
@@ -263,7 +316,9 @@
|
|
|
263
316
|
},
|
|
264
317
|
"geminiGenerateContent": {
|
|
265
318
|
"tool_name": "create_gemini_content",
|
|
266
|
-
"omit_arguments": [
|
|
319
|
+
"omit_arguments": [
|
|
320
|
+
"key"
|
|
321
|
+
]
|
|
267
322
|
},
|
|
268
323
|
"createChatCompletion": {
|
|
269
324
|
"description": "Create an OpenAI-compatible chat completion. For inline image_url data URLs, declare the byte-accurate image MIME type. The MCP boundary corrects recognized PNG, JPEG, WebP, and GIF payloads declared as application/octet-stream and rejects unrecognized generic binary image payloads before sending a billable request.",
|
|
@@ -285,22 +340,46 @@
|
|
|
285
340
|
"tool_name": "get_task_status",
|
|
286
341
|
"task": {
|
|
287
342
|
"mode": "status",
|
|
288
|
-
"id_fields": [
|
|
343
|
+
"id_fields": [
|
|
344
|
+
"task_id",
|
|
345
|
+
"id"
|
|
346
|
+
],
|
|
289
347
|
"status_field": "status",
|
|
290
348
|
"poll_url_field": "poll_url",
|
|
291
|
-
"terminal_statuses": [
|
|
349
|
+
"terminal_statuses": [
|
|
350
|
+
"completed",
|
|
351
|
+
"succeeded",
|
|
352
|
+
"failed",
|
|
353
|
+
"cancelled",
|
|
354
|
+
"canceled",
|
|
355
|
+
"expired"
|
|
356
|
+
]
|
|
292
357
|
}
|
|
293
358
|
},
|
|
294
359
|
"cancelAsyncTask": {
|
|
295
360
|
"tool_name": "cancel_task",
|
|
296
361
|
"task": {
|
|
297
362
|
"mode": "status",
|
|
298
|
-
"id_fields": [
|
|
363
|
+
"id_fields": [
|
|
364
|
+
"task_id",
|
|
365
|
+
"id"
|
|
366
|
+
],
|
|
299
367
|
"status_field": "status",
|
|
300
368
|
"poll_url_field": "poll_url",
|
|
301
|
-
"terminal_statuses": [
|
|
369
|
+
"terminal_statuses": [
|
|
370
|
+
"completed",
|
|
371
|
+
"succeeded",
|
|
372
|
+
"failed",
|
|
373
|
+
"cancelled",
|
|
374
|
+
"canceled",
|
|
375
|
+
"expired"
|
|
376
|
+
]
|
|
302
377
|
}
|
|
303
378
|
},
|
|
379
|
+
"createSystemOneDecision": {
|
|
380
|
+
"tool_name": "evaluate_decisions",
|
|
381
|
+
"description": "Evaluate typed Noul probability, Choice, and Score questions against shared state using the native System One endpoint. Discover a decision model with list_models/get_model first. Returns synchronous structured decisions, not chat text. A decision does not authorize an external action."
|
|
382
|
+
},
|
|
304
383
|
"createTranslation": {
|
|
305
384
|
"tool_name": "translate_text"
|
|
306
385
|
},
|
|
@@ -321,10 +400,20 @@
|
|
|
321
400
|
},
|
|
322
401
|
"task": {
|
|
323
402
|
"mode": "hybrid",
|
|
324
|
-
"id_fields": [
|
|
403
|
+
"id_fields": [
|
|
404
|
+
"task_id",
|
|
405
|
+
"id"
|
|
406
|
+
],
|
|
325
407
|
"status_field": "status",
|
|
326
408
|
"poll_url_field": "poll_url",
|
|
327
|
-
"terminal_statuses": [
|
|
409
|
+
"terminal_statuses": [
|
|
410
|
+
"completed",
|
|
411
|
+
"succeeded",
|
|
412
|
+
"failed",
|
|
413
|
+
"cancelled",
|
|
414
|
+
"canceled",
|
|
415
|
+
"expired"
|
|
416
|
+
]
|
|
328
417
|
}
|
|
329
418
|
},
|
|
330
419
|
"editImage": {
|
|
@@ -338,57 +427,147 @@
|
|
|
338
427
|
},
|
|
339
428
|
"task": {
|
|
340
429
|
"mode": "hybrid",
|
|
341
|
-
"id_fields": [
|
|
430
|
+
"id_fields": [
|
|
431
|
+
"task_id",
|
|
432
|
+
"id"
|
|
433
|
+
],
|
|
342
434
|
"status_field": "status",
|
|
343
435
|
"poll_url_field": "poll_url",
|
|
344
|
-
"terminal_statuses": [
|
|
436
|
+
"terminal_statuses": [
|
|
437
|
+
"completed",
|
|
438
|
+
"succeeded",
|
|
439
|
+
"failed",
|
|
440
|
+
"cancelled",
|
|
441
|
+
"canceled",
|
|
442
|
+
"expired"
|
|
443
|
+
]
|
|
345
444
|
}
|
|
346
445
|
},
|
|
347
446
|
"createVideo": {
|
|
348
447
|
"task": {
|
|
349
448
|
"mode": "async",
|
|
350
|
-
"id_fields": [
|
|
449
|
+
"id_fields": [
|
|
450
|
+
"task_id",
|
|
451
|
+
"id"
|
|
452
|
+
],
|
|
351
453
|
"status_field": "status",
|
|
352
454
|
"poll_url_field": "poll_url",
|
|
353
|
-
"terminal_statuses": [
|
|
455
|
+
"terminal_statuses": [
|
|
456
|
+
"completed",
|
|
457
|
+
"succeeded",
|
|
458
|
+
"failed",
|
|
459
|
+
"cancelled",
|
|
460
|
+
"canceled",
|
|
461
|
+
"expired"
|
|
462
|
+
]
|
|
354
463
|
}
|
|
355
464
|
},
|
|
356
465
|
"createMusic": {
|
|
357
466
|
"task": {
|
|
358
467
|
"mode": "async",
|
|
359
|
-
"id_fields": [
|
|
468
|
+
"id_fields": [
|
|
469
|
+
"task_id",
|
|
470
|
+
"id"
|
|
471
|
+
],
|
|
360
472
|
"status_field": "status",
|
|
361
473
|
"poll_url_field": "poll_url",
|
|
362
|
-
"terminal_statuses": [
|
|
474
|
+
"terminal_statuses": [
|
|
475
|
+
"completed",
|
|
476
|
+
"succeeded",
|
|
477
|
+
"failed",
|
|
478
|
+
"cancelled",
|
|
479
|
+
"canceled",
|
|
480
|
+
"expired"
|
|
481
|
+
]
|
|
363
482
|
}
|
|
364
483
|
},
|
|
365
484
|
"create3D": {
|
|
366
485
|
"tool_name": "create_3d_model",
|
|
367
486
|
"task": {
|
|
368
487
|
"mode": "async",
|
|
369
|
-
"id_fields": [
|
|
488
|
+
"id_fields": [
|
|
489
|
+
"task_id",
|
|
490
|
+
"id"
|
|
491
|
+
],
|
|
370
492
|
"status_field": "status",
|
|
371
493
|
"poll_url_field": "poll_url",
|
|
372
|
-
"terminal_statuses": [
|
|
494
|
+
"terminal_statuses": [
|
|
495
|
+
"completed",
|
|
496
|
+
"succeeded",
|
|
497
|
+
"failed",
|
|
498
|
+
"cancelled",
|
|
499
|
+
"canceled",
|
|
500
|
+
"expired"
|
|
501
|
+
]
|
|
373
502
|
}
|
|
374
503
|
},
|
|
375
504
|
"createWorld": {
|
|
376
505
|
"task": {
|
|
377
506
|
"mode": "async",
|
|
378
|
-
"id_fields": [
|
|
507
|
+
"id_fields": [
|
|
508
|
+
"task_id",
|
|
509
|
+
"id"
|
|
510
|
+
],
|
|
379
511
|
"status_field": "status",
|
|
380
512
|
"poll_url_field": "poll_url",
|
|
381
|
-
"terminal_statuses": [
|
|
513
|
+
"terminal_statuses": [
|
|
514
|
+
"completed",
|
|
515
|
+
"succeeded",
|
|
516
|
+
"failed",
|
|
517
|
+
"cancelled",
|
|
518
|
+
"canceled",
|
|
519
|
+
"expired"
|
|
520
|
+
]
|
|
382
521
|
}
|
|
383
522
|
},
|
|
384
523
|
"getWorldStatus": {
|
|
385
524
|
"task": {
|
|
386
525
|
"mode": "status",
|
|
387
|
-
"id_fields": [
|
|
526
|
+
"id_fields": [
|
|
527
|
+
"task_id",
|
|
528
|
+
"id"
|
|
529
|
+
],
|
|
388
530
|
"status_field": "status",
|
|
389
531
|
"poll_url_field": "poll_url",
|
|
390
|
-
"terminal_statuses": [
|
|
532
|
+
"terminal_statuses": [
|
|
533
|
+
"completed",
|
|
534
|
+
"succeeded",
|
|
535
|
+
"failed",
|
|
536
|
+
"cancelled",
|
|
537
|
+
"canceled",
|
|
538
|
+
"expired"
|
|
539
|
+
]
|
|
391
540
|
}
|
|
541
|
+
},
|
|
542
|
+
"rotateWebhookSecret": {
|
|
543
|
+
"annotations": {
|
|
544
|
+
"readOnlyHint": false,
|
|
545
|
+
"destructiveHint": true,
|
|
546
|
+
"idempotentHint": false,
|
|
547
|
+
"openWorldHint": true
|
|
548
|
+
},
|
|
549
|
+
"description": "Replace the signing secret and return the new secret once. In-flight deliveries may use the previous secret. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
550
|
+
},
|
|
551
|
+
"listWebhooks": {
|
|
552
|
+
"description": "List workspace webhooks. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
553
|
+
},
|
|
554
|
+
"createWebhook": {
|
|
555
|
+
"description": "Create a workspace webhook; save the returned signing secret. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
556
|
+
},
|
|
557
|
+
"getWebhook": {
|
|
558
|
+
"description": "Read a webhook without revealing its secret. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
559
|
+
},
|
|
560
|
+
"updateWebhook": {
|
|
561
|
+
"description": "Update URL, events, description or active state. Resuming resets failures. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
562
|
+
},
|
|
563
|
+
"deleteWebhook": {
|
|
564
|
+
"description": "Delete a webhook and its delivery history. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
565
|
+
},
|
|
566
|
+
"testWebhook": {
|
|
567
|
+
"description": "Send webhook.test; inspect outcome to confirm receipt. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
568
|
+
},
|
|
569
|
+
"listWebhookDeliveries": {
|
|
570
|
+
"description": "List delivery outcomes, HTTP statuses and cumulative attempts. Requires TOKENLAB_MANAGEMENT_TOKEN (mt-...) for the workspace; sk-... keys are not accepted."
|
|
392
571
|
}
|
|
393
572
|
}
|
|
394
573
|
}
|