@celigo/api-specs 0.2.218 → 0.2.220

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/import.yml CHANGED
@@ -4184,9 +4184,29 @@ components:
4184
4184
  (replace a sublist's lines on update), and the rows Celigo's field-definitions article
4185
4185
  lists by label (Ignore Mandatory Fields, Initialize Values, Persist New Line Insertion
4186
4186
  Order, Print Nlapi Debug Logs, Group Lines By, Use Address Subrecord, Void Transaction).
4187
+ For a NetSuite field it is always the field's script id: the mapping editor shows each
4188
+ destination by its label ("Customer (InternalId)", "Items : Location (InternalId)"),
4189
+ and a label saved here is not a field. The control rows above keep their own ids.
4187
4190
  examples:
4188
4191
  - companyname
4189
4192
  x-celigo-ai-guidance:
4193
+ - |-
4194
+ `Items : Location (InternalId)` saved as a body row's `generate` — the editor's
4195
+ label for `item[*].location.internalid`, not a field id — was accepted by the save,
4196
+ rendered by the mapping preview, and ignored by NetSuite on a sales order import:
4197
+ the import succeeded with the field blank and no error anywhere. A label is never
4198
+ a script id. Resolve ids from the record metadata
4199
+ (`GET /v1/netsuite/metadata/suitescript/connections/{_id}/recordTypes/{recordType}`,
4200
+ `listNetSuiteRecordTypeFields`), whose rows carry each field's `id` and its editor
4201
+ label as `name`; that list is the editor's destination dropdown and is form- and
4202
+ role-dependent, so a standard field hidden on the form is absent from it yet still
4203
+ written by id.
4204
+ - |-
4205
+ A line field is never a body row. `item[*].<field>` is the record metadata's id
4206
+ for a sublist field (the editor shows its label, "Items : Location (InternalId)"),
4207
+ and the form typed as a destination to add a row the editor's picker lacks (see
4208
+ `lists`); the document stores it as the bare field id under `lists[]` with
4209
+ `generate: item`. A body row carrying that form is not a line mapping.
4190
4210
  - |-
4191
4211
  `celigo_recordmode_dynamic` with `hardCodedValue: "true"` is Celigo's documented
4192
4212
  "Use Dynamic Mode" row: the record is created or loaded in NetSuite's dynamic mode,
@@ -4412,8 +4432,9 @@ components:
4412
4432
  generate:
4413
4433
  type: string
4414
4434
  description: |
4415
- The NetSuite sublist ID (e.g., "item" for sales order line items,
4416
- "addressbook" for address sublists).
4435
+ The NetSuite sublist ID as the record metadata lists it (e.g., "item" for sales
4436
+ order line items, "addressbook" for address sublists); the mapping editor shows
4437
+ the sublist by its label ("Items"), which is never the id.
4417
4438
  jsonPath:
4418
4439
  type: string
4419
4440
  description: LEGACY — do not set. Nominally the JSON path to the array of sublist records, but NetSuite DA ignores a top-level jsonPath here.
@@ -4485,7 +4506,30 @@ components:
4485
4506
  `netsuite_da.lookups[].expression`.
4486
4507
  generate:
4487
4508
  type: string
4488
- description: NetSuite sublist field ID to write to.
4509
+ description: |-
4510
+ NetSuite sublist field ID to write to, stored as the bare field id (`location`,
4511
+ `quantity`): the editor's `item[*].` prefix, the `.internalid` suffix (see
4512
+ `internalId`) and the editor's label ("Items : Location (InternalId)") are
4513
+ the editor's forms, not the stored value.
4514
+ x-celigo-ai-guidance:
4515
+ - |-
4516
+ Which line field exists depends on the NetSuite account: a sales order line's
4517
+ location is `location` unless the account's Intercompany Cross-Subsidiary
4518
+ Fulfillment feature is enabled, when NetSuite replaces it with
4519
+ `inventorylocation` — the record metadata then lists
4520
+ `item[*].inventorylocation.internalid` and no `item[*].location.internalid`;
4521
+ without the feature it lists `item[*].location.internalid` and
4522
+ `item[*].location` and no row whose id contains `inventorylocation`. Map the
4523
+ line location to whichever the account has, stored as `generate:
4524
+ inventorylocation` or `generate: location` with `internalId: true` — the
4525
+ metadata id's `.internalid` suffix is the `internalId` flag, not part of the
4526
+ stored id.
4527
+ - |-
4528
+ Put the `item` row before the line's `inventorylocation` row. Observed on a
4529
+ standard-mode sales order import (no `celigo_recordmode_dynamic` row):
4530
+ with `inventorylocation` (`internalId: true`) mapped above `item`, every
4531
+ line failed — the location was validated against a line that had no item
4532
+ yet; moved below the `item` row, the same mapping saved.
4489
4533
  hardCodedValue:
