@typeship-ax/cli 0.6.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 (121) hide show
  1. package/AGENTS.md +31 -0
  2. package/README.md +26 -9
  3. package/api.json +6861 -3083
  4. package/api.md +508 -277
  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/cli-agent.d.ts +9 -1
  12. package/dist/cli-agent.d.ts.map +1 -1
  13. package/dist/cli-agent.js +26 -9
  14. package/dist/cli.js +600 -582
  15. package/dist/console-login-check.d.ts +21 -0
  16. package/dist/console-login-check.d.ts.map +1 -0
  17. package/dist/console-login-check.js +107 -0
  18. package/dist/console-login-contract.d.ts +45 -0
  19. package/dist/console-login-contract.d.ts.map +1 -0
  20. package/dist/console-login-contract.js +40 -0
  21. package/dist/core/http.d.ts +21 -92
  22. package/dist/core/http.d.ts.map +1 -1
  23. package/dist/core/http.js +143 -221
  24. package/dist/core/pagination.d.ts.map +1 -1
  25. package/dist/core/pagination.js +6 -34
  26. package/dist/credential-storage.d.ts +24 -0
  27. package/dist/credential-storage.d.ts.map +1 -0
  28. package/dist/credential-storage.js +207 -0
  29. package/dist/dates.d.ts +0 -2
  30. package/dist/dates.d.ts.map +1 -1
  31. package/dist/dates.js +0 -1
  32. package/dist/docs.d.ts +36 -0
  33. package/dist/docs.d.ts.map +1 -0
  34. package/dist/docs.js +258 -0
  35. package/dist/errors.d.ts +42 -34
  36. package/dist/errors.d.ts.map +1 -1
  37. package/dist/errors.js +30 -20
  38. package/dist/index.d.ts +27 -12
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +40 -14
  41. package/dist/named-credentials.d.ts +21 -0
  42. package/dist/named-credentials.d.ts.map +1 -0
  43. package/dist/named-credentials.js +86 -0
  44. package/dist/oauth-login.d.ts +39 -0
  45. package/dist/oauth-login.d.ts.map +1 -0
  46. package/dist/oauth-login.js +171 -0
  47. package/dist/oauth-request.d.ts +21 -0
  48. package/dist/oauth-request.d.ts.map +1 -0
  49. package/dist/oauth-request.js +119 -0
  50. package/dist/oauth-session.d.ts +106 -0
  51. package/dist/oauth-session.d.ts.map +1 -0
  52. package/dist/oauth-session.js +244 -0
  53. package/dist/ops.d.ts +18 -0
  54. package/dist/ops.d.ts.map +1 -1
  55. package/dist/ops.js +31 -17
  56. package/dist/polling-login.d.ts +57 -0
  57. package/dist/polling-login.d.ts.map +1 -0
  58. package/dist/polling-login.js +204 -0
  59. package/dist/resources/account.d.ts +4 -4
  60. package/dist/resources/account.d.ts.map +1 -1
  61. package/dist/resources/account.js +1 -0
  62. package/dist/resources/api-keys.d.ts +13 -8
  63. package/dist/resources/api-keys.d.ts.map +1 -1
  64. package/dist/resources/api-keys.js +5 -1
  65. package/dist/resources/definition-revisions.d.ts +58 -0
  66. package/dist/resources/definition-revisions.d.ts.map +1 -0
  67. package/dist/resources/definition-revisions.js +114 -0
  68. package/dist/resources/definitions.d.ts +35 -0
  69. package/dist/resources/definitions.d.ts.map +1 -0
  70. package/dist/resources/definitions.js +60 -0
  71. package/dist/resources/generate.d.ts +18 -7
  72. package/dist/resources/generate.d.ts.map +1 -1
  73. package/dist/resources/generate.js +13 -5
  74. package/dist/resources/generations.d.ts +6 -6
  75. package/dist/resources/generations.d.ts.map +1 -1
  76. package/dist/resources/generations.js +3 -1
  77. package/dist/resources/projects.d.ts +111 -35
  78. package/dist/resources/projects.d.ts.map +1 -1
  79. package/dist/resources/projects.js +125 -15
  80. package/dist/resources/targets.d.ts +97 -0
  81. package/dist/resources/targets.d.ts.map +1 -0
  82. package/dist/resources/targets.js +197 -0
  83. package/dist/schemas.d.ts.map +1 -1
  84. package/dist/schemas.js +135 -62
  85. package/dist/types.d.ts +2072 -267
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/types.js +20 -3
  88. package/package.json +2 -1
  89. package/src/api-identity.ts +98 -0
  90. package/src/auth-profiles.ts +114 -0
  91. package/src/cli-agent.ts +28 -11
  92. package/src/cli.ts +528 -560
  93. package/src/console-login-check.ts +88 -0
  94. package/src/console-login-contract.ts +65 -0
  95. package/src/core/http.ts +156 -305
  96. package/src/core/pagination.ts +6 -30
  97. package/src/credential-storage.ts +183 -0
  98. package/src/dates.ts +0 -1
  99. package/src/docs.ts +239 -0
  100. package/src/errors.ts +52 -41
  101. package/src/index.ts +49 -14
  102. package/src/named-credentials.ts +74 -0
  103. package/src/oauth-login.ts +184 -0
  104. package/src/oauth-request.ts +90 -0
  105. package/src/oauth-session.ts +258 -0
  106. package/src/ops.ts +56 -17
  107. package/src/polling-login.ts +165 -0
  108. package/src/resources/account.ts +6 -3
  109. package/src/resources/api-keys.ts +27 -7
  110. package/src/resources/definition-revisions.ts +207 -0
  111. package/src/resources/definitions.ts +122 -0
  112. package/src/resources/generate.ts +29 -6
  113. package/src/resources/generations.ts +9 -4
  114. package/src/resources/projects.ts +274 -41
  115. package/src/resources/targets.ts +378 -0
  116. package/src/schemas.ts +135 -62
  117. package/src/types.ts +2273 -322
  118. package/dist/resources/spec-revisions.d.ts +0 -47
  119. package/dist/resources/spec-revisions.d.ts.map +0 -1
  120. package/dist/resources/spec-revisions.js +0 -90
  121. package/src/resources/spec-revisions.ts +0 -150
package/src/ops.ts CHANGED
@@ -23,6 +23,16 @@ export interface ParamSpec {
23
23
  description?: string;
24
24
  /** Settable once on the client (globals option); optional per call. */
25
25
  global?: boolean;
26
+ /** False opts out. Otherwise exact human references are resolved through
27
+ * this one read operation before the requested call. */
28
+ resolve?: false | {
29
+ via: string;
30
+ match: string[];
31
+ id: string;
32
+ idPattern?: string;
33
+ filterParam?: string;
34
+ inferred?: boolean;
35
+ };
26
36
  }
27
37
 
