- The
mcp_clientconnector, which connects to a remote MCP server over the streamable HTTP transport. - The
api_keyauthentication provider, which sends your Unstructured API key as anAuthorization: Bearerheader on every request, including the initialinitializehandshake.
Requirements
Before you begin, you must have the following:- Python 3.11, 3.12, or 3.13 on your local development machine. To check, in your terminal, run
python --versionorpython3 --version. Install Python. - An Unstructured API key, which the Transform MCP server uses as a bearer token. Get an API key.
- An NVIDIA API key for the agent’s underlying model, which the toolkit’s
nimmodel client uses. Get an API key.
Install the packages
Themcp_client connector and the api_key provider are included in the released toolkit (version 1.8.0 or later). In
your terminal, install the toolkit with the langchain and mcp extras:
The toolkit is in active development and its APIs change between releases. This guide was verified against version
1.8.0. If you install a different version, check the
NeMo Agent Toolkit release notes for changes.
Connect to the Transform MCP server
Store your Unstructured API key in an environment variable rather than hard-coding it. The toolkit reads it when it loads the workflow configuration:mcp_client function group and reference an
api_key authentication provider. The provider attaches the Authorization: Bearer header to every request, so the
handshake and the tool calls are both authenticated:
include list are the tools the transform job lifecycle uses. Listing them makes the
configuration fail fast if the server ever stops exposing one of them.
Understand the transform job lifecycle
Transforming a document is an asynchronous, multi-step flow. Four of the steps are MCP tool calls, and two are plain HTTP transfers that are not MCP calls:request_file_upload_url: Returns a pre-signedupload_urland afile_reffor a local file.- An HTTP
PUTof the raw file bytes to the pre-signedupload_url. This is not an MCP call. transform_files: Starts a transform job for one or morefile_refvalues (or public HTTP(S) URLs) and returns ajob_id.check_transform_status: Reports whether the job isSCHEDULED,IN_PROGRESS, orCOMPLETED.get_transform_results: Returns a pre-signeddownload_urlfor the Markdown output of each transformed file.- An HTTP
GETof the Markdown from the pre-signeddownload_url. This is not an MCP call.
The pre-signed
upload_url and download_url carry their own credentials in the URL itself. The PUT and GET
must not send the Authorization header, or the storage service rejects them.Expose Transform as a single agent tool
Register atransform_document function that runs the full lifecycle deterministically, then give that one tool to an
agent. Create a small package with the following layout:
register.py, resolve the four Transform tools from the function group and orchestrate the flow:
pyproject.toml, register the function so the toolkit can discover it:
transform_document function and an agent to the same workflow configuration used
above:
transform_document once, and the function handles the upload, transform, polling, and download, then
returns the Markdown for the agent to work with.
Parsing requests
Parsing requests have the following limits:- Each file must be of a supported file type.
- Each file must be 50 MB or less in size.
- Each request must have 10 files or fewer.
- Only 5 requests can be running at a time.
Next steps
- Control Transform file parsing output: Control how the Unstructured Transform MCP server instructs Transform to partition, enrich, chunk, and embed the data based on your files.
- Control Transform generated sample code: Control how the Unstructured Transform MCP server generates sample curl or Python code that demonstrates how to use Transform to partition, enrich, chunk, and embed the data based on your files.
Questions? Need help?
- For technical support, request support.