4490
4534
  type: string
4491
4535
  description: Static value for this sublist field.
@@ -4731,7 +4775,8 @@ components:
4731
4775
  as a writable one. The mapper's "Items : Line ID" is `line` (the fulfillment's own line number,
4732
4776
  equal to the order line only on a fresh full transform) and "Items : Line Number" is `linenum`;
4733
4777
  `orderline` and `kitmemberof` are not in its picker — type `item[*].orderline` /
4734
- `item[*].kitmemberof` as the destination.
4778
+ `item[*].kitmemberof` as the destination (the metadata id form of a sublist field; the
4779
+ document stores `orderline` / `kitmemberof` under `lists[]` with `generate: item`).
4735
4780
  - |-
4736
4781
  Kit components on a fulfillment: the item is the only default key that reaches a component
4737
4782
  line, so a component two kit lines share fails with `MULTIPLE_LINES_WITH_SAME_KEYS`. Keying the
@@ -859,7 +859,19 @@ components:
859
859
  `Connection`s, `Flow`s, `Export`s, `Import`s, `Script`s and any
860
860
  other supporting resources; for an MCP server template it is the
861
861
  `McpServer` doc first, then its `Connection`s, `Export`s, `Import`s,
862
- `Script`s and `Tool`s, then one `Prompt` entry per inline prompt.
862
+ `Script`s, `Tool`s and `Api`s, then one `Prompt` entry per inline
863
+ prompt and one `McpResource` entry per Celigo Storage file the
864
+ server serves. The `McpServer` doc is the template's secret-free
865
+ manifest: tool and API attachments (MCP-exposed `name`,
866
+ `annotations`, per-tool connection `overrides` with
867
+ `requiresEndUserCredentials`), inline `prompts`, `resources`,
868
+ `connections` that require end-user credentials,
869
+ `upstreamMcpConnections` with the selected proxied items,
870
+ `permissionSets` (capability sets as portable references),
871
+ `policies` and `oauth.useCeligoOauth` — each section present only
872
+ when the server has it. A template published before the artifact
873
+ widened carries tools and prompts only, so its `McpServer` doc has
874
+ none of the newer sections.
863
875
  items:
864
876
  type: object
865
877
  description: One resource doc tagged with its model type.
@@ -881,6 +893,7 @@ components:
881
893
  - Api
882
894
  - Tool
883
895
  - Prompt
896
+ - McpResource
884
897
  x-enumDescriptions:
885
898
  Integration: Integration workspace resource (integration templates only)
886
899
  McpServer: MCP server resource (MCP server templates only)
@@ -896,6 +909,7 @@ components:
896
909
  Api: Builder-mode API resource
897
910
  Tool: Tool resource invoked by MCP servers, APIs, and flows
898
911
  Prompt: Inline prompt definition of the MCP server (MCP server templates only)
912
+ McpResource: Celigo Storage file the MCP server serves as a resource — name, description, MIME type and size, never the bytes (MCP server templates only)
899
913
  description: |-
900
914
  Resource class this doc describes. Which classes appear depends
901
915
  on what the template zip contains; `Integration` and `Prompt`
@@ -1018,6 +1018,11 @@ paths:
1018
1018
  Every request starts a new install, so retrying after a timeout or an
1019
1019
  ambiguous failure creates a duplicate server or install-mode
1020
1020
  Integration.
1021
+
1022
+ Requires the `install:template` permission. A template that packs
1023
+ resource files is refused up front in a sandbox account (422
1024
+ `MCP_TEMPLATE_RESOURCE_UNAVAILABLE` naming `sandbox`) — install it from
1025
+ a production account.
1021
1026
  x-celigo-ai-guidance:
1022
1027
  - 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.
1023
1028
  - 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.
@@ -1118,6 +1123,8 @@ paths:
1118
1123
  message: The MCP template contains an invalid entry.
1119
1124
  '401':
1120
1125
  $ref: '#/components/responses/401-unauthorized'
1126
+ '403':
1127
+ $ref: '#/components/responses/403-forbidden'
1121
1128
  '404':
1122
1129
  description: The `runKey` does not match an uploaded file.
1123
1130
  content:
@@ -1149,8 +1156,9 @@ paths:
1149
1156
  The ZIP is not an installable MCP-server template, so nothing was
1150
1157
  created: the same checks and codes as the preview (`invalid_ref`,
1151
1158
  `invalid_template`, `MCP_TEMPLATE_DEPENDENCY_MISSING`,
1152
- `MCP_TEMPLATE_RESOURCE_TOO_LARGE`). Retrying with the same ZIP fails
1153
- the same way.
1159
+ `MCP_TEMPLATE_RESOURCE_TOO_LARGE`), plus `MCP_TEMPLATE_RESOURCE_UNAVAILABLE`
1160
+ naming `sandbox` when the template packs resource files and the
1161
+ account is a sandbox. Retrying with the same ZIP fails the same way.
1154
1162
  content:
1155
1163
  application/json:
1156
1164
  schema:
@@ -1166,6 +1174,12 @@ paths:
1166
1174
  errors:
1167
1175
  - code: MCP_TEMPLATE_DEPENDENCY_MISSING
1168
1176
  message: The MCP template is missing connection 6ab130000000000000000c01.
1177
+ sandboxResources:
1178
+ summary: Template packs resource files, installing account is a sandbox
1179
+ value:
1180
+ errors:
1181
+ - code: MCP_TEMPLATE_RESOURCE_UNAVAILABLE
1182
+ message: Resource file sandbox is missing or cannot be exported.
1169
1183
  /v1/mcpservers/template/{_templateId}:
1170
1184
  post:
1171
1185
  x-internal: false
@@ -1183,19 +1197,50 @@ paths:
1183
1197
  What the install creates depends on the template's contents, reported by
1184
1198
  the response's `destination` envelope:
1185
1199
 
1186
- - **Prompt-only templates** (no tools) create the MCP server
1187
- immediately, disabled. `destination.resourceType` is `mcpservers`.
1188
- - **Tool-bearing templates** hand off to the Integration installer:
1189
- `destination.resourceType` is `integrations` and names an Integration
1190
- in install mode, where connection mapping and the remaining install
1191
- steps continue. The MCP server is created — disabled — by the
1192
- Integration's terminal install step, after the tools are cloned.
1200
+ - **Prompt-only templates** (inline prompts and nothing else) create
1201
+ the MCP server immediately, disabled. `destination.resourceType` is
1202
+ `mcpservers`.
1203
+ - **Every other template** — one that packs tools, APIs, connections,
1204
+ Celigo Storage resources, upstream MCP connections or capability sets
1205
+ — hands off to the Integration installer: `destination.resourceType`
1206
+ is `integrations` and names an Integration in install mode (it
1207
+ carries the server's name; its setup page is titled *Install MCP
1208
+ server: name*), with an install step per packed connection and a
1209
+ terminal step that copies the resource files into that Integration's
1210
+ folder in Celigo Storage and creates the MCP server, disabled. The
1211
+ remaining refusals surface inside those steps, not on this request.
1212
+ On a connection step's save: 409 `MCP_TEMPLATE_CONNECTION_INCOMPATIBLE`
1213
+ when the template connection requires end-user credentials and the
1214
+ installer reuses an existing connection of a different connector
1215
+ type (only the type is compared — not the auth type or the end-user
1216
+ fields; a newly created connection never trips it; the terminal step
1217
+ re-checks the same rule as a backstop) — pick or create a connection
1218
+ of the template's type on that step. On the terminal step: 422
1219
+ `MCP_TEMPLATE_DEPENDENCY_MISSING` / `MCP_TEMPLATE_MEMBER_UNRESOLVED`
1220
+ (a packed API or connection, or a capability-set member, that nothing
1221
+ installed answers), the Celigo Storage refusals below, and 503
1222
+ `MCP_TEMPLATE_INSTALL_RETRYABLE` (transient). The remedy is the same
1223
+ for every one of them — fix the cause and retry that step, never
1224
+ this POST, which installs again.
1225
+
1226
+ The installed server carries what the template packed: tools and APIs
1227
+ (re-created in the companion Integration), prompts, resources, the
1228
+ upstream MCP connections with the publisher's selected proxied
1229
+ capabilities and overrides, which connections require end-user
1230
+ credentials, the capability sets re-pointed at the new server's own
1231
+ capabilities, the traffic policies, and Celigo as OAuth provider when
1232
+ the publisher used it. It carries no end user, group, role, grant,
1233
+ credential or network policy: the capability sets are created without
1234
+ assignments, and nobody can call the server until an owner or
1235
+ administrator grants access and enables it. A template published
1236
+ before the artifact widened installs tools and prompts only until its
1237
+ publisher re-exports it.
1193
1238
 