28
38
  export interface OpSpec {
@@ -75,6 +85,9 @@ export interface OpSpec {
75
85
  /** The spec's security requirement: "required" fails fast without a
76
86
  * credential; "none" works anonymously; "optional" is either. */
77
87
  auth: "required" | "optional" | "none";
88
+ security?: Record<string, string[]>[];
89
+ /** Complete credential-option combinations for this operation. */
90
+ credentialOptions?: string[][];
78
91
  /** Whether calling this operation only reads, writes, or destroys state. */
79
92
  safety: "read" | "write" | "destructive";
80
93
  params: ParamSpec[];
@@ -87,23 +100,49 @@ export interface OpSpec {
87
100
  }
88
101
 
89
102
  export const OPS: OpSpec[] = [
90
- {"resource":"generate","method":"run","command":["generate","run"],"tool":"generate_run","httpMethod":"POST","path":"/generate","summary":"Generate a package from a spec","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 spec 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 whole spec. A present but invalid key is a\n401, not a downgrade to anonymous.","toolDescription":"Generate a package from a spec. Stateless generation: nothing is stored. POST /generate Credential optional.","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":false,"select":false,"idempotent":false,"auth":"optional","safety":"write","params":[{"name":"spec","ts":"spec","kind":"body","type":"json","required":true,"description":"The specification for stateless generation, provided as exactly one URL or inline document.","flag":"spec"},{"name":"outputs","ts":"outputs","kind":"body","type":"array","required":true,"items":{"type":"string","enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"]},"description":"The one output package to generate. Linked projects can select any combination of outputs and keep each package current.","flag":"outputs"},{"name":"package_name","ts":"package_name","kind":"body","type":"string","required":false,"description":"Registry name for the selected delivery package: an npm package, Python distribution, or Go module path. Defaults to a name derived from the API title.","flag":"package-name"},{"name":"config","ts":"config","kind":"body","type":"object","required":false,"description":"Everything typeship needs beyond the spec, 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 spec itself. The same shape is accepted on a project and on POST /generate.","flag":"config"}],"inputSchema":{"type":"object","properties":{"spec":{"description":"The specification for stateless generation, provided as exactly one URL or inline document.","anyOf":[{"properties":{"url":{"format":"uri","description":"URL of an OpenAPI document, a GraphQL SDL file, or a GraphQL\nendpoint (introspected automatically). Fetched server-side.","pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Sent on the document GET and GraphQL introspection POST, never returned or retained by stateless generation.","additionalProperties":{"maxLength":4096,"type":"string"},"type":"object"}},"required":["url"],"additionalProperties":false,"type":"object"},{"properties":{"inline":{"description":"Raw spec text (OpenAPI JSON/YAML or GraphQL SDL). Up to 10MB.","type":"string"}},"required":["inline"],"additionalProperties":false,"type":"object"}]},"outputs":{"description":"The one output package to generate. Linked projects can select any combination of outputs and keep each package current.","minItems":1,"maxItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"type":"array"},"package_name":{"description":"Registry name for the selected delivery package: an npm package, Python distribution, or Go module path. Defaults to a name derived from the API title.","type":"string"},"config":{"description":"Everything typeship needs beyond the spec, 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 spec itself. The same shape is accepted on a project and on POST /generate.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"properties":{"style":{"enum":["cursor","cursorFromLastId","page","offset"],"default":"cursor","type":"string"},"items_field":{"description":"Response field holding the item array.","type":"string"},"cursor_param":{"type":"string"},"next_cursor_field":{"type":"string"},"has_more_field":{"type":"string"},"id_field":{"type":"string"},"page_param":{"type":"string"},"offset_param":{"type":"string"},"limit_param":{"type":"string"}},"required":["items_field"],"additionalProperties":false,"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"properties":{"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["name","url"],"additionalProperties":false,"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Braintree\" gives braintree and BraintreeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"whoami_operation":{"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.","type":["string","null"]},"oauth_client_id":{"description":"OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.","type":["string","null"]},"oauth_scopes":{"description":"Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.","maxItems":20,"items":{"type":"string"},"type":"array"},"oauth_audience":{"description":"Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"auth_url":{"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.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave. Part of Config.","properties":{"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination; release versions belong to packages.","properties":{"version":{"description":"Lockstep version fallback. Prefer packages.<output>.version so every SDK, CLI, and MCP package can advance independently.","deprecated":true,"type":["string","null"]},"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"bin_name":{"description":"CLI executable name when it differs from the npm package name.","type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]},"mcp_name":{"description":"Official MCP registry name written into package.json.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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 spec's externalDocs URL.","type":["string","null"]}},"additionalProperties":false,"type":"object"}},"required":["spec","outputs"]},"exampleArguments":{"spec":{"url":"https://example.com"},"outputs":["typescript-sdk"]},"outputSchema":{"properties":{"files":{"items":{"properties":{"path":{"description":"Repo-relative path inside the generated package.","type":"string"},"content":{"type":"string"}},"type":"object"},"type":"array"},"warnings":{"items":{"type":"string"},"type":"array"},"meta":{"properties":{"title":{"type":"string"},"version":{"type":"string"},"spec_format":{"enum":["openapi","graphql"],"type":"string"},"oas_version":{"description":"Detected spec version, \"2.0\", \"3.0\", or \"3.1\".","type":"string"},"converted":{"description":"True when the input was Swagger 2.0 and was converted.","type":"boolean"},"package_name":{"type":"string"},"client_name":{"type":"string"},"outputs":{"description":"Customer-selected outputs present in this delivery package.","uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"type":"array"},"resource_count":{"type":"integer"},"operation_count":{"type":"integer"},"schema_count":{"type":"integer"},"paginated_operation_count":{"type":"integer"},"omitted_operation_count":{"description":"Operations beyond the plan's endpoint allowance, not generated.","type":"integer"},"pr_url":{"description":"Pull request opened by this regeneration, when one was.","type":["string","null"]},"pr_number":{"type":["integer","null"]},"pr_status":{"enum":["opened","no_changes","blocked"],"description":"Whether a destination pull request opened, was unnecessary because the generated tree already matched, or could not be opened.","type":"string"},"pr_error":{"description":"Why the configured destination pull request was not opened. Generation itself still succeeded; fix this action and regenerate.","type":"string"},"changelog":{"description":"Markdown changelog entry for this regeneration, from the API surface diff. Absent on a first generation or when nothing changed.","type":"string"},"breaking_count":{"description":"Breaking changes in the diff; removed methods and fields, changed types, inputs that became required.","type":"integer"},"baseline":{"enum":["destination","last-generation","none"],"description":"What the diff was measured against; \"destination\" means the .typeship/surface.json merged in the destination repository.","type":"string"},"package_compatibility":{"enum":["success","failure"],"description":"The package compatibility verdict on the regeneration pull request; failure means breaking changes without a major version bump.","type":"string"},"package_compatibility_note":{"description":"The verdict in one line, as the commit status describes it.","type":"string"},"previous_version":{"description":"The package version the destination had before this regeneration.","type":"string"},"file_count":{"type":"integer"},"total_lines":{"type":"integer"}},"type":"object"},"limits":{"description":"Present when the generation was capped: by the free plan, or because the call was anonymous. Absent on uncapped generations.","properties":{"max_operations":{"description":"How many operations this generation was allowed to include.","type":"integer"},"omitted_operations":{"description":"How many operations in the spec were left out.","type":"integer"},"reason":{"enum":["anonymous","free_plan"],"type":"string"},"signup_url":{"description":"Anonymous calls only. Where to create an account.","type":"string"},"upgrade_url":{"description":"Where the cap is lifted.","type":"string"}},"type":"object"},"claim":{"description":"Anonymous, URL-sourced generations only. A link a signed-in person can open to turn this run into a project in their organization (same spec, outputs, and config). Lasts seven days. Null for inline specs; absent on keyed calls.","anyOf":[{"type":"null"},{"properties":{"url":{"type":"string"},"expires_at":{"format":"date-time","type":"string"}},"type":"object"}]}},"type":"object"}},
91
- {"resource":"projects","method":"list","command":["projects","list"],"tool":"projects_list","httpMethod":"GET","path":"/projects","summary":"List projects","toolDescription":"List projects. GET /projects (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","safety":"read","params":[{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor."}}},"exampleArguments":{},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"source":{"description":"The single source of truth for where a project's specification lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"packages":{"description":"Complete package configuration.","properties":{"typescript-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"python-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"go-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"cli":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"mcp":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"}},"type":"object"},"auto_regen":{"description":"Regenerate when the spec changes: on every push to the default branch for a repository source, ever…","type":"boolean"},"spec_patches":{"items":{"description":"A fix applied to the spec before generation.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"config":{"anyOf":[{"description":"Everything typeship needs beyond the spec, in one object: generation customization (globals, retrie…","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"mcp_enabled":{"description":"Whether the hosted MCP endpoint is on.","type":"boolean"},"mcp_url":{"description":"Path of the hosted MCP endpoint while it is on; read-only.","type":["string","null"]},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"outputs":{"description":"First-class generated outputs.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output.","type":"string"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to ge…","additionalProperties":true}}}},
92
- {"resource":"projects","method":"create","command":["projects","create"],"tool":"projects_create","httpMethod":"POST","path":"/projects","summary":"Create a project","description":"Stores a URL- or GitHub-sourced project. Free includes one stored project, every selected output, 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 the whole spec.","toolDescription":"Create a project. Stores a URL- or GitHub-sourced project. POST /projects","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","safety":"write","params":[{"name":"name","ts":"name","kind":"body","type":"string","required":true,"flag":"name"},{"name":"source","ts":"source","kind":"body","type":"json","required":true,"flag":"source"},{"name":"outputs","ts":"outputs","kind":"body","type":"array","required":true,"items":{"type":"string","enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"]},"description":"First-class outputs Typeship will keep current for this project.","flag":"outputs"},{"name":"packages","ts":"packages","kind":"body","type":"object","required":false,"description":"Independent delivery packages keyed by output. Every selected output owns its registry identity, version, destination pull request, and release lifecycle. Selected outputs must resolve to distinct repository-and-directory trees; the TypeScript SDK, CLI, and MCP packages must also have distinct npm names.","flag":"packages"},{"name":"auto_regen","ts":"auto_regen","kind":"body","type":"boolean","required":false,"description":"Whether Typeship should regenerate automatically when the source changes. Default: false.","flag":"auto-regen"},{"name":"spec_patches","ts":"spec_patches","kind":"body","type":"array","required":false,"items":{"type":"object"},"description":"Initial patches. Omit or pass an empty array for none.","flag":"spec-patches"},{"name":"mcp_enabled","ts":"mcp_enabled","kind":"body","type":"boolean","required":false,"description":"Serve this project as a hosted MCP endpoint. Requires the MCP output and Enterprise. Default: false.","flag":"mcp-enabled"},{"name":"relay_enabled","ts":"relay_enabled","kind":"body","type":"boolean","required":false,"description":"Enable webhook relay sessions. Requires the CLI output and Pro. Default: false.","flag":"relay-enabled"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"flag":"config"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"name":{"minLength":1,"maxLength":80,"type":"string"},"source":{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL of an OpenAPI document, GraphQL SDL file, or GraphQL endpoint.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Values are never returned or recorded in revision history. When updating the same URL, omit headers to preserve the stored values or pass null to remove them. Changing the URL without headers clears the old values so a credential is never forwarded to a different source.","anyOf":[{"additionalProperties":{"maxLength":4096,"type":"string"},"type":"object"},{"type":"null"}]}},"required":["kind","url"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"required":["kind","repository","path"],"additionalProperties":false,"type":"object"}]},"outputs":{"description":"First-class outputs Typeship will keep current for this project.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"type":"array"},"packages":{"description":"Independent delivery packages keyed by output. Every selected output owns its registry identity, version, destination pull request, and release lifecycle. Selected outputs must resolve to distinct repository-and-directory trees; the TypeScript SDK, CLI, and MCP packages must also have distinct npm names.","properties":{"typescript-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"python-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"go-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"cli":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"}},"additionalProperties":false,"type":"object"},"auto_regen":{"description":"Whether Typeship should regenerate automatically when the source changes. Default: false.","default":false,"type":"boolean"},"spec_patches":{"description":"Initial patches. Omit or pass an empty array for none.","maxItems":50,"items":{"description":"A fix applied to the spec before generation. Targets are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"required":["op","path"],"additionalProperties":false,"type":"object"},"type":"array"},"mcp_enabled":{"description":"Serve this project as a hosted MCP endpoint. Requires the MCP output and Enterprise. Default: false.","default":false,"type":"boolean"},"relay_enabled":{"description":"Enable webhook relay sessions. Requires the CLI output and Pro. Default: false.","default":false,"type":"boolean"},"config":{"anyOf":[{"description":"Everything typeship needs beyond the spec, 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 spec itself. The same shape is accepted on a project and on POST /generate.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Braintree\" gives braintree and BraintreeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"whoami_operation":{"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.","type":["string","null"]},"oauth_client_id":{"description":"OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.","type":["string","null"]},"oauth_scopes":{"description":"Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.","maxItems":20,"items":{"type":"string"},"type":"array"},"oauth_audience":{"description":"Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"auth_url":{"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.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave. Part of Config.","properties":{"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination; release versions belong to packages.","properties":{"version":{"description":"Lockstep version fallback. Prefer packages.<output>.version so every SDK, CLI, and MCP package can advance independently.","deprecated":true,"type":["string","null"]},"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"bin_name":{"description":"CLI executable name when it differs from the npm package name.","type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]},"mcp_name":{"description":"Official MCP registry name written into package.json.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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 spec's externalDocs URL.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"required":["name","source","outputs"]},"exampleArguments":{"name":"example","source":{"kind":"url","url":"https://example.com"},"outputs":["typescript-sdk"]},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"source":{"description":"The single source of truth for where a project's specification lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"packages":{"description":"Complete package configuration.","properties":{"typescript-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"python-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"go-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"cli":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"mcp":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"}},"type":"object"},"auto_regen":{"description":"Regenerate when the spec changes: on every push to the default branch for a repository source, ever…","type":"boolean"},"spec_patches":{"items":{"description":"A fix applied to the spec before generation.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"config":{"anyOf":[{"description":"Everything typeship needs beyond the spec, in one object: generation customization (globals, retrie…","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"mcp_enabled":{"description":"Whether the hosted MCP endpoint is on.","type":"boolean"},"mcp_url":{"description":"Path of the hosted MCP endpoint while it is on; read-only.","type":["string","null"]},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"outputs":{"description":"First-class generated outputs.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output.","type":"string"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"}},"type":"object"}},
93
- {"resource":"projects","method":"retrieve","command":["projects","retrieve"],"tool":"projects_retrieve","httpMethod":"GET","path":"/projects/{project_id}","summary":"Retrieve a project","toolDescription":"Retrieve a project. GET /projects/{project_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"source":{"description":"The single source of truth for where a project's specification lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"packages":{"description":"Complete package configuration.","properties":{"typescript-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"python-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"go-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"cli":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"mcp":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"}},"type":"object"},"auto_regen":{"description":"Regenerate when the spec changes: on every push to the default branch for a repository source, ever…","type":"boolean"},"spec_patches":{"items":{"description":"A fix applied to the spec before generation.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"config":{"anyOf":[{"description":"Everything typeship needs beyond the spec, in one object: generation customization (globals, retrie…","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"mcp_enabled":{"description":"Whether the hosted MCP endpoint is on.","type":"boolean"},"mcp_url":{"description":"Path of the hosted MCP endpoint while it is on; read-only.","type":["string","null"]},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"outputs":{"description":"First-class generated outputs.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output.","type":"string"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"}},"type":"object"}},
94
- {"resource":"projects","method":"delete","command":["projects","delete"],"tool":"projects_delete","httpMethod":"DELETE","path":"/projects/{project_id}","summary":"Delete a project","toolDescription":"Delete a project. DELETE /projects/{project_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"destructive","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"deleted":{"const":true,"type":"boolean"}},"type":"object"}},
95
- {"resource":"projects","method":"update","command":["projects","update"],"tool":"projects_update","httpMethod":"PATCH","path":"/projects/{project_id}","summary":"Update a project","toolDescription":"Update a project. PATCH /projects/{project_id}","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":false,"select":false,"idempotent":false,"auth":"required","safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"},{"name":"name","ts":"name","kind":"body","type":"string","required":false,"flag":"name"},{"name":"source","ts":"source","kind":"body","type":"json","required":false,"flag":"source"},{"name":"outputs","ts":"outputs","kind":"body","type":"array","required":false,"items":{"type":"string","enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"]},"description":"Replaces the selected outputs; delivered files are not deleted.","flag":"outputs"},{"name":"packages","ts":"packages","kind":"body","type":"object","required":false,"description":"Independent delivery packages keyed by output. Every selected output owns its registry identity, version, destination pull request, and release lifecycle. Selected outputs must resolve to distinct repository-and-directory trees; the TypeScript SDK, CLI, and MCP packages must also have distinct npm names.","flag":"packages"},{"name":"auto_regen","ts":"auto_regen","kind":"body","type":"boolean","required":false,"flag":"auto-regen"},{"name":"spec_patches","ts":"spec_patches","kind":"body","type":"array","required":false,"items":{"type":"object"},"description":"Replaces the full patch list. Pass an empty array to clear it.","flag":"spec-patches"},{"name":"mcp_enabled","ts":"mcp_enabled","kind":"body","type":"boolean","required":false,"description":"Serve this project as a hosted MCP endpoint. Requires the MCP output and Enterprise.","flag":"mcp-enabled"},{"name":"relay_enabled","ts":"relay_enabled","kind":"body","type":"boolean","required":false,"description":"Enable webhook relay sessions. Requires the CLI output and Pro.","flag":"relay-enabled"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"description":"Replaces the entire configuration; pass null to clear it.","flag":"config"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"name":{"minLength":1,"maxLength":80,"type":"string"},"source":{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL of an OpenAPI document, GraphQL SDL file, or GraphQL endpoint.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Values are never returned or recorded in revision history. When updating the same URL, omit headers to preserve the stored values or pass null to remove them. Changing the URL without headers clears the old values so a credential is never forwarded to a different source.","anyOf":[{"additionalProperties":{"maxLength":4096,"type":"string"},"type":"object"},{"type":"null"}]}},"required":["kind","url"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"required":["kind","repository","path"],"additionalProperties":false,"type":"object"}]},"outputs":{"description":"Replaces the selected outputs; delivered files are not deleted.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"type":"array"},"packages":{"description":"Independent delivery packages keyed by output. Every selected output owns its registry identity, version, destination pull request, and release lifecycle. Selected outputs must resolve to distinct repository-and-directory trees; the TypeScript SDK, CLI, and MCP packages must also have distinct npm names.","properties":{"typescript-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"python-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"go-sdk":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"cli":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"Registry identity and reviewed pull-request destination for one delivery package.","properties":{"name":{"description":"npm package name, Python distribution name, or Go module path. Null derives a name from the API title.","type":["string","null"]},"version":{"description":"Release version for this output package. Null falls back to the legacy config.package.version, then the specification version.","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$","type":["string","null"]},"destination":{"anyOf":[{"description":"Where regeneration pull requests land.","properties":{"repo":{"description":"Defaults to the source repository when the source is a repo.","type":["string","null"]},"directory":{"description":"Directory the generated package is written to.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object"}},"additionalProperties":false,"type":"object"},"auto_regen":{"type":"boolean"},"spec_patches":{"description":"Replaces the full patch list. Pass an empty array to clear it.","maxItems":50,"items":{"description":"A fix applied to the spec before generation. Targets are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"required":["op","path"],"additionalProperties":false,"type":"object"},"type":"array"},"mcp_enabled":{"description":"Serve this project as a hosted MCP endpoint. Requires the MCP output and Enterprise.","type":"boolean"},"relay_enabled":{"description":"Enable webhook relay sessions. Requires the CLI output and Pro.","type":"boolean"},"config":{"description":"Replaces the entire configuration; pass null to clear it.","anyOf":[{"description":"Everything typeship needs beyond the spec, 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 spec itself. The same shape is accepted on a project and on POST /generate.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Braintree\" gives braintree and BraintreeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"whoami_operation":{"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.","type":["string","null"]},"oauth_client_id":{"description":"OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts for a pasted credential.","type":["string","null"]},"oauth_scopes":{"description":"Scopes requested during device-flow login. Include offline_access if the authorization server gates refresh tokens behind it.","maxItems":20,"items":{"type":"string"},"type":"array"},"oauth_audience":{"description":"Audience sent with the device-authorization request, for authorization servers that require one to issue API-valid access tokens.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"auth_url":{"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.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave. Part of Config.","properties":{"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination; release versions belong to packages.","properties":{"version":{"description":"Lockstep version fallback. Prefer packages.<output>.version so every SDK, CLI, and MCP package can advance independently.","deprecated":true,"type":["string","null"]},"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"bin_name":{"description":"CLI executable name when it differs from the npm package name.","type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]},"mcp_name":{"description":"Official MCP registry name written into package.json.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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 spec's externalDocs URL.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"source":{"description":"The single source of truth for where a project's specification lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","examples":["acme/payments-api"],"maxLength":202,"pattern":"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$","type":"string"},"path":{"description":"Repository-relative path to the specification.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"packages":{"description":"Complete package configuration.","properties":{"typescript-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"python-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"go-sdk":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"cli":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"},"mcp":{"properties":{"name":{"type":["string","null"]},"version":{"type":["string","null"]},"destination":{"anyOf":[{"type":"object"},{"type":"null"}]}},"type":"object"}},"type":"object"},"auto_regen":{"description":"Regenerate when the spec changes: on every push to the default branch for a repository source, ever…","type":"boolean"},"spec_patches":{"items":{"description":"A fix applied to the spec before generation.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"config":{"anyOf":[{"description":"Everything typeship needs beyond the spec, in one object: generation customization (globals, retrie…","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How the generated MCP server and the hosted endpoint behave.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"mcp_enabled":{"description":"Whether the hosted MCP endpoint is on.","type":"boolean"},"mcp_url":{"description":"Path of the hosted MCP endpoint while it is on; read-only.","type":["string","null"]},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"outputs":{"description":"First-class generated outputs.","minItems":1,"uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output.","type":"string"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"}},"type":"object"}},
96
- {"resource":"projects","method":"retrieveGithubHealth","command":["projects","retrieve-github-health"],"tool":"projects_retrieve_github_health","httpMethod":"GET","path":"/projects/{project_id}/github","summary":"Diagnose a project's GitHub integration","description":"Returns machine-actionable source and destination access, spec readability, optional label setup, required status names, and the latest durable webhook delivery. The console renders this same result.","toolDescription":"Diagnose a project's GitHub integration. Returns machine-actionable source and destination access, spec readability, optional label setup, required status names, and the latest durable webhook delivery. GET /projects/{project_id}/github","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"object":{"const":"github_integration_health","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"status":{"enum":["ready","action_required"],"type":"string"},"repositories":{"items":{"properties":{"repository":{"type":"string"},"roles":{"uniqueItems":true,"items":{"enum":["source","destination"],"type":"string"},"type":"array"},"status":{"enum":["ready","action_required"],"type":"string"},"default_branch":{"type":"string"},"can_read":{"type":"boolean"},"can_write":{"type":"boolean"},"breaking_label":{"type":["boolean","null"]},"spec":{"enum":["readable","missing"],"type":"string"},"issues":{"items":{"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"required_statuses":{"properties":{"source":{"items":{"type":"string"},"type":"array"},"destination":{"items":{"type":"string"},"type":"array"}},"type":"object"},"last_delivery":{"anyOf":[{"properties":{"id":{"type":"string"},"event":{"type":"string"},"status":{"enum":["queued","processing","succeeded","failed","superseded"],"type":"string"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"},{"type":"null"}]}},"type":"object"}},
97
- {"resource":"projects","method":"listGenerations","command":["projects","list-generations"],"tool":"projects_list_generations","httpMethod":"GET","path":"/projects/{project_id}/generations","summary":"List a project's generations","toolDescription":"List a project's generations. GET /projects/{project_id}/generations (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor.","flag":"cursor"},{"name":"output","ts":"output","kind":"query","type":"string","required":false,"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Only generations for this output.","flag":"output"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor."},"output":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"examples":[{"id":"gen_7h2p5d9c3m8w1k6q","object":"generation","project_id":"prj_4f8k2m7x9q1v6b3n","status":"succeeded","trigger":"manual","output":"typescript-sdk","meta":{"title":"Acme Payments API","version":"1.0.0","oas_version":"3.1","package_name":"@acme/payments","client_name":"AcmeClient","outputs":["typescript-sdk"]},"warnings":[],"error":null,"created_at":"2026-01-01T00:00:00Z"}],"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"files_omitted":{"description":"Present and true when the generated output was too large to inline; files_index lists paths, fetched one at a time via GET /generations/{generation_id}/file.","type":"boolean"},"files_index":{"items":{"properties":{"path":{"type":"string"},"bytes":{"type":"integer"}},"type":"object"},"type":"array"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"output":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"properties":{"title":{"type":"string"},"version":{"type":"string"},"spec_format":{"enum":["openapi","graphql"],"type":"string"},"oas_version":{"description":"Detected spec version, \"2.0\", \"3.0\", or \"3.1\".","type":"string"},"converted":{"description":"True when the input was Swagger 2.0 and was converted.","type":"boolean"},"package_name":{"type":"string"},"client_name":{"type":"string"},"outputs":{"description":"Customer-selected outputs present in this delivery package.","uniqueItems":true,"type":"array"},"resource_count":{"type":"integer"},"operation_count":{"type":"integer"},"schema_count":{"type":"integer"},"paginated_operation_count":{"type":"integer"},"omitted_operation_count":{"description":"Operations beyond the plan's endpoint allowance, not generated.","type":"integer"},"pr_url":{"description":"Pull request opened by this regeneration, when one was.","type":["string","null"]},"pr_number":{"type":["integer","null"]},"pr_status":{"enum":["opened","no_changes","blocked"],"description":"Whether a destination pull request opened, was unnecessary because the generated tree already matched, or could not be opened.","type":"string"},"pr_error":{"description":"Why the configured destination pull request was not opened. Generation itself still succeeded; fix this action and regenerate.","type":"string"},"changelog":{"description":"Markdown changelog entry for this regeneration, from the API surface diff. Absent on a first generation or when nothing changed.","type":"string"},"breaking_count":{"description":"Breaking changes in the diff; removed methods and fields, changed types, inputs that became required.","type":"integer"},"baseline":{"enum":["destination","last-generation","none"],"description":"What the diff was measured against; \"destination\" means the .typeship/surface.json merged in the destination repository.","type":"string"},"package_compatibility":{"enum":["success","failure"],"description":"The package compatibility verdict on the regeneration pull request; failure means breaking changes without a major version bump.","type":"string"},"package_compatibility_note":{"description":"The verdict in one line, as the commit status describes it.","type":"string"},"previous_version":{"description":"The package version the destination had before this regeneration.","type":"string"},"file_count":{"type":"integer"},"total_lines":{"type":"integer"}},"type":"object"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array"},"files":{"description":"Present on retrieve and create; omitted in lists.","items":{"properties":{"path":{"description":"Repo-relative path inside the generated package.","type":"string"},"content":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}}},
98
- {"resource":"projects","method":"generate","command":["projects","generate"],"tool":"projects_generate","httpMethod":"POST","path":"/projects/{project_id}/generations","summary":"Generate outputs and open pull requests","description":"Resolves the project's URL or repository 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.","toolDescription":"Generate outputs and open pull requests. Resolves the project's URL or repository source, generates every configured delivery package, stores each result in the project's history, and attempts to open a pull request in every configured destination. POST /projects/{project_id}/generations","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":false,"auth":"required","safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"data":{"items":{"anyOf":[{"examples":[{"id":"gen_7h2p5d9c3m8w1k6q","object":"generation","project_id":"prj_4f8k2m7x9q1v6b3n","status":"succeeded","trigger":"manual","output":"typescript-sdk","meta":{"title":"Acme Payments API","version":"1.0.0","oas_version":"3.1","package_name":"@acme/payments","client_name":"AcmeClient","outputs":["typescript-sdk"]},"warnings":[],"error":null,"created_at":"2026-01-01T00:00:00Z"}],"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"files_omitted":{"description":"Present and true when the generated output was too large to inline; files_index lists paths, fetched one at a time via GET /generations/{generation_id}/file.","type":"boolean"},"files_index":{"type":"array"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"output":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"type":"object"},{"type":"null"}]},"warnings":{"type":"array"},"files":{"description":"Present on retrieve and create; omitted in lists.","type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"},{"description":"A selected output that did not generate in a multi-output run.","properties":{"output":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"status":{"const":"failed","type":"string"},"error":{"type":"string"}},"type":"object"}]},"type":"array"}},"type":"object"}},
99
- {"resource":"generations","method":"retrieve","command":["generations","retrieve"],"tool":"generations_retrieve","httpMethod":"GET","path":"/generations/{generation_id}","summary":"Retrieve a generation","description":"Includes the generated files when the generation succeeded.","toolDescription":"Retrieve a generation. Includes the generated files when the generation succeeded. GET /generations/{generation_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"generation_id","ts":"generationId","kind":"path","type":"string","required":true,"flag":"generation-id"}],"inputSchema":{"type":"object","properties":{"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"}},"required":["generation_id"]},"exampleArguments":{"generation_id":"gen_7h2p5d9c3m8w1k6q"},"outputSchema":{"examples":[{"id":"gen_7h2p5d9c3m8w1k6q","object":"generation","project_id":"prj_4f8k2m7x9q1v6b3n","status":"succeeded","trigger":"manual","output":"typescript-sdk","meta":{"title":"Acme Payments API","version":"1.0.0","oas_version":"3.1","package_name":"@acme/payments","client_name":"AcmeClient","outputs":["typescript-sdk"]},"warnings":[],"error":null,"created_at":"2026-01-01T00:00:00Z"}],"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"files_omitted":{"description":"Present and true when the generated output was too large to inline; files_index lists paths, fetched one at a time via GET /generations/{generation_id}/file.","type":"boolean"},"files_index":{"items":{"properties":{"path":{"type":"string"},"bytes":{"type":"integer"}},"type":"object"},"type":"array"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"output":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"properties":{"title":{"type":"string"},"version":{"type":"string"},"spec_format":{"enum":["openapi","graphql"],"type":"string"},"oas_version":{"description":"Detected spec version, \"2.0\", \"3.0\", or \"3.1\".","type":"string"},"converted":{"description":"True when the input was Swagger 2.0 and was converted.","type":"boolean"},"package_name":{"type":"string"},"client_name":{"type":"string"},"outputs":{"description":"Customer-selected outputs present in this delivery package.","uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"One customer-selected output. CLI and MCP include the private TypeScript request runtime they need; that dependency is not a selected or billable TypeScript SDK.","type":"string"},"type":"array"},"resource_count":{"type":"integer"},"operation_count":{"type":"integer"},"schema_count":{"type":"integer"},"paginated_operation_count":{"type":"integer"},"omitted_operation_count":{"description":"Operations beyond the plan's endpoint allowance, not generated.","type":"integer"},"pr_url":{"description":"Pull request opened by this regeneration, when one was.","type":["string","null"]},"pr_number":{"type":["integer","null"]},"pr_status":{"enum":["opened","no_changes","blocked"],"description":"Whether a destination pull request opened, was unnecessary because the generated tree already matched, or could not be opened.","type":"string"},"pr_error":{"description":"Why the configured destination pull request was not opened. Generation itself still succeeded; fix this action and regenerate.","type":"string"},"changelog":{"description":"Markdown changelog entry for this regeneration, from the API surface diff. Absent on a first generation or when nothing changed.","type":"string"},"breaking_count":{"description":"Breaking changes in the diff; removed methods and fields, changed types, inputs that became required.","type":"integer"},"baseline":{"enum":["destination","last-generation","none"],"description":"What the diff was measured against; \"destination\" means the .typeship/surface.json merged in the destination repository.","type":"string"},"package_compatibility":{"enum":["success","failure"],"description":"The package compatibility verdict on the regeneration pull request; failure means breaking changes without a major version bump.","type":"string"},"package_compatibility_note":{"description":"The verdict in one line, as the commit status describes it.","type":"string"},"previous_version":{"description":"The package version the destination had before this regeneration.","type":"string"},"file_count":{"type":"integer"},"total_lines":{"type":"integer"}},"type":"object"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array"},"files":{"description":"Present on retrieve and create; omitted in lists.","items":{"properties":{"path":{"description":"Repo-relative path inside the generated package.","type":"string"},"content":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},
100
- {"resource":"generations","method":"retrieveFile","command":["generations","retrieve-file"],"tool":"generations_retrieve_file","httpMethod":"GET","path":"/generations/{generation_id}/file","summary":"Fetch one file from a generation","description":"Raw file content, for generations whose output was too large to inline (files_omitted true). The generation's files_index lists valid paths.","toolDescription":"Fetch one file from a generation. Raw file content, for generations whose output was too large to inline (files_omitted true). GET /generations/{generation_id}/file","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"generation_id","ts":"generationId","kind":"path","type":"string","required":true,"flag":"generation-id"},{"name":"path","ts":"path","kind":"query","type":"string","required":true,"description":"Repo-relative path inside the generated package.","flag":"path"}],"inputSchema":{"type":"object","properties":{"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"path":{"type":"string","description":"Repo-relative path inside the generated package."}},"required":["generation_id","path"]},"exampleArguments":{"generation_id":"gen_7h2p5d9c3m8w1k6q","path":"openapi.yaml"}},
101
- {"resource":"specRevisions","method":"list","command":["spec-revisions","list"],"tool":"spec_revisions_list","httpMethod":"GET","path":"/projects/{project_id}/spec_revisions","summary":"List specification revisions","description":"Immutable snapshots of the exact source text this project consumed, newest first. Raw content is available from each revision's content endpoint and is never embedded in a list response.","toolDescription":"List specification revisions. Immutable snapshots of the exact source text this project consumed, newest first. GET /projects/{project_id}/spec_revisions (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"IDs come from projects_list.","flag":"project-id"},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. IDs come from projects_list.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor."}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"description":"Unique identifier for an immutable specification revision.","examples":["spec_6m1q8v4k2p9d7h3c"],"pattern":"^spec_[a-z0-9]{16}$","type":"string"},"object":{"const":"spec_revision","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"sha256":{"description":"SHA-256 digest of the exact raw specification text.","examples":["9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"],"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"description":"Size of the raw specification text in bytes.","minimum":0,"type":"integer"},"source":{"description":"Origin recorded when this immutable revision was created.","anyOf":[{"anyOf":[{"type":"object"},{"type":"object"}]},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}}},
102
- {"resource":"specRevisions","method":"retrieve","command":["spec-revisions","retrieve"],"tool":"spec_revisions_retrieve","httpMethod":"GET","path":"/spec_revisions/{spec_revision_id}","summary":"Retrieve a specification revision","description":"Metadata for one immutable source snapshot. Fetch raw source text from the content endpoint so metadata responses stay small and predictable.","toolDescription":"Retrieve a specification revision. Metadata for one immutable source snapshot. GET /spec_revisions/{spec_revision_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"spec_revision_id","ts":"specRevisionId","kind":"path","type":"string","required":true,"description":"IDs come from spec_revisions_list.","flag":"spec-revision-id"}],"inputSchema":{"type":"object","properties":{"spec_revision_id":{"description":"Unique identifier for an immutable specification revision. IDs come from spec_revisions_list.","examples":["spec_6m1q8v4k2p9d7h3c"],"pattern":"^spec_[a-z0-9]{16}$","type":"string"}},"required":["spec_revision_id"]},"exampleArguments":{"spec_revision_id":"spec_6m1q8v4k2p9d7h3c"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for an immutable specification revision.","examples":["spec_6m1q8v4k2p9d7h3c"],"pattern":"^spec_[a-z0-9]{16}$","type":"string"},"object":{"const":"spec_revision","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"sha256":{"description":"SHA-256 digest of the exact raw specification text.","examples":["9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"],"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"description":"Size of the raw specification text in bytes.","minimum":0,"type":"integer"},"source":{"description":"Origin recorded when this immutable revision was created.","anyOf":[{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"},{"properties":{"kind":{"const":"github","type":"string"},"repository":{"description":"GitHub repository in owner/name form.","type":"string"},"path":{"description":"Repository-relative specification path.","type":"string"},"ref":{"description":"Git ref resolved for this revision, when recorded.","type":["string","null"]},"commit_sha":{"description":"Exact Git commit consumed, when recorded.","type":["string","null"]}},"type":"object"}]},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},
103
- {"resource":"specRevisions","method":"retrieveContent","command":["spec-revisions","retrieve-content"],"tool":"spec_revisions_retrieve_content","httpMethod":"GET","path":"/spec_revisions/{spec_revision_id}/content","summary":"Retrieve a specification revision's raw text","description":"Returns the exact source text identified by the revision's SHA-256 digest, suitable for saving or piping directly into a diff.","toolDescription":"Retrieve a specification revision's raw text. Returns the exact source text identified by the revision's SHA-256 digest, suitable for saving or piping directly into a diff. GET /spec_revisions/{spec_revision_id}/content","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[{"name":"spec_revision_id","ts":"specRevisionId","kind":"path","type":"string","required":true,"description":"IDs come from spec_revisions_list.","flag":"spec-revision-id"}],"inputSchema":{"type":"object","properties":{"spec_revision_id":{"description":"Unique identifier for an immutable specification revision. IDs come from spec_revisions_list.","examples":["spec_6m1q8v4k2p9d7h3c"],"pattern":"^spec_[a-z0-9]{16}$","type":"string"}},"required":["spec_revision_id"]},"exampleArguments":{"spec_revision_id":"spec_6m1q8v4k2p9d7h3c"}},
104
- {"resource":"account","method":"retrieve","command":["account","retrieve"],"tool":"account_retrieve","httpMethod":"GET","path":"/me","summary":"The account behind the presented credentials","description":"Returns the account that owns the presented API key. This is also the\nidentity endpoint the generated typeship CLI's `whoami` calls.","toolDescription":"The account behind the presented credentials. Returns the account that owns the presented API key. GET /me","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"read","params":[],"inputSchema":{"type":"object","properties":{}},"exampleArguments":{},"outputSchema":{"description":"The organization an API key belongs to. Members share its projects, keys, and plan; sign-in identity is not part of the API.","properties":{"id":{"examples":["org_2x7k9m4q"],"pattern":"^org_[A-Za-z0-9]+$","type":"string"},"object":{"const":"account","type":"string"},"name":{"description":"The organization's display name.","type":"string"},"plan":{"enum":["free","pro","enterprise"],"type":"string"},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},
105
- {"resource":"apiKeys","method":"list","command":["api-keys","list"],"tool":"api_keys_list","httpMethod":"GET","path":"/api_keys","summary":"List API keys","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.","toolDescription":"List API keys. Keys are never returned in full — only their identity and last four. GET /api_keys (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","safety":"read","params":[{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor."}}},"exampleArguments":{},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"type":"string"},"object":{"const":"api_key","type":"string"},"name":{"type":"string"},"last4":{"description":"Last four characters of the secret; the secret itself is never stored.","type":"string"},"revoked":{"type":"boolean"},"last_used_at":{"format":"date-time","type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}}},
106
- {"resource":"apiKeys","method":"revoke","command":["api-keys","revoke"],"tool":"api_keys_revoke","httpMethod":"DELETE","path":"/api_keys/{api_key_id}","summary":"Revoke an API key","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.","toolDescription":"Revoke an API key. 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. DELETE /api_keys/{api_key_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","safety":"destructive","params":[{"name":"api_key_id","ts":"apiKeyId","kind":"path","type":"string","required":true,"description":"IDs come from api_keys_list.","flag":"api-key-id"}],"inputSchema":{"type":"object","properties":{"api_key_id":{"description":"Identifier returned by the API key list. IDs come from api_keys_list.","type":"string"}},"required":["api_key_id"]},"exampleArguments":{"api_key_id":"api_key_123"},"outputSchema":{"properties":{"id":{"type":"string"},"object":{"const":"api_key","type":"string"},"name":{"type":"string"},"last4":{"description":"Last four characters of the secret; the secret itself is never stored.","type":"string"},"revoked":{"type":"boolean"},"last_used_at":{"format":"date-time","type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},
103
+ {"resource":"generate","method":"run","command":["generate","run"],"tool":"generate_run","httpMethod":"POST","path":"/generate","summary":"Generate one Target from a Definition","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.","toolDescription":"Generate one Target from a Definition. Stateless generation: nothing is stored. POST /generate Credential optional.","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"optional","security":[{},{"apiKey":[]}],"safety":"write","params":[{"name":"definition","ts":"definition","kind":"body","type":"json","required":true,"description":"A Definition for stateless generation, provided as exactly one URL or inline entrypoint.","flag":"definition"},{"name":"target","ts":"target","kind":"body","type":"object","required":true,"description":"Stateless generator descriptor; no persisted Target is created.","flag":"target"},{"name":"package_name","ts":"package_name","kind":"body","type":"string","required":false,"description":"npm package or Python distribution override. Valid only for the TypeScript and Python SDK targets.","flag":"package-name"},{"name":"module_path","ts":"module_path","kind":"body","type":"string","required":false,"description":"Go module path override. Valid only for the Go SDK. Linked projects derive this from the Go destination repository by default.","flag":"module-path"},{"name":"config","ts":"config","kind":"body","type":"object","required":false,"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.","flag":"config"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"definition":{"description":"A Definition for stateless generation, provided as exactly one URL or inline entrypoint.","anyOf":[{"properties":{"url":{"format":"uri","description":"URL of an OpenAPI document, a GraphQL SDL file, or a GraphQL\nendpoint (introspected automatically). Fetched server-side.","pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Sent on the document GET and GraphQL introspection POST, never returned or retained by stateless generation.","additionalProperties":{"maxLength":4096,"type":"string"},"type":"object"}},"required":["url"],"additionalProperties":false,"type":"object"},{"properties":{"inline":{"description":"Raw Definition text (OpenAPI JSON/YAML or GraphQL SDL). Up to 10MB.","type":"string"}},"required":["inline"],"additionalProperties":false,"type":"object"}]},"target":{"description":"Stateless generator descriptor; no persisted Target is created.","properties":{"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"}},"required":["generator"],"additionalProperties":false,"type":"object"},"package_name":{"description":"npm package or Python distribution override. Valid only for the TypeScript and Python SDK targets.","type":"string"},"module_path":{"description":"Go module path override. Valid only for the Go SDK. Linked projects derive this from the Go destination repository by default.","type":"string"},"config":{"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.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"properties":{"style":{"enum":["cursor","cursorFromLastId","page","offset"],"default":"cursor","type":"string"},"items_field":{"description":"Response field holding the item array.","type":"string"},"cursor_param":{"type":"string"},"next_cursor_field":{"type":"string"},"has_more_field":{"type":"string"},"id_field":{"type":"string"},"page_param":{"type":"string"},"offset_param":{"type":"string"},"limit_param":{"type":"string"}},"required":["items_field"],"additionalProperties":false,"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"graphql":{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"properties":{"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["name","url"],"additionalProperties":false,"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Acme\" gives acme and AcmeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},"auth":{"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.","properties":{"oauth_server":{"anyOf":[{"description":"Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.","properties":{"issuer":{"format":"uri","description":"Exact authorization-server issuer, including any tenant path.","type":["string","null"]},"discovery_url":{"format":"uri","description":"Exact metadata URL when it cannot be derived from the issuer.","type":["string","null"]},"authorization_url":{"format":"uri","description":"Authorization endpoint override.","type":["string","null"]},"token_url":{"format":"uri","description":"Token endpoint override.","type":["string","null"]},"device_authorization_url":{"format":"uri","description":"Device-authorization endpoint override.","type":["string","null"]},"scopes":{"description":"Default scopes requested during login.","maxItems":20,"type":["array","null"]},"audience":{"description":"Default audience included in authorization and token requests.","type":["string","null"]},"resource":{"format":"uri","description":"Protected API resource included in authorization and token requests.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"oauth_applications":{"description":"OAuth applications keyed by a stable name.","additionalProperties":{"description":"OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.","properties":{"client_id":{"description":"OAuth client identifier.","minLength":1,"maxLength":200,"type":"string"},"login_method":{"enum":["browser","device",null],"description":"Interactive login method. Browser login uses Authorization Code with PKCE.","type":["string","null"]},"client_auth_method":{"enum":["post","basic",null],"description":"How a runtime-supplied client secret is sent for machine grants.","type":["string","null"]},"redirect_uri":{"format":"uri","description":"Loopback callback URL for browser login.","type":["string","null"]},"organization_parameter":{"enum":["organization","organization_id",null],"description":"Provider parameter used to request an organization during browser login.","type":["string","null"]}},"required":["client_id"],"additionalProperties":false,"type":"object"},"type":["object","null"]},"oauth_application":{"description":"Default OAuth application used by generated products.","maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"identity_verification":{"anyOf":[{"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.","properties":{"operation":{"description":"resource.method of a safe identity read with no required arguments.","maxLength":2000,"pattern":"^[\\w$]+\\.[\\w$]+$","type":"string"},"subject_field":{"description":"JSON Pointer to the stable caller ID in the identity response.","maxLength":512,"type":"string"},"account_field":{"description":"JSON Pointer to the customer account ID.","maxLength":512,"type":"string"},"organization_field":{"description":"JSON Pointer to the customer organization ID.","maxLength":512,"type":"string"}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"approval_url":{"format":"uri","description":"Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.","type":["string","null"]},"environments":{"description":"Authentication selections keyed by generated API environment name.","additionalProperties":{"description":"OAuth application and request-value overrides for one named API environment.","properties":{"oauth_application":{"maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"scopes":{"maxItems":20,"type":["array","null"]},"audience":{"type":["string","null"]},"resource":{"format":"uri","type":["string","null"]}},"additionalProperties":false,"type":"object"},"type":["object","null"]}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"command_name":{"description":"Command users run, independent of how the CLI is distributed.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","properties":{"registry_name":{"description":"Stable official MCP registry name, independent of the server runtime.","type":["string","null"]},"access":{"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.","properties":{"issuer":{"format":"uri","description":"Exact issuer allowed to sign MCP connection tokens.","type":"string"},"resource":{"format":"uri","description":"Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.","type":"string"},"jwks_url":{"format":"uri","description":"Public signing-key endpoint. Omit to discover it from the issuer.","type":"string"},"scopes":{"description":"Minimum scopes required to connect to the self-hosted MCP server.","maxItems":20,"items":{"type":"string"},"type":"array"}},"required":["issuer","resource"],"additionalProperties":false,"type":"object"},"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"},"reference_resolvers":{"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.","additionalProperties":{"additionalProperties":{"anyOf":[{"enum":[false],"type":"boolean"},{"type":"object"}]},"type":"object"},"type":"object"}},"additionalProperties":false,"type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","properties":{"quickstart_operation":{"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.","maxLength":500,"type":["string","null"]}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","properties":{"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"additionalProperties":false,"type":"object"}},"required":["definition","target"]},"exampleArguments":{"definition":{"url":"https://example.com"},"target":{"generator":"typescript-sdk"}},"outputSchema":{"properties":{"files":{"items":{"properties":{"path":{"description":"Repo-relative path inside the generated package.","type":"string"},"content":{"type":"string"}},"type":"object"},"type":"array"},"warnings":{"items":{"type":"string"},"type":"array"},"meta":{"properties":{"title":{"type":"string"},"api_version":{"description":"Version declared by the customer's API Definition.","type":"string"},"version":{"description":"Package version selected by the Target's release stream for this generation.","type":"string"},"spec_format":{"enum":["openapi","graphql"],"type":"string"},"oas_version":{"description":"Detected OpenAPI version, \"2.0\", \"3.0\", or \"3.1\".","type":"string"},"converted":{"description":"True when the input was Swagger 2.0 and was converted.","type":"boolean"},"artifact_name":{"description":"Ecosystem-neutral identity of the generated artifact.","type":"string"},"client_name":{"type":"string"},"generators":{"description":"Generator implementations present in this artifact.","uniqueItems":true,"items":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"type":"array"},"resource_count":{"type":"integer"},"operation_count":{"type":"integer"},"schema_count":{"type":"integer"},"paginated_operation_count":{"type":"integer"},"omitted_operation_count":{"description":"Operations beyond the plan's endpoint allowance, not generated.","type":"integer"},"omitted_operations":{"description":"METHOD/path identities of operations omitted by the generation cap.","items":{"type":"string"},"type":"array"},"pr_url":{"description":"Pull request opened by this regeneration, when one was.","type":["string","null"]},"pr_number":{"type":["integer","null"]},"pr_status":{"enum":["opened","no_changes","blocked"],"description":"Whether a destination pull request opened, was unnecessary because the generated tree already match…","type":"string"},"pr_error":{"description":"Why the configured destination pull request was not opened.","type":"string"},"changelog":{"description":"Markdown changelog entry for this regeneration, from the API surface diff.","type":"string"},"breaking_count":{"description":"Breaking changes in the diff; removed methods and fields, changed types, inputs that became required.","type":"integer"},"baseline":{"enum":["destination","none"],"description":"What the diff was measured against; \"destination\" means the .typeship/surface.json merged in the de…","type":"string"},"api_compatibility":{"enum":["compatible","breaking","unknown"],"description":"Objective compatibility of the generated API surface against the merged destination baseline.","type":"string"},"package_compatibility":{"enum":["compatible","breaking","unknown"],"description":"Objective compatibility of public package entry points and selected targets against the merged dest…","type":"string"},"version_correct":{"description":"Whether the generated package version satisfies the cumulative change.","type":["boolean","null"]},"release_readiness":{"enum":["success","failure","error"],"description":"The destination pull request's combined readiness decision for the exact bot-generated head.","type":"string"},"release_readiness_note":{"description":"The release-readiness decision in one line, as the commit status describes it.","type":"string"},"previous_version":{"description":"The package version the destination had before this regeneration.","type":"string"},"file_count":{"type":"integer"},"total_lines":{"type":"integer"},"diagnostics":{"description":"Deterministic Diagnostic summary for the exact Definition Revision consumed.","properties":{"format":{"enum":["openapi","graphql"],"type":"string"},"summary":{"description":"Counts distinguish decisions from the number of affected schema locations.","properties":{"diagnostics":{"description":"Number of grouped rule diagnostics.","minimum":0,"type":"integer"},"occurrences":{"description":"Total affected locations across all diagnostics.","minimum":0,"type":"integer"},"errors":{"description":"Grouped correctness errors.","minimum":0,"type":"integer"},"warnings":{"description":"Grouped material risks.","minimum":0,"type":"integer"},"suggestions":{"description":"Grouped improvements.","minimum":0,"type":"integer"},"auto_fixable":{"description":"Diagnostics with exact reviewable Definition patches.","minimum":0,"type":"integer"}},"type":"object"}},"type":"object"}},"type":"object"},"limits":{"description":"Present when the generation was capped: by the free plan, or because the call was anonymous.","properties":{"max_operations":{"description":"How many operations this generation was allowed to include.","type":"integer"},"generated_operations":{"description":"How many operations are present in the generated package.","type":"integer"},"omitted_operations":{"description":"How many operations in the Definition were left out.","type":"integer"},"total_operations":{"description":"How many operations Typeship found in the complete Definition.","type":"integer"},"reason":{"enum":["anonymous","free_plan"],"type":"string"},"signup_url":{"description":"Anonymous calls only.","type":"string"},"upgrade_url":{"description":"Where the cap is lifted.","type":"string"}},"type":"object"},"claim":{"description":"Anonymous, URL-sourced generations only.","anyOf":[{"type":"null"},{"properties":{"url":{"type":"string"},"expires_at":{"format":"date-time","type":"string"}},"type":"object"}]},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
104
+ {"resource":"projects","method":"list","command":["projects","list"],"tool":"projects_list","httpMethod":"GET","path":"/projects","summary":"List projects","toolDescription":"List projects. GET /projects (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."}}},"exampleArguments":{},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"description":"Lean Project identity returned by collection endpoints. Retrieve the Project for shared configuration and list its Targets for the complete canonical child collection.","properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"auto_generate":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
105
+ {"resource":"projects","method":"create","command":["projects","create"],"tool":"projects_create","httpMethod":"POST","path":"/projects","summary":"Create a project","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.","toolDescription":"Create a project. Stores a URL- or GitHub-sourced project. POST /projects","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"name","ts":"name","kind":"body","type":"string","required":true,"flag":"name"},{"name":"definition","ts":"definition","kind":"body","type":"object","required":true,"flag":"definition"},{"name":"targets","ts":"targets","kind":"body","type":"array","required":true,"items":{"type":"object"},"description":"Initial first-class Targets. More than one may use the same generator with different identities or Deliveries.","flag":"targets"},{"name":"auto_generate","ts":"auto_generate","kind":"body","type":"boolean","required":false,"description":"Whether Typeship should regenerate automatically when the source changes. Default: false.","flag":"auto-generate"},{"name":"relay_enabled","ts":"relay_enabled","kind":"body","type":"boolean","required":false,"description":"Enable webhook relay sessions. Requires the CLI target and Pro. Default: false.","flag":"relay-enabled"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"description":"Shared defaults inherited by every Target. GraphQL settings belong in definition.graphql.","flag":"config"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"name":{"minLength":1,"maxLength":80,"type":"string"},"definition":{"properties":{"source":{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL of an OpenAPI document, GraphQL SDL file, or GraphQL endpoint.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Values are never returned or recorded in revision history. When updating the same URL, omit headers to preserve the stored values or pass null to remove them. Changing the URL without headers clears the old values so a credential is never forwarded to a different source.","anyOf":[{"type":"object"},{"type":"null"}]}},"required":["kind","url"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"required":["provider","identifier"],"additionalProperties":false,"type":"object"},"path":{"description":"Repository-relative Definition entrypoint.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"required":["kind","repository","path"],"additionalProperties":false,"type":"object"}]},"patches":{"default":[],"maxItems":50,"items":{"description":"A fix applied to the resolved Definition before generation. Paths are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"required":["op","path"],"additionalProperties":false,"type":"object"},"type":"array"},"graphql":{"description":"GraphQL-only endpoint, auth, environment, title, and scalar settings.","anyOf":[{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Acme\" gives acme and AcmeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"diagnostic_policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed rule or location exceptions.","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"properties":{"rule_id":{"maxLength":160,"type":"string"},"path":{"description":"Exact schema coordinate. Omit only to suppress every occurrence of the rule.","maxLength":4096,"type":"string"},"reason":{"description":"The reviewed product decision behind this exception.","minLength":1,"maxLength":500,"type":"string"}},"required":["rule_id","reason"],"additionalProperties":false,"type":"object"},"type":"array"}},"required":["fail_on","only_new","suppressions"],"additionalProperties":false,"type":"object"}},"required":["source"],"additionalProperties":false,"type":"object"},"targets":{"description":"Initial first-class Targets. More than one may use the same generator with different identities or Deliveries.","minItems":1,"items":{"properties":{"name":{"minLength":1,"maxLength":80,"type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"},"state":{"enum":["active","disabled"],"default":"active","type":"string"},"edition":{"default":"2026-08-24","type":"string"},"release_channel":{"enum":["stable","prerelease"],"default":"stable","type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.","anyOf":[{"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.","properties":{"globals":{"maxItems":20,"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","type":"object"},"pagination":{"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.","type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"deliveries":{"maxItems":2,"items":{"anyOf":[{"type":"object"},{"type":"object"}]},"type":"array"}},"required":["name","generator"],"additionalProperties":false,"type":"object"},"type":"array"},"auto_generate":{"description":"Whether Typeship should regenerate automatically when the source changes. Default: false.","default":false,"type":"boolean"},"relay_enabled":{"description":"Enable webhook relay sessions. Requires the CLI target and Pro. Default: false.","default":false,"type":"boolean"},"config":{"description":"Shared defaults inherited by every Target. GraphQL settings belong in definition.graphql.","anyOf":[{"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.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"auth":{"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.","properties":{"oauth_server":{"anyOf":[{"description":"Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.","type":"object"},{"type":"null"}]},"oauth_applications":{"description":"OAuth applications keyed by a stable name.","additionalProperties":{"description":"OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.","type":"object"},"type":["object","null"]},"oauth_application":{"description":"Default OAuth application used by generated products.","maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"identity_verification":{"anyOf":[{"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.","type":"object"},{"type":"null"}]},"approval_url":{"format":"uri","description":"Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.","type":["string","null"]},"environments":{"description":"Authentication selections keyed by generated API environment name.","additionalProperties":{"description":"OAuth application and request-value overrides for one named API environment.","type":"object"},"type":["object","null"]}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"command_name":{"description":"Command users run, independent of how the CLI is distributed.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","properties":{"registry_name":{"description":"Stable official MCP registry name, independent of the server runtime.","type":["string","null"]},"access":{"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.","properties":{"issuer":{"format":"uri","description":"Exact issuer allowed to sign MCP connection tokens.","type":"string"},"resource":{"format":"uri","description":"Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.","type":"string"},"jwks_url":{"format":"uri","description":"Public signing-key endpoint. Omit to discover it from the issuer.","type":"string"},"scopes":{"description":"Minimum scopes required to connect to the self-hosted MCP server.","maxItems":20,"type":"array"}},"required":["issuer","resource"],"additionalProperties":false,"type":"object"},"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"},"reference_resolvers":{"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.","additionalProperties":{"type":"object"},"type":"object"}},"additionalProperties":false,"type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","properties":{"quickstart_operation":{"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.","maxLength":500,"type":["string","null"]}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","properties":{"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"required":["name","definition","targets"]},"exampleArguments":{"name":"example","definition":{"source":{"kind":"url","url":"https://example.com"}},"targets":[{"name":"example","generator":"typescript-sdk"}]},"outputSchema":{"description":"Project-owned identity, Definition reference, generation controls, and shared configuration.","properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"auto_generate":{"description":"Regenerate when the Definition changes: on every push to the default branch for a repository source…","type":"boolean"},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"config":{"description":"Shared defaults inherited by every Target.","anyOf":[{"description":"Shared generated-client and tooling behavior for a stored Project.","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"auth":{"description":"Public authentication defaults for generated clients and tools.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
106
+ {"resource":"projects","method":"retrieve","command":["projects","retrieve"],"tool":"projects_retrieve","httpMethod":"GET","path":"/projects/{project_id}","summary":"Retrieve a project","description":"Returns Project-owned fields only. List Targets separately for Target and Delivery data.","toolDescription":"Retrieve a project. Returns Project-owned fields only. GET /projects/{project_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"description":"Project-owned identity, Definition reference, generation controls, and shared configuration.","properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"auto_generate":{"description":"Regenerate when the Definition changes: on every push to the default branch for a repository source…","type":"boolean"},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"config":{"description":"Shared defaults inherited by every Target.","anyOf":[{"description":"Shared generated-client and tooling behavior for a stored Project.","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"auth":{"description":"Public authentication defaults for generated clients and tools.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
107
+ {"resource":"projects","method":"delete","command":["projects","delete"],"tool":"projects_delete","httpMethod":"DELETE","path":"/projects/{project_id}","summary":"Delete a project","toolDescription":"Delete a project. DELETE /projects/{project_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"destructive","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"deleted":{"const":true,"type":"boolean"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
108
+ {"resource":"projects","method":"update","command":["projects","update"],"tool":"projects_update","httpMethod":"PATCH","path":"/projects/{project_id}","summary":"Update a project","toolDescription":"Update a project. PATCH /projects/{project_id}","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":false,"select":false,"idempotent":false,"auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"name","ts":"name","kind":"body","type":"string","required":false,"flag":"name"},{"name":"auto_generate","ts":"auto_generate","kind":"body","type":"boolean","required":false,"flag":"auto-generate"},{"name":"relay_enabled","ts":"relay_enabled","kind":"body","type":"boolean","required":false,"description":"Enable webhook relay sessions. Requires the CLI target and Pro.","flag":"relay-enabled"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"description":"Replaces the Project's shared Target defaults. Send null to clear them.","flag":"config"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"name":{"minLength":1,"maxLength":80,"type":"string"},"auto_generate":{"type":"boolean"},"relay_enabled":{"description":"Enable webhook relay sessions. Requires the CLI target and Pro.","type":"boolean"},"config":{"description":"Replaces the Project's shared Target defaults. Send null to clear them.","anyOf":[{"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.","properties":{"globals":{"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.","maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\". Unmatched keys are reported as generation warnings.","additionalProperties":{"anyOf":[{"type":"object"},{"description":"false disables pagination detection for the operation.","type":"boolean"}]},"type":"object"},"auth":{"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.","properties":{"oauth_server":{"anyOf":[{"description":"Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are never accepted here.","type":"object"},{"type":"null"}]},"oauth_applications":{"description":"OAuth applications keyed by a stable name.","additionalProperties":{"description":"OAuth application available to generated products. Public clients support interactive login; confidential clients support runtime-supplied machine credentials. Client secrets are never stored.","type":"object"},"type":["object","null"]},"oauth_application":{"description":"Default OAuth application used by generated products.","maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"identity_verification":{"anyOf":[{"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.","type":"object"},{"type":"null"}]},"approval_url":{"format":"uri","description":"Base URL of a custom browser-approval backend implementing the start, status, and revoke contract. Used only when OAuth is not configured.","type":["string","null"]},"environments":{"description":"Authentication selections keyed by generated API environment name.","additionalProperties":{"description":"OAuth application and request-value overrides for one named API environment.","type":"object"},"type":["object","null"]}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"command_name":{"description":"Command users run, independent of how the CLI is distributed.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","properties":{"registry_name":{"description":"Stable official MCP registry name, independent of the server runtime.","type":["string","null"]},"access":{"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.","properties":{"issuer":{"format":"uri","description":"Exact issuer allowed to sign MCP connection tokens.","type":"string"},"resource":{"format":"uri","description":"Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.","type":"string"},"jwks_url":{"format":"uri","description":"Public signing-key endpoint. Omit to discover it from the issuer.","type":"string"},"scopes":{"description":"Minimum scopes required to connect to the self-hosted MCP server.","maxItems":20,"type":"array"}},"required":["issuer","resource"],"additionalProperties":false,"type":"object"},"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"},"reference_resolvers":{"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.","additionalProperties":{"type":"object"},"type":"object"}},"additionalProperties":false,"type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","properties":{"quickstart_operation":{"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.","maxLength":500,"type":["string","null"]}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","properties":{"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"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.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"description":"Project-owned identity, Definition reference, generation controls, and shared configuration.","properties":{"id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"object":{"const":"project","type":"string"},"name":{"maxLength":80,"type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"auto_generate":{"description":"Regenerate when the Definition changes: on every push to the default branch for a repository source…","type":"boolean"},"relay_enabled":{"description":"Whether the webhook relay is on, letting the generated CLI's webhooks listen command mint relay ses…","type":"boolean"},"config":{"description":"Shared defaults inherited by every Target.","anyOf":[{"description":"Shared generated-client and tooling behavior for a stored Project.","properties":{"globals":{"description":"Wire names of query/header parameters that become settable once on the generated client and auto-ap…","maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"description":"Per-operation pagination control, keyed by operationId or \"METHOD /path\".","type":"object"},"auth":{"description":"Public authentication defaults for generated clients and tools.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"description":"The API's documentation site.","type":["string","null"]},"docs_index_url":{"format":"uri","description":"Exact llms.txt URL when the documentation site does not publish it at docs_url + /llms.txt.","type":["string","null"]}},"type":"object"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","description":"When the project configuration last changed.","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
109
+ {"resource":"projects","method":"retrieveDiagnostics","command":["projects","retrieve-diagnostics"],"tool":"projects_retrieve_diagnostics","httpMethod":"GET","path":"/projects/{project_id}/diagnostics","summary":"Analyze a project's latest Definition Revision","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.","toolDescription":"Analyze a project's latest Definition Revision. Runs deterministic OpenAPI or GraphQL authorship checks against the latest observed immutable Definition Revision after applying the Definition's existing patches. GET /projects/{project_id}/diagnostics","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"description":"Deterministic Diagnostics for one immutable Definition Revision after existing patches.","properties":{"object":{"const":"diagnostic_report","type":"string"},"format":{"enum":["openapi","graphql"],"description":"Contract format Typeship analyzed.","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_revision_id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},"source_sha256":{"description":"SHA-256 digest of the immutable raw source revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"analyzed_sha256":{"description":"SHA-256 digest after applying the Definition's current patches.","pattern":"^[a-f0-9]{64}$","type":"string"},"patch_diagnostics":{"description":"Loud misses or conflicts from the Definition's existing patches.","items":{"type":"string"},"type":"array"},"summary":{"description":"Counts distinguish decisions from the number of affected schema locations.","properties":{"diagnostics":{"description":"Number of grouped rule diagnostics.","minimum":0,"type":"integer"},"occurrences":{"description":"Total affected locations across all diagnostics.","minimum":0,"type":"integer"},"errors":{"description":"Grouped correctness errors.","minimum":0,"type":"integer"},"warnings":{"description":"Grouped material risks.","minimum":0,"type":"integer"},"suggestions":{"description":"Grouped improvements.","minimum":0,"type":"integer"},"auto_fixable":{"description":"Diagnostics with exact reviewable Definition patches.","minimum":0,"type":"integer"}},"type":"object"},"diagnostics":{"description":"Stable grouped diagnostics, ordered by severity and rule identifier.","items":{"description":"Every occurrence of one stable Diagnostic rule, grouped into one decision.","properties":{"id":{"description":"Stable rule identifier for automation and suppressions.","type":"string"},"severity":{"enum":["error","warning","suggestion"],"description":"Whether the rule reports invalid behavior, material risk, or an improvement.","type":"string"},"category":{"enum":["correctness","sdk_ergonomics","agent_usability","safety"],"description":"Product dimension affected by the diagnostic.","type":"string"},"title":{"description":"Concise statement of the root cause.","type":"string"},"description":{"description":"What the API author should change.","type":"string"},"impact":{"description":"Why consumers of generated SDK, CLI, or MCP surfaces care.","type":"string"},"surfaces":{"description":"Public surfaces affected by the root cause.","uniqueItems":true,"type":"array"},"locations":{"description":"All affected coordinates, kept under one grouped diagnostic.","minItems":1,"type":"array"},"fix":{"description":"A reviewable remediation that does not invent API behavior.","type":"object"},"authoring_brief":{"description":"Grounded instructions an agent can use to edit the source.","type":"string"}},"type":"object"},"type":"array"},"policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed ru…","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"type":"object"},"type":"array"}},"type":"object"},"evaluation":{"properties":{"state":{"enum":["pass","fail"],"type":"string"},"blocking":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"considered_occurrences":{"minimum":0,"type":"integer"},"suppressed_occurrences":{"minimum":0,"type":"integer"}},"type":"object"},"delta":{"properties":{"added":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"resolved":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"baseline_definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]}},"type":"object"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
110
+ {"resource":"projects","method":"refreshDiagnostics","command":["projects","refresh-diagnostics"],"tool":"projects_refresh_diagnostics","httpMethod":"POST","path":"/projects/{project_id}/diagnostics","summary":"Refresh a project's Diagnostics from its configured source","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.","toolDescription":"Refresh a project's Diagnostics from its configured source. Fetches the complete configured source, records a new immutable revision only when content changed, and returns its Diagnostics. POST /projects/{project_id}/diagnostics","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"description":"Deterministic Diagnostics for one immutable Definition Revision after existing patches.","properties":{"object":{"const":"diagnostic_report","type":"string"},"format":{"enum":["openapi","graphql"],"description":"Contract format Typeship analyzed.","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_revision_id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},"source_sha256":{"description":"SHA-256 digest of the immutable raw source revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"analyzed_sha256":{"description":"SHA-256 digest after applying the Definition's current patches.","pattern":"^[a-f0-9]{64}$","type":"string"},"patch_diagnostics":{"description":"Loud misses or conflicts from the Definition's existing patches.","items":{"type":"string"},"type":"array"},"summary":{"description":"Counts distinguish decisions from the number of affected schema locations.","properties":{"diagnostics":{"description":"Number of grouped rule diagnostics.","minimum":0,"type":"integer"},"occurrences":{"description":"Total affected locations across all diagnostics.","minimum":0,"type":"integer"},"errors":{"description":"Grouped correctness errors.","minimum":0,"type":"integer"},"warnings":{"description":"Grouped material risks.","minimum":0,"type":"integer"},"suggestions":{"description":"Grouped improvements.","minimum":0,"type":"integer"},"auto_fixable":{"description":"Diagnostics with exact reviewable Definition patches.","minimum":0,"type":"integer"}},"type":"object"},"diagnostics":{"description":"Stable grouped diagnostics, ordered by severity and rule identifier.","items":{"description":"Every occurrence of one stable Diagnostic rule, grouped into one decision.","properties":{"id":{"description":"Stable rule identifier for automation and suppressions.","type":"string"},"severity":{"enum":["error","warning","suggestion"],"description":"Whether the rule reports invalid behavior, material risk, or an improvement.","type":"string"},"category":{"enum":["correctness","sdk_ergonomics","agent_usability","safety"],"description":"Product dimension affected by the diagnostic.","type":"string"},"title":{"description":"Concise statement of the root cause.","type":"string"},"description":{"description":"What the API author should change.","type":"string"},"impact":{"description":"Why consumers of generated SDK, CLI, or MCP surfaces care.","type":"string"},"surfaces":{"description":"Public surfaces affected by the root cause.","uniqueItems":true,"type":"array"},"locations":{"description":"All affected coordinates, kept under one grouped diagnostic.","minItems":1,"type":"array"},"fix":{"description":"A reviewable remediation that does not invent API behavior.","type":"object"},"authoring_brief":{"description":"Grounded instructions an agent can use to edit the source.","type":"string"}},"type":"object"},"type":"array"},"policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed ru…","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"type":"object"},"type":"array"}},"type":"object"},"evaluation":{"properties":{"state":{"enum":["pass","fail"],"type":"string"},"blocking":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"considered_occurrences":{"minimum":0,"type":"integer"},"suppressed_occurrences":{"minimum":0,"type":"integer"}},"type":"object"},"delta":{"properties":{"added":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"resolved":{"items":{"description":"Compact rule and location reference; full guidance appears once in diagnostics.","type":"object"},"type":"array"},"baseline_definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]}},"type":"object"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
111
+ {"resource":"projects","method":"remediateDiagnostics","command":["projects","remediate-diagnostics"],"tool":"projects_remediate_diagnostics","httpMethod":"POST","path":"/projects/{project_id}/diagnostics/remediations","summary":"Apply exact, reviewed diagnostic remediations","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.","toolDescription":"Apply exact, reviewed diagnostic remediations. Applies only deterministic patches. POST /projects/{project_id}/diagnostics/remediations","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"diagnostic_ids","ts":"diagnostic_ids","kind":"body","type":"array","required":true,"items":{"type":"string"},"description":"Stable IDs of current diagnostics whose exact patches should be reviewed and applied.","flag":"diagnostic-ids"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"diagnostic_ids":{"description":"Stable IDs of current diagnostics whose exact patches should be reviewed and applied.","minItems":1,"maxItems":50,"uniqueItems":true,"items":{"type":"string"},"type":"array"}},"required":["project_id","diagnostic_ids"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n","diagnostic_ids":["value"]},"outputSchema":{"properties":{"object":{"const":"diagnostic_remediation","type":"string"},"kind":{"enum":["overlay","source_review"],"type":"string"},"patches_applied":{"minimum":0,"type":"integer"},"review_url":{"format":"uri","description":"Source pull request for repository projects; absent for URL overlays.","type":["string","null"]},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
112
+ {"resource":"projects","method":"retrieveIntegrationHealth","command":["projects","retrieve-integration-health"],"tool":"projects_retrieve_integration_health","httpMethod":"GET","path":"/projects/{project_id}/integration-health","summary":"Diagnose a project's repository integrations","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.","toolDescription":"Diagnose a project's repository integrations. Returns provider-neutral, machine-actionable source and destination access, Definition readability, source-approval label setup, required status names, and the latest durable webhook delivery. GET /projects/{project_id}/integration-health","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"properties":{"object":{"const":"repository_integration_health","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"status":{"enum":["ready","action_required"],"type":"string"},"repositories":{"items":{"properties":{"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"type":"object"},"roles":{"uniqueItems":true,"items":{"enum":["source","destination"],"type":"string"},"type":"array"},"status":{"enum":["ready","action_required"],"type":"string"},"default_branch":{"type":"string"},"capabilities":{"items":{"type":"string"},"type":"array"},"breaking_acknowledgement":{"description":"Whether a source repository has the optional typeship:breaking-approved policy label. Null when the repository is not a source or labels could not be read.","type":["boolean","null"]},"definition":{"enum":["readable","missing"],"type":"string"},"issues":{"items":{"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"required_checks":{"properties":{"source":{"items":{"type":"string"},"type":"array"},"destination":{"items":{"type":"string"},"type":"array"}},"type":"object"},"last_event":{"anyOf":[{"properties":{"provider":{"type":"string"},"id":{"type":"string"},"event":{"type":"string"},"status":{"enum":["queued","processing","succeeded","failed","superseded"],"type":"string"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"},{"type":"null"}]},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
113
+ {"resource":"projects","method":"listGenerations","command":["projects","list-generations"],"tool":"projects_list_generations","httpMethod":"GET","path":"/projects/{project_id}/generations","summary":"List a project's generations","toolDescription":"List a project's generations. GET /projects/{project_id}/generations (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"},{"name":"target_id","ts":"targetId","kind":"query","type":"string","required":false,"description":"Only generations for this persisted Target.","flag":"target-id"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."},"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"description":"Generation metadata returned by collection endpoints.","examples":[{"id":"gen_7h2p5d9c3m8w1k6q","object":"generation","project_id":"prj_4f8k2m7x9q1v6b3n","definition_revision_id":"drev_6m1q8v4k2p9d7h3c","status":"succeeded","trigger":"manual","target_id":"tgt_5m8q2v7k1p9d4h6c","generator":"typescript-sdk","provenance":{"generator_edition":"2026-08-24","engine_build":"abc123","resolved_config":null,"config_hash":null,"surface_plan":null,"surface_plan_hash":null,"entitlement_cap":null,"package_version":"1.0.0"},"meta":{"title":"Acme Payments API","api_version":"1.0.0","version":"1.0.0","oas_version":"3.1","artifact_name":"@acme/payments","client_name":"AcmeClient","generators":["typescript-sdk"]},"warnings":[],"error":null,"created_at":"2026-01-01T00:00:00Z"}],"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"target_id":{"description":"Persisted Target identity.","anyOf":[{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"provenance":{"properties":{"generator_edition":{"description":"Pinned generator contract edition.","type":"string"},"engine_build":{"description":"Exact engine build identifier used for replay and support.","type":"string"},"resolved_config":{"description":"Immutable effective Target configuration used by this run; source credentials are never included.","type":["object","null"]},"config_hash":{"pattern":"^[a-f0-9]{64}$","type":["string","null"]},"surface_plan":{"description":"Resolved generator and entitlement plan used to select the emitted public surface.","type":["object","null"]},"surface_plan_hash":{"pattern":"^[a-f0-9]{64}$","type":["string","null"]},"entitlement_cap":{"minimum":1,"type":["integer","null"]},"package_version":{"type":["string","null"]}},"type":"object"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"type":"object"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to ge…","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
114
+ {"resource":"projects","method":"generate","command":["projects","generate"],"tool":"projects_generate","httpMethod":"POST","path":"/projects/{project_id}/generations","summary":"Generate targets and open pull requests","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.","toolDescription":"Generate targets and open pull requests. Resolves the project's URL or GitHub source, generates every configured delivery package, stores each result in the project's history, and attempts to open a pull request in every configured destination. POST /projects/{project_id}/generations","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"description":"Metadata for each Target generation attempted by a Project run. Retrieve one Generation separately for generated files.","properties":{"data":{"items":{"anyOf":[{"description":"Generation metadata returned by collection endpoints. Generated file contents and file indexes are available only from retrieve and create operations.","examples":[{"id":"gen_7h2p5d9c3m8w1k6q","object":"generation","project_id":"prj_4f8k2m7x9q1v6b3n","definition_revision_id":"drev_6m1q8v4k2p9d7h3c","status":"succeeded","trigger":"manual","target_id":"tgt_5m8q2v7k1p9d4h6c","generator":"typescript-sdk","provenance":{"generator_edition":"2026-08-24","engine_build":"abc123","resolved_config":null,"config_hash":null,"surface_plan":null,"surface_plan_hash":null,"entitlement_cap":null,"package_version":"1.0.0"},"meta":{"title":"Acme Payments API","api_version":"1.0.0","version":"1.0.0","oas_version":"3.1","artifact_name":"@acme/payments","client_name":"AcmeClient","generators":["typescript-sdk"]},"warnings":[],"error":null,"created_at":"2026-01-01T00:00:00Z"}],"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"target_id":{"description":"Persisted Target identity. Null only for stateless generation.","anyOf":[{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"},"provenance":{"type":"object"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"type":"object"},{"type":"null"}]},"warnings":{"type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"}},"type":"object"},{"description":"A selected target that did not generate in a multi-target run.","properties":{"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"},"status":{"const":"failed","type":"string"},"error":{"type":"string"}},"type":"object"}]},"type":"array"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
115
+ {"resource":"definitions","method":"retrieve","command":["definitions","retrieve"],"tool":"definitions_retrieve","httpMethod":"GET","path":"/definitions/{definition_id}","summary":"Retrieve a Definition","toolDescription":"Retrieve a Definition. GET /definitions/{definition_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"definition_id","ts":"definitionId","kind":"path","type":"string","required":true,"flag":"definition-id"}],"inputSchema":{"type":"object","properties":{"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"}},"required":["definition_id"]},"exampleArguments":{"definition_id":"def_2p8m4q7k1v9d6h3c"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"object":{"const":"definition","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"source":{"description":"The single source of truth for where a Project's Definition lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"type":"object"},"path":{"description":"Repository-relative Definition entrypoint.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"format":{"enum":["openapi","graphql",null],"type":["string","null"]},"patches":{"items":{"description":"A fix applied to the resolved Definition before generation. Paths are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"graphql":{"anyOf":[{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Acme\" gives acme and AcmeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"type":"object"},{"type":"null"}]},"diagnostic_policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed rule or location exceptions.","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"properties":{"rule_id":{"maxLength":160,"type":"string"},"path":{"description":"Exact schema coordinate. Omit only to suppress every occurrence of the rule.","maxLength":4096,"type":"string"},"reason":{"description":"The reviewed product decision behind this exception.","minLength":1,"maxLength":500,"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"latest_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
116
+ {"resource":"definitions","method":"update","command":["definitions","update"],"tool":"definitions_update","httpMethod":"PATCH","path":"/definitions/{definition_id}","summary":"Update and resolve a Definition","description":"Resolves the complete document graph and records a new immutable revision before saving.","toolDescription":"Update and resolve a Definition. Resolves the complete document graph and records a new immutable revision before saving. PATCH /definitions/{definition_id}","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"definition_id","ts":"definitionId","kind":"path","type":"string","required":true,"flag":"definition-id"},{"name":"source","ts":"source","kind":"body","type":"json","required":false,"flag":"source"},{"name":"patches","ts":"patches","kind":"body","type":"array","required":false,"items":{"type":"object"},"flag":"patches"},{"name":"graphql","ts":"graphql","kind":"body","type":"json","required":false,"flag":"graphql"},{"name":"diagnostic_policy","ts":"diagnostic_policy","kind":"body","type":"object","required":false,"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed rule or location exceptions.","flag":"diagnostic-policy"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"source":{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL of an OpenAPI document, GraphQL SDL file, or GraphQL endpoint.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers":{"description":"Request headers for a protected URL. Values are never returned or recorded in revision history. When updating the same URL, omit headers to preserve the stored values or pass null to remove them. Changing the URL without headers clears the old values so a credential is never forwarded to a different source.","anyOf":[{"additionalProperties":{"maxLength":4096,"type":"string"},"type":"object"},{"type":"null"}]}},"required":["kind","url"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"required":["provider","identifier"],"additionalProperties":false,"type":"object"},"path":{"description":"Repository-relative Definition entrypoint.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"required":["kind","repository","path"],"additionalProperties":false,"type":"object"}]},"patches":{"maxItems":50,"items":{"description":"A fix applied to the resolved Definition before generation. Paths are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"required":["op","path"],"additionalProperties":false,"type":"object"},"type":"array"},"graphql":{"anyOf":[{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"properties":{"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["name","url"],"additionalProperties":false,"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Acme\" gives acme and AcmeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"diagnostic_policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed rule or location exceptions.","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"properties":{"rule_id":{"maxLength":160,"type":"string"},"path":{"description":"Exact schema coordinate. Omit only to suppress every occurrence of the rule.","maxLength":4096,"type":"string"},"reason":{"description":"The reviewed product decision behind this exception.","minLength":1,"maxLength":500,"type":"string"}},"required":["rule_id","reason"],"additionalProperties":false,"type":"object"},"type":"array"}},"required":["fail_on","only_new","suppressions"],"additionalProperties":false,"type":"object"}},"required":["definition_id"]},"exampleArguments":{"definition_id":"def_2p8m4q7k1v9d6h3c"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"object":{"const":"definition","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"source":{"description":"The single source of truth for where a Project's Definition lives.","anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","description":"URL fetched for every generation.","maxLength":2048,"pattern":"^https?://","type":"string"},"headers_configured":{"description":"Whether Typeship has stored write-only request headers for this URL.","type":"boolean"}},"type":"object"},{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"type":"object"},"path":{"description":"Repository-relative Definition entrypoint.","minLength":1,"maxLength":4096,"pattern":"^(?!/)(?!.*\\.\\.).+$","type":"string"}},"type":"object"}]},"format":{"enum":["openapi","graphql",null],"type":["string","null"]},"patches":{"items":{"description":"A fix applied to the resolved Definition before generation. Paths are JSON\nPointers into the document. A patch whose target no longer exists is\nskipped and reported as a warning on the generation, never silently.","examples":[{"op":"remove","path":"/components/schemas/Legacy"}],"properties":{"op":{"enum":["set","append","remove","rename"],"type":"string"},"path":{"description":"JSON-Pointer-style path. Pattern segments enable bulk fixes:\n* (any child), ** (any depth), [key=value] (filter), e.g.\n/paths/**/parameters/[name=account_id]/schema/type. Renaming a\nschema under /components/schemas also rewrites its $refs.","type":"string"},"value":{"description":"set only; the replacement value."},"to":{"description":"rename only; the new key name.","type":["string","null"]},"reason":{"type":["string","null"]}},"type":"object"},"type":"array"},"graphql":{"anyOf":[{"description":"What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs.","properties":{"endpoint":{"format":"uri","description":"The URL every request is POSTed to; the generated client's default baseUrl. Defaults to the URL the schema was fetched from. Without either, baseUrl is a required client option.","type":"string"},"environments":{"description":"Named endpoints (sandbox, production). Each becomes a client environment; the first is the default unless endpoint is set.","maxItems":10,"items":{"type":"object"},"type":"array"},"auth":{"enum":["bearer","basic","api_key","none"],"description":"How requests authenticate. bearer sends Authorization: Bearer; basic is for key-pair APIs (public key as username, private key as password); api_key sends a header named by api_key_header; none generates no auth option.","default":"bearer","type":"string"},"api_key_header":{"description":"Header carrying the key when auth is api_key. Required for that mode; Typeship does not invent a vendor-specific header name.","type":"string"},"title":{"description":"The API's name; drives the package and client names (\"Acme\" gives acme and AcmeClient). Defaults to a name derived from the endpoint's host.","maxLength":80,"type":"string"},"scalars":{"description":"JSON representation of each custom scalar, keyed by GraphQL scalar name. Unmapped scalars generate as the language's untyped JSON value and produce a warning. Unmatched keys warn.","additionalProperties":{"enum":["string","integer","number","boolean","json"],"type":"string"},"type":"object"}},"type":"object"},{"type":"null"}]},"diagnostic_policy":{"description":"Source pull-request enforcement threshold, new-versus-complete baseline, and explicitly reviewed rule or location exceptions.","properties":{"fail_on":{"enum":["never","error","warning"],"description":"Severity threshold that fails the API change review check.","default":"error","type":"string"},"only_new":{"description":"Enforce only occurrences introduced by the proposed source change.","default":true,"type":"boolean"},"suppressions":{"default":[],"maxItems":100,"items":{"properties":{"rule_id":{"maxLength":160,"type":"string"},"path":{"description":"Exact schema coordinate. Omit only to suppress every occurrence of the rule.","maxLength":4096,"type":"string"},"reason":{"description":"The reviewed product decision behind this exception.","minLength":1,"maxLength":500,"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"latest_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
117
+ {"resource":"targets","method":"list","command":["targets","list"],"tool":"targets_list","httpMethod":"GET","path":"/projects/{project_id}/targets","summary":"List a project's Targets","toolDescription":"List a project's Targets. GET /projects/{project_id}/targets (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."}},"required":["project_id"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"object":{"const":"target","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"name":{"type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"},"state":{"enum":["active","disabled"],"type":"string"},"edition":{"type":"string"},"release_channel":{"enum":["stable","prerelease"],"type":"string"},"version_policy":{"properties":{"mode":{"const":"reviewed_semver","type":"string"},"pre1_breaking":{"const":"minor","type":"string"}},"type":"object"},"current_version":{"type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config. GraphQL settings are Definition-owned and never appear here.","anyOf":[{"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.","properties":{"globals":{"maxItems":20,"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","type":"object"},"pagination":{"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.","type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"type":"object"},{"type":"null"}]},"deliveries":{"description":"At most one repository and one hosted MCP Delivery.","maxItems":2,"items":{"anyOf":[{"type":"object"},{"type":"object"}]},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
118
+ {"resource":"targets","method":"create","command":["targets","create"],"tool":"targets_create","httpMethod":"POST","path":"/projects/{project_id}/targets","summary":"Create an independently configured Target","description":"Several Targets may use the same generator with distinct configuration, Deliveries, and release streams.","toolDescription":"Create an independently configured Target. Several Targets may use the same generator with distinct configuration, Deliveries, and release streams. POST /projects/{project_id}/targets","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":true,"select":false,"idempotent":false,"idempotencyHeader":"Idempotency-Key","auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"project_id","ts":"projectId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","flag":"project-id","resolve":{"via":"projects_list","match":["name"],"id":"id","idPattern":"^prj_[a-z0-9]{16}$","inferred":true}},{"name":"name","ts":"name","kind":"body","type":"string","required":true,"flag":"name"},{"name":"definition_id","ts":"definition_id","kind":"body","type":"string","required":true,"description":"Unique identifier for a project's logical API Definition.","flag":"definition-id"},{"name":"generator","ts":"generator","kind":"body","type":"string","required":true,"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","flag":"generator"},{"name":"state","ts":"state","kind":"body","type":"string","required":false,"enum":["active","disabled"],"description":"Default: \"active\".","flag":"state"},{"name":"edition","ts":"edition","kind":"body","type":"string","required":false,"description":"Default: \"2026-08-24\".","flag":"edition"},{"name":"release_channel","ts":"release_channel","kind":"body","type":"string","required":false,"enum":["stable","prerelease"],"description":"Default: \"stable\".","flag":"release-channel"},{"name":"proposed_version","ts":"proposed_version","kind":"body","type":"string","required":false,"description":"Optional larger or prerelease SemVer for the next reviewed release.","flag":"proposed-version"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"description":"Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.","flag":"config"},{"name":"deliveries","ts":"deliveries","kind":"body","type":"array","required":false,"items":{"type":"json"},"flag":"deliveries"},{"name":"Idempotency-Key","ts":"idempotencyKey","kind":"header","type":"string","required":false,"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.","flag":"idempotency-key"}],"inputSchema":{"type":"object","properties":{"project_id":{"description":"Unique identifier for a project. Accepts an ID or an exact name (resolved via projects_list). IDs come from projects_list.","examples":["example-name","prj_4f8k2m7x9q1v6b3n"],"type":"string"},"Idempotency-Key":{"minLength":1,"maxLength":255,"pattern":"^[!-~]+$","type":"string","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."},"name":{"minLength":1,"maxLength":80,"type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target. This is configuration, not identity; several Targets may use the same generator.","type":"string"},"state":{"enum":["active","disabled"],"default":"active","type":"string","description":"Default: \"active\"."},"edition":{"default":"2026-08-24","type":"string","description":"Default: \"2026-08-24\"."},"release_channel":{"enum":["stable","prerelease"],"default":"stable","type":"string","description":"Default: \"stable\"."},"proposed_version":{"description":"Optional larger or prerelease SemVer for the next reviewed release.","type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.","anyOf":[{"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.","properties":{"globals":{"maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"additionalProperties":{"anyOf":[{"type":"object"},{"type":"boolean"}]},"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.","properties":{"oauth_application":{"description":"Project OAuth application to use. Omit to inherit the Project default.","maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"environments":{"description":"Project OAuth application selections keyed by API environment.","additionalProperties":{"type":"object"},"type":["object","null"]}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"command_name":{"description":"Command users run, independent of how the CLI is distributed.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","properties":{"registry_name":{"description":"Stable official MCP registry name, independent of the server runtime.","type":["string","null"]},"access":{"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.","properties":{"issuer":{"format":"uri","description":"Exact issuer allowed to sign MCP connection tokens.","type":"string"},"resource":{"format":"uri","description":"Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.","type":"string"},"jwks_url":{"format":"uri","description":"Public signing-key endpoint. Omit to discover it from the issuer.","type":"string"},"scopes":{"description":"Minimum scopes required to connect to the self-hosted MCP server.","maxItems":20,"type":"array"}},"required":["issuer","resource"],"additionalProperties":false,"type":"object"},"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"},"reference_resolvers":{"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.","additionalProperties":{"type":"object"},"type":"object"}},"additionalProperties":false,"type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","properties":{"quickstart_operation":{"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.","maxLength":500,"type":["string","null"]}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","properties":{"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"deliveries":{"maxItems":2,"items":{"anyOf":[{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"required":["provider","identifier"],"additionalProperties":false,"type":"object"},"directory":{"type":["string","null"]},"package_name":{"description":"npm or Python registry identity where applicable.","type":["string","null"]},"module_path":{"description":"Explicit Go module path where applicable.","type":["string","null"]}},"required":["kind","repository"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"hosted_mcp","type":"string"}},"required":["kind"],"additionalProperties":false,"type":"object"}]},"type":"array"}},"required":["project_id","name","definition_id","generator"]},"exampleArguments":{"project_id":"prj_4f8k2m7x9q1v6b3n","name":"example","definition_id":"def_2p8m4q7k1v9d6h3c","generator":"typescript-sdk"},"outputSchema":{"properties":{"id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"object":{"const":"target","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"name":{"type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"state":{"enum":["active","disabled"],"type":"string"},"edition":{"type":"string"},"release_channel":{"enum":["stable","prerelease"],"type":"string"},"version_policy":{"properties":{"mode":{"const":"reviewed_semver","type":"string"},"pre1_breaking":{"const":"minor","type":"string"}},"type":"object"},"current_version":{"type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config.","anyOf":[{"description":"Target-specific generation and delivery overrides.","properties":{"globals":{"maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"type":"object"},{"type":"null"}]},"deliveries":{"description":"At most one repository and one hosted MCP Delivery.","maxItems":2,"items":{"anyOf":[{"type":"object"},{"type":"object"}]},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
119
+ {"resource":"targets","method":"retrieve","command":["targets","retrieve"],"tool":"targets_retrieve","httpMethod":"GET","path":"/targets/{target_id}","summary":"Retrieve a Target","toolDescription":"Retrieve a Target. GET /targets/{target_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"target_id","ts":"targetId","kind":"path","type":"string","required":true,"flag":"target-id"}],"inputSchema":{"type":"object","properties":{"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"}},"required":["target_id"]},"exampleArguments":{"target_id":"tgt_5m8q2v7k1p9d4h6c"},"outputSchema":{"properties":{"id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"object":{"const":"target","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"name":{"type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"state":{"enum":["active","disabled"],"type":"string"},"edition":{"type":"string"},"release_channel":{"enum":["stable","prerelease"],"type":"string"},"version_policy":{"properties":{"mode":{"const":"reviewed_semver","type":"string"},"pre1_breaking":{"const":"minor","type":"string"}},"type":"object"},"current_version":{"type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config.","anyOf":[{"description":"Target-specific generation and delivery overrides.","properties":{"globals":{"maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"type":"object"},{"type":"null"}]},"deliveries":{"description":"At most one repository and one hosted MCP Delivery.","maxItems":2,"items":{"anyOf":[{"type":"object"},{"type":"object"}]},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
120
+ {"resource":"targets","method":"delete","command":["targets","delete"],"tool":"targets_delete","httpMethod":"DELETE","path":"/targets/{target_id}","summary":"Delete an unused Target","description":"Targets with Generation or release history, or an active release candidate, must be disabled instead.","toolDescription":"Delete an unused Target. Targets with Generation or release history, or an active release candidate, must be disabled instead. DELETE /targets/{target_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"destructive","params":[{"name":"target_id","ts":"targetId","kind":"path","type":"string","required":true,"flag":"target-id"}],"inputSchema":{"type":"object","properties":{"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"}},"required":["target_id"]},"exampleArguments":{"target_id":"tgt_5m8q2v7k1p9d4h6c"},"outputSchema":{"properties":{"id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"object":{"const":"target","type":"string"},"deleted":{"const":true,"type":"boolean"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
121
+ {"resource":"targets","method":"update","command":["targets","update"],"tool":"targets_update","httpMethod":"PATCH","path":"/targets/{target_id}","summary":"Update a Target, its Deliveries, or its next reviewed version","toolDescription":"Update a Target, its Deliveries, or its next reviewed version. PATCH /targets/{target_id}","paginated":false,"hasBody":true,"bodyStyle":"fields","bodyKind":"json","sse":false,"hasParams":false,"select":false,"idempotent":false,"auth":"required","security":[{"apiKey":[]}],"safety":"write","params":[{"name":"target_id","ts":"targetId","kind":"path","type":"string","required":true,"flag":"target-id"},{"name":"name","ts":"name","kind":"body","type":"string","required":false,"flag":"name"},{"name":"state","ts":"state","kind":"body","type":"string","required":false,"enum":["active","disabled"],"flag":"state"},{"name":"edition","ts":"edition","kind":"body","type":"string","required":false,"flag":"edition"},{"name":"release_channel","ts":"release_channel","kind":"body","type":"string","required":false,"enum":["stable","prerelease"],"flag":"release-channel"},{"name":"proposed_version","ts":"proposed_version","kind":"body","type":"string","required":false,"flag":"proposed-version"},{"name":"config","ts":"config","kind":"body","type":"json","required":false,"description":"Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.","flag":"config"},{"name":"deliveries","ts":"deliveries","kind":"body","type":"array","required":false,"items":{"type":"json"},"flag":"deliveries"}],"inputSchema":{"type":"object","properties":{"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"name":{"minLength":1,"maxLength":80,"type":"string"},"state":{"enum":["active","disabled"],"type":"string"},"edition":{"type":"string"},"release_channel":{"enum":["stable","prerelease"],"type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config. GraphQL settings are rejected here and belong to the Definition.","anyOf":[{"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.","properties":{"globals":{"maxItems":20,"items":{"type":"string"},"type":"array"},"retries":{"description":"Retry behavior. Top-level fields adjust every operation; operations maps operationId or \"METHOD /path\" keys to per-operation overrides.","properties":{"max_retries":{"minimum":0,"maximum":10,"type":"integer"},"statuses":{"description":"Replaces the default retryable set (408, 429, 500, 502, 503, 504).","maxItems":20,"items":{"type":"integer"},"type":"array"},"initial_delay_ms":{"minimum":1,"type":"integer"},"max_delay_ms":{"minimum":1,"type":"integer"},"retry_non_idempotent":{"description":"Also retry non-idempotent methods (POST/PATCH).","type":"boolean"},"disabled":{"description":"Shorthand for max_retries 0.","type":"boolean"},"operations":{"additionalProperties":{"description":"RetryTuning (recursive)"},"type":"object"}},"additionalProperties":false,"type":"object"},"pagination":{"additionalProperties":{"anyOf":[{"type":"object"},{"type":"boolean"}]},"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target. OAuth server metadata, applications, and identity policy remain Project-owned.","properties":{"oauth_application":{"description":"Project OAuth application to use. Omit to inherit the Project default.","maxLength":64,"pattern":"^[a-z][a-z0-9_-]{0,63}$","type":["string","null"]},"environments":{"description":"Project OAuth application selections keyed by API environment.","additionalProperties":{"type":"object"},"type":["object","null"]}},"additionalProperties":false,"type":"object"},"cli":{"description":"How the generated CLI behaves. Part of Config.","properties":{"command_name":{"description":"Command users run, independent of how the CLI is distributed.","type":["string","null"]},"update_notice":{"description":"Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated code phones nobody unless this is enabled.","type":"boolean"},"support_url":{"description":"Where the generated CLI's feedback command sends users. GitHub issues/new URLs get a prefilled title and environment details.","type":["string","null"]},"mcp_url":{"description":"Hosted MCP endpoint installed by the generated CLI instead of launching the package's local stdio server.","type":["string","null"]},"skills_repo":{"description":"GitHub owner/name of the skills package the generated CLI offers to install during init.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config.","properties":{"registry_name":{"description":"Stable official MCP registry name, independent of the server runtime.","type":["string","null"]},"access":{"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.","properties":{"issuer":{"format":"uri","description":"Exact issuer allowed to sign MCP connection tokens.","type":"string"},"resource":{"format":"uri","description":"Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.","type":"string"},"jwks_url":{"format":"uri","description":"Public signing-key endpoint. Omit to discover it from the issuer.","type":"string"},"scopes":{"description":"Minimum scopes required to connect to the self-hosted MCP server.","maxItems":20,"type":"array"}},"required":["issuer","resource"],"additionalProperties":false,"type":"object"},"tool_mode":{"enum":["auto","operations","meta"],"description":"MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so large APIs don't flood an agent's context window. Auto considers the serialized tool schemas, switching near 10k tokens or above 100 operations.","type":"string"},"instructions":{"description":"Guidance appended to the MCP server's instructions, which agents read once when they connect (server/discover): what to call first, conventions the spec does not state, what not to do. Carried by the package's server and the hosted endpoint alike.","maxLength":2000,"type":["string","null"]},"tool_descriptions":{"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.","additionalProperties":{"maxLength":600,"type":"string"},"type":"object"},"reference_resolvers":{"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.","additionalProperties":{"type":"object"},"type":"object"}},"additionalProperties":false,"type":"object"},"readme":{"description":"Generated README behavior. Part of Config.","properties":{"quickstart_operation":{"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.","maxLength":500,"type":["string","null"]}},"additionalProperties":false,"type":"object"},"package":{"description":"Published-package metadata the API spec does not own. Repository is derived from each destination.","properties":{"homepage":{"description":"Homepage written into registry metadata.","type":["string","null"]},"license":{"description":"SPDX identifier written into registry metadata. Defaults to info.license.","maxLength":200,"type":["string","null"]},"license_text":{"description":"Exact LICENSE file contents. Supply this for licences the engine does not build in; MIT is built in when copyright is also set.","maxLength":100000,"type":["string","null"]},"copyright":{"description":"Copyright line used in generated license files.","maxLength":200,"type":["string","null"]},"go_package_name":{"description":"Go identifier when the destination repository name is unsuitable.","type":["string","null"]}},"additionalProperties":false,"type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"additionalProperties":false,"type":"object"},{"type":"null"}]},"deliveries":{"maxItems":2,"items":{"anyOf":[{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"required":["provider","identifier"],"additionalProperties":false,"type":"object"},"directory":{"type":["string","null"]},"package_name":{"description":"npm or Python registry identity where applicable.","type":["string","null"]},"module_path":{"description":"Explicit Go module path where applicable.","type":["string","null"]}},"required":["kind","repository"],"additionalProperties":false,"type":"object"},{"properties":{"kind":{"const":"hosted_mcp","type":"string"}},"required":["kind"],"additionalProperties":false,"type":"object"}]},"type":"array"}},"required":["target_id"]},"exampleArguments":{"target_id":"tgt_5m8q2v7k1p9d4h6c"},"outputSchema":{"properties":{"id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"object":{"const":"target","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"name":{"type":"string"},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"state":{"enum":["active","disabled"],"type":"string"},"edition":{"type":"string"},"release_channel":{"enum":["stable","prerelease"],"type":"string"},"version_policy":{"properties":{"mode":{"const":"reviewed_semver","type":"string"},"pre1_breaking":{"const":"minor","type":"string"}},"type":"object"},"current_version":{"type":"string"},"proposed_version":{"type":["string","null"]},"config":{"description":"Target-specific overrides merged over Project.config.","anyOf":[{"description":"Target-specific generation and delivery overrides.","properties":{"globals":{"maxItems":20,"type":"array"},"retries":{"description":"Retry behavior.","type":"object"},"pagination":{"type":"object"},"auth":{"description":"Selects a Project OAuth application for one Target.","type":"object"},"cli":{"description":"How the generated CLI behaves.","type":"object"},"mcp":{"description":"How generated MCP servers and the Typeship-hosted endpoint behave.","type":"object"},"readme":{"description":"Generated README behavior.","type":"object"},"package":{"description":"Published-package metadata the API spec does not own.","type":"object"},"docs_url":{"format":"uri","type":["string","null"]},"docs_index_url":{"format":"uri","type":["string","null"]}},"type":"object"},{"type":"null"}]},"deliveries":{"description":"At most one repository and one hosted MCP Delivery.","maxItems":2,"items":{"anyOf":[{"type":"object"},{"type":"object"}]},"type":"array"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
122
+ {"resource":"targets","method":"listReleases","command":["targets","list-releases"],"tool":"targets_list_releases","httpMethod":"GET","path":"/targets/{target_id}/releases","summary":"List immutable releases for a Target","toolDescription":"List immutable releases for a Target. GET /targets/{target_id}/releases (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"target_id","ts":"targetId","kind":"path","type":"string","required":true,"flag":"target-id"},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."}},"required":["target_id"]},"exampleArguments":{"target_id":"tgt_5m8q2v7k1p9d4h6c"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"examples":["rel_7m2q8v4k1p9d5h6c"],"pattern":"^rel_[a-z0-9]{16}$","type":"string"},"object":{"const":"target_release","type":"string"},"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"version":{"description":"Immutable package version released from this Target.","type":"string"},"channel":{"enum":["stable","prerelease"],"type":"string"},"provider":{"description":"Delivery provider that accepted the release.","type":"string"},"repository":{"anyOf":[{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"type":"object"},{"type":"null"}]},"definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"delivery_revision":{"description":"Immutable provider-native revision that was merged or published.","type":"string"},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
123
+ {"resource":"targets","method":"retrieveRelease","command":["targets","retrieve-release"],"tool":"targets_retrieve_release","httpMethod":"GET","path":"/target_releases/{target_release_id}","summary":"Retrieve an immutable Target release","toolDescription":"Retrieve an immutable Target release. GET /target_releases/{target_release_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"target_release_id","ts":"targetReleaseId","kind":"path","type":"string","required":true,"flag":"target-release-id"}],"inputSchema":{"type":"object","properties":{"target_release_id":{"examples":["rel_7m2q8v4k1p9d5h6c"],"pattern":"^rel_[a-z0-9]{16}$","type":"string"}},"required":["target_release_id"]},"exampleArguments":{"target_release_id":"rel_7m2q8v4k1p9d5h6c"},"outputSchema":{"properties":{"id":{"examples":["rel_7m2q8v4k1p9d5h6c"],"pattern":"^rel_[a-z0-9]{16}$","type":"string"},"object":{"const":"target_release","type":"string"},"target_id":{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"version":{"description":"Immutable package version released from this Target.","type":"string"},"channel":{"enum":["stable","prerelease"],"type":"string"},"provider":{"description":"Delivery provider that accepted the release.","type":"string"},"repository":{"anyOf":[{"properties":{"provider":{"enum":["github"],"description":"GitHub is the only launch provider; the field is stable for future adapters.","type":"string"},"identifier":{"description":"Provider-native repository identity, opaque outside its adapter.","examples":["acme/payments-api"],"maxLength":512,"type":"string"}},"type":"object"},{"type":"null"}]},"definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"delivery_revision":{"description":"Immutable provider-native revision that was merged or published.","type":"string"},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
124
+ {"resource":"generations","method":"retrieve","command":["generations","retrieve"],"tool":"generations_retrieve","httpMethod":"GET","path":"/generations/{generation_id}","summary":"Retrieve a generation","description":"Includes the generated files when the generation succeeded.","toolDescription":"Retrieve a generation. Includes the generated files when the generation succeeded. GET /generations/{generation_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"generation_id","ts":"generationId","kind":"path","type":"string","required":true,"flag":"generation-id"}],"inputSchema":{"type":"object","properties":{"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"}},"required":["generation_id"]},"exampleArguments":{"generation_id":"gen_7h2p5d9c3m8w1k6q"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"object":{"const":"generation","type":"string"},"files_omitted":{"description":"Present and true when the generated target was too large to inline; files_index lists paths, fetche…","type":"boolean"},"files_index":{"items":{"type":"object"},"type":"array"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_revision_id":{"anyOf":[{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"status":{"enum":["succeeded","failed"],"type":"string"},"trigger":{"enum":["manual","webhook","poll","preview"],"type":"string"},"target_id":{"description":"Persisted Target identity.","anyOf":[{"description":"Stable identifier for one configured generated product.","examples":["tgt_5m8q2v7k1p9d4h6c"],"pattern":"^tgt_[a-z0-9]{16}$","type":"string"},{"type":"null"}]},"generator":{"enum":["typescript-sdk","python-sdk","go-sdk","cli","mcp"],"description":"Generator implementation selected by a Target.","type":"string"},"provenance":{"properties":{"generator_edition":{"description":"Pinned generator contract edition.","type":"string"},"engine_build":{"description":"Exact engine build identifier used for replay and support.","type":"string"},"resolved_config":{"description":"Immutable effective Target configuration used by this run; source credentials are never included.","type":["object","null"]},"config_hash":{"pattern":"^[a-f0-9]{64}$","type":["string","null"]},"surface_plan":{"description":"Resolved generator and entitlement plan used to select the emitted public surface.","type":["object","null"]},"surface_plan_hash":{"pattern":"^[a-f0-9]{64}$","type":["string","null"]},"entitlement_cap":{"minimum":1,"type":["integer","null"]},"package_version":{"type":["string","null"]}},"type":"object"},"meta":{"description":"Null only for a failed or legacy generation that produced no metadata.","anyOf":[{"type":"object"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array"},"files":{"description":"Present on retrieve and create; omitted in lists.","items":{"type":"object"},"type":"array"},"error":{"type":["string","null"]},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
125
+ {"resource":"generations","method":"retrieveFile","command":["generations","retrieve-file"],"tool":"generations_retrieve_file","httpMethod":"GET","path":"/generations/{generation_id}/file","summary":"Fetch one file from a generation","description":"Raw file content, for generations whose target was too large to inline (files_omitted true). The generation's files_index lists valid paths.","toolDescription":"Fetch one file from a generation. Raw file content, for generations whose target was too large to inline (files_omitted true). GET /generations/{generation_id}/file","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"generation_id","ts":"generationId","kind":"path","type":"string","required":true,"flag":"generation-id"},{"name":"path","ts":"path","kind":"query","type":"string","required":true,"description":"Repo-relative path inside the generated package.","flag":"path"}],"inputSchema":{"type":"object","properties":{"generation_id":{"description":"Unique identifier for a generation.","examples":["gen_7h2p5d9c3m8w1k6q"],"pattern":"^gen_[a-z0-9]{16}$","type":"string"},"path":{"type":"string","description":"Repo-relative path inside the generated package."}},"required":["generation_id","path"]},"exampleArguments":{"generation_id":"gen_7h2p5d9c3m8w1k6q","path":"openapi.yaml"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
126
+ {"resource":"definitionRevisions","method":"list","command":["definition-revisions","list"],"tool":"definition_revisions_list","httpMethod":"GET","path":"/definitions/{definition_id}/revisions","summary":"List Definition Revisions","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.","toolDescription":"List Definition Revisions. Immutable snapshots of the complete resolved document graph this Definition observed, newest first. GET /definitions/{definition_id}/revisions (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"definition_id","ts":"definitionId","kind":"path","type":"string","required":true,"flag":"definition-id"},{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."}},"required":["definition_id"]},"exampleArguments":{"definition_id":"def_2p8m4q7k1v9d6h3c"},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},"object":{"const":"definition_revision","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"format":{"enum":["openapi","graphql"],"type":"string"},"document_count":{"minimum":1,"type":"integer"},"documents":{"description":"Present on retrieve; list responses use document_count.","items":{"properties":{"id":{"description":"Unique identifier for a source document captured in a Definition Revision.","examples":["doc_8q2m5v1k9p4d7h3c"],"pattern":"^doc_[a-z0-9]{16}$","type":"string"},"role":{"enum":["entrypoint","reference"],"type":"string"},"coordinate":{"description":"Repository-relative path or same-origin URL captured in this revision.","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"minimum":0,"type":"integer"}},"type":"object"},"type":"array"},"sha256":{"description":"SHA-256 digest of every document coordinate, digest, and size in the resolved graph.","examples":["9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"],"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"description":"Total bytes across all source documents.","minimum":0,"type":"integer"},"source":{"description":"Origin recorded when this immutable revision was created.","anyOf":[{"anyOf":[{"type":"object"},{"type":"object"}]},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
127
+ {"resource":"definitionRevisions","method":"retrieve","command":["definition-revisions","retrieve"],"tool":"definition_revisions_retrieve","httpMethod":"GET","path":"/definition_revisions/{definition_revision_id}","summary":"Retrieve a Definition Revision","description":"Metadata for one immutable resolved document graph. Fetch its canonical content or individual source documents from the content endpoints.","toolDescription":"Retrieve a Definition Revision. Metadata for one immutable resolved document graph. GET /definition_revisions/{definition_revision_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"definition_revision_id","ts":"definitionRevisionId","kind":"path","type":"string","required":true,"flag":"definition-revision-id"}],"inputSchema":{"type":"object","properties":{"definition_revision_id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"}},"required":["definition_revision_id"]},"exampleArguments":{"definition_revision_id":"drev_6m1q8v4k2p9d7h3c"},"outputSchema":{"properties":{"id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},"object":{"const":"definition_revision","type":"string"},"project_id":{"description":"Unique identifier for a project.","examples":["prj_4f8k2m7x9q1v6b3n"],"pattern":"^prj_[a-z0-9]{16}$","type":"string"},"definition_id":{"description":"Unique identifier for a project's logical API Definition.","examples":["def_2p8m4q7k1v9d6h3c"],"pattern":"^def_[a-z0-9]{16}$","type":"string"},"format":{"enum":["openapi","graphql"],"type":"string"},"document_count":{"minimum":1,"type":"integer"},"documents":{"description":"Present on retrieve; list responses use document_count.","items":{"properties":{"id":{"description":"Unique identifier for a source document captured in a Definition Revision.","examples":["doc_8q2m5v1k9p4d7h3c"],"pattern":"^doc_[a-z0-9]{16}$","type":"string"},"role":{"enum":["entrypoint","reference"],"type":"string"},"coordinate":{"description":"Repository-relative path or same-origin URL captured in this revision.","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"minimum":0,"type":"integer"}},"type":"object"},"type":"array"},"sha256":{"description":"SHA-256 digest of every document coordinate, digest, and size in the resolved graph.","examples":["9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"],"pattern":"^[a-f0-9]{64}$","type":"string"},"size_bytes":{"description":"Total bytes across all source documents.","minimum":0,"type":"integer"},"source":{"description":"Origin recorded when this immutable revision was created.","anyOf":[{"anyOf":[{"properties":{"kind":{"const":"url","type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"},{"properties":{"kind":{"const":"repository","type":"string"},"repository":{"type":"object"},"path":{"description":"Repository-relative Definition entrypoint path.","type":"string"},"ref":{"description":"Git ref resolved for this revision, when recorded.","type":["string","null"]},"commit_sha":{"description":"Exact Git commit consumed, when recorded.","type":["string","null"]}},"type":"object"}]},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
128
+ {"resource":"definitionRevisions","method":"retrieveContent","command":["definition-revisions","retrieve-content"],"tool":"definition_revisions_retrieve_content","httpMethod":"GET","path":"/definition_revisions/{definition_revision_id}/content","summary":"Retrieve a Definition Revision's canonical content","description":"Returns the exact canonical resolved content identified by the revision's graph digest, suitable for saving or piping into a diff.","toolDescription":"Retrieve a Definition Revision's canonical content. Returns the exact canonical resolved content identified by the revision's graph digest, suitable for saving or piping into a diff. GET /definition_revisions/{definition_revision_id}/content","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"definition_revision_id","ts":"definitionRevisionId","kind":"path","type":"string","required":true,"flag":"definition-revision-id"}],"inputSchema":{"type":"object","properties":{"definition_revision_id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"}},"required":["definition_revision_id"]},"exampleArguments":{"definition_revision_id":"drev_6m1q8v4k2p9d7h3c"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
129
+ {"resource":"definitionRevisions","method":"retrieveDocumentContent","command":["definition-revisions","retrieve-document-content"],"tool":"definition_revisions_retrieve_document_content","httpMethod":"GET","path":"/definition_revisions/{definition_revision_id}/documents/{document_id}/content","summary":"Retrieve one source document from a Definition Revision","toolDescription":"Retrieve one source document from a Definition Revision. GET /definition_revisions/{definition_revision_id}/documents/{document_id}/content","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"definition_revision_id","ts":"definitionRevisionId","kind":"path","type":"string","required":true,"flag":"definition-revision-id"},{"name":"document_id","ts":"documentId","kind":"path","type":"string","required":true,"flag":"document-id"}],"inputSchema":{"type":"object","properties":{"definition_revision_id":{"description":"Unique identifier for an immutable resolved Definition Revision.","examples":["drev_6m1q8v4k2p9d7h3c"],"pattern":"^drev_[a-z0-9]{16}$","type":"string"},"document_id":{"description":"Unique identifier for a source document captured in a Definition Revision.","examples":["doc_8q2m5v1k9p4d7h3c"],"pattern":"^doc_[a-z0-9]{16}$","type":"string"}},"required":["definition_revision_id","document_id"]},"exampleArguments":{"definition_revision_id":"drev_6m1q8v4k2p9d7h3c","document_id":"doc_8q2m5v1k9p4d7h3c"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
130
+ {"resource":"account","method":"retrieve","command":["account","retrieve"],"tool":"account_retrieve","httpMethod":"GET","path":"/me","summary":"The account behind the presented credentials","description":"Returns the account that owns the presented API key. This is also the\nidentity endpoint the generated typeship CLI's `whoami` calls.","toolDescription":"The account behind the presented credentials. Returns the account that owns the presented API key. GET /me","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[],"inputSchema":{"type":"object","properties":{}},"exampleArguments":{},"outputSchema":{"description":"The organization an API key belongs to. Members share its projects, keys, and plan; sign-in identity is not part of the API.","properties":{"id":{"examples":["org_2x7k9m4q"],"pattern":"^org_[A-Za-z0-9]+$","type":"string"},"object":{"const":"account","type":"string"},"name":{"description":"The organization's display name.","type":"string"},"plan":{"enum":["free","pro","enterprise"],"type":"string"},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
131
+ {"resource":"apiKeys","method":"list","command":["api-keys","list"],"tool":"api_keys_list","httpMethod":"GET","path":"/api_keys","summary":"List API keys","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.","toolDescription":"List API keys. Keys are never returned in full — only their identity and last four. GET /api_keys (paginated: returns one page plus hasMore and nextPage arguments)","paginated":true,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":true,"select":false,"idempotent":true,"pagination":{"style":"cursor","itemsField":"data","cursorParam":"cursor","nextCursorField":"next_cursor","hasMoreField":"has_more","limitParam":"limit"},"auth":"required","security":[{"apiKey":[]}],"safety":"read","params":[{"name":"limit","ts":"limit","kind":"query","type":"number","required":false,"description":"Maximum number of resources to return. Default: 20.","flag":"limit"},{"name":"cursor","ts":"cursor","kind":"query","type":"string","required":false,"description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it.","flag":"cursor"}],"inputSchema":{"type":"object","properties":{"limit":{"default":20,"minimum":1,"maximum":100,"type":"integer","description":"Maximum number of resources to return. Default: 20."},"cursor":{"type":"string","description":"Opaque cursor from the preceding page's next_cursor. Valid only for the same account, operation, filters, and ordering that issued it."}}},"exampleArguments":{},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"properties":{"id":{"type":"string"},"object":{"const":"api_key","type":"string"},"name":{"type":"string"},"last4":{"description":"Last four characters of the secret; the secret itself is never stored.","type":"string"},"revoked":{"type":"boolean"},"last_used_at":{"format":"date-time","type":["string","null"]},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"}},"hasMore":{"type":"boolean","description":"Whether another page exists"},"nextPage":{"type":"object","description":"Arguments that fetch the next page; pass them to this tool","additionalProperties":true},"truncated":{"type":"object","description":"Present when the page was cut to fit the result size cap: how many items were omitted and how to get them","additionalProperties":true}}},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
132
+ {"resource":"apiKeys","method":"revoke","command":["api-keys","revoke"],"tool":"api_keys_revoke","httpMethod":"DELETE","path":"/api_keys/{api_key_id}","summary":"Revoke an API key","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.","toolDescription":"Revoke an API key. 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. DELETE /api_keys/{api_key_id}","paginated":false,"hasBody":false,"bodyStyle":"none","bodyKind":null,"sse":false,"hasParams":false,"select":false,"idempotent":true,"auth":"required","security":[{"apiKey":[]}],"safety":"destructive","params":[{"name":"api_key_id","ts":"apiKeyId","kind":"path","type":"string","required":true,"description":"Accepts an ID or an exact name (resolved via api_keys_list). IDs come from api_keys_list.","flag":"api-key-id","resolve":{"via":"api_keys_list","match":["name"],"id":"id","inferred":true}}],"inputSchema":{"type":"object","properties":{"api_key_id":{"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.","type":"string","examples":["example-name"]}},"required":["api_key_id"]},"exampleArguments":{"api_key_id":"api_key_123"},"outputSchema":{"properties":{"id":{"type":"string"},"object":{"const":"api_key","type":"string"},"name":{"type":"string"},"last4":{"description":"Last four characters of the secret; the secret itself is never stored.","type":"string"},"revoked":{"type":"boolean"},"last_used_at":{"format":"date-time","type":["string","null"]},"created_at":{"format":"date-time","type":"string"},"request_id":{"description":"Server-generated identifier used to correlate this response with Typeship logs.","examples":["req_3k8m1v6q9p2d7h4c"],"pattern":"^req_[a-z0-9]{16}$","type":"string"}},"type":"object"},"credentialOptions":[["bearerToken"],["credentials.apiKey"]]},
133
+ ];
134
+
135
+ /** Operations present in the API Definition but omitted by this
136
+ * generation's operation cap. Kept deliberately small: enough for honest
137
+ * discovery and PLAN_LIMIT errors, never enough to call an absent method. */
138
+ export type OmittedOpSpec = Pick<OpSpec,
139
+ "resource" | "method" | "command" | "commandAlias" | "tool" | "httpMethod" |
140
+ "path" | "summary" | "description" | "toolDescription" | "paginated" |
141
+ "select" | "safety" | "auth" | "security" | "params" | "inputSchema"
142
+ >;
143
+
144
+ export const OMITTED_OPS: OmittedOpSpec[] = [
145
+
107
146
  ];
108
147
 
109
148
  /** Parameters settable once on the client (globals option): CLI/MCP fill