@celigo/api-specs 0.2.201 → 0.2.203

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/dist/job.yml CHANGED
@@ -48,9 +48,10 @@ paths:
48
48
  Exception: for a caller with integration-only access, `_flowId` scopes
49
49
  a `type=flow` or `type=retry` query only together with
50
50
  `_integrationId` (below).
51
- - **Child jobs** (`type=export` or `type=import`) — requires
52
- `_flowJobId` or a resource ID filter (`_exportId` / `_importId`).
53
- Returns the export/import sub-jobs within a parent flow job.
51
+ - **Child jobs** (`type=export`, `type=import`, or `type=tool`) — requires
52
+ `_flowJobId` or a resource ID filter (`_exportId` / `_importId`; for
53
+ `tool` jobs, `_importId` is the `ToolImport`'s id). Returns the step
54
+ jobs within a parent flow job.
54
55
 
55
56
  Job reads are authorized per integration. For a caller with
56
57
  integration-only access (an account share that populates
@@ -71,6 +72,11 @@ paths:
71
72
  forward, take the `createdAt` of the last record, subtract 1 ms, and
72
73
  pass it as `createdAt_lte`.
73
74
 
75
+ The query is validated strictly: a parameter the endpoint does not support
76
+ fails with `422 invalid_query_params` naming it, and a malformed value — an
77
+ unrecognized `type` or `status`, a non-numeric count filter, an unparseable
78
+ date, or a plain string where an array is expected — fails with `400`.
79
+
74
80
  A `queued` or `running` job created outside `createdAt_gte` /
75
81
  `createdAt_lte` is left out of a date-filtered list.
76
82
  parameters:
@@ -126,27 +132,27 @@ paths:
126
132
  - 69f54d6f47185f8c7a500597
127
133
  description: |-
128
134
  Filter by parent flow-job ID. Satisfies the required-param check.
129
- Required when querying child jobs (`type=export` or `type=import`).
130
- - name: _flowId_in
135
+ Required when querying child jobs (`type=export`, `type=import`, or
136
+ `type=tool`).
137
+ - name: _flowId_in[]
131
138
  in: query
139
+ style: form
140
+ explode: true
132
141
  schema:
133
- type: string
134
- examples:
135
- - 69f54d6b7009ea11abad707a,69e83e7a75f7f8c14a12916e
136
- description: |-
137
- Comma-separated list of flow IDs to match. Works as an additional
138
- filter but does **not** satisfy the required-param check alone.
139
- `flowId_in` (without underscore) is accepted as an alias.
140
- - name: status_in
141
- in: query
142
- schema:
143
- type: string
142
+ type: array
143
+ items:
144
+ type: string
145
+ format: objectId
146
+ x-celigo-refModel: flows
144
147
  examples:
145
- - completed,failed
148
+ - - 69f54d6b7009ea11abad707a
149
+ - 69e83e7a75f7f8c14a12916e
146
150
  description: |-
147
- Comma-separated list of status values to match (e.g.
148
- `completed,failed`). Works as an additional filter but does
149
- **not** satisfy the required-param check alone.
151
+ Flow IDs to match, sent as one `_flowId_in[]=<id>` pair per ID (indexed
152
+ `_flowId_in[0]=<id>` also works). A plain `_flowId_in=<id>` value —
153
+ including a comma-separated list — fails with `400 invalid_query_param`.
154
+ Works as an additional filter but does **not** satisfy the
155
+ required-param check alone.
150
156
  - name: createdAt_lte
151
157
  in: query
152
158
  schema:
@@ -245,17 +251,19 @@ paths:
245
251
  - import
246
252
  - retry
247
253
  - bulk_retry
254
+ - tool
248
255
  x-enumDescriptions:
249
256
  flow: A parent flow-run job that orchestrates the full pipeline.
250
257
  export: A child job for an export step within a flow run.
251
258
  import: A child job for an import step within a flow run.
252
259
  retry: A retry of a single failed record from a previous job.
253
260
  bulk_retry: A bulk retry of multiple failed records from a previous job.
261
+ tool: A child job for a Tool step (a `ToolImport`) within a flow run.
254
262
  description: |-
255
263
  Filter by job type. `flow`, `retry`, and `bulk_retry` are
256
- parent-level jobs; `export` and `import` are child jobs (require
257
- `_flowJobId` or a resource-ID filter). Unrecognized values silently
258
- return an empty response.
264
+ parent-level jobs; `export`, `import`, and `tool` are child jobs
265
+ (require `_flowJobId` or a resource-ID filter). An unrecognized value
266
+ fails with `400 invalid_url` ("type is not valid.").
259
267
  responses:
260
268
  '200':
261
269
  description: Array of job records matching the filters.
@@ -319,7 +327,13 @@ paths:
319
327
  '204':
320
328
  description: No jobs match the given filters.
321
329
  '400':
322
- description: Required query parameters are missing or invalid.
330
+ description: |-
331
+ Required query parameters are missing (`invalid_query`), or a value is
332
+ malformed: an unrecognized `status` or a non-numeric `numSuccess_*` /
333
+ `numIgnore_*` filter (`invalid_query_param`), an array parameter sent as
334
+ a plain string (`invalid_query_param`), an unrecognized `type` or a
335
+ non-numeric `numError_*` filter (`invalid_url`), or an unparseable date
336
+ (`invalid_field`).
323
337
  content:
324
338
  application/json:
325
339
  schema:
@@ -349,6 +363,24 @@ paths:
349
363
  errors:
350
364
  - code: invalid_query_param
351
365
  message: The query parameter "status" has invalid value.
366
+ array_as_string:
367
+ summary: Array parameter sent as a plain value
368
+ value:
369
+ errors:
370
+ - code: invalid_query_param
371
+ message: The query parameter _flowId_in must be an array. Repeat the parameter for each value, e.g. _flowId_in[0]=value1&_flowId_in[1]=value2.
372
+ invalid_type:
373
+ summary: Unrecognized type value
374
+ value:
375
+ errors:
376
+ - code: invalid_url
377
+ message: type is not valid.
378
+ invalid_date:
379
+ summary: Unparseable date filter
380
+ value:
381
+ errors:
382
+ - code: invalid_field
383
+ message: 'The value provided for the field: ''createdAt_gte'' is invalid.'
352
384
  '401':
353
385
  $ref: '#/components/responses/401-unauthorized'
354
386
  '422':
@@ -1323,9 +1355,9 @@ components:
1323
1355
  A job represents one execution of a flow/export/import (or a retry) in integrator.io.
1324
1356
  Jobs are read-only records created by the platform when executions occur.
1325
1357
 
1326
- Parent jobs (`type: flow`) carry aggregate counters; child jobs (`type: export` or `import`)
1327
- carry per-step counters -- do not sum both to avoid double-counting. `_exportId` on a parent
1328
- flow job references the page-generator export, not all exports in the flow.
1358
+ Parent jobs (`type: flow`) carry aggregate counters; child jobs (`type: export`, `import`, or
1359
+ `tool`) carry per-step counters -- do not sum both to avoid double-counting. `_exportId` on a
1360
+ parent flow job references the page-generator export, not all exports in the flow.
1329
1361
  allOf:
1330
1362
  - $ref: '#/components/schemas/ResourceResponse'
1331
1363
  - type: object
@@ -1340,6 +1372,7 @@ components:
1340
1372
  - flow
1341
1373
  - retry
1342
1374
  - bulk_retry
1375
+ - tool
1343
1376
  x-enumDescriptions:
1344
1377
  export: |-
1345
1378
  A child job for an export step within a flow run: the flow's source export, or a
@@ -1349,10 +1382,14 @@ components:
1349
1382
  flow: A parent flow-run job that orchestrates the full pipeline.
1350
1383
  retry: A retry of a single failed record from a previous job.
1351
1384
  bulk_retry: A bulk retry of multiple failed records from a previous job.
1385
+ tool: |-
1386
+ A child job for a Tool step (a `ToolImport`) within a flow run. A lookup step inside
1387
+ the Tool gets its own `export` child job under the same flow job.
1352
1388
  x-celigo-ai-guidance:
1353
1389
  - |-
1354
1390
  - `flow`: a flow run (parent job)
1355
1391
  - `export` / `import`: child jobs for an export/import step
1392
+ - `tool`: child job for a Tool step (`ToolImport`); a lookup step inside the Tool is listed as its own `export` child job of the same flow job
1356
1393
  - `retry` / `bulk_retry`: error management retries
1357
1394
  status:
1358
1395
  type: string
@@ -1414,8 +1451,9 @@ components:
1414
1451
  readOnly: true
1415
1452
  description: |-
1416
1453
  The export or import resource ID for this child job. Present on child
1417
- jobs (`type: export` or `type: import`) — check `type` to determine
1418
- whether this references an export or import resource.
1454
+ jobs (`type: export`, `import`, or `tool`) — check `type`: an `export` job
1455
+ references an export, an `import` job an import, and a `tool` job the
1456
+ `ToolImport` that ran the Tool.
1419
1457
  examples:
1420
1458
  - 69f54d6c1e7f3a22cc7848b2
1421
1459
  _retryOfJobId:
@@ -1507,8 +1545,8 @@ components:
1507
1545
  chained into this one; absent on event-driven runs (webhook, real-time listener, and
1508
1546
  stream page generators), which the inbound event starts. On a `retry` job: `auto`
1509
1547
  for the platform's automatic intermittent-error retry, otherwise the `_id` of the
1510
- user who submitted the retry. Absent on `export` and `import` child jobs — the
1511
- parent flow job carries it.
1548
+ user who submitted the retry. Absent on `export`, `import`, and `tool` child jobs —
1549
+ the parent flow job carries it.
1512
1550
  examples:
1513
1551
  - system
1514
1552
  canceledBy:
@@ -1565,7 +1603,8 @@ components:
1565
1603
  description: |-
1566
1604
  Number of records processed successfully. On a parent flow job (`type: flow`) this is the
1567
1605
  sum across every step in the run, so one record that passes through an export and an import
1568
- counts twice. On a child job (`type: export` or `import`) it is that step's count alone.
1606
+ counts twice. On a child job (`type: export`, `import`, or `tool`) it is that step's count
1607
+ alone.
1569
1608
  For per-step counts, read the run with `GET /v1/jobs/{_id}/family` or list its children with
1570
1609
  `GET /v1/jobs?_flowJobId={_id}&type=import`.
1571
1610
  examples:
@@ -780,6 +780,390 @@ paths:
780
780
  $ref: '#/components/responses/401-unauthorized'
781
781
  '404':
782
782
  $ref: '#/components/responses/404-not-found'
783
+ /v1/mcpservers/template/preview:
784
+ get:
785
+ x-internal: false
786
+ operationId: previewMcpServerTemplateUpload
787
+ tags:
788
+ - MCP Servers
789
+ summary: Preview an uploaded MCP server template
790
+ description: |-
791
+ Reads an MCP-server template ZIP you uploaded and returns the resource
792
+ docs installing it would create. Nothing is created. Get an upload URL
793
+ from `GET /v1/s3SignedURL?file_type=application/zip`, PUT the ZIP to its
794
+ `signedURL` with the header `x-amz-server-side-encryption: AES256`, then
795
+ pass that call's `runKey` here and to `POST /v1/mcpservers/template`.
796
+
797
+ The install runs the same ZIP checks with the same errors. Integration
798
+ template ZIPs use `GET /v1/integrations/template/preview`, which rejects
799
+ an MCP-server ZIP with a 400 `invalid_template` error.
800
+ parameters:
801
+ - name: runKey
802
+ in: query
803
+ required: true
804
+ description: |-
805
+ The `runKey` returned by `GET /v1/s3SignedURL` for the uploaded
806
+ template ZIP.
807
+ schema:
808
+ type: string
809
+ examples:
810
+ - 78f30205bdda4c4bb2a75eb121172250
811
+ responses:
812
+ '200':
813
+ description: Preview of the resources the install would create.
814
+ content:
815
+ application/json:
816
+ schema:
817
+ $ref: '#/components/schemas/McpServerTemplatePreview'
818
+ examples:
819
+ promptOnly:
820
+ summary: Template with one inline prompt
821
+ value:
822
+ type: mcpserver
823
+ objects:
824
+ - model: McpServer
825
+ doc:
826
+ name: Support assistant
827
+ description: ''
828
+ relativeURI: /support-assistant
829
+ disabled: true
830
+ tools: []
831
+ prompts:
832
+ - name: summarize-ticket
833
+ description: Summarize a support ticket.
834
+ disabled: false
835
+ arguments:
836
+ - name: ticket
837
+ description: Ticket text.
838
+ required: true
839
+ messagesTemplate:
840
+ - role: user
841
+ contentType: text
842
+ template: Summarize {{ticket}}.
843
+ - model: Prompt
844
+ doc:
845
+ name: summarize-ticket
846
+ description: Summarize a support ticket.
847
+ disabled: false
848
+ arguments:
849
+ - name: ticket
850
+ description: Ticket text.
851
+ required: true
852
+ messagesTemplate:
853
+ - role: user
854
+ contentType: text
855
+ template: Summarize {{ticket}}.
856
+ stackRequired: false
857
+ connectionAndFile:
858
+ summary: Template with a connection and a Celigo Storage file
859
+ value:
860
+ type: mcpserver
861
+ objects:
862
+ - model: McpServer
863
+ doc:
864
+ name: Support assistant
865
+ description: ''
866
+ relativeURI: /support-assistant
867
+ disabled: true
868
+ tools: []
869
+ connections:
870
+ - _connectionId: 6ab130000000000000000c01
871
+ requiresEndUserCredentials: false
872
+ resources:
873
+ - fileKey: 6ab130000000000000000f01
874
+ title: Support handbook
875
+ disabled: false
876
+ name: handbook.txt
877
+ mimeType: text/plain
878
+ - model: Connection
879
+ doc:
880
+ _id: 6ab130000000000000000c01
881
+ type: http
882
+ name: Support Desk API
883
+ http:
884
+ mediaType: json
885
+ baseURI: https://api.example.com
886
+ auth:
887
+ type: custom
888
+ - model: McpResource
889
+ doc:
890
+ fileKey: 6ab130000000000000000f01
891
+ title: Support handbook
892
+ disabled: false
893
+ name: handbook.txt
894
+ mimeType: text/plain
895
+ size: 2048
896
+ stackRequired: false
897
+ '400':
898
+ description: |-
899
+ The request or the ZIP is malformed: `runKey` is missing
900
+ (`missing_required_field`); the file is not a readable ZIP, including
901
+ one with two entries of the same name (`MCP_TEMPLATE_INVALID_ZIP`); or
902
+ an entry is invalid (`MCP_TEMPLATE_INVALID_ENTRY` — for example an
903
+ entry path containing `..`, a resource file the manifest declares but
904
+ the ZIP lacks, or a null tool row).
905
+ content:
906
+ application/json:
907
+ schema:
908
+ $ref: '#/components/schemas/Error'
909
+ examples:
910
+ missingRunKey:
911
+ value:
912
+ errors:
913
+ - code: missing_required_field
914
+ message: runKey is required.
915
+ invalidZip:
916
+ value:
917
+ errors:
918
+ - code: MCP_TEMPLATE_INVALID_ZIP
919
+ message: The MCP template zip is damaged or is not a zip file.
920
+ invalidEntry:
921
+ value:
922
+ errors:
923
+ - code: MCP_TEMPLATE_INVALID_ENTRY
924
+ message: The MCP template contains an invalid entry.
925
+ '401':
926
+ $ref: '#/components/responses/401-unauthorized'
927
+ '404':
928
+ description: The `runKey` does not match an uploaded file.
929
+ content:
930
+ application/json:
931
+ schema:
932
+ $ref: '#/components/schemas/Error'
933
+ examples:
934
+ invalidKey:
935
+ value:
936
+ errors:
937
+ - code: invalid_key
938
+ message: We couldn't find any integration template zip file.
939
+ '413':
940
+ description: |-
941
+ The ZIP exceeds an MCP template limit: more than 32 MiB uncompressed in
942
+ total, more than 500 entries, or a JSON entry over 1 MiB.
943
+ content:
944
+ application/json:
945
+ schema:
946
+ $ref: '#/components/schemas/Error'
947
+ examples:
948
+ tooLarge:
949
+ value:
950
+ errors:
951
+ - code: MCP_TEMPLATE_ZIP_TOO_LARGE
952
+ message: The MCP template zip exceeds the allowed size.
953
+ '422':
954
+ description: |-
955
+ The ZIP opened but is not an installable MCP-server template:
956
+ `mcpserver.json` is missing (`invalid_ref`, or `invalid_template` when
957
+ `integration.json` is missing too), a tool the server attaches is not
958
+ packed (`invalid_template`), an attached API or connection document is
959
+ not packed (`MCP_TEMPLATE_DEPENDENCY_MISSING`), or a resource file is
960
+ over 3 MiB or the manifest declares more than 100 of them
961
+ (`MCP_TEMPLATE_RESOURCE_TOO_LARGE`).
962
+ content:
963
+ application/json:
964
+ schema:
965
+ $ref: '#/components/schemas/Error'
966
+ examples:
967
+ noManifest:
968
+ value:
969
+ errors:
970
+ - code: invalid_ref
971
+ message: mcpserver.json not found.
972
+ noManifests:
973
+ value:
974
+ errors:
975
+ - code: invalid_template
976
+ message: integration.json file is missing.
977
+ toolNotPacked:
978
+ value:
979
+ errors:
980
+ - code: invalid_template
981
+ message: MCP server references tool 6ab130000000000000000a01, which is missing from the template zip.
982
+ dependencyMissing:
983
+ value:
984
+ errors:
985
+ - code: MCP_TEMPLATE_DEPENDENCY_MISSING
986
+ message: The MCP template is missing connection 6ab130000000000000000c01.
987
+ resourceTooLarge:
988
+ value:
989
+ errors:
990
+ - code: MCP_TEMPLATE_RESOURCE_TOO_LARGE
991
+ message: Resource file 6ab130000000000000000f02 exceeds the allowed size.
992
+ /v1/mcpservers/template:
993
+ post:
994
+ x-internal: false
995
+ operationId: installMcpServerTemplateFromUpload
996
+ tags:
997
+ - MCP Servers
998
+ summary: Install an uploaded MCP server template
999
+ description: |-
1000
+ Installs an MCP-server template from a ZIP you uploaded with the URL
1001
+ from `GET /v1/s3SignedURL`. The body carries only that call's `runKey`;
1002
+ the server's name and `relativeURI` come from the template. Check the
1003
+ ZIP first with `GET /v1/mcpservers/template/preview`, which runs the
1004
+ same ZIP checks with the same errors and creates nothing.
1005
+
1006
+ The response's `destination` envelope names what was created. A
1007
+ template with only inline prompts creates the MCP server immediately,
1008
+ disabled (`destination.resourceType` is `mcpservers`); when its
1009
+ `relativeURI` is taken, the server gets a `-2`, `-3`, … suffix. A
1010
+ template that also packs dependencies, such as a connection, creates an
1011
+ Integration in install mode instead (`destination.resourceType` is
1012
+ `integrations`), with an install step per packed connection and a last
1013
+ step that copies the template's resources; no MCP server exists yet
1014
+ when the request returns.
1015
+
1016
+ Every request starts a new install, so retrying after a timeout or an
1017
+ ambiguous failure creates a duplicate server or install-mode
1018
+ Integration.
1019
+ x-celigo-ai-guidance:
1020
+ - Never retry this POST after a timeout or an ambiguous failure — each request installs again; a prompt-only template yields a second server with a -2 suffix on its relativeURI, and a template with dependencies a second install-mode Integration.
1021
+ - Branch the follow-up on destination.resourceType — "mcpservers" means the disabled MCP server already exists; "integrations" means the install continues in that Integration's install steps and the server does not exist yet.
1022
+ requestBody:
1023
+ required: true
1024
+ content:
1025
+ application/json:
1026
+ schema:
1027
+ type: object
1028
+ required:
1029
+ - runKey
1030
+ properties:
1031
+ runKey:
1032
+ type: string
1033
+ description: |-
1034
+ The `runKey` returned by `GET /v1/s3SignedURL` for the uploaded
1035
+ template ZIP.
1036
+ examples:
1037
+ - 78f30205bdda4c4bb2a75eb121172250
1038
+ examples:
1039
+ default:
1040
+ value:
1041
+ runKey: 78f30205bdda4c4bb2a75eb121172250
1042
+ responses:
1043
+ '201':
1044
+ description: Installation started.
1045
+ content:
1046
+ application/json:
1047
+ schema:
1048
+ type: object
1049
+ required:
1050
+ - destination
1051
+ properties:
1052
+ destination:
1053
+ type: object
1054
+ description: The resource the install created first.
1055
+ required:
1056
+ - resourceType
1057
+ - resourceId
1058
+ properties:
1059
+ resourceType:
1060
+ type: string
1061
+ enum:
1062
+ - mcpservers
1063
+ - integrations
1064
+ x-enumDescriptions:
1065
+ mcpservers: The disabled MCP server, created immediately from a template with only inline prompts
1066
+ integrations: The install-mode Integration created for a template that packs dependencies, such as a connection
1067
+ description: |-
1068
+ Which resource type the install created — determines
1069
+ where the caller continues the setup.
1070
+ resourceId:
1071
+ type: string
1072
+ format: objectId
1073
+ description: |-
1074
+ The created resource's ID, in the collection named by
1075
+ `resourceType`.
1076
+ examples:
1077
+ promptOnly:
1078
+ summary: Prompt-only template — disabled MCP server
1079
+ value:
1080
+ destination:
1081
+ resourceType: mcpservers
1082
+ resourceId: 6ab130000000000000000d02
1083
+ withConnection:
1084
+ summary: Template with a connection — Integration in install mode
1085
+ value:
1086
+ destination:
1087
+ resourceType: integrations
1088
+ resourceId: 6ab130000000000000000d01
1089
+ '400':
1090
+ description: |-
1091
+ The request or the ZIP is malformed: `runKey` is missing
1092
+ (`missing_required_field`); the file is not a readable ZIP, including
1093
+ one with two entries of the same name (`MCP_TEMPLATE_INVALID_ZIP`); or
1094
+ an entry is invalid (`MCP_TEMPLATE_INVALID_ENTRY` — for example an
1095
+ entry path containing `..`, a resource file the manifest declares but
1096
+ the ZIP lacks, or a null tool row).
1097
+ content:
1098
+ application/json:
1099
+ schema:
1100
+ $ref: '#/components/schemas/Error'
1101
+ examples:
1102
+ missingRunKey:
1103
+ value:
1104
+ errors:
1105
+ - code: missing_required_field
1106
+ message: runKey is required.
1107
+ invalidZip:
1108
+ value:
1109
+ errors:
1110
+ - code: MCP_TEMPLATE_INVALID_ZIP
1111
+ message: The MCP template zip is damaged or is not a zip file.
1112
+ invalidEntry:
1113
+ value:
1114
+ errors:
1115
+ - code: MCP_TEMPLATE_INVALID_ENTRY
1116
+ message: The MCP template contains an invalid entry.
1117
+ '401':
1118
+ $ref: '#/components/responses/401-unauthorized'
1119
+ '404':
1120
+ description: The `runKey` does not match an uploaded file.
1121
+ content:
1122
+ application/json:
1123
+ schema:
1124
+ $ref: '#/components/schemas/Error'
1125
+ examples:
1126
+ invalidKey:
1127
+ value:
1128
+ errors:
1129
+ - code: invalid_key
1130
+ message: We couldn't find any integration template zip file.
1131
+ '413':
1132
+ description: |-
1133
+ The ZIP exceeds an MCP template limit: more than 32 MiB uncompressed in
1134
+ total, more than 500 entries, or a JSON entry over 1 MiB.
1135
+ content:
1136
+ application/json:
1137
+ schema:
1138
+ $ref: '#/components/schemas/Error'
1139
+ examples:
1140
+ tooLarge:
1141
+ value:
1142
+ errors:
1143
+ - code: MCP_TEMPLATE_ZIP_TOO_LARGE
1144
+ message: The MCP template zip exceeds the allowed size.
1145
+ '422':
1146
+ description: |-
1147
+ The ZIP is not an installable MCP-server template, so nothing was
1148
+ created: the same checks and codes as the preview (`invalid_ref`,
1149
+ `invalid_template`, `MCP_TEMPLATE_DEPENDENCY_MISSING`,
1150
+ `MCP_TEMPLATE_RESOURCE_TOO_LARGE`). Retrying with the same ZIP fails
1151
+ the same way.
1152
+ content:
1153
+ application/json:
1154
+ schema:
1155
+ $ref: '#/components/schemas/Error'
1156
+ examples:
1157
+ noManifest:
1158
+ value:
1159
+ errors:
1160
+ - code: invalid_ref
1161
+ message: mcpserver.json not found.
1162
+ dependencyMissing:
1163
+ value:
1164
+ errors:
1165
+ - code: MCP_TEMPLATE_DEPENDENCY_MISSING
1166
+ message: The MCP template is missing connection 6ab130000000000000000c01.
783
1167
  /v1/mcpservers/template/{_templateId}:
784
1168
  post:
785
1169
  x-internal: false
@@ -4159,6 +4543,64 @@ components:
4159
4543
  minItems: 1
4160
4544
  items:
4161
4545
  $ref: '#/components/schemas/JsonPatchOperation'
4546
+ McpServerTemplatePreview:
4547
+ type: object
4548
+ description: |-
4549
+ What installing an uploaded MCP-server template ZIP would create.
4550
+ `objects[]` lists each resource doc tagged by `model`. Packed docs keep
4551
+ the template's placeholder ids; the install assigns new ones.
4552
+ required:
4553
+ - type
4554
+ - objects
4555
+ - stackRequired
4556
+ properties:
4557
+ type:
4558
+ type: string
4559
+ enum:
4560
+ - mcpserver
4561
+ x-enumDescriptions:
4562
+ mcpserver: The ZIP is an MCP-server template; install it with `POST /v1/mcpservers/template`
4563
+ description: |-
4564
+ Kind of template the uploaded ZIP holds. Always `mcpserver` on this
4565
+ route — a ZIP without `mcpserver.json`, such as an integration
4566
+ template, is rejected before a preview is built.
4567
+ examples:
4568
+ - mcpserver
4569
+ objects:
4570
+ type: array
4571
+ description: |-
4572
+ Resource docs the install would create, in order: the `McpServer`
4573
+ doc, then each document packed in the ZIP (a `Connection`, for
4574
+ example), then one `Prompt` entry per inline prompt and one
4575
+ `McpResource` entry per Celigo Storage file the server serves. The
4576
+ ZIP's `integration.json` is never listed.
4577
+ items:
4578
+ type: object
4579
+ description: One resource doc tagged with its model type.
4580
+ required:
4581
+ - model
4582
+ - doc
4583
+ properties:
4584
+ model:
4585
+ type: string
4586
+ description: |-
4587
+ Resource class this doc describes: `McpServer`, `Prompt`, or
4588
+ `McpResource` for the server and what it serves, otherwise the
4589
+ model of the packed document, such as `Connection`.
4590
+ examples:
4591
+ - Connection
4592
+ doc:
4593
+ type: object
4594
+ description: |-
4595
+ The resource document as packed in the template. The `McpServer`
4596
+ doc has no `_id`; an `McpResource` doc also carries the file's
4597
+ `size` in bytes.
4598
+ additionalProperties: true
4599
+ stackRequired:
4600
+ type: boolean
4601
+ description: |-
4602
+ When true, the template packs something that runs on a stack, such
4603
+ as a wrapper connection.
4162
4604
  DependencyEntry:
4163
4605
  type: object
4164
4606
  description: A single resource that depends on the queried resource.