1194
1239
  Integration templates do not install through this path — they use
1195
1240
  `POST /v1/integrations/template/{_id}`. Each path rejects the other
1196
1241
  class: this one returns 404 for a template that is not a published
1197
1242
  MCP-server template, and the integration path rejects MCP-server
1198
- templates with a 400 `invalid_template` error.
1243
+ templates with a 400 `invalid_template` error pointing at Upload MCP.
1199
1244
 
1200
1245
  Every request that reaches the platform starts a new install — there is
1201
1246
  no idempotency key, so retrying after a timeout or ambiguous failure
@@ -1206,9 +1251,11 @@ paths:
1206
1251
 
1207
1252
  Requires the `install:published:template` permission.
1208
1253
  x-celigo-ai-guidance:
1209
- - Send an empty JSON object as the body. Connection mapping for tool-bearing templates happens later, in the created Integration's install steps — never invent a connectionMap for this endpoint.
1254
+ - Send an empty JSON object as the body. For every template beyond prompt-only (tools, APIs, connections, resources, upstream MCP connections or capability sets) connection mapping happens later, in the created Integration's install steps — never invent a connectionMap for this endpoint.
1210
1255
  - Never retry this POST after a timeout or an ambiguous failure — a request that reached the platform already started an install, and a second request installs a duplicate.
1211
1256
  - Branch the follow-up on destination.resourceType — "integrations" means install steps continue on the created Integration (its setup page); "mcpservers" means the disabled MCP server already exists and needs enabling and access before clients can use it.
1257
+ - The installed server's capability sets have no assignments and the server is disabled — tell the installer to review the connections (which ones need end-user credentials), review any proxied capabilities, grant access, then enable it.
1258
+ - A failure inside the created Integration's setup steps — a 409 on a connection step, a 422 / 503 on the terminal step — is fixed and retried on that step, never by sending this POST again.
1212
1259
  parameters:
1213
1260
  - name: _templateId
1214
1261
  in: path
@@ -1255,7 +1302,7 @@ paths:
1255
1302
  - integrations
1256
1303
  x-enumDescriptions:
1257
1304
  mcpservers: The disabled MCP server created directly from a prompt-only template
1258
- integrations: The install-mode Integration created for a tool-bearing template
1305
+ integrations: The install-mode Integration created for a template that packs tools, APIs, connections, resources, upstream MCP connections or capability sets
1259
1306
  description: |-
1260
1307
  Which resource type the install created — determines
1261
1308
  where the caller continues the setup.
@@ -1300,15 +1347,24 @@ paths:
1300
1347
  '422':
1301
1348
  description: |-
1302
1349
  The install was rejected before anything was created. As-built
1303
- cases: the template packages capabilities an MCP-server template
1304
- cannot carry (`invalid_template` — only tools and inline prompts
1305
- are portable), a packaged tool is missing or inaccessible
1306
- (`invalid_template`), or `relativeURI` de-duplication exhausted its
1307
- `-2`…`-100` suffixes (`invalid_value` — the account already holds
1308
- 100 servers on that URI; delete or rename some before installing
1309
- again). None of these are retryable unchanged — and never retry
1310
- the POST blindly, since a request that reached the platform may
1311
- already have installed something.
1350
+ cases on this request: a packaged tool is missing or inaccessible
1351
+ (`invalid_template`); the template packs resource files and the
1352
+ installing account is a sandbox (`MCP_TEMPLATE_RESOURCE_UNAVAILABLE`
1353
+ naming `sandbox` — install into a production account instead); or,
1354
+ for a **prompt-only** template — the only class whose server is
1355
+ created on this request — `relativeURI` de-duplication exhausted
1356
+ its `-2`…`-100` suffixes (`invalid_value`: the account already
1357
+ holds 100 servers on that URI; delete or rename some before
1358
+ installing again). None of these are retryable unchanged — and
1359
+ never retry the POST blindly, since a request that reached the
1360
+ platform may already have installed something. For every other
1361
+ template the server is created by the Integration's terminal
1362
+ install step, so the same `invalid_value` exhaustion, the Storage
1363
+ refusals for packed resources (`MCP_TEMPLATE_STORAGE_UNAVAILABLE`
1364
+ when the account has no Celigo Storage,
1365
+ `MCP_TEMPLATE_STORAGE_PERMISSION_REQUIRED`) and the other
1366
+ terminal-step codes named in the description surface there, with
1367
+ the Integration already in place — retry that step, not this POST.
1312
1368
  content:
1313
1369
  application/json:
1314
1370
  schema:
@@ -1320,12 +1376,12 @@ paths:
1320
1376
  errors:
1321
1377
  - code: invalid_value
1322
1378
  message: Unable to generate a unique relative URI for the MCP server from /installed-mcp-server.
1323
- unsupportedCapability:
1324
- summary: Template packages non-portable capabilities
1379
+ sandboxResources:
1380
+ summary: Template packs resource files, installing account is a sandbox
1325
1381
  value:
1326
1382
  errors:
1327
- - code: invalid_template
1328
- message: 'Installing an MCP server supports only tools and prompts. Unsupported: apis, resources.'
1383
+ - code: MCP_TEMPLATE_RESOURCE_UNAVAILABLE
1384
+ message: Resource file sandbox is missing or cannot be exported.
1329
1385
  /v1/mcpservers/{_id}/template:
1330
1386
  get:
1331
1387
  x-internal: false
@@ -1334,24 +1390,36 @@ paths:
1334
1390
  - MCP Servers
1335
1391
  summary: Export an MCP server as a template ZIP
1336
1392
  description: |-
1337
- Generates a template ZIP from the MCP server and returns a temporary
1338
- signed URL for downloading it. The ZIP contains the server document,
1339
- its inline prompts, its tools, and the resources those tools depend on
1340
- (exports, imports, connections, scripts) — a prompt-only server (no
1341
- tools) exports successfully. The ZIP is the artifact a publisher
1342
- uploads when authoring an MCP-server marketplace template; installing
1343
- that template recreates the server via
1344
- `POST /v1/mcpservers/template/{_templateId}`.
1393
+ Generates a template ZIP from the MCP server (the **Download MCP**
1394
+ action) and returns a temporary signed URL for it. The ZIP carries the
1395
+ whole server as a secret-free manifest (`mcpserver.json`) plus what it
1396
+ depends on: tool and API attachments with their Tool and API documents
1397
+ (and their exports, imports, connections, scripts), inline prompts,
1398
+ the Celigo Storage files served as resources (bytes included),
1399
+ upstream MCP connections with the selected proxied items and
1400
+ overrides, which connections require end-user credentials, capability
1401
+ sets (`permissionSets`) as portable references, traffic `policies`,
1402
+ and whether Celigo is the OAuth identity provider. Never carried:
1403
+ credentials, API tokens, end users, groups, roles, grants, end users'
1404
+ own connections, network policies, request-log settings, the external
1405
+ OAuth issuer and client, `showInPublicRegistry`. The manifest sets
1406
+ `disabled: true`. A prompt-only server exports successfully.
1345
1407
 
1346
- Only tools and inline prompts are portable. A server that publishes
1347
- APIs (`apis[]`) or file resources (`resources[]`) fails the export up
1348
- front with a 400 `invalid_template` error — no ZIP is generated;
1349
- nothing is stripped to make it succeed.
1408
+ The same ZIP feeds two paths: a Partner uploads it when publishing an
1409
+ MCP-server marketplace template (installed with
1410
+ `POST /v1/mcpservers/template/{_templateId}`); any account owner or
1411
+ administrator installs it directly into another account or environment
1412
+ with `POST /v1/mcpservers/template` after uploading it through
1413
+ `GET /v1/s3SignedURL` (the **Upload MCP** action). A ZIP exported
1414
+ before the artifact widened carries tools and prompts only — export
1415
+ again to include the rest.
1350
1416
 
1351
1417
  The signed URL expires after about 60 seconds — download promptly, and
