Skip to main content
NVIDIA NeMo Agent Toolkit is NVIDIA’s open-source framework for building agent workflows. Unlike end-user AI tools that add the Transform MCP server through a settings screen, the toolkit connects to it from a workflow configuration: you declare the Transform MCP server as a tool source and hand its tools to an agent. Because Transform is a hosted remote MCP server, there is nothing to install or run locally. You point the client at the server URL and authenticate with your Unstructured API key. The toolkit ships two building blocks that make this work out of the box, so you do not need a custom transport:
  • The mcp_client connector, which connects to a remote MCP server over the streamable HTTP transport.
  • The api_key authentication provider, which sends your Unstructured API key as an Authorization: Bearer header on every request, including the initial initialize handshake.

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 --version or python3 --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 nim model client uses. Get an API key.

Install the packages

The mcp_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:
In a workflow configuration file, declare the Transform MCP server as an 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:
The four tools in the 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:
  1. request_file_upload_url: Returns a pre-signed upload_url and a file_ref for a local file.
  2. An HTTP PUT of the raw file bytes to the pre-signed upload_url. This is not an MCP call.
  3. transform_files: Starts a transform job for one or more file_ref values (or public HTTP(S) URLs) and returns a job_id.
  4. check_transform_status: Reports whether the job is SCHEDULED, IN_PROGRESS, or COMPLETED.
  5. get_transform_results: Returns a pre-signed download_url for the Markdown output of each transformed file.
  6. An HTTP GET of the Markdown from the pre-signed download_url. This is not an MCP call.
An agent cannot perform the two raw HTTP transfers through MCP tools alone, and driving the polling loop tool by tool is slow and unreliable. The recommended approach is to wrap the whole flow in a single function that the agent calls once. The next section shows how.
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 a transform_document function that runs the full lifecycle deterministically, then give that one tool to an agent. Create a small package with the following layout:
In register.py, resolve the four Transform tools from the function group and orchestrate the flow:
In pyproject.toml, register the function so the toolkit can discover it:
Install the package, then add the transform_document function and an agent to the same workflow configuration used above:
Run the workflow, pointing the agent at a local file or a public URL:
The agent calls 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?