@typeship-ax/mcp 0.8.0 → 0.9.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 (103) hide show
  1. package/AGENTS.md +31 -0
  2. package/README.md +66 -9
  3. package/api.json +1617 -712
  4. package/api.md +8292 -382
  5. package/dist/api-identity.d.ts +40 -0
  6. package/dist/api-identity.d.ts.map +1 -0
  7. package/dist/api-identity.js +128 -0
  8. package/dist/auth-profiles.d.ts +30 -0
  9. package/dist/auth-profiles.d.ts.map +1 -0
  10. package/dist/auth-profiles.js +138 -0
  11. package/dist/core/http.d.ts +17 -2
  12. package/dist/core/http.d.ts.map +1 -1
  13. package/dist/core/http.js +78 -17
  14. package/dist/credential-storage.d.ts +24 -0
  15. package/dist/credential-storage.d.ts.map +1 -0
  16. package/dist/credential-storage.js +207 -0
  17. package/dist/docs.d.ts +25 -0
  18. package/dist/docs.d.ts.map +1 -1
  19. package/dist/docs.js +144 -0
  20. package/dist/errors.d.ts +18 -10
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +24 -14
  23. package/dist/index.d.ts +10 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +20 -4
  26. package/dist/mcp-authorization.d.ts +52 -0
  27. package/dist/mcp-authorization.d.ts.map +1 -0
  28. package/dist/mcp-authorization.js +232 -0
  29. package/dist/mcp-protocol.d.ts +51 -2
  30. package/dist/mcp-protocol.d.ts.map +1 -1
  31. package/dist/mcp-protocol.js +249 -37
  32. package/dist/mcp.d.ts +21 -3
  33. package/dist/mcp.d.ts.map +1 -1
  34. package/dist/mcp.js +185 -68
  35. package/dist/named-credentials.d.ts +21 -0
  36. package/dist/named-credentials.d.ts.map +1 -0
  37. package/dist/named-credentials.js +86 -0
  38. package/dist/oauth-request.d.ts +21 -0
  39. package/dist/oauth-request.d.ts.map +1 -0
  40. package/dist/oauth-request.js +119 -0
  41. package/dist/oauth-session.d.ts +106 -0
  42. package/dist/oauth-session.d.ts.map +1 -0
  43. package/dist/oauth-session.js +244 -0
  44. package/dist/ops.d.ts +14 -1
  45. package/dist/ops.d.ts.map +1 -1
  46. package/dist/ops.js +30 -30
  47. package/dist/resources/account.d.ts +2 -2
  48. package/dist/resources/account.d.ts.map +1 -1
  49. package/dist/resources/account.js +1 -0
  50. package/dist/resources/api-keys.d.ts +3 -3
  51. package/dist/resources/api-keys.d.ts.map +1 -1
  52. package/dist/resources/api-keys.js +2 -0
  53. package/dist/resources/definition-revisions.d.ts +5 -5
  54. package/dist/resources/definition-revisions.d.ts.map +1 -1
  55. package/dist/resources/definition-revisions.js +4 -0
  56. package/dist/resources/definitions.d.ts +15 -4
  57. package/dist/resources/definitions.d.ts.map +1 -1
  58. package/dist/resources/definitions.js +11 -2
  59. package/dist/resources/generate.d.ts +14 -3
  60. package/dist/resources/generate.d.ts.map +1 -1
  61. package/dist/resources/generate.js +10 -2
  62. package/dist/resources/generations.d.ts +3 -3
  63. package/dist/resources/generations.d.ts.map +1 -1
  64. package/dist/resources/generations.js +2 -0
  65. package/dist/resources/projects.d.ts +56 -20
  66. package/dist/resources/projects.d.ts.map +1 -1
  67. package/dist/resources/projects.js +40 -4
  68. package/dist/resources/targets.d.ts +20 -9
  69. package/dist/resources/targets.d.ts.map +1 -1
  70. package/dist/resources/targets.js +14 -1
  71. package/dist/schemas.d.ts.map +1 -1
  72. package/dist/schemas.js +38 -22
  73. package/dist/types.d.ts +385 -119
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js +11 -0
  76. package/dist/worker.js +4 -4
  77. package/package.json +11 -1
  78. package/server.json +42 -0
  79. package/src/api-identity.ts +98 -0
  80. package/src/auth-profiles.ts +114 -0
  81. package/src/core/http.ts +88 -19
  82. package/src/credential-storage.ts +183 -0
  83. package/src/docs.ts +138 -0
  84. package/src/errors.ts +26 -15
  85. package/src/index.ts +29 -4
  86. package/src/mcp-authorization.ts +211 -0
  87. package/src/mcp-protocol.ts +287 -38
  88. package/src/mcp.ts +186 -72
  89. package/src/named-credentials.ts +74 -0
  90. package/src/oauth-request.ts +90 -0
  91. package/src/oauth-session.ts +258 -0
  92. package/src/ops.ts +44 -31
  93. package/src/resources/account.ts +3 -0
  94. package/src/resources/api-keys.ts +5 -0
  95. package/src/resources/definition-revisions.ts +9 -0
  96. package/src/resources/definitions.ts +25 -0
  97. package/src/resources/generate.ts +23 -0
  98. package/src/resources/generations.ts +5 -0
  99. package/src/resources/projects.ts +95 -7
  100. package/src/resources/targets.ts +32 -0
  101. package/src/schemas.ts +38 -22
  102. package/src/types.ts +404 -119
  103. package/src/worker.ts +4 -4
package/api.json CHANGED
@@ -4,20 +4,50 @@
4
4
  "api_version": "1.0.0",
5
5
  "spec_format": "openapi",
6
6
  "language": "TypeScript",
