From 0c5fd0e37882d845b2e67556ddc77ad4bd404d67 Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Sun, 12 Jul 2026 14:53:24 -0400 Subject: [PATCH 1/7] Add Unstructured Transform MCP integration --- docs/integrations/assets/unstructured.png | Bin 0 -> 30708 bytes docs/integrations/unstructured.md | 124 ++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 docs/integrations/assets/unstructured.png create mode 100644 docs/integrations/unstructured.md diff --git a/docs/integrations/assets/unstructured.png b/docs/integrations/assets/unstructured.png new file mode 100644 index 0000000000000000000000000000000000000000..7355fbc10a26338c9ef7076fa42f7cc9e5936927 GIT binary patch literal 30708 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
  • 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 + Supported in ADKPython + + +The [Unstructured Transform MCP Server](https://docs.unstructured.io/transform/overview) +connects your ADK agent to [Unstructured](https://unstructured.io), a document +processing platform that turns raw files into structured, AI-ready data. This +integration gives your agent the ability to parse PDFs, Office documents, +emails, images, and scanned files — 60+ +[supported file types](https://docs.unstructured.io/transform/supported-file-types) +in total — into partitioned, enriched, chunked, and embedded output using +natural language. Transform is a hosted remote MCP server, so there is nothing +to install or run locally. + +## Use cases + +- **RAG ingestion**: Parse heterogeneous document collections into clean, + chunked, embedding-ready output for vector stores and retrieval pipelines. + +- **Document Q&A agents**: Let an agent fetch and parse a contract, report, or + paper on demand, then answer questions grounded in the parsed content. + +- **Format normalization**: Convert mixed inputs — scanned PDFs, spreadsheets, + presentations, email threads — into one consistent structured representation. + +- **OCR at agent runtime**: Extract text and structure from images and scanned + documents as a step inside a larger agent workflow. + +## Prerequisites + +- An [Unstructured account](https://transform.unstructured.io) and API key. + See [Get your API key](https://docs.unstructured.io/transform/code#get-your-unstructured-api-key-and-url). +- Python 3.10 or later. + +## Installation + +Install ADK with the `mcp` extra. The extra is required — without it, ADK's +MCP classes are not importable: + +```bash +pip install "google-adk[mcp]" +``` + +## Use with agent + +The server authenticates with your Unstructured API key as a bearer token on +every request, including the initial handshake: + +```python +import os + +from google.adk.agents import Agent +from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams + +root_agent = Agent( + model="gemini-flash-latest", + name="transform_agent", + instruction=( + "You parse documents with the Unstructured Transform MCP server. " + "Pass public https:// file URLs straight to transform_files. It " + "returns a job_id; poll with check_transform_status, waiting about " + "30 seconds between checks - jobs take 30 seconds to a few minutes. " + "When the job completes, call get_transform_results and report the " + "parsed content back to the user." + ), + tools=[ + McpToolset( + connection_params=StreamableHTTPConnectionParams( + url="https://mcp.transform.unstructured.io", # root URL - do not append /mcp + headers={ + "Authorization": f"Bearer {os.environ['UNSTRUCTURED_API_KEY']}", + }, + timeout=30.0, # ADK's 5s default is too short for a remote handshake + sse_read_timeout=300.0, + ), + tool_filter=[ + "request_file_upload_url", + "transform_files", + "check_transform_status", + "get_transform_results", + ], + ) + ], +) +``` + +!!! note + + Transforming a document is asynchronous: `transform_files` starts a job, + the agent polls `check_transform_status`, and `get_transform_results` + returns pre-signed download URLs for the output. Instruct your agent to + pause between status checks, as shown above, so a polling loop does not + burn through model rate limits. + + To parse **local** files, the agent also needs a plain function tool that + HTTP `PUT`s the file bytes to the pre-signed URL returned by + `request_file_upload_url` (this upload is not an MCP call, and it must not + send the `Authorization` header). A complete agent with the upload and + wait helpers is in the + [Unstructured Transform ADK guide](https://docs.unstructured.io/transform/install/google-adk). + +## Available tools + +Tool | Description +---- | ----------- +`request_file_upload_url` | Returns a pre-signed upload URL and file reference for a local file. +`transform_files` | Starts a parsing job for uploaded files or public HTTP(S) URLs; returns a `job_id`. +`check_transform_status` | Reports whether a job is `SCHEDULED`, `IN_PROGRESS`, or `COMPLETED`. +`get_transform_results` | Returns the parsed output and pre-signed download URLs for a completed job. + +## Resources + +- [Unstructured Transform documentation](https://docs.unstructured.io/transform/overview) +- [ADK installation guide for Unstructured Transform](https://docs.unstructured.io/transform/install/google-adk) +- [Supported file types](https://docs.unstructured.io/transform/supported-file-types) From 40bcc9e291a6a390d477a7a389c1eb0d6968a2af Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Sun, 12 Jul 2026 15:08:22 -0400 Subject: [PATCH 2/7] Add pacing helper, env setup, and Gemini key prerequisite from review --- docs/integrations/unstructured.md | 39 +++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/docs/integrations/unstructured.md b/docs/integrations/unstructured.md index 85949040e..c39c5a4c0 100644 --- a/docs/integrations/unstructured.md +++ b/docs/integrations/unstructured.md @@ -39,6 +39,7 @@ to install or run locally. - An [Unstructured account](https://transform.unstructured.io) and API key. See [Get your API key](https://docs.unstructured.io/transform/code#get-your-unstructured-api-key-and-url). +- A [Gemini API key](https://aistudio.google.com/apikey) for the agent's model. - Python 3.10 or later. ## Installation @@ -52,27 +53,55 @@ pip install "google-adk[mcp]" ## Use with agent +Set your API keys as environment variables: + +```bash +export UNSTRUCTURED_API_KEY="" +export GOOGLE_API_KEY="" +export GOOGLE_GENAI_USE_VERTEXAI=FALSE +``` + The server authenticates with your Unstructured API key as a bearer token on -every request, including the initial handshake: +every request, including the initial handshake. The `wait_seconds` helper lets +the agent pause between status checks, because parsing jobs run asynchronously: ```python import os +import time from google.adk.agents import Agent from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams + +def wait_seconds(seconds: int) -> dict: + """Pause before the next status check. Use 30 seconds unless told otherwise. + + Args: + seconds: How long to wait. + + Returns: + dict confirming the wait. + """ + seconds = max(1, min(int(seconds), 120)) + time.sleep(seconds) + return {"waited_seconds": seconds} + + root_agent = Agent( model="gemini-flash-latest", name="transform_agent", instruction=( "You parse documents with the Unstructured Transform MCP server. " "Pass public https:// file URLs straight to transform_files. It " - "returns a job_id; poll with check_transform_status, waiting about " - "30 seconds between checks - jobs take 30 seconds to a few minutes. " - "When the job completes, call get_transform_results and report the " - "parsed content back to the user." + "returns a job_id; poll with check_transform_status, calling " + "wait_seconds(30) between checks - jobs take 30 seconds to a few " + "minutes. When the job completes, call get_transform_results and " + "report the parsed content back to the user. If asked to parse a " + "local file, explain that this requires the upload helper from the " + "Unstructured ADK guide." ), tools=[ + wait_seconds, McpToolset( connection_params=StreamableHTTPConnectionParams( url="https://mcp.transform.unstructured.io", # root URL - do not append /mcp From 87125898d96792aafeec7beb1e81849cf70d2564 Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Tue, 14 Jul 2026 08:52:26 -0400 Subject: [PATCH 3/7] Re-trigger CLA check after signing From b1d7f03aa69867c2d1808b4ca103b9f701844a71 Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Tue, 14 Jul 2026 09:03:02 -0400 Subject: [PATCH 4/7] Use the blue Unstructured logo for the integration icon --- docs/integrations/assets/unstructured.png | Bin 30708 -> 14909 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/integrations/assets/unstructured.png b/docs/integrations/assets/unstructured.png index 7355fbc10a26338c9ef7076fa42f7cc9e5936927..a6ec855b65cf71ec86b4d156d9b7acdee1c9b60d 100644 GIT binary patch literal 14909 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 GzyA-M@+AZS literal 30708 zcmeFZWl$tRv?dA+Fu1$ByE}u^xD0MX6IimJ-WEXm3`dCvEJr^A&Lq!8io;K0DZ5CPKSDqvvXv7ZYJ1gHdgJud^a0(Vl8 z5(TTCA~*)^h?{5vOy%Xl=s?>rVBnz^V340xKnosd0R#Jz3l8=LvAmqm<)~WfF?}tHuj$tzy#d+K$|uu&W0rJHrBRI zeC~o||51YvwEbDkOh)n_Rh+E^$u#AaNW|NCX^>P5D&BCI72A zXit#L+}YWlkD1xc&5g;8oypG8jG2{}mzSA^jhT&&5mbZG$-~y!(4EoNiTpoL@;}cb zZsKI*XkqVcVP{M7d0s=Hor|*|8QJHB{`>cz_i5s8@xQKQ>-1lb1$sc{&m+vNOf1a* zeQr=wfzMJtF*|EJM^$@6BNHK3f&ZxZzZdabJu(14B zqyOiT|JRmU|Hqd9+mZijDZu>sxc}SZ|7YL+M=7Xth2R93|NBJ=!KqyT+yevq1_lrp z`R)#Wy6%>Fr=cu-N!_b&m(6P^$PCWwjz4ID~b2CaN9l8mry4iyD~va2v$Mj1g~ ztPlpWC>Uuw{C30Zqti`zbZ@-V?V{o3wDb3a?ZK;qYnRi(MB39t=2P-Zr`yNo$H^iL z2gI*$L6zbYkpknzB~rH~;UjjHgkbRLUBNXpXEu%gR<5>CnRa3qyc*C$ z+hVdX$)HW^KDMB4Hih!s$RGk4_x`%)&{t>sw_d z9$H<_-(v;0_RCp3zR)7Gqho>0u?WwKl=m&(z4;lc@H~a;U&hi=%X?@#ygui!++t?_ z6*v-xJ8vfjA1kEA{oA73Fqq(PHNJQB1^IX52JenETng|dZOV~T1CX4uCB!*AP6|;m z+R3$~L)6Fm%wo$SkO-qODb%RN=T%i#)hk}Y*v#J23ZiO`$B!7p@f{`gK_sBDxrEKg z9L6#o2!zE2YpRKelw=ow*V1#=^#FkRT2OG}efLJ%$=$`?-UC<lXSU)zBw5Dq#{C2E3 z?R~)hvGr9L1xNMrw%&M5LcI@wCeo15yx}n|FFqFuJ*kZcY_6^~k!;`MlWT+p$6cU5S9`GUwkv97lQJfYblO zJ-H!sFal{GCjikqEj|aIlj^+io2pj`dnWiHweS-FD1(pBRqnL9ujt8AcUD|E?2j5Y z?R(#_xdqML+5^QzLKMPQj-7GgbKzyi_a{yNCVj~pG^(&m5ag$!+2SSrYh0?V^!DjA zo@Qfwjq#$o-di|Kldgsa}=QP6IhxVAa+00n2sr*N*BCd(f#cndnK&N(e5y#Ey7PWnqL%(J5xQ|_?Y zIHYA%sx;VJx&R%BuX?@;&DMU>6fulWB?@fk&D10Ef^!w zBFpnG#5~16Dv^xP@GGmeW;y$or(Bz*gr8^KTKfsnPzAd%;gc(~#l#@{w%LLoUtR9b zex`VRlnCt8emwYnU?V0XzhHY!d zEf+KoqVjArH1a^p*FoNHQRPaJ$Jc~Kh|KcD0YoWSRLhgXlgc=`CknkNJC!GAbahNr zD#!8x4!(#w6D)hADUs3Rx(964RS?Rj2oR8>vD|_X!G&rtI5Nb5KZK5JX}sPLI$K@> z<=IU~ecN*>UAIm-FKert@As@!1*k|2peamDU~pTun$qLvmpUD>1Ib;9cqlK zpw|O&zB`csE7hl#;9&{JA;6>2ARyufrA$fXl_cj{AaAuJr<9(QeLSQ&7$|XWe_5{4 z`42RiT?Zlyr3MmgCn~?ThAf&_4A797aB~Awsi42UeST+$0*AboSY5~Wu8s07mI(!m zGG!_Rvs!U6E-HCBF`iX?E_uY#f~Y-b2`>wkenQe>Lx8Vql?g;__+4XvseiWKrLkIGNaR(tQ$Z$3@AnF@64 zrVbS7X8cV^ZSKsjrIqx^YI~kZL*qj}c96UBjiLq;L8#dBMbkRjXf2_I|3IjyU|_2y z=r}@JEmhCXo*pjd8FDnKla%GU*pR)jpHx9=g$d)WsHeU(v$kZ`Xk4$i+bYDiyuI8* zA^+f8regttM4Q$kg@u;I#&)oOu9)P2gAcUPO*N0tOFYFZ!lDi)Y5)_F((wqL84H=K z9T}MOmf=Ai;5E$prl9Mvnr4k(M@nEpH@gmj(}b*N=(B^K;|^LL zLV{!HkQ0bPw+NK9&Lf=XDF%j%+e*H1$D5AUafn&wtFK!MJk(6>ofAz66+y{s3_%lt z#IHZ>xVleGm>WpXSval9aqrD6$WqrF8n@TKK%j& ziKy=T4&Y&xHr_d?=mmpwRY$Q(N&?xv=SyOnqR&57)@*^M8++r@KkW+C)9yp;Xpx4R zv*pO+5|bDYeaJpXVm<{%Je}tIrv@K)1_rM?*wh0ZrUF@bYiQ^5CMo${?{Two)PXom zdY0J9M**Cq9OGzx6uOSllL~p|Nm1f2DyUswM{}Mg%%XV@a5l3WkQ2JXbfx4jy#pEG zlMwMU+rb@7*&oqTT7xPEb@>P4P5}|tBStZT_ZJ`U7j73Dgqq&nj(lQ${vxXC@=NRKITjymB1w~#ZWgjr&_ z4nt{TKecAHf>|rzs}n=wT>6>oC_42g=Zp_|r#+^q1&;yQFFZ!OEC_!NmI`)@h0x7R z?kjHx_=}|MagV2%UKqXD3Kktp>6Yu5s9B%#i?mI?6Nk;i7__|Z3cv4igJO&gTeq`g z#@LU?m=6*HK*fxtW(@lc7JF$Eih+3HqNowyyyZHM*xd1Osk)d%nDquF)r5mLo;1=6 zOFsZ_E3uhO=8z11T(34{R?j%GrKfqX6iDGv)G8Pi*g9XtbeB3TKsEaBTD(iBDrN1ng5i<0M=hq5|+d? zctT%Xz_joXes>o&p?pm4yUx9t^Pc@q;=YM%uXglb#0HQ2!RytHDJF>ohu?W_&v(E= zFSy_92NP4ov$Z3%wtwoAt=5#YXP}_C^$fORc|q0&+ZQEF^B{f1isRu9F4@4!eN

  • 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 Date: Tue, 14 Jul 2026 09:38:07 -0400 Subject: [PATCH 5/7] Note that the agent can retry a weak parse with the hi_res strategy --- docs/integrations/unstructured.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/integrations/unstructured.md b/docs/integrations/unstructured.md index c39c5a4c0..fe565427d 100644 --- a/docs/integrations/unstructured.md +++ b/docs/integrations/unstructured.md @@ -96,7 +96,11 @@ root_agent = Agent( "returns a job_id; poll with check_transform_status, calling " "wait_seconds(30) between checks - jobs take 30 seconds to a few " "minutes. When the job completes, call get_transform_results and " - "report the parsed content back to the user. If asked to parse a " + "report the parsed content back to the user. transform_files " + "accepts an optional stages config; it auto-selects a parse " + "strategy by default, but if the output looks low quality " + "(garbled text or lost tables), re-run the file with a hi_res " + "partition strategy for a cleaner result. If asked to parse a " "local file, explain that this requires the upload helper from the " "Unstructured ADK guide." ), From a6c912ff68e781315f2954c28c0bb59f9b6a38f8 Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Tue, 14 Jul 2026 09:59:04 -0400 Subject: [PATCH 6/7] formatting changes --- docs/integrations/unstructured.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/integrations/unstructured.md b/docs/integrations/unstructured.md index fe565427d..6d5adf861 100644 --- a/docs/integrations/unstructured.md +++ b/docs/integrations/unstructured.md @@ -1,6 +1,6 @@ --- catalog_title: Unstructured -catalog_description: Parse PDFs, Office docs, images, and 60+ file types into structured, AI-ready data +catalog_description: Parse PDFs, Office docs, images, and 40+ file types into structured, AI-ready data catalog_icon: /integrations/assets/unstructured.png catalog_tags: ["mcp"] --- @@ -15,9 +15,9 @@ The [Unstructured Transform MCP Server](https://docs.unstructured.io/transform/o connects your ADK agent to [Unstructured](https://unstructured.io), a document processing platform that turns raw files into structured, AI-ready data. This integration gives your agent the ability to parse PDFs, Office documents, -emails, images, and scanned files — 60+ +emails, images, and scanned files - 40+ [supported file types](https://docs.unstructured.io/transform/supported-file-types) -in total — into partitioned, enriched, chunked, and embedded output using +in total - into partitioned, enriched, chunked, and embedded output using natural language. Transform is a hosted remote MCP server, so there is nothing to install or run locally. @@ -29,8 +29,8 @@ to install or run locally. - **Document Q&A agents**: Let an agent fetch and parse a contract, report, or paper on demand, then answer questions grounded in the parsed content. -- **Format normalization**: Convert mixed inputs — scanned PDFs, spreadsheets, - presentations, email threads — into one consistent structured representation. +- **Format normalization**: Convert mixed inputs - scanned PDFs, spreadsheets, + presentations, email threads - into one consistent structured representation. - **OCR at agent runtime**: Extract text and structure from images and scanned documents as a step inside a larger agent workflow. @@ -44,7 +44,7 @@ to install or run locally. ## Installation -Install ADK with the `mcp` extra. The extra is required — without it, ADK's +Install ADK with the `mcp` extra. The extra is required - without it, ADK's MCP classes are not importable: ```bash From d20009a3222269bb57e64be17c6c5c9fb74331a1 Mon Sep 17 00:00:00 2001 From: Simon Coombes Date: Tue, 14 Jul 2026 13:38:25 -0400 Subject: [PATCH 7/7] Adopt nested tab convention, make wait helper async, replace hyphen asides --- docs/integrations/unstructured.md | 128 +++++++++++++++--------------- 1 file changed, 66 insertions(+), 62 deletions(-) diff --git a/docs/integrations/unstructured.md b/docs/integrations/unstructured.md index 6d5adf861..cb1aee54a 100644 --- a/docs/integrations/unstructured.md +++ b/docs/integrations/unstructured.md @@ -15,9 +15,9 @@ The [Unstructured Transform MCP Server](https://docs.unstructured.io/transform/o connects your ADK agent to [Unstructured](https://unstructured.io), a document processing platform that turns raw files into structured, AI-ready data. This integration gives your agent the ability to parse PDFs, Office documents, -emails, images, and scanned files - 40+ +emails, images, and scanned files (40+ [supported file types](https://docs.unstructured.io/transform/supported-file-types) -in total - into partitioned, enriched, chunked, and embedded output using +in total) into partitioned, enriched, chunked, and embedded output using natural language. Transform is a hosted remote MCP server, so there is nothing to install or run locally. @@ -29,8 +29,8 @@ to install or run locally. - **Document Q&A agents**: Let an agent fetch and parse a contract, report, or paper on demand, then answer questions grounded in the parsed content. -- **Format normalization**: Convert mixed inputs - scanned PDFs, spreadsheets, - presentations, email threads - into one consistent structured representation. +- **Format normalization**: Convert mixed inputs (scanned PDFs, spreadsheets, + presentations, email threads) into one consistent structured representation. - **OCR at agent runtime**: Extract text and structure from images and scanned documents as a step inside a larger agent workflow. @@ -44,7 +44,7 @@ to install or run locally. ## Installation -Install ADK with the `mcp` extra. The extra is required - without it, ADK's +Install ADK with the `mcp` extra. The extra is required; without it, ADK's MCP classes are not importable: ```bash @@ -65,66 +65,70 @@ The server authenticates with your Unstructured API key as a bearer token on every request, including the initial handshake. The `wait_seconds` helper lets the agent pause between status checks, because parsing jobs run asynchronously: -```python -import os -import time - -from google.adk.agents import Agent -from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams - - -def wait_seconds(seconds: int) -> dict: - """Pause before the next status check. Use 30 seconds unless told otherwise. - - Args: - seconds: How long to wait. - - Returns: - dict confirming the wait. - """ - seconds = max(1, min(int(seconds), 120)) - time.sleep(seconds) - return {"waited_seconds": seconds} - - -root_agent = Agent( - model="gemini-flash-latest", - name="transform_agent", - instruction=( - "You parse documents with the Unstructured Transform MCP server. " - "Pass public https:// file URLs straight to transform_files. It " - "returns a job_id; poll with check_transform_status, calling " - "wait_seconds(30) between checks - jobs take 30 seconds to a few " - "minutes. When the job completes, call get_transform_results and " - "report the parsed content back to the user. transform_files " - "accepts an optional stages config; it auto-selects a parse " - "strategy by default, but if the output looks low quality " - "(garbled text or lost tables), re-run the file with a hi_res " - "partition strategy for a cleaner result. If asked to parse a " - "local file, explain that this requires the upload helper from the " - "Unstructured ADK guide." - ), - tools=[ - wait_seconds, - McpToolset( - connection_params=StreamableHTTPConnectionParams( - url="https://mcp.transform.unstructured.io", # root URL - do not append /mcp - headers={ - "Authorization": f"Bearer {os.environ['UNSTRUCTURED_API_KEY']}", - }, - timeout=30.0, # ADK's 5s default is too short for a remote handshake - sse_read_timeout=300.0, +=== "Python" + + === "Remote MCP Server" + + ```python + import asyncio + import os + + from google.adk.agents import Agent + from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams + + + async def wait_seconds(seconds: int) -> dict: + """Pause before the next status check. Use 30 seconds unless told otherwise. + + Args: + seconds: How long to wait. + + Returns: + dict confirming the wait. + """ + seconds = max(1, min(int(seconds), 120)) + await asyncio.sleep(seconds) + return {"waited_seconds": seconds} + + + root_agent = Agent( + model="gemini-flash-latest", + name="transform_agent", + instruction=( + "You parse documents with the Unstructured Transform MCP server. " + "Pass public https:// file URLs straight to transform_files. It " + "returns a job_id; poll with check_transform_status, calling " + "wait_seconds(30) between checks (jobs take 30 seconds to a few " + "minutes). When the job completes, call get_transform_results and " + "report the parsed content back to the user. transform_files " + "accepts an optional stages config; it auto-selects a parse " + "strategy by default, but if the output looks low quality " + "(garbled text or lost tables), re-run the file with a hi_res " + "partition strategy for a cleaner result. If asked to parse a " + "local file, explain that this requires the upload helper from the " + "Unstructured ADK guide." ), - tool_filter=[ - "request_file_upload_url", - "transform_files", - "check_transform_status", - "get_transform_results", + tools=[ + wait_seconds, + McpToolset( + connection_params=StreamableHTTPConnectionParams( + url="https://mcp.transform.unstructured.io", # root URL; do not append /mcp + headers={ + "Authorization": f"Bearer {os.environ['UNSTRUCTURED_API_KEY']}", + }, + timeout=30.0, # ADK's 5s default is too short for a remote handshake + sse_read_timeout=300.0, + ), + tool_filter=[ + "request_file_upload_url", + "transform_files", + "check_transform_status", + "get_transform_results", + ], + ) ], ) - ], -) -``` + ``` !!! note