1352
1418
  call the endpoint again for a fresh URL rather than storing this one.
1353
1419
 
1354
- Requires the `create:mcpserver:template` permission.
1420
+ Requires the `create:mcpserver:template` permission; a server that
1421
+ serves resources also needs read access to those files in Celigo
1422
+ Storage.
1355
1423
  parameters:
1356
1424
  - name: _id
1357
1425
  in: path
@@ -1391,33 +1459,73 @@ paths:
1391
1459
  value:
1392
1460
  signedURL: https://s3.amazonaws.com/templates/mcp-export/69eb9fb5b4fc023618e490b8.zip?X-Amz-Expires=60
1393
1461
  key: mcp-export/69eb9fb5b4fc023618e490b8.zip
1394
- '400':
1462
+ '401':
1463
+ $ref: '#/components/responses/401-unauthorized'
1464
+ '403':
1395
1465
  description: |-
1396
- The server publishes capabilities a template cannot carry — only
1397
- tools and inline prompts are portable. Remove the APIs / file
1398
- resources (or export a server without them); retrying unchanged
1399
- fails identically.
1466
+ The caller lacks the `create:mcpserver:template` permission
1467
+ (`forbidden`), or — when the server serves resources — Celigo
1468
+ Storage refused to read those files' metadata for the caller
1469
+ (`MCP_TEMPLATE_STORAGE_PERMISSION_REQUIRED`). The export raises
1470
+ that second code with the error store's shared message, which is
1471
+ phrased for the install ("…required to install this MCP
1472
+ template"); on this endpoint it means the download was refused
1473
+ before any archive was built — nothing was installed. Grant the
1474
+ caller read access to the server's resource files and retry.
1400
1475
  content:
1401
1476
  application/json:
1402
1477
  schema:
1403
1478
  $ref: '#/components/schemas/Error'
1404
1479
  examples:
1405
- unsupportedCapability:
1406
- summary: Server publishes APIs or file resources
1480
+ forbidden:
1481
+ summary: The caller lacks the export permission
1407
1482
  value:
1408
1483
  errors:
1409
- - code: invalid_template
1410
- message: 'Installing an MCP server supports only tools and prompts. Unsupported: apis, resources.'
1411
- '401':
1412
- $ref: '#/components/responses/401-unauthorized'
1413
- '403':
1414
- $ref: '#/components/responses/403-forbidden'
1484
+ - code: forbidden
1485
+ message: You do not have permission to access this resource.
1486
+ storagePermission:
1487
+ summary: The server serves resources the caller cannot read
1488
+ value:
1489
+ errors:
1490
+ - code: MCP_TEMPLATE_STORAGE_PERMISSION_REQUIRED
1491
+ message: Celigo Storage file creation is required to install this MCP template.
1415
1492
  '404':
1416
1493
  $ref: '#/components/responses/404-not-found'
1494
+ '413':
1495
+ description: |-
1496
+ The resource files total more than the ZIP limit (32 MiB
1497
+ uncompressed). Remove or shrink resources, or export a server
1498
+ without them.
1499
+ content:
1500
+ application/json:
1501
+ schema:
1502
+ $ref: '#/components/schemas/Error'
1503
+ examples:
1504
+ zipTooLarge:
1505
+ value:
1506
+ errors:
1507
+ - code: MCP_TEMPLATE_ZIP_TOO_LARGE
1508
+ message: The MCP template zip exceeds the allowed size.
1417
1509
  '422':
1418
1510
  description: |-
1419
- The export could not assemble a complete ZIP — a tool or its
1420
- backing integration is missing or not accessible to the caller.
1511
+ The export could not assemble a complete ZIP: a tool, API,
1512
+ connection or backing integration is missing or not accessible to
1513
+ the caller (`invalid_template`); a capability set names a member
1514
+ that no longer exists on the server (`MCP_TEMPLATE_MEMBER_UNRESOLVED`,
1515
+ naming the set and the member); a resource file is missing,
1516
+ deleted, still uploading, or a folder (`MCP_TEMPLATE_RESOURCE_UNAVAILABLE`,
1517
+ naming the file — folders and skills are not carried); or a
1518
+ resource file exceeds 3 MiB (`MCP_TEMPLATE_RESOURCE_TOO_LARGE`,
1519
+ naming the file). Fix the named dependency, set or file, or export
1520
+ a server without it; retrying unchanged fails identically. The
1521
+ export never refuses on resource count: a server cannot be saved
1522
+ with more than 100 resources (`POST` and `PUT /v1/mcpservers`
1523
+ answer 422 `resource_invalid` on `resources`), so a saved server
1524
+ never meets the count cap. That refusal —
1525
+ `MCP_TEMPLATE_RESOURCE_TOO_LARGE` naming `resource count` — is
1526
+ raised by the ZIP's readers (the upload preview and both installs)
1527
+ and is reached only by a manifest edited by hand to declare more
1528
+ than 100.
1421
1529
  content:
1422
1530
  application/json:
1423
1531
  schema:
@@ -1429,6 +1537,24 @@ paths:
1429
1537
  errors:
1430
1538
  - code: invalid_template
1431
1539
  message: The MCP server template contains a missing or inaccessible tool dependency.
1540
+ memberUnresolved:
1541
+ summary: A capability set names a member the server no longer has
1542
+ value:
1543
+ errors:
1544
+ - code: MCP_TEMPLATE_MEMBER_UNRESOLVED
1545
+ message: Capability set Finance references 6ab130000000000000000a07, which cannot be installed.
1546
+ resourceUnavailable:
1547
+ summary: A resource file cannot be exported
1548
+ value:
1549
+ errors:
1550
+ - code: MCP_TEMPLATE_RESOURCE_UNAVAILABLE
1551
+ message: Resource file pricing-policy.pdf is missing or cannot be exported.
1552
+ resourceTooLarge:
1553
+ summary: A resource file exceeds 3 MiB
1554
+ value:
1555
+ errors:
1556
+ - code: MCP_TEMPLATE_RESOURCE_TOO_LARGE
1557
+ message: Resource file product-catalog.pdf exceeds the allowed size.
1432
1558
  /v1/mcpservers/{_id}/dependencies:
1433
1559
  get:
1434
1560
  x-internal: false
@@ -4265,9 +4391,10 @@ components:
4265
4391
  description: |-
4266
4392
  Files from Celigo Storage exposed to MCP clients as MCP resources.
4267
4393
  Each entry references a storage file by `_fileId`; the same file can
4268
- appear only once. Always returned in responses — servers created
4269
- before resource support return an empty array. Not supported on
4270
- sandbox servers.
4394
+ appear only once, and a server holds at most 100 (a larger array is
4395
+ refused with 422 `resource_invalid`). Always returned in responses —
4396
+ servers created before resource support return an empty array. Not
4397
+ supported on sandbox servers.
4271
4398
  x-celigo-ai-guidance:
4272
4399
  - |-
4273
4400
  Each resource exposes a Celigo Storage file to MCP clients.
package/dist/tool.yml CHANGED
@@ -16470,9 +16470,29 @@ components:
16470
16470
  (replace a sublist's lines on update), and the rows Celigo's field-definitions article
16471
16471
  lists by label (Ignore Mandatory Fields, Initialize Values, Persist New Line Insertion
16472
16472
  Order, Print Nlapi Debug Logs, Group Lines By, Use Address Subrecord, Void Transaction).
16473
+ For a NetSuite field it is always the field's script id: the mapping editor shows each
16474
+ destination by its label ("Customer (InternalId)", "Items : Location (InternalId)"),
16475
+ and a label saved here is not a field. The control rows above keep their own ids.
16473
16476
  examples:
16474
16477
  - companyname
16475
16478
  x-celigo-ai-guidance:
16479
+ - |-
16480
+ `Items : Location (InternalId)` saved as a body row's `generate` — the editor's
16481
+ label for `item[*].location.internalid`, not a field id — was accepted by the save,
16482
+ rendered by the mapping preview, and ignored by NetSuite on a sales order import:
16483
+ the import succeeded with the field blank and no error anywhere. A label is never
16484
+ a script id. Resolve ids from the record metadata
16485
+ (`GET /v1/netsuite/metadata/suitescript/connections/{_id}/recordTypes/{recordType}`,
16486
+ `listNetSuiteRecordTypeFields`), whose rows carry each field's `id` and its editor
16487
+ label as `name`; that list is the editor's destination dropdown and is form- and
16488
+ role-dependent, so a standard field hidden on the form is absent from it yet still
16489
+ written by id.
16490
+ - |-
16491
+ A line field is never a body row. `item[*].<field>` is the record metadata's id
16492
+ for a sublist field (the editor shows its label, "Items : Location (InternalId)"),
16493
+ and the form typed as a destination to add a row the editor's picker lacks (see
16494
+ `lists`); the document stores it as the bare field id under `lists[]` with
16495
+ `generate: item`. A body row carrying that form is not a line mapping.
16476
16496
  - |-
16477
16497
  `celigo_recordmode_dynamic` with `hardCodedValue: "true"` is Celigo's documented
16478
16498
  "Use Dynamic Mode" row: the record is created or loaded in NetSuite's dynamic mode,
@@ -16698,8 +16718,9 @@ components:
16698
16718
  generate:
16699
16719
  type: string
16700
16720
  description: |
16701
- The NetSuite sublist ID (e.g., "item" for sales order line items,
16702
- "addressbook" for address sublists).
16721
+ The NetSuite sublist ID as the record metadata lists it (e.g., "item" for sales
16722
+ order line items, "addressbook" for address sublists); the mapping editor shows
16723
+ the sublist by its label ("Items"), which is never the id.
16703
16724
  jsonPath:
16704
16725
  type: string
16705
16726
  description: LEGACY — do not set. Nominally the JSON path to the array of sublist records, but NetSuite DA ignores a top-level jsonPath here.
@@ -16771,7 +16792,30 @@ components:
16771
16792
  `netsuite_da.lookups[].expression`.
16772
16793
  generate:
16773
16794
  type: string
16774
- description: NetSuite sublist field ID to write to.
16795
+ description: |-
16796
+ NetSuite sublist field ID to write to, stored as the bare field id (`location`,
16797
+ `quantity`): the editor's `item[*].` prefix, the `.internalid` suffix (see
16798
+ `internalId`) and the editor's label ("Items : Location (InternalId)") are
16799
+ the editor's forms, not the stored value.
16800
+ x-celigo-ai-guidance:
16801
+ - |-
16802
+ Which line field exists depends on the NetSuite account: a sales order line's
16803
+ location is `location` unless the account's Intercompany Cross-Subsidiary
16804
+ Fulfillment feature is enabled, when NetSuite replaces it with
16805
+ `inventorylocation` — the record metadata then lists
16806
+ `item[*].inventorylocation.internalid` and no `item[*].location.internalid`;
16807
+ without the feature it lists `item[*].location.internalid` and
16808
+ `item[*].location` and no row whose id contains `inventorylocation`. Map the
16809
+ line location to whichever the account has, stored as `generate:
16810
+ inventorylocation` or `generate: location` with `internalId: true` — the
16811
+ metadata id's `.internalid` suffix is the `internalId` flag, not part of the
16812
+ stored id.
16813
+ - |-
16814
+ Put the `item` row before the line's `inventorylocation` row. Observed on a
16815
+ standard-mode sales order import (no `celigo_recordmode_dynamic` row):
16816
+ with `inventorylocation` (`internalId: true`) mapped above `item`, every
16817
+ line failed — the location was validated against a line that had no item
16818
+ yet; moved below the `item` row, the same mapping saved.
16775
16819
  hardCodedValue:
16776
16820
  type: string
16777
16821
  description: Static value for this sublist field.
@@ -17017,7 +17061,8 @@ components:
17017
17061
  as a writable one. The mapper's "Items : Line ID" is `line` (the fulfillment's own line number,
17018
17062
  equal to the order line only on a fresh full transform) and "Items : Line Number" is `linenum`;
17019
17063
  `orderline` and `kitmemberof` are not in its picker — type `item[*].orderline` /
17020
- `item[*].kitmemberof` as the destination.
17064
+ `item[*].kitmemberof` as the destination (the metadata id form of a sublist field; the
17065
+ document stores `orderline` / `kitmemberof` under `lists[]` with `generate: item`).
17021
17066
  - |-
17022
17067
  Kit components on a fulfillment: the item is the only default key that reaches a component
17023
17068
  line, so a component two kit lines share fails with `MULTIPLE_LINES_WITH_SAME_KEYS`. Keying the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.218",
3
+ "version": "0.2.220",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "a159c7c3",
5
- "generatedAt": "2026-11-02"
4
+ "iasCommit": "21e9de71",
5
+ "generatedAt": "2026-11-03"
6
6
  },
7
7
  "roots": {
8
8
  "aiagent": 128,