7
+ "surface": "mcp",
8
+ "tool_mode": "meta",
7
9
  "operations": [
8
10
  {
9
11
  "operation": "generate.run",
10
- "signature": "client.generate.run(body)",
12
+ "signature": "execute(generate_run, arguments)",
13
+ "tool": "generate_run",
14
+ "example_call": {
15
+ "name": "execute",
16
+ "arguments": {
17
+ "operation": "generate_run",
18
+ "arguments": {
19
+ "definition": {
20
+ "url": "https://example.com"
21
+ },
22
+ "target": {
23
+ "generator": "typescript-sdk"
24
+ }
25
+ }
26
+ }
27
+ },
11
28
  "method": "POST",
12
29
  "path": "/generate",
13
30
  "summary": "Generate one Target from a Definition",
14
31
  "description": "Stateless generation: nothing is stored. Returns the full generated\npackage as files. Works without an API key: anonymous calls generate\nthe first 25 operations, rate limited per IP address, and the\nresponse's `limits` object says what was held back and where to lift\nit; anonymous calls from a Definition URL also carry `claim.url`, a link\nthat turns the run into a project once a person signs in. With a key, the free plan generates the first 25 operations and\npaid plans generate the complete Definition. A present but invalid key is a\n401, not a downgrade to anonymous.",
15
32
  "safety": "write",
16
33
  "auth": "optional",
34
+ "security": [
35
+ {},
36
+ {
37
+ "apiKey": []
38
+ }
39
+ ],
17
40
  "paginated": false,
18
41
  "input_schema": {
19
42
  "type": "object",
20
43
  "properties": {
44
+ "Idempotency-Key": {
45
+ "minLength": 1,
46
+ "maxLength": 255,
47
+ "pattern": "^[!-~]+$",
48
+ "type": "string",
49
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
50
+ },
21
51
  "definition": {
22
52
  "description": "A Definition for stateless generation, provided as exactly one URL or inline entrypoint.",
23
53
  "anyOf": [
@@ -89,7 +119,7 @@
89
119
  "type": "string"
90
120
  },
91
121
  "config": {
92
- "description": "Everything Typeship needs beyond the Definition, in one object: generation customization (globals, retries, pagination) and how the generated tooling behaves (cli, mcp, package, docs_url). Plain configuration. Typeship never requires vendor extensions inside the Definition itself. Stateless generation also accepts GraphQL settings here; stored projects keep those settings on their Definition.",
122
+ "description": "Everything Typeship needs beyond the Definition, in one object: generation customization (globals, retries, pagination, readme) and how the generated tooling behaves (cli, mcp, package, docs_url). Plain configuration. Typeship never requires vendor extensions inside the Definition itself. Stateless generation also accepts GraphQL settings here; stored projects keep those settings on their Definition.",
93
123
  "properties": {
94
124
  "globals": {
95
125
  "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
@@ -265,40 +295,256 @@
265
295
  "additionalProperties": false,
266
296
  "type": "object"
267
297
  },
268
- "cli": {
269
- "description": "How the generated CLI behaves. Part of Config.",
298
+ "auth": {
299
+ "description": "Public authentication defaults for generated clients and tools. Stored Projects own the OAuth server, application catalog, and identity policy; stateless generation accepts the same shape for one run. Runtime credentials and client secrets are never accepted.",
270
300
  "properties": {
271
- "command_name": {
272
- "description": "Command users run, independent of how the CLI is distributed.",
301
+ "oauth_server": {
302
+ "anyOf": [
303
+ {
304
+ "description": "Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.",
305
+ "properties": {
306
+ "issuer": {
307
+ "format": "uri",
308
+ "description": "Exact authorization-server issuer, including any tenant path.",
309
+ "type": [
310
+ "string",
311
+ "null"
312
+ ]
313
+ },
314
+ "discovery_url": {
315
+ "format": "uri",
316
+ "description": "Exact metadata URL when it cannot be derived from the issuer.",
317
+ "type": [
318
+ "string",
319
+ "null"
320
+ ]
321
+ },
322
+ "authorization_url": {
323
+ "format": "uri",
324
+ "description": "Authorization endpoint override.",
325
+ "type": [
326
+ "string",
327
+ "null"
328
+ ]
329
+ },
330
+ "token_url": {
331
+ "format": "uri",
332
+ "description": "Token endpoint override.",
333
+ "type": [
334
+ "string",
335
+ "null"
336
+ ]
337
+ },
338
+ "device_authorization_url": {
339
+ "format": "uri",
340
+ "description": "Device-authorization endpoint override.",
341
+ "type": [
342
+ "string",
343
+ "null"
344
+ ]
345
+ },
346
+ "scopes": {
347
+ "description": "Default scopes requested during login.",
348
+ "maxItems": 20,
349
+ "type": [
350
+ "array",
351
+ "null"
352
+ ]
353
+ },
354
+ "audience": {
355
+ "description": "Default audience included in authorization and token requests.",
356
+ "type": [
357
+ "string",
358
+ "null"
359
+ ]
360
+ },
361
+ "resource": {
362
+ "format": "uri",
363
+ "description": "Protected API resource included in authorization and token requests.",
364
+ "type": [
365
+ "string",
366
+ "null"
367
+ ]
368
+ }
369
+ },
370
+ "additionalProperties": false,
371
+ "type": "object"
372
+ },
373
+ {
374
+ "type": "null"
375
+ }
376
+ ]
377
+ },
378
+ "oauth_applications": {
379
+ "description": "OAuth applications keyed by a stable name.",
380
+ "additionalProperties": {
381
+ "description": "OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.",
382
+ "properties": {
383
+ "client_id": {
384
+ "description": "OAuth client identifier.",
385
+ "minLength": 1,
386
+ "maxLength": 200,
387
+ "type": "string"
388
+ },
389
+ "login_method": {
390
+ "enum": [
391
+ "browser",
392
+ "device",
393
+ null
394
+ ],
395
+ "description": "Interactive login method. Browser login uses Authorization Code with PKCE.",
396
+ "type": [
397
+ "string",
398
+ "null"
399
+ ]
400
+ },
401
+ "client_auth_method": {
402
+ "enum": [
403
+ "post",
404
+ "basic",
405
+ null
406
+ ],
407
+ "description": "How a runtime-supplied client secret is sent for machine grants.",
408
+ "type": [
409
+ "string",
410
+ "null"
411
+ ]
412
+ },
413
+ "redirect_uri": {
414
+ "format": "uri",
415
+ "description": "Loopback callback URL for browser login.",
416
+ "type": [
417
+ "string",
418
+ "null"
419
+ ]
420
+ },
421
+ "organization_parameter": {
422
+ "enum": [
423
+ "organization",
424
+ "organization_id",
425
+ null
426
+ ],
427
+ "description": "Provider parameter used to request an organization during browser login.",
428
+ "type": [
429
+ "string",
430
+ "null"
431
+ ]
432
+ }
433
+ },
434
+ "required": [
435
+ "client_id"
436
+ ],
437
+ "additionalProperties": false,
438
+ "type": "object"
439
+ },
273
440
  "type": [
274
- "string",
441
+ "object",
275
442
  "null"
276
443
  ]
277
444
  },
278
- "whoami_operation": {
279
- "description": "resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides auto-detection; a value that matches nothing is reported as a generation warning.",
445
+ "oauth_application": {
446
+ "description": "Default OAuth application used by generated products.",
447
+ "maxLength": 64,
448
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
280
449
  "type": [
281
450
  "string",
282
451
  "null"
283
452
  ]
284
453
  },
285
- "oauth_client_id": {
286
- "description": "OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.",
454
+ "identity_verification": {
455
+ "anyOf": [
456
+ {
457
+ "description": "Authenticated identity read used to verify a login before it is saved. Operation is auto-detected when omitted. Requests must include at least one of subject_field, account_field, or organization_field.",
458
+ "properties": {
459
+ "operation": {
460
+ "description": "resource.method of a safe identity read with no required arguments.",
461
+ "maxLength": 2000,
462
+ "pattern": "^[\\w$]+\\.[\\w$]+$",
463
+ "type": "string"
464
+ },
465
+ "subject_field": {
466
+ "description": "JSON Pointer to the stable caller ID in the identity response.",
467
+ "maxLength": 512,
468
+ "type": "string"
469
+ },
470
+ "account_field": {
471
+ "description": "JSON Pointer to the customer account ID.",
472
+ "maxLength": 512,
473
+ "type": "string"
474
+ },
475
+ "organization_field": {
476
+ "description": "JSON Pointer to the customer organization ID.",
477
+ "maxLength": 512,
478
+ "type": "string"
479
+ }
480
+ },
481
+ "additionalProperties": false,
482
+ "type": "object"
483
+ },
484
+ {
485
+ "type": "null"
486
+ }
487
+ ]
488
+ },
489
+ "approval_url": {
490
+ "format": "uri",
491
+ "description": "Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.",
287
492
  "type": [
288
493
  "string",
289
494
  "null"
290
495
  ]
291
496
  },
292
- "oauth_scopes": {
293
- "description": "Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.",
294
- "maxItems": 20,
295
- "items": {
296
- "type": "string"
497
+ "environments": {
498
+ "description": "Authentication selections keyed by generated API environment name.",
499
+ "additionalProperties": {
500
+ "description": "OAuth application and request-value overrides for one named API environment.",
501
+ "properties": {
502
+ "oauth_application": {
503
+ "maxLength": 64,
504
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
505
+ "type": [
506
+ "string",
507
+ "null"
508
+ ]
509
+ },
510
+ "scopes": {
511
+ "maxItems": 20,
512
+ "type": [
513
+ "array",
514
+ "null"
515
+ ]
516
+ },
517
+ "audience": {
518
+ "type": [
519
+ "string",
520
+ "null"
521
+ ]
522
+ },
523
+ "resource": {
524
+ "format": "uri",
525
+ "type": [
526
+ "string",
527
+ "null"
528
+ ]
529
+ }
530
+ },
531
+ "additionalProperties": false,
532
+ "type": "object"
297
533
  },
298
- "type": "array"
299
- },
300
- "oauth_audience": {
301
- "description": "Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.",
534
+ "type": [
535
+ "object",
536
+ "null"
537
+ ]
538
+ }
539
+ },
540
+ "additionalProperties": false,
541
+ "type": "object"
542
+ },
543
+ "cli": {
544
+ "description": "How the generated CLI behaves. Part of Config.",
545
+ "properties": {
546
+ "command_name": {
547
+ "description": "Command users run, independent of how the CLI is distributed.",
302
548
  "type": [
303
549
  "string",
304
550
  "null"
@@ -315,13 +561,6 @@
315
561
  "null"
316
562
  ]
317
563
  },
318
- "auth_url": {
319
- "description": "Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier and receives the credential directly; no key is pasted through a conversation.",
320
- "type": [
321
- "string",
322
- "null"
323
- ]
324
- },
325
564
  "mcp_url": {
326
565
  "description": "Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.",
327
566
  "type": [
@@ -341,7 +580,7 @@
341
580
  "type": "object"
342
581
  },
343
582
  "mcp": {
344
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
583
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
345
584
  "properties": {
346
585
  "registry_name": {
347
586
  "description": "Stable official MCP registry name, independent of the server runtime.",
@@ -350,6 +589,40 @@
350
589
  "null"
351
590
  ]
352
591
  },
592
+ "access": {
593
+ "description": "Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting application resolves upstream API credentials separately at runtime. This setting does not apply to the Typeship-hosted endpoint.",
594
+ "properties": {
595
+ "issuer": {
596
+ "format": "uri",
597
+ "description": "Exact issuer allowed to sign MCP connection tokens.",
598
+ "type": "string"
599
+ },
600
+ "resource": {
601
+ "format": "uri",
602
+ "description": "Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.",
603
+ "type": "string"
604
+ },
605
+ "jwks_url": {
606
+ "format": "uri",
607
+ "description": "Public signing-key endpoint. Omit to discover it from the issuer.",
608
+ "type": "string"
609
+ },
610
+ "scopes": {
611
+ "description": "Minimum scopes required to connect to the self-hosted MCP server.",
612
+ "maxItems": 20,
613
+ "items": {
614
+ "type": "string"
615
+ },
616
+ "type": "array"
617
+ }
618
+ },
619
+ "required": [
620
+ "issuer",
621
+ "resource"
622
+ ],
623
+ "additionalProperties": false,
624
+ "type": "object"
625
+ },
353
626
  "tool_mode": {
354
627
  "enum": [
355
628
  "auto",
@@ -374,6 +647,41 @@
374
647
  "type": "string"
375
648
  },
376
649
  "type": "object"
650
+ },
651
+ "reference_resolvers": {
652
+ "description": "Exact name-or-ID resolver overrides keyed first by the target operationId or \"METHOD /path\", then by its wire argument name. A resolver names one read collection operation plus 1-4 item fields to match case-insensitively; false opts that argument out of strict inference.",
653
+ "additionalProperties": {
654
+ "additionalProperties": {
655
+ "anyOf": [
656
+ {
657
+ "enum": [
658
+ false
659
+ ],
660
+ "type": "boolean"
661
+ },
662
+ {
663
+ "type": "object"
664
+ }
665
+ ]
666
+ },
667
+ "type": "object"
668
+ },
669
+ "type": "object"
670
+ }
671
+ },
672
+ "additionalProperties": false,
673
+ "type": "object"
674
+ },
675
+ "readme": {
676
+ "description": "Generated README behavior. Part of Config.",
677
+ "properties": {
678
+ "quickstart_operation": {
679
+ "description": "operationId or \"METHOD /path\" to feature as the README's first API call. It must be present in the generated package and callable with no required input beyond path placeholders. Missing or unsuitable choices produce a warning and use the automatic example.",
680
+ "maxLength": 500,
681
+ "type": [
682
+ "string",
683
+ "null"
684
+ ]
377
685
  }
378
686
  },
379
687
  "additionalProperties": false,
@@ -442,6 +750,13 @@
442
750
  },
443
751
  "additionalProperties": false,
444
752
  "type": "object"
753
+ },
754
+ "fields": {
755
+ "type": "array",
756
+ "items": {
757
+ "type": "string"
758
+ },
759
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
445
760
  }
446
761
  },
447
762
  "required": [
@@ -767,12 +1082,25 @@
767
1082
  },
768
1083
  {
769
1084
  "operation": "projects.list",
770
- "signature": "client.projects.list(params)",
1085
+ "signature": "execute(projects_list, arguments)",
1086
+ "tool": "projects_list",
1087
+ "example_call": {
1088
+ "name": "execute",
1089
+ "arguments": {
1090
+ "operation": "projects_list",
1091
+ "arguments": {}
1092
+ }
1093
+ },
771
1094
  "method": "GET",
772
1095
  "path": "/projects",
773
1096
  "summary": "List projects",
774
1097
  "safety": "read",
775
1098
  "auth": "required",
1099
+ "security": [
1100
+ {
1101
+ "apiKey": []
1102
+ }
1103
+ ],
776
1104
  "paginated": true,
777
1105
  "input_schema": {
778
1106
  "type": "object",
@@ -787,6 +1115,13 @@
787
1115
  "cursor": {
788
1116
  "type": "string",
789
1117
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
1118
+ },
1119
+ "fields": {
1120
+ "type": "array",
1121
+ "items": {
1122
+ "type": "string"
1123
+ },
1124
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
790
1125
  }
791
1126
  }
792
1127
  },
@@ -796,7 +1131,7 @@
796
1131
  "items": {
797
1132
  "type": "array",
798
1133
  "items": {
799
- "description": "Lean Project identity returned by collection endpoints. Retrieve the Project or list its Targets for the complete aggregate.",
1134
+ "description": "Lean Project identity returned by collection endpoints. Retrieve the Project for shared configuration and list its Targets for the complete canonical child collection.",
800
1135
  "properties": {
801
1136
  "id": {
802
1137
  "description": "Unique identifier for a project.",
@@ -857,13 +1192,40 @@
857
1192
  },
858
1193
  {
859
1194
  "operation": "projects.create",
860
- "signature": "client.projects.create(body, params)",
1195
+ "signature": "execute(projects_create, arguments)",
1196
+ "tool": "projects_create",
1197
+ "example_call": {
1198
+ "name": "execute",
1199
+ "arguments": {
1200
+ "operation": "projects_create",
1201
+ "arguments": {
1202
+ "name": "example",
1203
+ "definition": {
1204
+ "source": {
1205
+ "kind": "url",
1206
+ "url": "https://example.com"
1207
+ }
1208
+ },
1209
+ "targets": [
1210
+ {
1211
+ "name": "example",
1212
+ "generator": "typescript-sdk"
1213
+ }
1214
+ ]
1215
+ }
1216
+ }
1217
+ },
861
1218
  "method": "POST",
862
1219
  "path": "/projects",
863
1220
  "summary": "Create a project",
864
1221
  "description": "Stores a URL- or GitHub-sourced project. Free includes one stored project, every selected target, and the first 25 operations, while keeping manual and automatic regeneration, history, destination pull requests, and preview checks. Stateless POST /generate does not consume this slot. Pro adds projects and generates every operation in the Definition.",
865
1222
  "safety": "write",
866
1223
  "auth": "required",
1224
+ "security": [
1225
+ {
1226
+ "apiKey": []
1227
+ }
1228
+ ],
867
1229
  "paginated": false,
868
1230
  "input_schema": {
869
1231
  "type": "object",
@@ -873,7 +1235,7 @@
873
1235
  "maxLength": 255,
874
1236
  "pattern": "^[!-~]+$",
875
1237
  "type": "string",
876
- "description": "Uniquely identifies this creation attempt. Retrying the same request with the same key returns the original response instead of creating another project. Reusing a key with different parameters returns 409."
1238
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
877
1239
  },
878
1240
  "name": {
879
1241
  "minLength": 1,
@@ -1193,10 +1555,9 @@
1193
1555
  "description": "Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.",
1194
1556
  "anyOf": [
1195
1557
  {
1196
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
1558
+ "description": "Target-specific generation and delivery overrides. Authentication may only select a Project-owned OAuth application. OAuth server metadata, applications, and identity policy remain Project-owned. Self-hosted MCP access may be overridden for a Target-specific deployment.",
1197
1559
  "properties": {
1198
1560
  "globals": {
1199
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
1200
1561
  "maxItems": 20,
1201
1562
  "type": "array"
1202
1563
  },
@@ -1205,7 +1566,10 @@
1205
1566
  "type": "object"
1206
1567
  },
1207
1568
  "pagination": {
1208
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.",
1569
+ "type": "object"
1570
+ },
1571
+ "auth": {
1572
+ "description": "Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.",
1209
1573
  "type": "object"
1210
1574
  },
1211
1575
  "cli": {
@@ -1213,7 +1577,11 @@
1213
1577
  "type": "object"
1214
1578
  },
1215
1579
  "mcp": {
1216
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
1580
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
1581
+ "type": "object"
1582
+ },
1583
+ "readme": {
1584
+ "description": "Generated README behavior. Part of Config.",
1217
1585
  "type": "object"
1218
1586
  },
1219
1587
  "package": {
@@ -1221,7 +1589,7 @@
1221
1589
  "type": "object"
1222
1590
  },
1223
1591
  "docs_url": {
1224
- "description": "The API's documentation site. Read through its llms.txt by the generated CLI's docs command, the MCP server's docs tools, and the package's AGENTS.md. Defaults to the Definition's externalDocs URL.",
1592
+ "format": "uri",
1225
1593
  "type": [
1226
1594
  "string",
1227
1595
  "null"
@@ -1229,7 +1597,6 @@
1229
1597
  },
1230
1598
  "docs_index_url": {
1231
1599
  "format": "uri",
1232
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
1233
1600
  "type": [
1234
1601
  "string",
1235
1602
  "null"
@@ -1245,6 +1612,7 @@
1245
1612
  ]
1246
1613
  },
1247
1614
  "deliveries": {
1615
+ "maxItems": 2,
1248
1616
  "items": {
1249
1617
  "anyOf": [
1250
1618
  {
@@ -1281,7 +1649,7 @@
1281
1649
  "description": "Shared defaults inherited by every Target. GraphQL settings belong in definition.graphql.",
1282
1650
  "anyOf": [
1283
1651
  {
1284
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
1652
+ "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, auth, readme, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
1285
1653
  "properties": {
1286
1654
  "globals": {
1287
1655
  "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
@@ -1348,40 +1716,79 @@
1348
1716
  },
1349
1717
  "type": "object"
1350
1718
  },
1351
- "cli": {
1352
- "description": "How the generated CLI behaves. Part of Config.",
1719
+ "auth": {
1720
+ "description": "Public authentication defaults for generated clients and tools. Stored Projects own the OAuth server, application catalog, and identity policy; stateless generation accepts the same shape for one run. Runtime credentials and client secrets are never accepted.",
1353
1721
  "properties": {
1354
- "command_name": {
1355
- "description": "Command users run, independent of how the CLI is distributed.",
1722
+ "oauth_server": {
1723
+ "anyOf": [
1724
+ {
1725
+ "description": "Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.",
1726
+ "type": "object"
1727
+ },
1728
+ {
1729
+ "type": "null"
1730
+ }
1731
+ ]
1732
+ },
1733
+ "oauth_applications": {
1734
+ "description": "OAuth applications keyed by a stable name.",
1735
+ "additionalProperties": {
1736
+ "description": "OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.",
1737
+ "type": "object"
1738
+ },
1356
1739
  "type": [
1357
- "string",
1740
+ "object",
1358
1741
  "null"
1359
1742
  ]
1360
1743
  },
1361
- "whoami_operation": {
1362
- "description": "resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides auto-detection; a value that matches nothing is reported as a generation warning.",
1744
+ "oauth_application": {
1745
+ "description": "Default OAuth application used by generated products.",
1746
+ "maxLength": 64,
1747
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
1363
1748
  "type": [
1364
1749
  "string",
1365
1750
  "null"
1366
1751
  ]
1367
1752
  },
1368
- "oauth_client_id": {
1369
- "description": "OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.",
1753
+ "identity_verification": {
1754
+ "anyOf": [
1755
+ {
1756
+ "description": "Authenticated identity read used to verify a login before it is saved. Operation is auto-detected when omitted. Requests must include at least one of subject_field, account_field, or organization_field.",
1757
+ "type": "object"
1758
+ },
1759
+ {
1760
+ "type": "null"
1761
+ }
1762
+ ]
1763
+ },
1764
+ "approval_url": {
1765
+ "format": "uri",
1766
+ "description": "Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.",
1370
1767
  "type": [
1371
1768
  "string",
1372
1769
  "null"
1373
1770
  ]
1374
1771
  },
1375
- "oauth_scopes": {
1376
- "description": "Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.",
1377
- "maxItems": 20,
1378
- "items": {
1379
- "type": "string"
1772
+ "environments": {
1773
+ "description": "Authentication selections keyed by generated API environment name.",
1774
+ "additionalProperties": {
1775
+ "description": "OAuth application and request-value overrides for one named API environment.",
1776
+ "type": "object"
1380
1777
  },
1381
- "type": "array"
1382
- },
1383
- "oauth_audience": {
1384
- "description": "Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.",
1778
+ "type": [
1779
+ "object",
1780
+ "null"
1781
+ ]
1782
+ }
1783
+ },
1784
+ "additionalProperties": false,
1785
+ "type": "object"
1786
+ },
1787
+ "cli": {
1788
+ "description": "How the generated CLI behaves. Part of Config.",
1789
+ "properties": {
1790
+ "command_name": {
1791
+ "description": "Command users run, independent of how the CLI is distributed.",
1385
1792
  "type": [
1386
1793
  "string",
1387
1794
  "null"
@@ -1398,13 +1805,6 @@
1398
1805
  "null"
1399
1806
  ]
1400
1807
  },
1401
- "auth_url": {
1402
- "description": "Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier and receives the credential directly; no key is pasted through a conversation.",
1403
- "type": [
1404
- "string",
1405
- "null"
1406
- ]
1407
- },
1408
1808
  "mcp_url": {
1409
1809
  "description": "Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.",
1410
1810
  "type": [
@@ -1424,7 +1824,7 @@
1424
1824
  "type": "object"
1425
1825
  },
1426
1826
  "mcp": {
1427
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
1827
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
1428
1828
  "properties": {
1429
1829
  "registry_name": {
1430
1830
  "description": "Stable official MCP registry name, independent of the server runtime.",
@@ -1433,6 +1833,37 @@
1433
1833
  "null"
1434
1834
  ]
1435
1835
  },
1836
+ "access": {
1837
+ "description": "Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting application resolves upstream API credentials separately at runtime. This setting does not apply to the Typeship-hosted endpoint.",
1838
+ "properties": {
1839
+ "issuer": {
1840
+ "format": "uri",
1841
+ "description": "Exact issuer allowed to sign MCP connection tokens.",
1842
+ "type": "string"
1843
+ },
1844
+ "resource": {
1845
+ "format": "uri",
1846
+ "description": "Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.",
1847
+ "type": "string"
1848
+ },
1849
+ "jwks_url": {
1850
+ "format": "uri",
1851
+ "description": "Public signing-key endpoint. Omit to discover it from the issuer.",
1852
+ "type": "string"
1853
+ },
1854
+ "scopes": {
1855
+ "description": "Minimum scopes required to connect to the self-hosted MCP server.",
1856
+ "maxItems": 20,
1857
+ "type": "array"
1858
+ }
1859
+ },
1860
+ "required": [
1861
+ "issuer",
1862
+ "resource"
1863
+ ],
1864
+ "additionalProperties": false,
1865
+ "type": "object"
1866
+ },
1436
1867
  "tool_mode": {
1437
1868
  "enum": [
1438
1869
  "auto",
@@ -1457,6 +1888,28 @@
1457
1888
  "type": "string"
1458
1889
  },
1459
1890
  "type": "object"
1891
+ },
1892
+ "reference_resolvers": {
1893
+ "description": "Exact name-or-ID resolver overrides keyed first by the target operationId or \"METHOD /path\", then by its wire argument name. A resolver names one read collection operation plus 1-4 item fields to match case-insensitively; false opts that argument out of strict inference.",
1894
+ "additionalProperties": {
1895
+ "type": "object"
1896
+ },
1897
+ "type": "object"
1898
+ }
1899
+ },
1900
+ "additionalProperties": false,
1901
+ "type": "object"
1902
+ },
1903
+ "readme": {
1904
+ "description": "Generated README behavior. Part of Config.",
1905
+ "properties": {
1906
+ "quickstart_operation": {
1907
+ "description": "operationId or \"METHOD /path\" to feature as the README's first API call. It must be present in the generated package and callable with no required input beyond path placeholders. Missing or unsuitable choices produce a warning and use the automatic example.",
1908
+ "maxLength": 500,
1909
+ "type": [
1910
+ "string",
1911
+ "null"
1912
+ ]
1460
1913
  }
1461
1914
  },
1462
1915
  "additionalProperties": false,
@@ -1530,6 +1983,13 @@
1530
1983
  "type": "null"
1531
1984
  }
1532
1985
  ]
1986
+ },
1987
+ "fields": {
1988
+ "type": "array",
1989
+ "items": {
1990
+ "type": "string"
1991
+ },
1992
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
1533
1993
  }
1534
1994
  },
1535
1995
  "required": [
@@ -1539,6 +1999,7 @@
1539
1999
  ]
1540
2000
  },
1541
2001
  "output_schema": {
2002
+ "description": "Project-owned identity, Definition reference, generation controls, and shared configuration.",
1542
2003
  "properties": {
1543
2004
  "id": {
1544
2005
  "description": "Unique identifier for a project.",
@@ -1564,131 +2025,6 @@
1564
2025
  "pattern": "^def_[a-z0-9]{16}$",
1565
2026
  "type": "string"
1566
2027
  },
1567
- "targets": {
1568
- "description": "All configured Targets, including disabled Targets and their saved Deliveries.",
1569
- "items": {
1570
- "properties": {
1571
- "id": {
1572
- "description": "Stable identifier for one configured generated product.",
1573
- "examples": [
1574
- "tgt_5m8q2v7k1p9d4h6c"
1575
- ],
1576
- "pattern": "^tgt_[a-z0-9]{16}$",
1577
- "type": "string"
1578
- },
1579
- "object": {
1580
- "const": "target",
1581
- "type": "string"
1582
- },
1583
- "project_id": {
1584
- "description": "Unique identifier for a project.",
1585
- "examples": [
1586
- "prj_4f8k2m7x9q1v6b3n"
1587
- ],
1588
- "pattern": "^prj_[a-z0-9]{16}$",
1589
- "type": "string"
1590
- },
1591
- "definition_id": {
1592
- "description": "Unique identifier for a project's logical API Definition.",
1593
- "examples": [
1594
- "def_2p8m4q7k1v9d6h3c"
1595
- ],
1596
- "pattern": "^def_[a-z0-9]{16}$",
1597
- "type": "string"
1598
- },
1599
- "name": {
1600
- "type": "string"
1601
- },
1602
- "generator": {
1603
- "enum": [
1604
- "typescript-sdk",
1605
- "python-sdk",
1606
- "go-sdk",
1607
- "cli",
1608
- "mcp"
1609
- ],
1610
- "description": "Generator implementation selected by a Target.",
1611
- "type": "string"
1612
- },
1613
- "state": {
1614
- "enum": [
1615
- "active",
1616
- "disabled"
1617
- ],
1618
- "type": "string"
1619
- },
1620
- "edition": {
1621
- "type": "string"
1622
- },
1623
- "release_channel": {
1624
- "enum": [
1625
- "stable",
1626
- "prerelease"
1627
- ],
1628
- "type": "string"
1629
- },
1630
- "version_policy": {
1631
- "type": "object"
1632
- },
1633
- "current_version": {
1634
- "type": "string"
1635
- },
1636
- "proposed_version": {
1637
- "type": [
1638
- "string",
1639
- "null"
1640
- ]
1641
- },
1642
- "config": {
1643
- "description": "Target-specific overrides merged over Project.config.",
1644
- "anyOf": [
1645
- {
1646
- "description": "Shared generated-client and tooling behavior for a stored Project.",
1647
- "type": "object"
1648
- },
1649
- {
1650
- "type": "null"
1651
- }
1652
- ]
1653
- },
1654
- "deliveries": {
1655
- "type": "array"
1656
- },
1657
- "created_at": {
1658
- "format": "date-time",
1659
- "type": "string"
1660
- },
1661
- "updated_at": {
1662
- "format": "date-time",
1663
- "type": "string"
1664
- },
1665
- "request_id": {
1666
- "description": "Server-generated identifier used to correlate this response with Typeship logs.",
1667
- "examples": [
1668
- "req_3k8m1v6q9p2d7h4c"
1669
- ],
1670
- "pattern": "^req_[a-z0-9]{16}$",
1671
- "type": "string"
1672
- }
1673
- },
1674
- "type": "object"
1675
- },
1676
- "type": "array"
1677
- },
1678
- "deliveries": {
1679
- "description": "Flattened convenience view derived from the same Target bundles.",
1680
- "items": {
1681
- "anyOf": [
1682
- {
1683
- "type": "object"
1684
- },
1685
- {
1686
- "type": "object"
1687
- }
1688
- ]
1689
- },
1690
- "type": "array"
1691
- },
1692
2028
  "auto_generate": {
1693
2029
  "description": "Regenerate when the Definition changes: on every push to the default branch for a repository source…",
1694
2030
  "type": "boolean"
@@ -1716,12 +2052,20 @@
1716
2052
  "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
1717
2053
  "type": "object"
1718
2054
  },
2055
+ "auth": {
2056
+ "description": "Public authentication defaults for generated clients and tools.",
2057
+ "type": "object"
2058
+ },
1719
2059
  "cli": {
1720
2060
  "description": "How the generated CLI behaves.",
1721
2061
  "type": "object"
1722
2062
  },
1723
2063
  "mcp": {
1724
- "description": "How the generated MCP server and the hosted endpoint behave.",
2064
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
2065
+ "type": "object"
2066
+ },
2067
+ "readme": {
2068
+ "description": "Generated README behavior.",
1725
2069
  "type": "object"
1726
2070
  },
1727
2071
  "package": {
@@ -1789,23 +2133,46 @@
1789
2133
  },
1790
2134
  {
1791
2135
  "operation": "projects.retrieve",
1792
- "signature": "client.projects.retrieve(projectId)",
2136
+ "signature": "execute(projects_retrieve, arguments)",
2137
+ "tool": "projects_retrieve",
2138
+ "example_call": {
2139
+ "name": "execute",
2140
+ "arguments": {
2141
+ "operation": "projects_retrieve",
2142
+ "arguments": {
2143
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
2144
+ }
2145
+ }
2146
+ },
1793
2147
  "method": "GET",
1794
2148
  "path": "/projects/{project_id}",
1795
2149
  "summary": "Retrieve a project",
2150
+ "description": "Returns Project-owned fields only. List Targets separately for Target and Delivery data.",
1796
2151
  "safety": "read",
1797
2152
  "auth": "required",
2153
+ "security": [
2154
+ {
2155
+ "apiKey": []
2156
+ }
2157
+ ],
1798
2158
  "paginated": false,
1799
2159
  "input_schema": {
1800
2160
  "type": "object",
1801
2161
  "properties": {
1802
2162
  "project_id": {
1803
- "description": "Unique identifier for a project. IDs come from projects_list.",
2163
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
1804
2164
  "examples": [
2165
+ "example-name",
1805
2166
  "prj_4f8k2m7x9q1v6b3n"
1806
2167
  ],
1807
- "pattern": "^prj_[a-z0-9]{16}$",
1808
2168
  "type": "string"
2169
+ },
2170
+ "fields": {
2171
+ "type": "array",
2172
+ "items": {
2173
+ "type": "string"
2174
+ },
2175
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
1809
2176
  }
1810
2177
  },
1811
2178
  "required": [
@@ -1813,6 +2180,7 @@
1813
2180
  ]
1814
2181
  },
1815
2182
  "output_schema": {
2183
+ "description": "Project-owned identity, Definition reference, generation controls, and shared configuration.",
1816
2184
  "properties": {
1817
2185
  "id": {
1818
2186
  "description": "Unique identifier for a project.",
@@ -1822,147 +2190,22 @@
1822
2190
  "pattern": "^prj_[a-z0-9]{16}$",
1823
2191
  "type": "string"
1824
2192
  },
1825
- "object": {
1826
- "const": "project",
1827
- "type": "string"
1828
- },
1829
- "name": {
1830
- "maxLength": 80,
1831
- "type": "string"
1832
- },
1833
- "definition_id": {
1834
- "description": "Unique identifier for a project's logical API Definition.",
1835
- "examples": [
1836
- "def_2p8m4q7k1v9d6h3c"
1837
- ],
1838
- "pattern": "^def_[a-z0-9]{16}$",
1839
- "type": "string"
1840
- },
1841
- "targets": {
1842
- "description": "All configured Targets, including disabled Targets and their saved Deliveries.",
1843
- "items": {
1844
- "properties": {
1845
- "id": {
1846
- "description": "Stable identifier for one configured generated product.",
1847
- "examples": [
1848
- "tgt_5m8q2v7k1p9d4h6c"
1849
- ],
1850
- "pattern": "^tgt_[a-z0-9]{16}$",
1851
- "type": "string"
1852
- },
1853
- "object": {
1854
- "const": "target",
1855
- "type": "string"
1856
- },
1857
- "project_id": {
1858
- "description": "Unique identifier for a project.",
1859
- "examples": [
1860
- "prj_4f8k2m7x9q1v6b3n"
1861
- ],
1862
- "pattern": "^prj_[a-z0-9]{16}$",
1863
- "type": "string"
1864
- },
1865
- "definition_id": {
1866
- "description": "Unique identifier for a project's logical API Definition.",
1867
- "examples": [
1868
- "def_2p8m4q7k1v9d6h3c"
1869
- ],
1870
- "pattern": "^def_[a-z0-9]{16}$",
1871
- "type": "string"
1872
- },
1873
- "name": {
1874
- "type": "string"
1875
- },
1876
- "generator": {
1877
- "enum": [
1878
- "typescript-sdk",
1879
- "python-sdk",
1880
- "go-sdk",
1881
- "cli",
1882
- "mcp"
1883
- ],
1884
- "description": "Generator implementation selected by a Target.",
1885
- "type": "string"
1886
- },
1887
- "state": {
1888
- "enum": [
1889
- "active",
1890
- "disabled"
1891
- ],
1892
- "type": "string"
1893
- },
1894
- "edition": {
1895
- "type": "string"
1896
- },
1897
- "release_channel": {
1898
- "enum": [
1899
- "stable",
1900
- "prerelease"
1901
- ],
1902
- "type": "string"
1903
- },
1904
- "version_policy": {
1905
- "type": "object"
1906
- },
1907
- "current_version": {
1908
- "type": "string"
1909
- },
1910
- "proposed_version": {
1911
- "type": [
1912
- "string",
1913
- "null"
1914
- ]
1915
- },
1916
- "config": {
1917
- "description": "Target-specific overrides merged over Project.config.",
1918
- "anyOf": [
1919
- {
1920
- "description": "Shared generated-client and tooling behavior for a stored Project.",
1921
- "type": "object"
1922
- },
1923
- {
1924
- "type": "null"
1925
- }
1926
- ]
1927
- },
1928
- "deliveries": {
1929
- "type": "array"
1930
- },
1931
- "created_at": {
1932
- "format": "date-time",
1933
- "type": "string"
1934
- },
1935
- "updated_at": {
1936
- "format": "date-time",
1937
- "type": "string"
1938
- },
1939
- "request_id": {
1940
- "description": "Server-generated identifier used to correlate this response with Typeship logs.",
1941
- "examples": [
1942
- "req_3k8m1v6q9p2d7h4c"
1943
- ],
1944
- "pattern": "^req_[a-z0-9]{16}$",
1945
- "type": "string"
1946
- }
1947
- },
1948
- "type": "object"
1949
- },
1950
- "type": "array"
1951
- },
1952
- "deliveries": {
1953
- "description": "Flattened convenience view derived from the same Target bundles.",
1954
- "items": {
1955
- "anyOf": [
1956
- {
1957
- "type": "object"
1958
- },
1959
- {
1960
- "type": "object"
1961
- }
1962
- ]
1963
- },
1964
- "type": "array"
1965
- },
2193
+ "object": {
2194
+ "const": "project",
2195
+ "type": "string"
2196
+ },
2197
+ "name": {
2198
+ "maxLength": 80,
2199
+ "type": "string"
2200
+ },
2201
+ "definition_id": {
2202
+ "description": "Unique identifier for a project's logical API Definition.",
2203
+ "examples": [
2204
+ "def_2p8m4q7k1v9d6h3c"
2205
+ ],
2206
+ "pattern": "^def_[a-z0-9]{16}$",
2207
+ "type": "string"
2208
+ },
1966
2209
  "auto_generate": {
1967
2210
  "description": "Regenerate when the Definition changes: on every push to the default branch for a repository source…",
1968
2211
  "type": "boolean"
@@ -1990,12 +2233,20 @@
1990
2233
  "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
1991
2234
  "type": "object"
1992
2235
  },
2236
+ "auth": {
2237
+ "description": "Public authentication defaults for generated clients and tools.",
2238
+ "type": "object"
2239
+ },
1993
2240
  "cli": {
1994
2241
  "description": "How the generated CLI behaves.",
1995
2242
  "type": "object"
1996
2243
  },
1997
2244
  "mcp": {
1998
- "description": "How the generated MCP server and the hosted endpoint behave.",
2245
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
2246
+ "type": "object"
2247
+ },
2248
+ "readme": {
2249
+ "description": "Generated README behavior.",
1999
2250
  "type": "object"
2000
2251
  },
2001
2252
  "package": {
@@ -2051,23 +2302,46 @@
2051
2302
  },
2052
2303
  {
2053
2304
  "operation": "projects.delete",
2054
- "signature": "client.projects.delete(projectId)",
2305
+ "signature": "execute(projects_delete, arguments)",
2306
+ "tool": "projects_delete",
2307
+ "example_call": {
2308
+ "name": "execute",
2309
+ "arguments": {
2310
+ "operation": "projects_delete",
2311
+ "arguments": {
2312
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
2313
+ },
2314
+ "confirm": true
2315
+ }
2316
+ },
2055
2317
  "method": "DELETE",
2056
2318
  "path": "/projects/{project_id}",
2057
2319
  "summary": "Delete a project",
2058
2320
  "safety": "destructive",
2059
2321
  "auth": "required",
2322
+ "security": [
2323
+ {
2324
+ "apiKey": []
2325
+ }
2326
+ ],
2060
2327
  "paginated": false,
2061
2328
  "input_schema": {
2062
2329
  "type": "object",
2063
2330
  "properties": {
2064
2331
  "project_id": {
2065
- "description": "Unique identifier for a project. IDs come from projects_list.",
2332
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
2066
2333
  "examples": [
2334
+ "example-name",
2067
2335
  "prj_4f8k2m7x9q1v6b3n"
2068
2336
  ],
2069
- "pattern": "^prj_[a-z0-9]{16}$",
2070
2337
  "type": "string"
2338
+ },
2339
+ "fields": {
2340
+ "type": "array",
2341
+ "items": {
2342
+ "type": "string"
2343
+ },
2344
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
2071
2345
  }
2072
2346
  },
2073
2347
  "required": [
@@ -2109,22 +2383,37 @@
2109
2383
  },
2110
2384
  {
2111
2385
  "operation": "projects.update",
2112
- "signature": "client.projects.update(projectId, body)",
2386
+ "signature": "execute(projects_update, arguments)",
2387
+ "tool": "projects_update",
2388
+ "example_call": {
2389
+ "name": "execute",
2390
+ "arguments": {
2391
+ "operation": "projects_update",
2392
+ "arguments": {
2393
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
2394
+ }
2395
+ }
2396
+ },
2113
2397
  "method": "PATCH",
2114
2398
  "path": "/projects/{project_id}",
2115
2399
  "summary": "Update a project",
2116
2400
  "safety": "write",
2117
2401
  "auth": "required",
2402
+ "security": [
2403
+ {
2404
+ "apiKey": []
2405
+ }
2406
+ ],
2118
2407
  "paginated": false,
2119
2408
  "input_schema": {
2120
2409
  "type": "object",
2121
2410
  "properties": {
2122
2411
  "project_id": {
2123
- "description": "Unique identifier for a project. IDs come from projects_list.",
2412
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
2124
2413
  "examples": [
2414
+ "example-name",
2125
2415
  "prj_4f8k2m7x9q1v6b3n"
2126
2416
  ],
2127
- "pattern": "^prj_[a-z0-9]{16}$",
2128
2417
  "type": "string"
2129
2418
  },
2130
2419
  "name": {
@@ -2143,7 +2432,7 @@
2143
2432
  "description": "Replaces the Project's shared Target defaults. Send null to clear them.",
2144
2433
  "anyOf": [
2145
2434
  {
2146
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
2435
+ "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, auth, readme, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
2147
2436
  "properties": {
2148
2437
  "globals": {
2149
2438
  "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
@@ -2210,40 +2499,79 @@
2210
2499
  },
2211
2500
  "type": "object"
2212
2501
  },
2213
- "cli": {
2214
- "description": "How the generated CLI behaves. Part of Config.",
2502
+ "auth": {
2503
+ "description": "Public authentication defaults for generated clients and tools. Stored Projects own the OAuth server, application catalog, and identity policy; stateless generation accepts the same shape for one run. Runtime credentials and client secrets are never accepted.",
2215
2504
  "properties": {
2216
- "command_name": {
2217
- "description": "Command users run, independent of how the CLI is distributed.",
2505
+ "oauth_server": {
2506
+ "anyOf": [
2507
+ {
2508
+ "description": "Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.",
2509
+ "type": "object"
2510
+ },
2511
+ {
2512
+ "type": "null"
2513
+ }
2514
+ ]
2515
+ },
2516
+ "oauth_applications": {
2517
+ "description": "OAuth applications keyed by a stable name.",
2518
+ "additionalProperties": {
2519
+ "description": "OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.",
2520
+ "type": "object"
2521
+ },
2218
2522
  "type": [
2219
- "string",
2523
+ "object",
2220
2524
  "null"
2221
2525
  ]
2222
2526
  },
2223
- "whoami_operation": {
2224
- "description": "resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides auto-detection; a value that matches nothing is reported as a generation warning.",
2527
+ "oauth_application": {
2528
+ "description": "Default OAuth application used by generated products.",
2529
+ "maxLength": 64,
2530
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
2225
2531
  "type": [
2226
2532
  "string",
2227
2533
  "null"
2228
2534
  ]
2229
2535
  },
2230
- "oauth_client_id": {
2231
- "description": "OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.",
2536
+ "identity_verification": {
2537
+ "anyOf": [
2538
+ {
2539
+ "description": "Authenticated identity read used to verify a login before it is saved. Operation is auto-detected when omitted. Requests must include at least one of subject_field, account_field, or organization_field.",
2540
+ "type": "object"
2541
+ },
2542
+ {
2543
+ "type": "null"
2544
+ }
2545
+ ]
2546
+ },
2547
+ "approval_url": {
2548
+ "format": "uri",
2549
+ "description": "Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.",
2232
2550
  "type": [
2233
2551
  "string",
2234
2552
  "null"
2235
2553
  ]
2236
2554
  },
2237
- "oauth_scopes": {
2238
- "description": "Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.",
2239
- "maxItems": 20,
2240
- "items": {
2241
- "type": "string"
2555
+ "environments": {
2556
+ "description": "Authentication selections keyed by generated API environment name.",
2557
+ "additionalProperties": {
2558
+ "description": "OAuth application and request-value overrides for one named API environment.",
2559
+ "type": "object"
2242
2560
  },
2243
- "type": "array"
2244
- },
2245
- "oauth_audience": {
2246
- "description": "Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.",
2561
+ "type": [
2562
+ "object",
2563
+ "null"
2564
+ ]
2565
+ }
2566
+ },
2567
+ "additionalProperties": false,
2568
+ "type": "object"
2569
+ },
2570
+ "cli": {
2571
+ "description": "How the generated CLI behaves. Part of Config.",
2572
+ "properties": {
2573
+ "command_name": {
2574
+ "description": "Command users run, independent of how the CLI is distributed.",
2247
2575
  "type": [
2248
2576
  "string",
2249
2577
  "null"
@@ -2260,13 +2588,6 @@
2260
2588
  "null"
2261
2589
  ]
2262
2590
  },
2263
- "auth_url": {
2264
- "description": "Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier and receives the credential directly; no key is pasted through a conversation.",
2265
- "type": [
2266
- "string",
2267
- "null"
2268
- ]
2269
- },
2270
2591
  "mcp_url": {
2271
2592
  "description": "Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.",
2272
2593
  "type": [
@@ -2286,7 +2607,7 @@
2286
2607
  "type": "object"
2287
2608
  },
2288
2609
  "mcp": {
2289
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
2610
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
2290
2611
  "properties": {
2291
2612
  "registry_name": {
2292
2613
  "description": "Stable official MCP registry name, independent of the server runtime.",
@@ -2295,6 +2616,37 @@
2295
2616
  "null"
2296
2617
  ]
2297
2618
  },
2619
+ "access": {
2620
+ "description": "Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting application resolves upstream API credentials separately at runtime. This setting does not apply to the Typeship-hosted endpoint.",
2621
+ "properties": {
2622
+ "issuer": {
2623
+ "format": "uri",
2624
+ "description": "Exact issuer allowed to sign MCP connection tokens.",
2625
+ "type": "string"
2626
+ },
2627
+ "resource": {
2628
+ "format": "uri",
2629
+ "description": "Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.",
2630
+ "type": "string"
2631
+ },
2632
+ "jwks_url": {
2633
+ "format": "uri",
2634
+ "description": "Public signing-key endpoint. Omit to discover it from the issuer.",
2635
+ "type": "string"
2636
+ },
2637
+ "scopes": {
2638
+ "description": "Minimum scopes required to connect to the self-hosted MCP server.",
2639
+ "maxItems": 20,
2640
+ "type": "array"
2641
+ }
2642
+ },
2643
+ "required": [
2644
+ "issuer",
2645
+ "resource"
2646
+ ],
2647
+ "additionalProperties": false,
2648
+ "type": "object"
2649
+ },
2298
2650
  "tool_mode": {
2299
2651
  "enum": [
2300
2652
  "auto",
@@ -2319,6 +2671,28 @@
2319
2671
  "type": "string"
2320
2672
  },
2321
2673
  "type": "object"
2674
+ },
2675
+ "reference_resolvers": {
2676
+ "description": "Exact name-or-ID resolver overrides keyed first by the target operationId or \"METHOD /path\", then by its wire argument name. A resolver names one read collection operation plus 1-4 item fields to match case-insensitively; false opts that argument out of strict inference.",
2677
+ "additionalProperties": {
2678
+ "type": "object"
2679
+ },
2680
+ "type": "object"
2681
+ }
2682
+ },
2683
+ "additionalProperties": false,
2684
+ "type": "object"
2685
+ },
2686
+ "readme": {
2687
+ "description": "Generated README behavior. Part of Config.",
2688
+ "properties": {
2689
+ "quickstart_operation": {
2690
+ "description": "operationId or \"METHOD /path\" to feature as the README's first API call. It must be present in the generated package and callable with no required input beyond path placeholders. Missing or unsuitable choices produce a warning and use the automatic example.",
2691
+ "maxLength": 500,
2692
+ "type": [
2693
+ "string",
2694
+ "null"
2695
+ ]
2322
2696
  }
2323
2697
  },
2324
2698
  "additionalProperties": false,
@@ -2392,6 +2766,13 @@
2392
2766
  "type": "null"
2393
2767
  }
2394
2768
  ]
2769
+ },
2770
+ "fields": {
2771
+ "type": "array",
2772
+ "items": {
2773
+ "type": "string"
2774
+ },
2775
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
2395
2776
  }
2396
2777
  },
2397
2778
  "required": [
@@ -2399,6 +2780,7 @@
2399
2780
  ]
2400
2781
  },
2401
2782
  "output_schema": {
2783
+ "description": "Project-owned identity, Definition reference, generation controls, and shared configuration.",
2402
2784
  "properties": {
2403
2785
  "id": {
2404
2786
  "description": "Unique identifier for a project.",
@@ -2412,143 +2794,18 @@
2412
2794
  "const": "project",
2413
2795
  "type": "string"
2414
2796
  },
2415
- "name": {
2416
- "maxLength": 80,
2417
- "type": "string"
2418
- },
2419
- "definition_id": {
2420
- "description": "Unique identifier for a project's logical API Definition.",
2421
- "examples": [
2422
- "def_2p8m4q7k1v9d6h3c"
2423
- ],
2424
- "pattern": "^def_[a-z0-9]{16}$",
2425
- "type": "string"
2426
- },
2427
- "targets": {
2428
- "description": "All configured Targets, including disabled Targets and their saved Deliveries.",
2429
- "items": {
2430
- "properties": {
2431
- "id": {
2432
- "description": "Stable identifier for one configured generated product.",
2433
- "examples": [
2434
- "tgt_5m8q2v7k1p9d4h6c"
2435
- ],
2436
- "pattern": "^tgt_[a-z0-9]{16}$",
2437
- "type": "string"
2438
- },
2439
- "object": {
2440
- "const": "target",
2441
- "type": "string"
2442
- },
2443
- "project_id": {
2444
- "description": "Unique identifier for a project.",
2445
- "examples": [
2446
- "prj_4f8k2m7x9q1v6b3n"
2447
- ],
2448
- "pattern": "^prj_[a-z0-9]{16}$",
2449
- "type": "string"
2450
- },
2451
- "definition_id": {
2452
- "description": "Unique identifier for a project's logical API Definition.",
2453
- "examples": [
2454
- "def_2p8m4q7k1v9d6h3c"
2455
- ],
2456
- "pattern": "^def_[a-z0-9]{16}$",
2457
- "type": "string"
2458
- },
2459
- "name": {
2460
- "type": "string"
2461
- },
2462
- "generator": {
2463
- "enum": [
2464
- "typescript-sdk",
2465
- "python-sdk",
2466
- "go-sdk",
2467
- "cli",
2468
- "mcp"
2469
- ],
2470
- "description": "Generator implementation selected by a Target.",
2471
- "type": "string"
2472
- },
2473
- "state": {
2474
- "enum": [
2475
- "active",
2476
- "disabled"
2477
- ],
2478
- "type": "string"
2479
- },
2480
- "edition": {
2481
- "type": "string"
2482
- },
2483
- "release_channel": {
2484
- "enum": [
2485
- "stable",
2486
- "prerelease"
2487
- ],
2488
- "type": "string"
2489
- },
2490
- "version_policy": {
2491
- "type": "object"
2492
- },
2493
- "current_version": {
2494
- "type": "string"
2495
- },
2496
- "proposed_version": {
2497
- "type": [
2498
- "string",
2499
- "null"
2500
- ]
2501
- },
2502
- "config": {
2503
- "description": "Target-specific overrides merged over Project.config.",
2504
- "anyOf": [
2505
- {
2506
- "description": "Shared generated-client and tooling behavior for a stored Project.",
2507
- "type": "object"
2508
- },
2509
- {
2510
- "type": "null"
2511
- }
2512
- ]
2513
- },
2514
- "deliveries": {
2515
- "type": "array"
2516
- },
2517
- "created_at": {
2518
- "format": "date-time",
2519
- "type": "string"
2520
- },
2521
- "updated_at": {
2522
- "format": "date-time",
2523
- "type": "string"
2524
- },
2525
- "request_id": {
2526
- "description": "Server-generated identifier used to correlate this response with Typeship logs.",
2527
- "examples": [
2528
- "req_3k8m1v6q9p2d7h4c"
2529
- ],
2530
- "pattern": "^req_[a-z0-9]{16}$",
2531
- "type": "string"
2532
- }
2533
- },
2534
- "type": "object"
2535
- },
2536
- "type": "array"
2537
- },
2538
- "deliveries": {
2539
- "description": "Flattened convenience view derived from the same Target bundles.",
2540
- "items": {
2541
- "anyOf": [
2542
- {
2543
- "type": "object"
2544
- },
2545
- {
2546
- "type": "object"
2547
- }
2548
- ]
2549
- },
2550
- "type": "array"
2551
- },
2797
+ "name": {
2798
+ "maxLength": 80,
2799
+ "type": "string"
2800
+ },
2801
+ "definition_id": {
2802
+ "description": "Unique identifier for a project's logical API Definition.",
2803
+ "examples": [
2804
+ "def_2p8m4q7k1v9d6h3c"
2805
+ ],
2806
+ "pattern": "^def_[a-z0-9]{16}$",
2807
+ "type": "string"
2808
+ },
2552
2809
  "auto_generate": {
2553
2810
  "description": "Regenerate when the Definition changes: on every push to the default branch for a repository source…",
2554
2811
  "type": "boolean"
@@ -2576,12 +2833,20 @@
2576
2833
  "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
2577
2834
  "type": "object"
2578
2835
  },
2836
+ "auth": {
2837
+ "description": "Public authentication defaults for generated clients and tools.",
2838
+ "type": "object"
2839
+ },
2579
2840
  "cli": {
2580
2841
  "description": "How the generated CLI behaves.",
2581
2842
  "type": "object"
2582
2843
  },
2583
2844
  "mcp": {
2584
- "description": "How the generated MCP server and the hosted endpoint behave.",
2845
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
2846
+ "type": "object"
2847
+ },
2848
+ "readme": {
2849
+ "description": "Generated README behavior.",
2585
2850
  "type": "object"
2586
2851
  },
2587
2852
  "package": {
@@ -2637,24 +2902,46 @@
2637
2902
  },
2638
2903
  {
2639
2904
  "operation": "projects.retrieveDiagnostics",
2640
- "signature": "client.projects.retrieveDiagnostics(projectId)",
2905
+ "signature": "execute(projects_retrieve_diagnostics, arguments)",
2906
+ "tool": "projects_retrieve_diagnostics",
2907
+ "example_call": {
2908
+ "name": "execute",
2909
+ "arguments": {
2910
+ "operation": "projects_retrieve_diagnostics",
2911
+ "arguments": {
2912
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
2913
+ }
2914
+ }
2915
+ },
2641
2916
  "method": "GET",
2642
2917
  "path": "/projects/{project_id}/diagnostics",
2643
2918
  "summary": "Analyze a project's latest Definition Revision",
2644
2919
  "description": "Runs deterministic OpenAPI or GraphQL authorship checks against the latest observed immutable Definition Revision after applying the Definition's existing patches. Diagnostics group every affected location under a stable rule. Exact patches are included only when Typeship can derive the change without inventing API behavior.",
2645
2920
  "safety": "read",
2646
2921
  "auth": "required",
2922
+ "security": [
2923
+ {
2924
+ "apiKey": []
2925
+ }
2926
+ ],
2647
2927
  "paginated": false,
2648
2928
  "input_schema": {
2649
2929
  "type": "object",
2650
2930
  "properties": {
2651
2931
  "project_id": {
2652
- "description": "Unique identifier for a project. IDs come from projects_list.",
2932
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
2653
2933
  "examples": [
2934
+ "example-name",
2654
2935
  "prj_4f8k2m7x9q1v6b3n"
2655
2936
  ],
2656
- "pattern": "^prj_[a-z0-9]{16}$",
2657
2937
  "type": "string"
2938
+ },
2939
+ "fields": {
2940
+ "type": "array",
2941
+ "items": {
2942
+ "type": "string"
2943
+ },
2944
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
2658
2945
  }
2659
2946
  },
2660
2947
  "required": [
@@ -2915,24 +3202,53 @@
2915
3202
  },
2916
3203
  {
2917
3204
  "operation": "projects.refreshDiagnostics",
2918
- "signature": "client.projects.refreshDiagnostics(projectId)",
3205
+ "signature": "execute(projects_refresh_diagnostics, arguments)",
3206
+ "tool": "projects_refresh_diagnostics",
3207
+ "example_call": {
3208
+ "name": "execute",
3209
+ "arguments": {
3210
+ "operation": "projects_refresh_diagnostics",
3211
+ "arguments": {
3212
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
3213
+ }
3214
+ }
3215
+ },
2919
3216
  "method": "POST",
2920
3217
  "path": "/projects/{project_id}/diagnostics",
2921
3218
  "summary": "Refresh a project's Diagnostics from its configured source",
2922
3219
  "description": "Fetches the complete configured source, records a new immutable revision only when content changed, and returns its Diagnostics. This does not generate targets or consume a metered generation.",
2923
3220
  "safety": "write",
2924
3221
  "auth": "required",
3222
+ "security": [
3223
+ {
3224
+ "apiKey": []
3225
+ }
3226
+ ],
2925
3227
  "paginated": false,
2926
3228
  "input_schema": {
2927
3229
  "type": "object",
2928
3230
  "properties": {
2929
3231
  "project_id": {
2930
- "description": "Unique identifier for a project. IDs come from projects_list.",
3232
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
2931
3233
  "examples": [
3234
+ "example-name",
2932
3235
  "prj_4f8k2m7x9q1v6b3n"
2933
3236
  ],
2934
- "pattern": "^prj_[a-z0-9]{16}$",
2935
3237
  "type": "string"
3238
+ },
3239
+ "Idempotency-Key": {
3240
+ "minLength": 1,
3241
+ "maxLength": 255,
3242
+ "pattern": "^[!-~]+$",
3243
+ "type": "string",
3244
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
3245
+ },
3246
+ "fields": {
3247
+ "type": "array",
3248
+ "items": {
3249
+ "type": "string"
3250
+ },
3251
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
2936
3252
  }
2937
3253
  },
2938
3254
  "required": [
@@ -3193,25 +3509,50 @@
3193
3509
  },
3194
3510
  {
3195
3511
  "operation": "projects.remediateDiagnostics",
3196
- "signature": "client.projects.remediateDiagnostics(projectId, body)",
3512
+ "signature": "execute(projects_remediate_diagnostics, arguments)",
3513
+ "tool": "projects_remediate_diagnostics",
3514
+ "example_call": {
3515
+ "name": "execute",
3516
+ "arguments": {
3517
+ "operation": "projects_remediate_diagnostics",
3518
+ "arguments": {
3519
+ "project_id": "prj_4f8k2m7x9q1v6b3n",
3520
+ "diagnostic_ids": [
3521
+ "value"
3522
+ ]
3523
+ }
3524
+ }
3525
+ },
3197
3526
  "method": "POST",
3198
3527
  "path": "/projects/{project_id}/diagnostics/remediations",
3199
3528
  "summary": "Apply exact, reviewed diagnostic remediations",
3200
3529
  "description": "Applies only deterministic patches. Repository sources receive an updateable source pull request; URL sources receive project overlays. Diagnostics that require API-owner intent return 422 and include an authoring_brief in the Diagnostic instead.",
3201
3530
  "safety": "write",
3202
3531
  "auth": "required",
3532
+ "security": [
3533
+ {
3534
+ "apiKey": []
3535
+ }
3536
+ ],
3203
3537
  "paginated": false,
3204
3538
  "input_schema": {
3205
3539
  "type": "object",
3206
3540
  "properties": {
3207
3541
  "project_id": {
3208
- "description": "Unique identifier for a project. IDs come from projects_list.",
3542
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
3209
3543
  "examples": [
3544
+ "example-name",
3210
3545
  "prj_4f8k2m7x9q1v6b3n"
3211
3546
  ],
3212
- "pattern": "^prj_[a-z0-9]{16}$",
3213
3547
  "type": "string"
3214
3548
  },
3549
+ "Idempotency-Key": {
3550
+ "minLength": 1,
3551
+ "maxLength": 255,
3552
+ "pattern": "^[!-~]+$",
3553
+ "type": "string",
3554
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
3555
+ },
3215
3556
  "diagnostic_ids": {
3216
3557
  "description": "Stable IDs of current diagnostics whose exact patches should be reviewed and applied.",
3217
3558
  "minItems": 1,
@@ -3221,6 +3562,13 @@
3221
3562
  "type": "string"
3222
3563
  },
3223
3564
  "type": "array"
3565
+ },
3566
+ "fields": {
3567
+ "type": "array",
3568
+ "items": {
3569
+ "type": "string"
3570
+ },
3571
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
3224
3572
  }
3225
3573
  },
3226
3574
  "required": [
@@ -3273,24 +3621,46 @@
3273
3621
  },
3274
3622
  {
3275
3623
  "operation": "projects.retrieveIntegrationHealth",
3276
- "signature": "client.projects.retrieveIntegrationHealth(projectId)",
3624
+ "signature": "execute(projects_retrieve_integration_health, arguments)",
3625
+ "tool": "projects_retrieve_integration_health",
3626
+ "example_call": {
3627
+ "name": "execute",
3628
+ "arguments": {
3629
+ "operation": "projects_retrieve_integration_health",
3630
+ "arguments": {
3631
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
3632
+ }
3633
+ }
3634
+ },
3277
3635
  "method": "GET",
3278
3636
  "path": "/projects/{project_id}/integration-health",
3279
3637
  "summary": "Diagnose a project's repository integrations",
3280
3638
  "description": "Returns provider-neutral, machine-actionable source and destination access, Definition readability, source-approval label setup, required status names, and the latest durable webhook delivery. The Console renders this same result.",
3281
3639
  "safety": "read",
3282
3640
  "auth": "required",
3641
+ "security": [
3642
+ {
3643
+ "apiKey": []
3644
+ }
3645
+ ],
3283
3646
  "paginated": false,
3284
3647
  "input_schema": {
3285
3648
  "type": "object",
3286
3649
  "properties": {
3287
3650
  "project_id": {
3288
- "description": "Unique identifier for a project. IDs come from projects_list.",
3651
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
3289
3652
  "examples": [
3653
+ "example-name",
3290
3654
  "prj_4f8k2m7x9q1v6b3n"
3291
3655
  ],
3292
- "pattern": "^prj_[a-z0-9]{16}$",
3293
3656
  "type": "string"
3657
+ },
3658
+ "fields": {
3659
+ "type": "array",
3660
+ "items": {
3661
+ "type": "string"
3662
+ },
3663
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
3294
3664
  }
3295
3665
  },
3296
3666
  "required": [
@@ -3468,22 +3838,37 @@
3468
3838
  },
3469
3839
  {
3470
3840
  "operation": "projects.listGenerations",
3471
- "signature": "client.projects.listGenerations(projectId, params)",
3841
+ "signature": "execute(projects_list_generations, arguments)",
3842
+ "tool": "projects_list_generations",
3843
+ "example_call": {
3844
+ "name": "execute",
3845
+ "arguments": {
3846
+ "operation": "projects_list_generations",
3847
+ "arguments": {
3848
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
3849
+ }
3850
+ }
3851
+ },
3472
3852
  "method": "GET",
3473
3853
  "path": "/projects/{project_id}/generations",
3474
3854
  "summary": "List a project's generations",
3475
3855
  "safety": "read",
3476
3856
  "auth": "required",
3857
+ "security": [
3858
+ {
3859
+ "apiKey": []
3860
+ }
3861
+ ],
3477
3862
  "paginated": true,
3478
3863
  "input_schema": {
3479
3864
  "type": "object",
3480
3865
  "properties": {
3481
3866
  "project_id": {
3482
- "description": "Unique identifier for a project. IDs come from projects_list.",
3867
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
3483
3868
  "examples": [
3869
+ "example-name",
3484
3870
  "prj_4f8k2m7x9q1v6b3n"
3485
3871
  ],
3486
- "pattern": "^prj_[a-z0-9]{16}$",
3487
3872
  "type": "string"
3488
3873
  },
3489
3874
  "limit": {
@@ -3498,12 +3883,19 @@
3498
3883
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
3499
3884
  },
3500
3885
  "target_id": {
3501
- "description": "Stable identifier for one configured generated product. IDs come from targets_list.",
3886
+ "description": "Stable identifier for one configured generated product.",
3502
3887
  "examples": [
3503
3888
  "tgt_5m8q2v7k1p9d4h6c"
3504
3889
  ],
3505
3890
  "pattern": "^tgt_[a-z0-9]{16}$",
3506
3891
  "type": "string"
3892
+ },
3893
+ "fields": {
3894
+ "type": "array",
3895
+ "items": {
3896
+ "type": "string"
3897
+ },
3898
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
3507
3899
  }
3508
3900
  },
3509
3901
  "required": [
@@ -3516,6 +3908,7 @@
3516
3908
  "items": {
3517
3909
  "type": "array",
3518
3910
  "items": {
3911
+ "description": "Generation metadata returned by collection endpoints.",
3519
3912
  "examples": [
3520
3913
  {
3521
3914
  "id": "gen_7h2p5d9c3m8w1k6q",
@@ -3565,16 +3958,6 @@
3565
3958
  "const": "generation",
3566
3959
  "type": "string"
3567
3960
  },
3568
- "files_omitted": {
3569
- "description": "Present and true when the generated target was too large to inline; files_index lists paths, fetche…",
3570
- "type": "boolean"
3571
- },
3572
- "files_index": {
3573
- "items": {
3574
- "type": "object"
3575
- },
3576
- "type": "array"
3577
- },
3578
3961
  "project_id": {
3579
3962
  "description": "Unique identifier for a project.",
3580
3963
  "examples": [
@@ -3712,13 +4095,6 @@
3712
4095
  },
3713
4096
  "type": "array"
3714
4097
  },
3715
- "files": {
3716
- "description": "Present on retrieve and create; omitted in lists.",
3717
- "items": {
3718
- "type": "object"
3719
- },
3720
- "type": "array"
3721
- },
3722
4098
  "error": {
3723
4099
  "type": [
3724
4100
  "string",
@@ -3728,14 +4104,6 @@
3728
4104
  "created_at": {
3729
4105
  "format": "date-time",
3730
4106
  "type": "string"
3731
- },
3732
- "request_id": {
3733
- "description": "Server-generated identifier used to correlate this response with Typeship logs.",
3734
- "examples": [
3735
- "req_3k8m1v6q9p2d7h4c"
3736
- ],
3737
- "pattern": "^req_[a-z0-9]{16}$",
3738
- "type": "string"
3739
4107
  }
3740
4108
  },
3741
4109
  "type": "object"
@@ -3763,24 +4131,53 @@
3763
4131
  },
3764
4132
  {
3765
4133
  "operation": "projects.generate",
3766
- "signature": "client.projects.generate(projectId)",
4134
+ "signature": "execute(projects_generate, arguments)",
4135
+ "tool": "projects_generate",
4136
+ "example_call": {
4137
+ "name": "execute",
4138
+ "arguments": {
4139
+ "operation": "projects_generate",
4140
+ "arguments": {
4141
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
4142
+ }
4143
+ }
4144
+ },
3767
4145
  "method": "POST",
3768
4146
  "path": "/projects/{project_id}/generations",
3769
4147
  "summary": "Generate targets and open pull requests",
3770
4148
  "description": "Resolves the project's URL or GitHub source, generates every\nconfigured delivery package, stores each result in the project's history,\nand attempts to open a pull request in every configured destination.\nWhen the complete generated tree already matches a destination, no\ncommit, branch, or pull request is created and that generation reports\n`pr_status: no_changes`. This is the same pipeline automatic\nregeneration runs after a source change.",
3771
4149
  "safety": "write",
3772
4150
  "auth": "required",
4151
+ "security": [
4152
+ {
4153
+ "apiKey": []
4154
+ }
4155
+ ],
3773
4156
  "paginated": false,
3774
4157
  "input_schema": {
3775
4158
  "type": "object",
3776
4159
  "properties": {
3777
4160
  "project_id": {
3778
- "description": "Unique identifier for a project. IDs come from projects_list.",
4161
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
3779
4162
  "examples": [
4163
+ "example-name",
3780
4164
  "prj_4f8k2m7x9q1v6b3n"
3781
4165
  ],
3782
- "pattern": "^prj_[a-z0-9]{16}$",
3783
4166
  "type": "string"
4167
+ },
4168
+ "Idempotency-Key": {
4169
+ "minLength": 1,
4170
+ "maxLength": 255,
4171
+ "pattern": "^[!-~]+$",
4172
+ "type": "string",
4173
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
4174
+ },
4175
+ "fields": {
4176
+ "type": "array",
4177
+ "items": {
4178
+ "type": "string"
4179
+ },
4180
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
3784
4181
  }
3785
4182
  },
3786
4183
  "required": [
@@ -3788,11 +4185,13 @@
3788
4185
  ]
3789
4186
  },
3790
4187
  "output_schema": {
4188
+ "description": "Metadata for each Target generation attempted by a Project run. Retrieve one Generation separately for generated files.",
3791
4189
  "properties": {
3792
4190
  "data": {
3793
4191
  "items": {
3794
4192
  "anyOf": [
3795
4193
  {
4194
+ "description": "Generation metadata returned by collection endpoints. Generated file contents and file indexes are available only from retrieve and create operations.",
3796
4195
  "examples": [
3797
4196
  {
3798
4197
  "id": "gen_7h2p5d9c3m8w1k6q",
@@ -3842,13 +4241,6 @@
3842
4241
  "const": "generation",
3843
4242
  "type": "string"
3844
4243
  },
3845
- "files_omitted": {
3846
- "description": "Present and true when the generated target was too large to inline; files_index lists paths, fetched one at a time via GET /generations/{generation_id}/file.",
3847
- "type": "boolean"
3848
- },
3849
- "files_index": {
3850
- "type": "array"
3851
- },
3852
4244
  "project_id": {
3853
4245
  "description": "Unique identifier for a project.",
3854
4246
  "examples": [
@@ -3932,10 +4324,6 @@
3932
4324
  "warnings": {
3933
4325
  "type": "array"
3934
4326
  },
3935
- "files": {
3936
- "description": "Present on retrieve and create; omitted in lists.",
3937
- "type": "array"
3938
- },
3939
4327
  "error": {
3940
4328
  "type": [
3941
4329
  "string",
@@ -3945,14 +4333,6 @@
3945
4333
  "created_at": {
3946
4334
  "format": "date-time",
3947
4335
  "type": "string"
3948
- },
3949
- "request_id": {
3950
- "description": "Server-generated identifier used to correlate this response with Typeship logs.",
3951
- "examples": [
3952
- "req_3k8m1v6q9p2d7h4c"
3953
- ],
3954
- "pattern": "^req_[a-z0-9]{16}$",
3955
- "type": "string"
3956
4336
  }
3957
4337
  },
3958
4338
  "type": "object"
@@ -4010,12 +4390,27 @@
4010
4390
  },
4011
4391
  {
4012
4392
  "operation": "definitions.retrieve",
4013
- "signature": "client.definitions.retrieve(definitionId)",
4393
+ "signature": "execute(definitions_retrieve, arguments)",
4394
+ "tool": "definitions_retrieve",
4395
+ "example_call": {
4396
+ "name": "execute",
4397
+ "arguments": {
4398
+ "operation": "definitions_retrieve",
4399
+ "arguments": {
4400
+ "definition_id": "def_2p8m4q7k1v9d6h3c"
4401
+ }
4402
+ }
4403
+ },
4014
4404
  "method": "GET",
4015
4405
  "path": "/definitions/{definition_id}",
4016
4406
  "summary": "Retrieve a Definition",
4017
4407
  "safety": "read",
4018
4408
  "auth": "required",
4409
+ "security": [
4410
+ {
4411
+ "apiKey": []
4412
+ }
4413
+ ],
4019
4414
  "paginated": false,
4020
4415
  "input_schema": {
4021
4416
  "type": "object",
@@ -4027,6 +4422,13 @@
4027
4422
  ],
4028
4423
  "pattern": "^def_[a-z0-9]{16}$",
4029
4424
  "type": "string"
4425
+ },
4426
+ "fields": {
4427
+ "type": "array",
4428
+ "items": {
4429
+ "type": "string"
4430
+ },
4431
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
4030
4432
  }
4031
4433
  },
4032
4434
  "required": [
@@ -4317,13 +4719,28 @@
4317
4719
  },
4318
4720
  {
4319
4721
  "operation": "definitions.update",
4320
- "signature": "client.definitions.update(definitionId, body)",
4722
+ "signature": "execute(definitions_update, arguments)",
4723
+ "tool": "definitions_update",
4724
+ "example_call": {
4725
+ "name": "execute",
4726
+ "arguments": {
4727
+ "operation": "definitions_update",
4728
+ "arguments": {
4729
+ "definition_id": "def_2p8m4q7k1v9d6h3c"
4730
+ }
4731
+ }
4732
+ },
4321
4733
  "method": "PATCH",
4322
4734
  "path": "/definitions/{definition_id}",
4323
4735
  "summary": "Update and resolve a Definition",
4324
4736
  "description": "Resolves the complete document graph and records a new immutable revision before saving.",
4325
4737
  "safety": "write",
4326
4738
  "auth": "required",
4739
+ "security": [
4740
+ {
4741
+ "apiKey": []
4742
+ }
4743
+ ],
4327
4744
  "paginated": false,
4328
4745
  "input_schema": {
4329
4746
  "type": "object",
@@ -4336,6 +4753,13 @@
4336
4753
  "pattern": "^def_[a-z0-9]{16}$",
4337
4754
  "type": "string"
4338
4755
  },
4756
+ "Idempotency-Key": {
4757
+ "minLength": 1,
4758
+ "maxLength": 255,
4759
+ "pattern": "^[!-~]+$",
4760
+ "type": "string",
4761
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
4762
+ },
4339
4763
  "source": {
4340
4764
  "anyOf": [
4341
4765
  {
@@ -4604,6 +5028,13 @@
4604
5028
  ],
4605
5029
  "additionalProperties": false,
4606
5030
  "type": "object"
5031
+ },
5032
+ "fields": {
5033
+ "type": "array",
5034
+ "items": {
5035
+ "type": "string"
5036
+ },
5037
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
4607
5038
  }
4608
5039
  },
4609
5040
  "required": [
@@ -4894,22 +5325,37 @@
4894
5325
  },
4895
5326
  {
4896
5327
  "operation": "targets.list",
4897
- "signature": "client.targets.list(projectId, params)",
5328
+ "signature": "execute(targets_list, arguments)",
5329
+ "tool": "targets_list",
5330
+ "example_call": {
5331
+ "name": "execute",
5332
+ "arguments": {
5333
+ "operation": "targets_list",
5334
+ "arguments": {
5335
+ "project_id": "prj_4f8k2m7x9q1v6b3n"
5336
+ }
5337
+ }
5338
+ },
4898
5339
  "method": "GET",
4899
5340
  "path": "/projects/{project_id}/targets",
4900
5341
  "summary": "List a project's Targets",
4901
5342
  "safety": "read",
4902
5343
  "auth": "required",
5344
+ "security": [
5345
+ {
5346
+ "apiKey": []
5347
+ }
5348
+ ],
4903
5349
  "paginated": true,
4904
5350
  "input_schema": {
4905
5351
  "type": "object",
4906
5352
  "properties": {
4907
5353
  "project_id": {
4908
- "description": "Unique identifier for a project. IDs come from projects_list.",
5354
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
4909
5355
  "examples": [
5356
+ "example-name",
4910
5357
  "prj_4f8k2m7x9q1v6b3n"
4911
5358
  ],
4912
- "pattern": "^prj_[a-z0-9]{16}$",
4913
5359
  "type": "string"
4914
5360
  },
4915
5361
  "limit": {
@@ -4922,6 +5368,13 @@
4922
5368
  "cursor": {
4923
5369
  "type": "string",
4924
5370
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
5371
+ },
5372
+ "fields": {
5373
+ "type": "array",
5374
+ "items": {
5375
+ "type": "string"
5376
+ },
5377
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
4925
5378
  }
4926
5379
  },
4927
5380
  "required": [
@@ -5020,10 +5473,9 @@
5020
5473
  "description": "Target-specific overrides merged over Project.config. GraphQL settings are Definition-owned and never appear here.",
5021
5474
  "anyOf": [
5022
5475
  {
5023
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
5476
+ "description": "Target-specific generation and delivery overrides. Authentication may only select a Project-owned OAuth application. OAuth server metadata, applications, and identity policy remain Project-owned. Self-hosted MCP access may be overridden for a Target-specific deployment.",
5024
5477
  "properties": {
5025
5478
  "globals": {
5026
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
5027
5479
  "maxItems": 20,
5028
5480
  "type": "array"
5029
5481
  },
@@ -5032,7 +5484,10 @@
5032
5484
  "type": "object"
5033
5485
  },
5034
5486
  "pagination": {
5035
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.",
5487
+ "type": "object"
5488
+ },
5489
+ "auth": {
5490
+ "description": "Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.",
5036
5491
  "type": "object"
5037
5492
  },
5038
5493
  "cli": {
@@ -5040,7 +5495,11 @@
5040
5495
  "type": "object"
5041
5496
  },
5042
5497
  "mcp": {
5043
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
5498
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
5499
+ "type": "object"
5500
+ },
5501
+ "readme": {
5502
+ "description": "Generated README behavior. Part of Config.",
5044
5503
  "type": "object"
5045
5504
  },
5046
5505
  "package": {
@@ -5048,7 +5507,7 @@
5048
5507
  "type": "object"
5049
5508
  },
5050
5509
  "docs_url": {
5051
- "description": "The API's documentation site. Read through its llms.txt by the generated CLI's docs command, the MCP server's docs tools, and the package's AGENTS.md. Defaults to the Definition's externalDocs URL.",
5510
+ "format": "uri",
5052
5511
  "type": [
5053
5512
  "string",
5054
5513
  "null"
@@ -5056,7 +5515,6 @@
5056
5515
  },
5057
5516
  "docs_index_url": {
5058
5517
  "format": "uri",
5059
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
5060
5518
  "type": [
5061
5519
  "string",
5062
5520
  "null"
@@ -5071,6 +5529,8 @@
5071
5529
  ]
5072
5530
  },
5073
5531
  "deliveries": {
5532
+ "description": "At most one repository and one hosted MCP Delivery.",
5533
+ "maxItems": 2,
5074
5534
  "items": {
5075
5535
  "anyOf": [
5076
5536
  {
@@ -5125,25 +5585,50 @@
5125
5585
  },
5126
5586
  {
5127
5587
  "operation": "targets.create",
5128
- "signature": "client.targets.create(projectId, body)",
5588
+ "signature": "execute(targets_create, arguments)",
5589
+ "tool": "targets_create",
5590
+ "example_call": {
5591
+ "name": "execute",
5592
+ "arguments": {
5593
+ "operation": "targets_create",
5594
+ "arguments": {
5595
+ "project_id": "prj_4f8k2m7x9q1v6b3n",
5596
+ "name": "example",
5597
+ "definition_id": "def_2p8m4q7k1v9d6h3c",
5598
+ "generator": "typescript-sdk"
5599
+ }
5600
+ }
5601
+ },
5129
5602
  "method": "POST",
5130
5603
  "path": "/projects/{project_id}/targets",
5131
5604
  "summary": "Create an independently configured Target",
5132
5605
  "description": "Several Targets may use the same generator with distinct configuration, Deliveries, and release streams.",
5133
5606
  "safety": "write",
5134
5607
  "auth": "required",
5608
+ "security": [
5609
+ {
5610
+ "apiKey": []
5611
+ }
5612
+ ],
5135
5613
  "paginated": false,
5136
5614
  "input_schema": {
5137
5615
  "type": "object",
5138
5616
  "properties": {
5139
5617
  "project_id": {
5140
- "description": "Unique identifier for a project. IDs come from projects_list.",
5618
+ "description": "Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.",
5141
5619
  "examples": [
5620
+ "example-name",
5142
5621
  "prj_4f8k2m7x9q1v6b3n"
5143
5622
  ],
5144
- "pattern": "^prj_[a-z0-9]{16}$",
5145
5623
  "type": "string"
5146
5624
  },
5625
+ "Idempotency-Key": {
5626
+ "minLength": 1,
5627
+ "maxLength": 255,
5628
+ "pattern": "^[!-~]+$",
5629
+ "type": "string",
5630
+ "description": "Identifies one logical write for 24 hours. The key is scoped to the authenticated account and operation; account-less generation uses a hashed network identity. Retrying the same method, path, query, and JSON body replays the original response. Reusing the key with changed intent returns 409. After expiry the key starts a new write."
5631
+ },
5147
5632
  "name": {
5148
5633
  "minLength": 1,
5149
5634
  "maxLength": 80,
@@ -5202,10 +5687,9 @@
5202
5687
  "description": "Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.",
5203
5688
  "anyOf": [
5204
5689
  {
5205
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
5690
+ "description": "Target-specific generation and delivery overrides. Authentication may only select a Project-owned OAuth application. OAuth server metadata, applications, and identity policy remain Project-owned. Self-hosted MCP access may be overridden for a Target-specific deployment.",
5206
5691
  "properties": {
5207
5692
  "globals": {
5208
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
5209
5693
  "maxItems": 20,
5210
5694
  "items": {
5211
5695
  "type": "string"
@@ -5255,54 +5739,49 @@
5255
5739
  "type": "object"
5256
5740
  },
5257
5741
  "pagination": {
5258
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.",
5259
5742
  "additionalProperties": {
5260
5743
  "anyOf": [
5261
5744
  {
5262
5745
  "type": "object"
5263
5746
  },
5264
5747
  {
5265
- "description": "false disables pagination detection for the operation.",
5266
5748
  "type": "boolean"
5267
5749
  }
5268
5750
  ]
5269
5751
  },
5270
5752
  "type": "object"
5271
5753
  },
5272
- "cli": {
5273
- "description": "How the generated CLI behaves. Part of Config.",
5754
+ "auth": {
5755
+ "description": "Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.",
5274
5756
  "properties": {
5275
- "command_name": {
5276
- "description": "Command users run, independent of how the CLI is distributed.",
5277
- "type": [
5278
- "string",
5279
- "null"
5280
- ]
5281
- },
5282
- "whoami_operation": {
5283
- "description": "resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides auto-detection; a value that matches nothing is reported as a generation warning.",
5757
+ "oauth_application": {
5758
+ "description": "Project OAuth application to use. Omit to inherit the Project default.",
5759
+ "maxLength": 64,
5760
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
5284
5761
  "type": [
5285
5762
  "string",
5286
5763
  "null"
5287
5764
  ]
5288
5765
  },
5289
- "oauth_client_id": {
5290
- "description": "OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.",
5766
+ "environments": {
5767
+ "description": "Project OAuth application selections keyed by API environment.",
5768
+ "additionalProperties": {
5769
+ "type": "object"
5770
+ },
5291
5771
  "type": [
5292
- "string",
5772
+ "object",
5293
5773
  "null"
5294
5774
  ]
5295
- },
5296
- "oauth_scopes": {
5297
- "description": "Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.",
5298
- "maxItems": 20,
5299
- "items": {
5300
- "type": "string"
5301
- },
5302
- "type": "array"
5303
- },
5304
- "oauth_audience": {
5305
- "description": "Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.",
5775
+ }
5776
+ },
5777
+ "additionalProperties": false,
5778
+ "type": "object"
5779
+ },
5780
+ "cli": {
5781
+ "description": "How the generated CLI behaves. Part of Config.",
5782
+ "properties": {
5783
+ "command_name": {
5784
+ "description": "Command users run, independent of how the CLI is distributed.",
5306
5785
  "type": [
5307
5786
  "string",
5308
5787
  "null"
@@ -5319,13 +5798,6 @@
5319
5798
  "null"
5320
5799
  ]
5321
5800
  },
5322
- "auth_url": {
5323
- "description": "Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier and receives the credential directly; no key is pasted through a conversation.",
5324
- "type": [
5325
- "string",
5326
- "null"
5327
- ]
5328
- },
5329
5801
  "mcp_url": {
5330
5802
  "description": "Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.",
5331
5803
  "type": [
@@ -5345,7 +5817,7 @@
5345
5817
  "type": "object"
5346
5818
  },
5347
5819
  "mcp": {
5348
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
5820
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
5349
5821
  "properties": {
5350
5822
  "registry_name": {
5351
5823
  "description": "Stable official MCP registry name, independent of the server runtime.",
@@ -5354,6 +5826,37 @@
5354
5826
  "null"
5355
5827
  ]
5356
5828
  },
5829
+ "access": {
5830
+ "description": "Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting application resolves upstream API credentials separately at runtime. This setting does not apply to the Typeship-hosted endpoint.",
5831
+ "properties": {
5832
+ "issuer": {
5833
+ "format": "uri",
5834
+ "description": "Exact issuer allowed to sign MCP connection tokens.",
5835
+ "type": "string"
5836
+ },
5837
+ "resource": {
5838
+ "format": "uri",
5839
+ "description": "Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.",
5840
+ "type": "string"
5841
+ },
5842
+ "jwks_url": {
5843
+ "format": "uri",
5844
+ "description": "Public signing-key endpoint. Omit to discover it from the issuer.",
5845
+ "type": "string"
5846
+ },
5847
+ "scopes": {
5848
+ "description": "Minimum scopes required to connect to the self-hosted MCP server.",
5849
+ "maxItems": 20,
5850
+ "type": "array"
5851
+ }
5852
+ },
5853
+ "required": [
5854
+ "issuer",
5855
+ "resource"
5856
+ ],
5857
+ "additionalProperties": false,
5858
+ "type": "object"
5859
+ },
5357
5860
  "tool_mode": {
5358
5861
  "enum": [
5359
5862
  "auto",
@@ -5370,14 +5873,36 @@
5370
5873
  "string",
5371
5874
  "null"
5372
5875
  ]
5373
- },
5374
- "tool_descriptions": {
5375
- "description": "Hand-written MCP tool descriptions keyed by operationId or \"METHOD /path\". Each replaces the text typeship derives for that operation (summary, first sentence, method and path, deprecation and auth notes). For flows the spec cannot describe, such as a multi-step upload. Keys that match no operation are reported as generation warnings.",
5376
- "additionalProperties": {
5377
- "maxLength": 600,
5378
- "type": "string"
5379
- },
5380
- "type": "object"
5876
+ },
5877
+ "tool_descriptions": {
5878
+ "description": "Hand-written MCP tool descriptions keyed by operationId or \"METHOD /path\". Each replaces the text typeship derives for that operation (summary, first sentence, method and path, deprecation and auth notes). For flows the spec cannot describe, such as a multi-step upload. Keys that match no operation are reported as generation warnings.",
5879
+ "additionalProperties": {
5880
+ "maxLength": 600,
5881
+ "type": "string"
5882
+ },
5883
+ "type": "object"
5884
+ },
5885
+ "reference_resolvers": {
5886
+ "description": "Exact name-or-ID resolver overrides keyed first by the target operationId or \"METHOD /path\", then by its wire argument name. A resolver names one read collection operation plus 1-4 item fields to match case-insensitively; false opts that argument out of strict inference.",
5887
+ "additionalProperties": {
5888
+ "type": "object"
5889
+ },
5890
+ "type": "object"
5891
+ }
5892
+ },
5893
+ "additionalProperties": false,
5894
+ "type": "object"
5895
+ },
5896
+ "readme": {
5897
+ "description": "Generated README behavior. Part of Config.",
5898
+ "properties": {
5899
+ "quickstart_operation": {
5900
+ "description": "operationId or \"METHOD /path\" to feature as the README's first API call. It must be present in the generated package and callable with no required input beyond path placeholders. Missing or unsuitable choices produce a warning and use the automatic example.",
5901
+ "maxLength": 500,
5902
+ "type": [
5903
+ "string",
5904
+ "null"
5905
+ ]
5381
5906
  }
5382
5907
  },
5383
5908
  "additionalProperties": false,
@@ -5429,7 +5954,7 @@
5429
5954
  "type": "object"
5430
5955
  },
5431
5956
  "docs_url": {
5432
- "description": "The API's documentation site. Read through its llms.txt by the generated CLI's docs command, the MCP server's docs tools, and the package's AGENTS.md. Defaults to the Definition's externalDocs URL.",
5957
+ "format": "uri",
5433
5958
  "type": [
5434
5959
  "string",
5435
5960
  "null"
@@ -5437,7 +5962,6 @@
5437
5962
  },
5438
5963
  "docs_index_url": {
5439
5964
  "format": "uri",
5440
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
5441
5965
  "type": [
5442
5966
  "string",
5443
5967
  "null"
@@ -5453,6 +5977,7 @@
5453
5977
  ]
5454
5978
  },
5455
5979
  "deliveries": {
5980
+ "maxItems": 2,
5456
5981
  "items": {
5457
5982
  "anyOf": [
5458
5983
  {
@@ -5530,6 +6055,13 @@
5530
6055
  ]
5531
6056
  },
5532
6057
  "type": "array"
6058
+ },
6059
+ "fields": {
6060
+ "type": "array",
6061
+ "items": {
6062
+ "type": "string"
6063
+ },
6064
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
5533
6065
  }
5534
6066
  },
5535
6067
  "required": [
@@ -5626,10 +6158,9 @@
5626
6158
  "description": "Target-specific overrides merged over Project.config.",
5627
6159
  "anyOf": [
5628
6160
  {
5629
- "description": "Shared generated-client and tooling behavior for a stored Project.",
6161
+ "description": "Target-specific generation and delivery overrides.",
5630
6162
  "properties": {
5631
6163
  "globals": {
5632
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-ap…",
5633
6164
  "maxItems": 20,
5634
6165
  "type": "array"
5635
6166
  },
@@ -5638,7 +6169,10 @@
5638
6169
  "type": "object"
5639
6170
  },
5640
6171
  "pagination": {
5641
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
6172
+ "type": "object"
6173
+ },
6174
+ "auth": {
6175
+ "description": "Selects a Project OAuth application for one Target.",
5642
6176
  "type": "object"
5643
6177
  },
5644
6178
  "cli": {
@@ -5646,7 +6180,11 @@
5646
6180
  "type": "object"
5647
6181
  },
5648
6182
  "mcp": {
5649
- "description": "How the generated MCP server and the hosted endpoint behave.",
6183
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
6184
+ "type": "object"
6185
+ },
6186
+ "readme": {
6187
+ "description": "Generated README behavior.",
5650
6188
  "type": "object"
5651
6189
  },
5652
6190
  "package": {
@@ -5654,7 +6192,7 @@
5654
6192
  "type": "object"
5655
6193
  },
5656
6194
  "docs_url": {
5657
- "description": "The API's documentation site.",
6195
+ "format": "uri",
5658
6196
  "type": [
5659
6197
  "string",
5660
6198
  "null"
@@ -5662,7 +6200,6 @@
5662
6200
  },
5663
6201
  "docs_index_url": {
5664
6202
  "format": "uri",
5665
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
5666
6203
  "type": [
5667
6204
  "string",
5668
6205
  "null"
@@ -5677,6 +6214,8 @@
5677
6214
  ]
5678
6215
  },
5679
6216
  "deliveries": {
6217
+ "description": "At most one repository and one hosted MCP Delivery.",
6218
+ "maxItems": 2,
5680
6219
  "items": {
5681
6220
  "anyOf": [
5682
6221
  {
@@ -5717,23 +6256,45 @@
5717
6256
  },
5718
6257
  {
5719
6258
  "operation": "targets.retrieve",
5720
- "signature": "client.targets.retrieve(targetId)",
6259
+ "signature": "execute(targets_retrieve, arguments)",
6260
+ "tool": "targets_retrieve",
6261
+ "example_call": {
6262
+ "name": "execute",
6263
+ "arguments": {
6264
+ "operation": "targets_retrieve",
6265
+ "arguments": {
6266
+ "target_id": "tgt_5m8q2v7k1p9d4h6c"
6267
+ }
6268
+ }
6269
+ },
5721
6270
  "method": "GET",
5722
6271
  "path": "/targets/{target_id}",
5723
6272
  "summary": "Retrieve a Target",
5724
6273
  "safety": "read",
5725
6274
  "auth": "required",
6275
+ "security": [
6276
+ {
6277
+ "apiKey": []
6278
+ }
6279
+ ],
5726
6280
  "paginated": false,
5727
6281
  "input_schema": {
5728
6282
  "type": "object",
5729
6283
  "properties": {
5730
6284
  "target_id": {
5731
- "description": "Stable identifier for one configured generated product. IDs come from targets_list.",
6285
+ "description": "Stable identifier for one configured generated product.",
5732
6286
  "examples": [
5733
6287
  "tgt_5m8q2v7k1p9d4h6c"
5734
6288
  ],
5735
6289
  "pattern": "^tgt_[a-z0-9]{16}$",
5736
6290
  "type": "string"
6291
+ },
6292
+ "fields": {
6293
+ "type": "array",
6294
+ "items": {
6295
+ "type": "string"
6296
+ },
6297
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
5737
6298
  }
5738
6299
  },
5739
6300
  "required": [
@@ -5827,10 +6388,9 @@
5827
6388
  "description": "Target-specific overrides merged over Project.config.",
5828
6389
  "anyOf": [
5829
6390
  {
5830
- "description": "Shared generated-client and tooling behavior for a stored Project.",
6391
+ "description": "Target-specific generation and delivery overrides.",
5831
6392
  "properties": {
5832
6393
  "globals": {
5833
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-ap…",
5834
6394
  "maxItems": 20,
5835
6395
  "type": "array"
5836
6396
  },
@@ -5839,7 +6399,10 @@
5839
6399
  "type": "object"
5840
6400
  },
5841
6401
  "pagination": {
5842
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
6402
+ "type": "object"
6403
+ },
6404
+ "auth": {
6405
+ "description": "Selects a Project OAuth application for one Target.",
5843
6406
  "type": "object"
5844
6407
  },
5845
6408
  "cli": {
@@ -5847,7 +6410,11 @@
5847
6410
  "type": "object"
5848
6411
  },
5849
6412
  "mcp": {
5850
- "description": "How the generated MCP server and the hosted endpoint behave.",
6413
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
6414
+ "type": "object"
6415
+ },
6416
+ "readme": {
6417
+ "description": "Generated README behavior.",
5851
6418
  "type": "object"
5852
6419
  },
5853
6420
  "package": {
@@ -5855,7 +6422,7 @@
5855
6422
  "type": "object"
5856
6423
  },
5857
6424
  "docs_url": {
5858
- "description": "The API's documentation site.",
6425
+ "format": "uri",
5859
6426
  "type": [
5860
6427
  "string",
5861
6428
  "null"
@@ -5863,7 +6430,6 @@
5863
6430
  },
5864
6431
  "docs_index_url": {
5865
6432
  "format": "uri",
5866
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
5867
6433
  "type": [
5868
6434
  "string",
5869
6435
  "null"
@@ -5878,6 +6444,8 @@
5878
6444
  ]
5879
6445
  },
5880
6446
  "deliveries": {
6447
+ "description": "At most one repository and one hosted MCP Delivery.",
6448
+ "maxItems": 2,
5881
6449
  "items": {
5882
6450
  "anyOf": [
5883
6451
  {
@@ -5915,24 +6483,47 @@
5915
6483
  },
5916
6484
  {
5917
6485
  "operation": "targets.delete",
5918
- "signature": "client.targets.delete(targetId)",
6486
+ "signature": "execute(targets_delete, arguments)",
6487
+ "tool": "targets_delete",
6488
+ "example_call": {
6489
+ "name": "execute",
6490
+ "arguments": {
6491
+ "operation": "targets_delete",
6492
+ "arguments": {
6493
+ "target_id": "tgt_5m8q2v7k1p9d4h6c"
6494
+ },
6495
+ "confirm": true
6496
+ }
6497
+ },
5919
6498
  "method": "DELETE",
5920
6499
  "path": "/targets/{target_id}",
5921
6500
  "summary": "Delete an unused Target",
5922
6501
  "description": "Targets with Generation or release history, or an active release candidate, must be disabled instead.",
5923
6502
  "safety": "destructive",
5924
6503
  "auth": "required",
6504
+ "security": [
6505
+ {
6506
+ "apiKey": []
6507
+ }
6508
+ ],
5925
6509
  "paginated": false,
5926
6510
  "input_schema": {
5927
6511
  "type": "object",
5928
6512
  "properties": {
5929
6513
  "target_id": {
5930
- "description": "Stable identifier for one configured generated product. IDs come from targets_list.",
6514
+ "description": "Stable identifier for one configured generated product.",
5931
6515
  "examples": [
5932
6516
  "tgt_5m8q2v7k1p9d4h6c"
5933
6517
  ],
5934
6518
  "pattern": "^tgt_[a-z0-9]{16}$",
5935
6519
  "type": "string"
6520
+ },
6521
+ "fields": {
6522
+ "type": "array",
6523
+ "items": {
6524
+ "type": "string"
6525
+ },
6526
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
5936
6527
  }
5937
6528
  },
5938
6529
  "required": [
@@ -5974,18 +6565,33 @@
5974
6565
  },
5975
6566
  {
5976
6567
  "operation": "targets.update",
5977
- "signature": "client.targets.update(targetId, body)",
6568
+ "signature": "execute(targets_update, arguments)",
6569
+ "tool": "targets_update",
6570
+ "example_call": {
6571
+ "name": "execute",
6572
+ "arguments": {
6573
+ "operation": "targets_update",
6574
+ "arguments": {
6575
+ "target_id": "tgt_5m8q2v7k1p9d4h6c"
6576
+ }
6577
+ }
6578
+ },
5978
6579
  "method": "PATCH",
5979
6580
  "path": "/targets/{target_id}",
5980
6581
  "summary": "Update a Target, its Deliveries, or its next reviewed version",
5981
6582
  "safety": "write",
5982
6583
  "auth": "required",
6584
+ "security": [
6585
+ {
6586
+ "apiKey": []
6587
+ }
6588
+ ],
5983
6589
  "paginated": false,
5984
6590
  "input_schema": {
5985
6591
  "type": "object",
5986
6592
  "properties": {
5987
6593
  "target_id": {
5988
- "description": "Stable identifier for one configured generated product. IDs come from targets_list.",
6594
+ "description": "Stable identifier for one configured generated product.",
5989
6595
  "examples": [
5990
6596
  "tgt_5m8q2v7k1p9d4h6c"
5991
6597
  ],
@@ -6024,10 +6630,9 @@
6024
6630
  "description": "Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.",
6025
6631
  "anyOf": [
6026
6632
  {
6027
- "description": "Shared generated-client and tooling behavior for a stored Project. Every Target inherits these defaults. Target.config is merged over them for one Target; top-level values replace defaults while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's Definition and are rejected in both stored config scopes.",
6633
+ "description": "Target-specific generation and delivery overrides. Authentication may only select a Project-owned OAuth application. OAuth server metadata, applications, and identity policy remain Project-owned. Self-hosted MCP access may be overridden for a Target-specific deployment.",
6028
6634
  "properties": {
6029
6635
  "globals": {
6030
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-apply to every operation that accepts them; per-call values win. Names that match nothing are reported as generation warnings.",
6031
6636
  "maxItems": 20,
6032
6637
  "items": {
6033
6638
  "type": "string"
@@ -6077,54 +6682,49 @@
6077
6682
  "type": "object"
6078
6683
  },
6079
6684
  "pagination": {
6080
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.",
6081
6685
  "additionalProperties": {
6082
6686
  "anyOf": [
6083
6687
  {
6084
6688
  "type": "object"
6085
6689
  },
6086
6690
  {
6087
- "description": "false disables pagination detection for the operation.",
6088
6691
  "type": "boolean"
6089
6692
  }
6090
6693
  ]
6091
6694
  },
6092
6695
  "type": "object"
6093
6696
  },
6094
- "cli": {
6095
- "description": "How the generated CLI behaves. Part of Config.",
6697
+ "auth": {
6698
+ "description": "Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.",
6096
6699
  "properties": {
6097
- "command_name": {
6098
- "description": "Command users run, independent of how the CLI is distributed.",
6099
- "type": [
6100
- "string",
6101
- "null"
6102
- ]
6103
- },
6104
- "whoami_operation": {
6105
- "description": "resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides auto-detection; a value that matches nothing is reported as a generation warning.",
6700
+ "oauth_application": {
6701
+ "description": "Project OAuth application to use. Omit to inherit the Project default.",
6702
+ "maxLength": 64,
6703
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$",
6106
6704
  "type": [
6107
6705
  "string",
6108
6706
  "null"
6109
6707
  ]
6110
6708
  },
6111
- "oauth_client_id": {
6112
- "description": "OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.",
6709
+ "environments": {
6710
+ "description": "Project OAuth application selections keyed by API environment.",
6711
+ "additionalProperties": {
6712
+ "type": "object"
6713
+ },
6113
6714
  "type": [
6114
- "string",
6715
+ "object",
6115
6716
  "null"
6116
6717
  ]
6117
- },
6118
- "oauth_scopes": {
6119
- "description": "Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.",
6120
- "maxItems": 20,
6121
- "items": {
6122
- "type": "string"
6123
- },
6124
- "type": "array"
6125
- },
6126
- "oauth_audience": {
6127
- "description": "Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.",
6718
+ }
6719
+ },
6720
+ "additionalProperties": false,
6721
+ "type": "object"
6722
+ },
6723
+ "cli": {
6724
+ "description": "How the generated CLI behaves. Part of Config.",
6725
+ "properties": {
6726
+ "command_name": {
6727
+ "description": "Command users run, independent of how the CLI is distributed.",
6128
6728
  "type": [
6129
6729
  "string",
6130
6730
  "null"
@@ -6141,13 +6741,6 @@
6141
6741
  "null"
6142
6742
  ]
6143
6743
  },
6144
- "auth_url": {
6145
- "description": "Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier and receives the credential directly; no key is pasted through a conversation.",
6146
- "type": [
6147
- "string",
6148
- "null"
6149
- ]
6150
- },
6151
6744
  "mcp_url": {
6152
6745
  "description": "Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.",
6153
6746
  "type": [
@@ -6167,7 +6760,7 @@
6167
6760
  "type": "object"
6168
6761
  },
6169
6762
  "mcp": {
6170
- "description": "How the generated MCP server and the hosted endpoint behave. Part of Config.",
6763
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.",
6171
6764
  "properties": {
6172
6765
  "registry_name": {
6173
6766
  "description": "Stable official MCP registry name, independent of the server runtime.",
@@ -6176,6 +6769,37 @@
6176
6769
  "null"
6177
6770
  ]
6178
6771
  },
6772
+ "access": {
6773
+ "description": "Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting application resolves upstream API credentials separately at runtime. This setting does not apply to the Typeship-hosted endpoint.",
6774
+ "properties": {
6775
+ "issuer": {
6776
+ "format": "uri",
6777
+ "description": "Exact issuer allowed to sign MCP connection tokens.",
6778
+ "type": "string"
6779
+ },
6780
+ "resource": {
6781
+ "format": "uri",
6782
+ "description": "Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.",
6783
+ "type": "string"
6784
+ },
6785
+ "jwks_url": {
6786
+ "format": "uri",
6787
+ "description": "Public signing-key endpoint. Omit to discover it from the issuer.",
6788
+ "type": "string"
6789
+ },
6790
+ "scopes": {
6791
+ "description": "Minimum scopes required to connect to the self-hosted MCP server.",
6792
+ "maxItems": 20,
6793
+ "type": "array"
6794
+ }
6795
+ },
6796
+ "required": [
6797
+ "issuer",
6798
+ "resource"
6799
+ ],
6800
+ "additionalProperties": false,
6801
+ "type": "object"
6802
+ },
6179
6803
  "tool_mode": {
6180
6804
  "enum": [
6181
6805
  "auto",
@@ -6200,6 +6824,28 @@
6200
6824
  "type": "string"
6201
6825
  },
6202
6826
  "type": "object"
6827
+ },
6828
+ "reference_resolvers": {
6829
+ "description": "Exact name-or-ID resolver overrides keyed first by the target operationId or \"METHOD /path\", then by its wire argument name. A resolver names one read collection operation plus 1-4 item fields to match case-insensitively; false opts that argument out of strict inference.",
6830
+ "additionalProperties": {
6831
+ "type": "object"
6832
+ },
6833
+ "type": "object"
6834
+ }
6835
+ },
6836
+ "additionalProperties": false,
6837
+ "type": "object"
6838
+ },
6839
+ "readme": {
6840
+ "description": "Generated README behavior. Part of Config.",
6841
+ "properties": {
6842
+ "quickstart_operation": {
6843
+ "description": "operationId or \"METHOD /path\" to feature as the README's first API call. It must be present in the generated package and callable with no required input beyond path placeholders. Missing or unsuitable choices produce a warning and use the automatic example.",
6844
+ "maxLength": 500,
6845
+ "type": [
6846
+ "string",
6847
+ "null"
6848
+ ]
6203
6849
  }
6204
6850
  },
6205
6851
  "additionalProperties": false,
@@ -6251,7 +6897,7 @@
6251
6897
  "type": "object"
6252
6898
  },
6253
6899
  "docs_url": {
6254
- "description": "The API's documentation site. Read through its llms.txt by the generated CLI's docs command, the MCP server's docs tools, and the package's AGENTS.md. Defaults to the Definition's externalDocs URL.",
6900
+ "format": "uri",
6255
6901
  "type": [
6256
6902
  "string",
6257
6903
  "null"
@@ -6259,7 +6905,6 @@
6259
6905
  },
6260
6906
  "docs_index_url": {
6261
6907
  "format": "uri",
6262
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
6263
6908
  "type": [
6264
6909
  "string",
6265
6910
  "null"
@@ -6275,6 +6920,7 @@
6275
6920
  ]
6276
6921
  },
6277
6922
  "deliveries": {
6923
+ "maxItems": 2,
6278
6924
  "items": {
6279
6925
  "anyOf": [
6280
6926
  {
@@ -6352,6 +6998,13 @@
6352
6998
  ]
6353
6999
  },
6354
7000
  "type": "array"
7001
+ },
7002
+ "fields": {
7003
+ "type": "array",
7004
+ "items": {
7005
+ "type": "string"
7006
+ },
7007
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
6355
7008
  }
6356
7009
  },
6357
7010
  "required": [
@@ -6445,10 +7098,9 @@
6445
7098
  "description": "Target-specific overrides merged over Project.config.",
6446
7099
  "anyOf": [
6447
7100
  {
6448
- "description": "Shared generated-client and tooling behavior for a stored Project.",
7101
+ "description": "Target-specific generation and delivery overrides.",
6449
7102
  "properties": {
6450
7103
  "globals": {
6451
- "description": "Wire names of query/header parameters that become settable once on the generated client and auto-ap…",
6452
7104
  "maxItems": 20,
6453
7105
  "type": "array"
6454
7106
  },
@@ -6457,7 +7109,10 @@
6457
7109
  "type": "object"
6458
7110
  },
6459
7111
  "pagination": {
6460
- "description": "Per-operation pagination control, keyed by operationId or \"METHOD /path\".",
7112
+ "type": "object"
7113
+ },
7114
+ "auth": {
7115
+ "description": "Selects a Project OAuth application for one Target.",
6461
7116
  "type": "object"
6462
7117
  },
6463
7118
  "cli": {
@@ -6465,7 +7120,11 @@
6465
7120
  "type": "object"
6466
7121
  },
6467
7122
  "mcp": {
6468
- "description": "How the generated MCP server and the hosted endpoint behave.",
7123
+ "description": "How generated MCP servers and the Typeship-hosted endpoint behave.",
7124
+ "type": "object"
7125
+ },
7126
+ "readme": {
7127
+ "description": "Generated README behavior.",
6469
7128
  "type": "object"
6470
7129
  },
6471
7130
  "package": {
@@ -6473,7 +7132,7 @@
6473
7132
  "type": "object"
6474
7133
  },
6475
7134
  "docs_url": {
6476
- "description": "The API's documentation site.",
7135
+ "format": "uri",
6477
7136
  "type": [
6478
7137
  "string",
6479
7138
  "null"
@@ -6481,7 +7140,6 @@
6481
7140
  },
6482
7141
  "docs_index_url": {
6483
7142
  "format": "uri",
6484
- "description": "Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.",
6485
7143
  "type": [
6486
7144
  "string",
6487
7145
  "null"
@@ -6496,6 +7154,8 @@
6496
7154
  ]
6497
7155
  },
6498
7156
  "deliveries": {
7157
+ "description": "At most one repository and one hosted MCP Delivery.",
7158
+ "maxItems": 2,
6499
7159
  "items": {
6500
7160
  "anyOf": [
6501
7161
  {
@@ -6533,18 +7193,33 @@
6533
7193
  },
6534
7194
  {
6535
7195
  "operation": "targets.listReleases",
6536
- "signature": "client.targets.listReleases(targetId, params)",
7196
+ "signature": "execute(targets_list_releases, arguments)",
7197
+ "tool": "targets_list_releases",
7198
+ "example_call": {
7199
+ "name": "execute",
7200
+ "arguments": {
7201
+ "operation": "targets_list_releases",
7202
+ "arguments": {
7203
+ "target_id": "tgt_5m8q2v7k1p9d4h6c"
7204
+ }
7205
+ }
7206
+ },
6537
7207
  "method": "GET",
6538
7208
  "path": "/targets/{target_id}/releases",
6539
7209
  "summary": "List immutable releases for a Target",
6540
7210
  "safety": "read",
6541
7211
  "auth": "required",
7212
+ "security": [
7213
+ {
7214
+ "apiKey": []
7215
+ }
7216
+ ],
6542
7217
  "paginated": true,
6543
7218
  "input_schema": {
6544
7219
  "type": "object",
6545
7220
  "properties": {
6546
7221
  "target_id": {
6547
- "description": "Stable identifier for one configured generated product. IDs come from targets_list.",
7222
+ "description": "Stable identifier for one configured generated product.",
6548
7223
  "examples": [
6549
7224
  "tgt_5m8q2v7k1p9d4h6c"
6550
7225
  ],
@@ -6561,6 +7236,13 @@
6561
7236
  "cursor": {
6562
7237
  "type": "string",
6563
7238
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
7239
+ },
7240
+ "fields": {
7241
+ "type": "array",
7242
+ "items": {
7243
+ "type": "string"
7244
+ },
7245
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
6564
7246
  }
6565
7247
  },
6566
7248
  "required": [
@@ -6700,12 +7382,27 @@
6700
7382
  },
6701
7383
  {
6702
7384
  "operation": "targets.retrieveRelease",
6703
- "signature": "client.targets.retrieveRelease(targetReleaseId)",
7385
+ "signature": "execute(targets_retrieve_release, arguments)",
7386
+ "tool": "targets_retrieve_release",
7387
+ "example_call": {
7388
+ "name": "execute",
7389
+ "arguments": {
7390
+ "operation": "targets_retrieve_release",
7391
+ "arguments": {
7392
+ "target_release_id": "rel_7m2q8v4k1p9d5h6c"
7393
+ }
7394
+ }
7395
+ },
6704
7396
  "method": "GET",
6705
7397
  "path": "/target_releases/{target_release_id}",
6706
7398
  "summary": "Retrieve an immutable Target release",
6707
7399
  "safety": "read",
6708
7400
  "auth": "required",
7401
+ "security": [
7402
+ {
7403
+ "apiKey": []
7404
+ }
7405
+ ],
6709
7406
  "paginated": false,
6710
7407
  "input_schema": {
6711
7408
  "type": "object",
@@ -6716,6 +7413,13 @@
6716
7413
  ],
6717
7414
  "pattern": "^rel_[a-z0-9]{16}$",
6718
7415
  "type": "string"
7416
+ },
7417
+ "fields": {
7418
+ "type": "array",
7419
+ "items": {
7420
+ "type": "string"
7421
+ },
7422
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
6719
7423
  }
6720
7424
  },
6721
7425
  "required": [
@@ -6833,13 +7537,28 @@
6833
7537
  },
6834
7538
  {
6835
7539
  "operation": "generations.retrieve",
6836
- "signature": "client.generations.retrieve(generationId)",
7540
+ "signature": "execute(generations_retrieve, arguments)",
7541
+ "tool": "generations_retrieve",
7542
+ "example_call": {
7543
+ "name": "execute",
7544
+ "arguments": {
7545
+ "operation": "generations_retrieve",
7546
+ "arguments": {
7547
+ "generation_id": "gen_7h2p5d9c3m8w1k6q"
7548
+ }
7549
+ }
7550
+ },
6837
7551
  "method": "GET",
6838
7552
  "path": "/generations/{generation_id}",
6839
7553
  "summary": "Retrieve a generation",
6840
7554
  "description": "Includes the generated files when the generation succeeded.",
6841
7555
  "safety": "read",
6842
7556
  "auth": "required",
7557
+ "security": [
7558
+ {
7559
+ "apiKey": []
7560
+ }
7561
+ ],
6843
7562
  "paginated": false,
6844
7563
  "input_schema": {
6845
7564
  "type": "object",
@@ -6851,6 +7570,13 @@
6851
7570
  ],
6852
7571
  "pattern": "^gen_[a-z0-9]{16}$",
6853
7572
  "type": "string"
7573
+ },
7574
+ "fields": {
7575
+ "type": "array",
7576
+ "items": {
7577
+ "type": "string"
7578
+ },
7579
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
6854
7580
  }
6855
7581
  },
6856
7582
  "required": [
@@ -7052,13 +7778,29 @@
7052
7778
  },
7053
7779
  {
7054
7780
  "operation": "generations.retrieveFile",
7055
- "signature": "client.generations.retrieveFile(generationId, params)",
7781
+ "signature": "execute(generations_retrieve_file, arguments)",
7782
+ "tool": "generations_retrieve_file",
7783
+ "example_call": {
7784
+ "name": "execute",
7785
+ "arguments": {
7786
+ "operation": "generations_retrieve_file",
7787
+ "arguments": {
7788
+ "generation_id": "gen_7h2p5d9c3m8w1k6q",
7789
+ "path": "openapi.yaml"
7790
+ }
7791
+ }
7792
+ },
7056
7793
  "method": "GET",
7057
7794
  "path": "/generations/{generation_id}/file",
7058
7795
  "summary": "Fetch one file from a generation",
7059
7796
  "description": "Raw file content, for generations whose target was too large to inline (files_omitted true). The generation's files_index lists valid paths.",
7060
7797
  "safety": "read",
7061
7798
  "auth": "required",
7799
+ "security": [
7800
+ {
7801
+ "apiKey": []
7802
+ }
7803
+ ],
7062
7804
  "paginated": false,
7063
7805
  "input_schema": {
7064
7806
  "type": "object",
@@ -7074,6 +7816,13 @@
7074
7816
  "path": {
7075
7817
  "type": "string",
7076
7818
  "description": "Repo-relative path inside the generated package."
7819
+ },
7820
+ "fields": {
7821
+ "type": "array",
7822
+ "items": {
7823
+ "type": "string"
7824
+ },
7825
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7077
7826
  }
7078
7827
  },
7079
7828
  "required": [
@@ -7088,13 +7837,28 @@
7088
7837
  },
7089
7838
  {
7090
7839
  "operation": "definitionRevisions.list",
7091
- "signature": "client.definitionRevisions.list(definitionId, params)",
7840
+ "signature": "execute(definition_revisions_list, arguments)",
7841
+ "tool": "definition_revisions_list",
7842
+ "example_call": {
7843
+ "name": "execute",
7844
+ "arguments": {
7845
+ "operation": "definition_revisions_list",
7846
+ "arguments": {
7847
+ "definition_id": "def_2p8m4q7k1v9d6h3c"
7848
+ }
7849
+ }
7850
+ },
7092
7851
  "method": "GET",
7093
7852
  "path": "/definitions/{definition_id}/revisions",
7094
7853
  "summary": "List Definition Revisions",
7095
7854
  "description": "Immutable snapshots of the complete resolved document graph this Definition observed, newest first. Content is available from the revision and document endpoints and is never embedded in a list response.",
7096
7855
  "safety": "read",
7097
7856
  "auth": "required",
7857
+ "security": [
7858
+ {
7859
+ "apiKey": []
7860
+ }
7861
+ ],
7098
7862
  "paginated": true,
7099
7863
  "input_schema": {
7100
7864
  "type": "object",
@@ -7117,6 +7881,13 @@
7117
7881
  "cursor": {
7118
7882
  "type": "string",
7119
7883
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
7884
+ },
7885
+ "fields": {
7886
+ "type": "array",
7887
+ "items": {
7888
+ "type": "string"
7889
+ },
7890
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7120
7891
  }
7121
7892
  },
7122
7893
  "required": [
@@ -7274,24 +8045,46 @@
7274
8045
  },
7275
8046
  {
7276
8047
  "operation": "definitionRevisions.retrieve",
7277
- "signature": "client.definitionRevisions.retrieve(definitionRevisionId)",
8048
+ "signature": "execute(definition_revisions_retrieve, arguments)",
8049
+ "tool": "definition_revisions_retrieve",
8050
+ "example_call": {
8051
+ "name": "execute",
8052
+ "arguments": {
8053
+ "operation": "definition_revisions_retrieve",
8054
+ "arguments": {
8055
+ "definition_revision_id": "drev_6m1q8v4k2p9d7h3c"
8056
+ }
8057
+ }
8058
+ },
7278
8059
  "method": "GET",
7279
8060
  "path": "/definition_revisions/{definition_revision_id}",
7280
8061
  "summary": "Retrieve a Definition Revision",
7281
8062
  "description": "Metadata for one immutable resolved document graph. Fetch its canonical content or individual source documents from the content endpoints.",
7282
8063
  "safety": "read",
7283
8064
  "auth": "required",
8065
+ "security": [
8066
+ {
8067
+ "apiKey": []
8068
+ }
8069
+ ],
7284
8070
  "paginated": false,
7285
8071
  "input_schema": {
7286
8072
  "type": "object",
7287
8073
  "properties": {
7288
8074
  "definition_revision_id": {
7289
- "description": "Unique identifier for an immutable resolved Definition Revision. IDs come from definition_revisions_list.",
8075
+ "description": "Unique identifier for an immutable resolved Definition Revision.",
7290
8076
  "examples": [
7291
8077
  "drev_6m1q8v4k2p9d7h3c"
7292
8078
  ],
7293
8079
  "pattern": "^drev_[a-z0-9]{16}$",
7294
8080
  "type": "string"
8081
+ },
8082
+ "fields": {
8083
+ "type": "array",
8084
+ "items": {
8085
+ "type": "string"
8086
+ },
8087
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7295
8088
  }
7296
8089
  },
7297
8090
  "required": [
@@ -7464,24 +8257,46 @@
7464
8257
  },
7465
8258
  {
7466
8259
  "operation": "definitionRevisions.retrieveContent",
7467
- "signature": "client.definitionRevisions.retrieveContent(definitionRevisionId)",
8260
+ "signature": "execute(definition_revisions_retrieve_content, arguments)",
8261
+ "tool": "definition_revisions_retrieve_content",
8262
+ "example_call": {
8263
+ "name": "execute",
8264
+ "arguments": {
8265
+ "operation": "definition_revisions_retrieve_content",
8266
+ "arguments": {
8267
+ "definition_revision_id": "drev_6m1q8v4k2p9d7h3c"
8268
+ }
8269
+ }
8270
+ },
7468
8271
  "method": "GET",
7469
8272
  "path": "/definition_revisions/{definition_revision_id}/content",
7470
8273
  "summary": "Retrieve a Definition Revision's canonical content",
7471
8274
  "description": "Returns the exact canonical resolved content identified by the revision's graph digest, suitable for saving or piping into a diff.",
7472
8275
  "safety": "read",
7473
8276
  "auth": "required",
8277
+ "security": [
8278
+ {
8279
+ "apiKey": []
8280
+ }
8281
+ ],
7474
8282
  "paginated": false,
7475
8283
  "input_schema": {
7476
8284
  "type": "object",
7477
8285
  "properties": {
7478
8286
  "definition_revision_id": {
7479
- "description": "Unique identifier for an immutable resolved Definition Revision. IDs come from definition_revisions_list.",
8287
+ "description": "Unique identifier for an immutable resolved Definition Revision.",
7480
8288
  "examples": [
7481
8289
  "drev_6m1q8v4k2p9d7h3c"
7482
8290
  ],
7483
8291
  "pattern": "^drev_[a-z0-9]{16}$",
7484
8292
  "type": "string"
8293
+ },
8294
+ "fields": {
8295
+ "type": "array",
8296
+ "items": {
8297
+ "type": "string"
8298
+ },
8299
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7485
8300
  }
7486
8301
  },
7487
8302
  "required": [
@@ -7494,18 +8309,34 @@
7494
8309
  },
7495
8310
  {
7496
8311
  "operation": "definitionRevisions.retrieveDocumentContent",
7497
- "signature": "client.definitionRevisions.retrieveDocumentContent(definitionRevisionId, documentId)",
8312
+ "signature": "execute(definition_revisions_retrieve_document_content, arguments)",
8313
+ "tool": "definition_revisions_retrieve_document_content",
8314
+ "example_call": {
8315
+ "name": "execute",
8316
+ "arguments": {
8317
+ "operation": "definition_revisions_retrieve_document_content",
8318
+ "arguments": {
8319
+ "definition_revision_id": "drev_6m1q8v4k2p9d7h3c",
8320
+ "document_id": "doc_8q2m5v1k9p4d7h3c"
8321
+ }
8322
+ }
8323
+ },
7498
8324
  "method": "GET",
7499
8325
  "path": "/definition_revisions/{definition_revision_id}/documents/{document_id}/content",
7500
8326
  "summary": "Retrieve one source document from a Definition Revision",
7501
8327
  "safety": "read",
7502
8328
  "auth": "required",
8329
+ "security": [
8330
+ {
8331
+ "apiKey": []
8332
+ }
8333
+ ],
7503
8334
  "paginated": false,
7504
8335
  "input_schema": {
7505
8336
  "type": "object",
7506
8337
  "properties": {
7507
8338
  "definition_revision_id": {
7508
- "description": "Unique identifier for an immutable resolved Definition Revision. IDs come from definition_revisions_list.",
8339
+ "description": "Unique identifier for an immutable resolved Definition Revision.",
7509
8340
  "examples": [
7510
8341
  "drev_6m1q8v4k2p9d7h3c"
7511
8342
  ],
@@ -7519,6 +8350,13 @@
7519
8350
  ],
7520
8351
  "pattern": "^doc_[a-z0-9]{16}$",
7521
8352
  "type": "string"
8353
+ },
8354
+ "fields": {
8355
+ "type": "array",
8356
+ "items": {
8357
+ "type": "string"
8358
+ },
8359
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7522
8360
  }
7523
8361
  },
7524
8362
  "required": [
@@ -7533,17 +8371,38 @@
7533
8371
  },
7534
8372
  {
7535
8373
  "operation": "account.retrieve",
7536
- "signature": "client.account.retrieve()",
8374
+ "signature": "execute(account_retrieve, arguments)",
8375
+ "tool": "account_retrieve",
8376
+ "example_call": {
8377
+ "name": "execute",
8378
+ "arguments": {
8379
+ "operation": "account_retrieve",
8380
+ "arguments": {}
8381
+ }
8382
+ },
7537
8383
  "method": "GET",
7538
8384
  "path": "/me",
7539
8385
  "summary": "The account behind the presented credentials",
7540
8386
  "description": "Returns the account that owns the presented API key. This is also the\nidentity endpoint the generated typeship CLI's `whoami` calls.",
7541
8387
  "safety": "read",
7542
8388
  "auth": "required",
8389
+ "security": [
8390
+ {
8391
+ "apiKey": []
8392
+ }
8393
+ ],
7543
8394
  "paginated": false,
7544
8395
  "input_schema": {
7545
8396
  "type": "object",
7546
- "properties": {}
8397
+ "properties": {
8398
+ "fields": {
8399
+ "type": "array",
8400
+ "items": {
8401
+ "type": "string"
8402
+ },
8403
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
8404
+ }
8405
+ }
7547
8406
  },
7548
8407
  "output_schema": {
7549
8408
  "description": "The organization an API key belongs to. Members share its projects, keys, and plan; sign-in identity is not part of the API.",
@@ -7590,13 +8449,26 @@
7590
8449
  },
7591
8450
  {
7592
8451
  "operation": "apiKeys.list",
7593
- "signature": "client.apiKeys.list(params)",
8452
+ "signature": "execute(api_keys_list, arguments)",
8453
+ "tool": "api_keys_list",
8454
+ "example_call": {
8455
+ "name": "execute",
8456
+ "arguments": {
8457
+ "operation": "api_keys_list",
8458
+ "arguments": {}
8459
+ }
8460
+ },
7594
8461
  "method": "GET",
7595
8462
  "path": "/api_keys",
7596
8463
  "summary": "List API keys",
7597
8464
  "description": "Keys are never returned in full — only their identity and last four. Creation stays in the console deliberately: a leaked key that can mint more keys is a leaked account.",
7598
8465
  "safety": "read",
7599
8466
  "auth": "required",
8467
+ "security": [
8468
+ {
8469
+ "apiKey": []
8470
+ }
8471
+ ],
7600
8472
  "paginated": true,
7601
8473
  "input_schema": {
7602
8474
  "type": "object",
@@ -7611,6 +8483,13 @@
7611
8483
  "cursor": {
7612
8484
  "type": "string",
7613
8485
  "description": "Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."
8486
+ },
8487
+ "fields": {
8488
+ "type": "array",
8489
+ "items": {
8490
+ "type": "string"
8491
+ },
8492
+ "description": "Result keys to keep, as dotted paths, applied to each item (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7614
8493
  }
7615
8494
  }
7616
8495
  },
@@ -7681,20 +8560,46 @@
7681
8560
  },
7682
8561
  {
7683
8562
  "operation": "apiKeys.revoke",
7684
- "signature": "client.apiKeys.revoke(apiKeyId)",
8563
+ "signature": "execute(api_keys_revoke, arguments)",
8564
+ "tool": "api_keys_revoke",
8565
+ "example_call": {
8566
+ "name": "execute",
8567
+ "arguments": {
8568
+ "operation": "api_keys_revoke",
8569
+ "arguments": {
8570
+ "api_key_id": "api_key_123"
8571
+ },
8572
+ "confirm": true
8573
+ }
8574
+ },
7685
8575
  "method": "DELETE",
7686
8576
  "path": "/api_keys/{api_key_id}",
7687
8577
  "summary": "Revoke an API key",
7688
8578
  "description": "Idempotent: revoking an already-revoked key returns the same body, so a rotation script that re-runs does not have to special-case having already succeeded. An OAuth member may revoke a key they created; an organization admin may revoke any key. Organization API keys retain account-wide authority.",
7689
8579
  "safety": "destructive",
7690
8580
  "auth": "required",
8581
+ "security": [
8582
+ {
8583
+ "apiKey": []
8584
+ }
8585
+ ],
7691
8586
  "paginated": false,
7692
8587
  "input_schema": {
7693
8588
  "type": "object",
7694
8589
  "properties": {
7695
8590
  "api_key_id": {
7696
- "description": "Identifier returned by the API key list. IDs come from api_keys_list.",
7697
- "type": "string"
8591
+ "description": "Identifier returned by the API key list. Accepts an ID or an exact name (resolved via api_keys_list). IDs come from api_keys_list.",
8592
+ "type": "string",
8593
+ "examples": [
8594
+ "example-name"
8595
+ ]
8596
+ },
8597
+ "fields": {
8598
+ "type": "array",
8599
+ "items": {
8600
+ "type": "string"
8601
+ },
8602
+ "description": "Result keys to keep, as dotted paths (e.g. [\"id\",\"name\"]). Omit for the whole result. Keeps responses small."
7698
8603
  }
7699
8604
  },
7700
8605
  "required": [