From c9f97fa951ee7d88e861d18bc8eba4f296f107a9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Oct 2026 09:21:39 +0000 Subject: [PATCH] Version Packages --- .changeset/mcp-oauth-discovery.md | 50 --------------------------- .changeset/mcp-upstream-header.md | 16 --------- packages/mcp-server/CHANGELOG.md | 56 +++++++++++++++++++++++++++++++ packages/mcp-server/package.json | 4 +-- packages/node/CHANGELOG.md | 16 +++++++++ packages/node/package.json | 2 +- packages/transloadit/package.json | 2 +- yarn.lock | 4 +-- 8 files changed, 78 insertions(+), 72 deletions(-) delete mode 100644 .changeset/mcp-oauth-discovery.md delete mode 100644 .changeset/mcp-upstream-header.md diff --git a/.changeset/mcp-oauth-discovery.md b/.changeset/mcp-oauth-discovery.md deleted file mode 100644 index 34ff0958..00000000 --- a/.changeset/mcp-oauth-discovery.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -"@transloadit/mcp-server": minor ---- - -Let MCP clients connect to the hosted server by URL and satisfy the ChatGPT plugin and Claude -connector requirements. - -- Hosted mode (`TRANSLOADIT_MCP_RESOURCE_METADATA_URL`) requires `TRANSLOADIT_MCP_UPSTREAM_SECRET` - and refuses to start without it, so a missing production secret fails the deploy's health check - instead of every authenticated tool call. -- Hosted mode (`TRANSLOADIT_MCP_RESOURCE_METADATA_URL`): unauthenticated requests get a `401` with - `WWW-Authenticate: Bearer resource_metadata="…"`, browser Origins are limited to ChatGPT, Claude, - Transloadit and loopback (overridable with `allowedOrigins`), and the server card advertises - OAuth. Self-hosted `TRANSLOADIT_MCP_TOKEN` behavior is unchanged. -- Every tool carries a title, `readOnlyHint`/`destructiveHint`/`openWorldHint`/`idempotentHint` - annotations (only Assembly creation is destructive) and per-tool `securitySchemes`, also in - `_meta.securitySchemes`, that match the deployment: `oauth2` with each tool's full scopes when - hosted, `noauth` where the server holds an Auth Key or a tool needs no account. Auth failures return `isError` results with - `_meta["mcp/www_authenticate"]` so hosts show their account-linking UI. -- Behavior change for self-hosted servers without credentials: account tools now return an - `isError` result with `mcp_missing_auth` and a hint naming `TRANSLOADIT_KEY`/`TRANSLOADIT_SECRET` - (`transloadit_list_templates` no longer adds an empty `templates` list to that error). -- Behavior change for Express mounts: explicit `allowedOrigins` are now enforced by the router - (wildcards `*.` and `:*` supported) even without DNS rebinding protection, so other browser - Origins get HTTP 403 and allowed ones receive CORS headers. -- `transloadit_create_assembly` with `expected_uploads` returns `upload_instructions`: per file the - tus endpoint, metadata and a credential-free `curl` command (tus creation-with-upload), so agents - can upload files that exist only in their sandbox, then call `transloadit_wait_for_assembly`. - `expected_uploads` now accepts at most 100; larger values are rejected before an Assembly is - created. -- New `transloadit_get_profile` tool (`_meta["openai/profile"]`) returns the Workspace behind the - credentials for multi-account hosts. -- `transloadit_create_assembly` accepts ChatGPT-attached files through `attachments` - (`_meta["openai/fileParams"]`), mapped onto the existing URL-input path. -- MCP Apps result widget `ui://transloadit/assembly-result` with previews, download links and a - Save as Template shortcut, linked from the Assembly tools with `_meta.ui.resourceUri`. -- `plugin.json`, `mcp.json` and `.codex-plugin/plugin.json` describe the ChatGPT and Codex plugin. -- Hosted mode serves JSON responses and turns an upstream rejection of the forwarded token into - HTTP 401 (`invalid_token`) or 403 (`insufficient_scope` with the tool's scopes), so OAuth clients - refresh or re-scope instead of retrying a dead token. -- Request bodies are capped (1 MiB hosted, 10 MiB self-hosted, `maxRequestBodyBytes`) and larger - ones get HTTP 413 without being buffered. URL inputs the server downloads are capped - (`maxUrlDownloadBytes`, `urlDownloadTimeoutMs`), and hosted tokens are checked before downloading. -- Hosted mode also challenges bare `GET /mcp` probes (Codex discovers OAuth from them); CORS now - allows `Mcp-Protocol-Version` so browser hosts can connect. -- Self-hosted servers sign with `TRANSLOADIT_SIGNATURE_ALGORITHM` (`sha1`, `sha256` or `sha384`), - so Console keys that require `sha256` work; mismatches return an actionable - `mcp_invalid_signature` hint. -- The widget speaks the MCP Apps `2026-01-26` handshake (`appInfo`), shows failed tool calls, and - allows `https://*.r2.dev` result URLs; `TRANSLOADIT_MCP_RESULT_DOMAINS` overrides its CSP. diff --git a/.changeset/mcp-upstream-header.md b/.changeset/mcp-upstream-header.md deleted file mode 100644 index c3c2be66..00000000 --- a/.changeset/mcp-upstream-header.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@transloadit/node": minor -"transloadit": minor ---- - -Add an `extraHeaders` client option so trusted relays such as the hosted MCP service can send a -fixed header (`Transloadit-Mcp-Upstream`) with every API request next to a forwarded bearer token. -Like `Authorization`, these headers are dropped when a redirect leaves the API origin. - -`listTemplates()` also accepts `fields`, for API2 columns such as `account_id` that the default -Template list omits. - -`prepareInputFiles()` accepts `maxUrlDownloadBytes` (a total for the call) and `urlDownloadTimeoutMs` -(one deadline per download, redirects included) to bound URL downloads and `beforeUrlDownload` to vouch for a requester before a file is fetched locally; its -download errors name only a URL's origin and path, never presigned query parameters. -`createAssembly()` accepts `onAssemblyCreated`, called once API2 accepted the creation request. diff --git a/packages/mcp-server/CHANGELOG.md b/packages/mcp-server/CHANGELOG.md index 82c79acf..b09af6d8 100644 --- a/packages/mcp-server/CHANGELOG.md +++ b/packages/mcp-server/CHANGELOG.md @@ -1,5 +1,61 @@ # @transloadit/mcp-server +## 0.5.0 + +### Minor Changes + +- 8b0c308: Let MCP clients connect to the hosted server by URL and satisfy the ChatGPT plugin and Claude + connector requirements. + + - Hosted mode (`TRANSLOADIT_MCP_RESOURCE_METADATA_URL`) requires `TRANSLOADIT_MCP_UPSTREAM_SECRET` + and refuses to start without it, so a missing production secret fails the deploy's health check + instead of every authenticated tool call. + - Hosted mode (`TRANSLOADIT_MCP_RESOURCE_METADATA_URL`): unauthenticated requests get a `401` with + `WWW-Authenticate: Bearer resource_metadata="…"`, browser Origins are limited to ChatGPT, Claude, + Transloadit and loopback (overridable with `allowedOrigins`), and the server card advertises + OAuth. Self-hosted `TRANSLOADIT_MCP_TOKEN` behavior is unchanged. + - Every tool carries a title, `readOnlyHint`/`destructiveHint`/`openWorldHint`/`idempotentHint` + annotations (only Assembly creation is destructive) and per-tool `securitySchemes`, also in + `_meta.securitySchemes`, that match the deployment: `oauth2` with each tool's full scopes when + hosted, `noauth` where the server holds an Auth Key or a tool needs no account. Auth failures return `isError` results with + `_meta["mcp/www_authenticate"]` so hosts show their account-linking UI. + - Behavior change for self-hosted servers without credentials: account tools now return an + `isError` result with `mcp_missing_auth` and a hint naming `TRANSLOADIT_KEY`/`TRANSLOADIT_SECRET` + (`transloadit_list_templates` no longer adds an empty `templates` list to that error). + - Behavior change for Express mounts: explicit `allowedOrigins` are now enforced by the router + (wildcards `*.` and `:*` supported) even without DNS rebinding protection, so other browser + Origins get HTTP 403 and allowed ones receive CORS headers. + - `transloadit_create_assembly` with `expected_uploads` returns `upload_instructions`: per file the + tus endpoint, metadata and a credential-free `curl` command (tus creation-with-upload), so agents + can upload files that exist only in their sandbox, then call `transloadit_wait_for_assembly`. + `expected_uploads` now accepts at most 100; larger values are rejected before an Assembly is + created. + - New `transloadit_get_profile` tool (`_meta["openai/profile"]`) returns the Workspace behind the + credentials for multi-account hosts. + - `transloadit_create_assembly` accepts ChatGPT-attached files through `attachments` + (`_meta["openai/fileParams"]`), mapped onto the existing URL-input path. + - MCP Apps result widget `ui://transloadit/assembly-result` with previews, download links and a + Save as Template shortcut, linked from the Assembly tools with `_meta.ui.resourceUri`. + - `plugin.json`, `mcp.json` and `.codex-plugin/plugin.json` describe the ChatGPT and Codex plugin. + - Hosted mode serves JSON responses and turns an upstream rejection of the forwarded token into + HTTP 401 (`invalid_token`) or 403 (`insufficient_scope` with the tool's scopes), so OAuth clients + refresh or re-scope instead of retrying a dead token. + - Request bodies are capped (1 MiB hosted, 10 MiB self-hosted, `maxRequestBodyBytes`) and larger + ones get HTTP 413 without being buffered. URL inputs the server downloads are capped + (`maxUrlDownloadBytes`, `urlDownloadTimeoutMs`), and hosted tokens are checked before downloading. + - Hosted mode also challenges bare `GET /mcp` probes (Codex discovers OAuth from them); CORS now + allows `Mcp-Protocol-Version` so browser hosts can connect. + - Self-hosted servers sign with `TRANSLOADIT_SIGNATURE_ALGORITHM` (`sha1`, `sha256` or `sha384`), + so Console keys that require `sha256` work; mismatches return an actionable + `mcp_invalid_signature` hint. + - The widget speaks the MCP Apps `2026-01-26` handshake (`appInfo`), shows failed tool calls, and + allows `https://*.r2.dev` result URLs; `TRANSLOADIT_MCP_RESULT_DOMAINS` overrides its CSP. + +### Patch Changes + +- Updated dependencies [8b0c308] + - @transloadit/node@5.2.0 + ## 0.4.2 ### Patch Changes diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index a5ca0641..1ee453bc 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@transloadit/mcp-server", - "version": "0.4.2", + "version": "0.5.0", "description": "Transloadit MCP server", "keywords": [ "mcp", @@ -62,7 +62,7 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", - "@transloadit/node": "^5.1.0", + "@transloadit/node": "^5.2.0", "@transloadit/sev-logger": "^0.1.9", "express": "^5.2.1", "prom-client": "^15.1.3", diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index 313f50e2..04024096 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -1,5 +1,21 @@ # @transloadit/node +## 5.2.0 + +### Minor Changes + +- 8b0c308: Add an `extraHeaders` client option so trusted relays such as the hosted MCP service can send a + fixed header (`Transloadit-Mcp-Upstream`) with every API request next to a forwarded bearer token. + Like `Authorization`, these headers are dropped when a redirect leaves the API origin. + + `listTemplates()` also accepts `fields`, for API2 columns such as `account_id` that the default + Template list omits. + + `prepareInputFiles()` accepts `maxUrlDownloadBytes` (a total for the call) and `urlDownloadTimeoutMs` + (one deadline per download, redirects included) to bound URL downloads and `beforeUrlDownload` to vouch for a requester before a file is fetched locally; its + download errors name only a URL's origin and path, never presigned query parameters. + `createAssembly()` accepts `onAssemblyCreated`, called once API2 accepted the creation request. + ## 5.1.0 ### Minor Changes diff --git a/packages/node/package.json b/packages/node/package.json index 591a73a8..bfaeb7f8 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@transloadit/node", - "version": "5.1.0", + "version": "5.2.0", "description": "Node.js SDK for Transloadit", "homepage": "https://github.com/transloadit/node-sdk/tree/main/packages/node", "bugs": { diff --git a/packages/transloadit/package.json b/packages/transloadit/package.json index a60e2471..54aec950 100644 --- a/packages/transloadit/package.json +++ b/packages/transloadit/package.json @@ -1,6 +1,6 @@ { "name": "transloadit", - "version": "5.1.0", + "version": "5.2.0", "description": "Node.js SDK for Transloadit", "homepage": "https://github.com/transloadit/node-sdk/tree/main/packages/node", "bugs": { diff --git a/yarn.lock b/yarn.lock index c8de06bf..2638c1f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1607,7 +1607,7 @@ __metadata: resolution: "@transloadit/mcp-server@workspace:packages/mcp-server" dependencies: "@modelcontextprotocol/sdk": "npm:^1.29.0" - "@transloadit/node": "npm:^5.1.0" + "@transloadit/node": "npm:^5.2.0" "@transloadit/sev-logger": "npm:^0.1.9" "@types/express": "npm:^5.0.6" "@types/node": "npm:^25.8.0" @@ -1621,7 +1621,7 @@ __metadata: languageName: unknown linkType: soft -"@transloadit/node@npm:^5.1.0, @transloadit/node@workspace:packages/node": +"@transloadit/node@npm:^5.2.0, @transloadit/node@workspace:packages/node": version: 0.0.0-use.local resolution: "@transloadit/node@workspace:packages/node" dependencies: