Skip to main content
Glama
Unstructured API MCP Server

Unstructured API MCP Server

Official

Unstructured API MCP Server

NOTE

This server interacts with the Unstructured API to manage sources, destinations, and workflows. It is not actively maintained and is kept here for reference.

If you want to parse and transform files into structured output (markdown, JSON, HTML, or plain text), use the Unstructured Transform MCP server instead.

Unstructured Transform brings production-grade document processing to your agents as a hosted MCP server. It gives them the ability to turn 60+ file types into structured data that's ready for your applications, vector databases, and any downstream processes by parsing, enriching, chunking, and embedding files directly inside their current session.

You can start using it by signing up here.

An MCP server implementation for interacting with the Unstructured API. This server provides tools to list sources and workflows.

Available Tools

Tool

Description

list_sources

Lists available sources from the Unstructured API.

get_source_info

Get detailed information about a specific source connector.

create_source_connector

Create a source connector.)

update_source_connector

Update an existing source connector by params.

delete_source_connector

Delete a source connector by source id.

list_destinations

Lists available destinations from the Unstructured API.

get_destination_info

Get detailed info about a specific destination connector

create_destination_connector

Create a destination connector by params.

update_destination_connector

Update an existing destination connector by destination id.

delete_destination_connector

Delete a destination connector by destination id.

list_workflows

Lists workflows from the Unstructured API.

get_workflow_info

Get detailed information about a specific workflow.

create_workflow

Create a new workflow with source, destination id, etc.

run_workflow

Run a specific workflow with workflow id

update_workflow

Update an existing workflow by params.

delete_workflow

Delete a specific workflow by id.

list_jobs

Lists jobs for a specific workflow from the Unstructured API.

get_job_info

Get detailed information about a specific job by job id.

cancel_job

Delete a specific job by id.

list_workflows_with_finished_jobs

Lists all workflows that have any completed job, together with information about source and destination details.

Below is a list of connectors the UNS-MCP server currently supports, please see the full list of source connectors that Unstructured platform supports here and destination list here. We are planning on adding more!

Source

Destination

S3

S3

Azure

Weaviate

Google Drive

Pinecone

OneDrive

AstraDB

Salesforce

MongoDB

Sharepoint

Neo4j

Databricks Volumes

Databricks Volumes Delta Table

To use the tool that creates/updates/deletes a connector, the credentials for that specific connector must be defined in your .env file. Below is the list of credentials for the connectors we support:

Credential Name

Description

ANTHROPIC_API_KEY

required to run the minimal_client to interact with our server.

AWS_KEY, AWS_SECRET

required to create S3 connector via uns-mcp server, see how in documentation and here

WEAVIATE_CLOUD_API_KEY

required to create Weaviate vector db connector, see how in documentation

FIRECRAWL_API_KEY

required to use Firecrawl tools in external/firecrawl.py, sign up on Firecrawl and get an API key.

ASTRA_DB_APPLICATION_TOKEN, ASTRA_DB_API_ENDPOINT

required to create Astradb connector via uns-mcp server, see how in documentation

AZURE_CONNECTION_STRING

required option 1 to create Azure connector via uns-mcp server, see how in documentation

AZURE_ACCOUNT_NAME+AZURE_ACCOUNT_KEY

required option 2 to create Azure connector via uns-mcp server, see how in documentation

AZURE_ACCOUNT_NAME+AZURE_SAS_TOKEN

required option 3 to create Azure connector via uns-mcp server, see how in documentation

NEO4J_PASSWORD

required to create Neo4j connector via uns-mcp server, see how in documentation

MONGO_DB_CONNECTION_STRING

required to create Mongodb connector via uns-mcp server, see how in documentation

GOOGLEDRIVE_SERVICE_ACCOUNT_KEY

a string value. The original server account key (follow documentation) is in json file, run base64 < /path/to/google_service_account_key.json in terminal to get the string value

DATABRICKS_CLIENT_ID,DATABRICKS_CLIENT_SECRET

required to create Databricks volume/delta table connector via uns-mcp server, see how in documentation and here

ONEDRIVE_CLIENT_ID, ONEDRIVE_CLIENT_CRED,ONEDRIVE_TENANT_ID

required to create One Drive connector via uns-mcp server, see how in documentation

PINECONE_API_KEY

required to create Pinecone vector DB connector via uns-mcp server, see how in documentation

SALESFORCE_CONSUMER_KEY,SALESFORCE_PRIVATE_KEY

required to create salesforce source connector via uns-mcp server, see how in documentation

SHAREPOINT_CLIENT_ID, SHAREPOINT_CLIENT_CRED,SHAREPOINT_TENANT_ID

required to create One Drive connector via uns-mcp server, see how in documentation

LOG_LEVEL

Used to set logging level for our minimal_client, e.g. set to ERROR to get everything

CONFIRM_TOOL_USE

set to true so that minimal_client can confirm execution before each tool call

DEBUG_API_REQUESTS

set to true so that uns_mcp/server.py can output request parameters for better debugging

Firecrawl Source

Firecrawl is a web crawling API that provides two main capabilities in our MCP:

  1. HTML Content Retrieval: Using invoke_firecrawl_crawlhtml to start crawl jobs and check_crawlhtml_status to monitor them

  2. LLM-Optimized Text Generation: Using invoke_firecrawl_llmtxt to generate text and check_llmtxt_status to retrieve results

How Firecrawl works:

Web Crawling Process:

  • Starts with a specified URL and analyzes it to identify links

  • Uses the sitemap if available; otherwise follows links found on the website

  • Recursively traverses each link to discover all subpages

  • Gathers content from every visited page, handling JavaScript rendering and rate limits

  • Jobs can be cancelled with cancel_crawlhtml_job if needed

  • Use this if you require all the info extracted into raw HTML, Unstructured's workflow cleans it up really well :smile:

LLM Text Generation:

  • After crawling, extracts clean, meaningful text content from the crawled pages

  • Generates optimized text formats specifically formatted for large language models

  • Results are automatically uploaded to the specified S3 location

  • Note: LLM text generation jobs cannot be cancelled once started. The cancel_llmtxt_job function is provided for consistency but is not currently supported by the Firecrawl API.

Note: A FIRECRAWL_API_KEY environment variable must be set to use these functions.

Related MCP server: MCP REST API Server

Installation & Configuration

This guide provides step-by-step instructions to set up and configure the UNS_MCP server using Python 3.12 and the uv tool.

Prerequisites

  • Python 3.12+

  • uv for environment management

  • An API key from Unstructured. You can sign up and obtain your API key here.

Using uv (Recommended)

No additional installation is required when using uvx as it handles execution. However, if you prefer to install the package directly:

uv pip install uns_mcp

Configure Claude Desktop

For integration with Claude Desktop, add the following content to your claude_desktop_config.json:

Note: The file is located in the ~/Library/Application Support/Claude/ directory.

Using uvx Command:

{
   "mcpServers": {
      "UNS_MCP": {
         "command": "uvx",
         "args": ["uns_mcp"],
         "env": {
           "UNSTRUCTURED_API_KEY": "<your-key>"
         }
      }
   }
}

Alternatively, Using Python Package:

{
   "mcpServers": {
      "UNS_MCP": {
         "command": "python",
         "args": ["-m", "uns_mcp"],
         "env": {
           "UNSTRUCTURED_API_KEY": "<your-key>"
         }
      }
   }
}

Using Source Code

  1. Clone the repository.

  2. Install dependencies:

    uv sync
  3. Set your Unstructured API key as an environment variable. Create a .env file in the root directory with the following content:

    UNSTRUCTURED_API_KEY="YOUR_KEY"

    Refer to .env.template for the configurable environment variables.

You can now run the server using one of the following methods:

uvx pip install -e .

Update your Claude Desktop config:

{
  "mcpServers": {
    "UNS_MCP": {
      "command": "uvx",
      "args": ["uns_mcp"]
    }
  }
}

Note: Remember to point to the uvx executable in environment where you installed the package

Note: Not supported by Claude Desktop.

For SSE protocol, you can debug more easily by decoupling the client and server:

  1. Start the server in one terminal:

    uv run python uns_mcp/server.py --host 127.0.0.1 --port 8080
    # or
    make sse-server
  2. Test the server using a local client in another terminal:

    uv run python minimal_client/client.py "http://127.0.0.1:8080/sse"
    # or
    make sse-client

Note: To stop the services, use Ctrl+C on the client first, then the server.

Configure Claude Desktop to use stdio:

{
  "mcpServers": {
    "UNS_MCP": {
      "command": "ABSOLUTE/PATH/TO/.local/bin/uv",
      "args": [
        "--directory",
        "ABSOLUTE/PATH/TO/YOUR-UNS-MCP-REPO/uns_mcp",
        "run",
        "server.py"
      ]
    }
  }
}

Alternatively, run the local client:

uv run python minimal_client/client.py uns_mcp/server.py

Additional Local Client Configuration

Configure the minimal client using environmental variables:

  • LOG_LEVEL="ERROR": Set to suppress debug outputs from the LLM, displaying clear messages for users.

  • CONFIRM_TOOL_USE='false': Disable tool use confirmation before execution. Use with caution, especially during development, as LLM may execute expensive workflows or delete data.

Debugging tools

Anthropic provides MCP Inspector tool to debug/test your MCP server. Run the following command to spin up a debugging UI. From there, you will be able to add environment variables (pointing to your local env) on the left pane. Include your personal API key there as env var. Go to tools, you can test out the capabilities you add to the MCP server.

mcp dev uns_mcp/server.py

If you need to log request call parameters to UnstructuredClient, set the environment variable DEBUG_API_REQUESTS=false. The logs are stored in a file with the format unstructured-client-{date}.log, which can be examined to debug request call parameters to UnstructuredClient functions.

Add terminal access to minimal client

We are going to use @wonderwhy-er/desktop-commander to add terminal access to the minimal client. It is built on the MCP Filesystem Server. Be careful, as the client (also LLM) now has access to private files.

Execute the following command to install the package:

npx @wonderwhy-er/desktop-commander setup

Then start client with extra parameter:

uv run python minimal_client/client.py "http://127.0.0.1:8080/sse" "@wonderwhy-er/desktop-commander@^0.2.11"
# or
make sse-client-terminal

Using subset of tools

If your client supports using only subset of tools here are the list of things you should be aware:

  • update_workflow tool has to be loaded in the context together with create_workflow tool, because it contains detailed description on how to create and configure custom node.

Known issues

  • update_workflow - needs to have in context the configuration of the workflow it is updating either by providing it by the user or by calling get_workflow_info tool, as this tool doesn't work as patch applier, it fully replaces the workflow config.

CHANGELOG.md

Any new developed features/fixes/enhancements will be added to CHANGELOG.md. 0.x.x-dev pre-release format is preferred before we bump to a stable version.

Troubleshooting

  • If you encounter issues with Error: spawn <command> ENOENT it means <command> is not installed or visible in your PATH:

    • Make sure to install it and add it to your PATH.

    • or provide absolute path to the command in the command field of your config. So for example replace python with /opt/miniconda3/bin/python

Available Tools

26 tools
cancel_crawlhtml_jobC

Cancel an in-progress Firecrawl HTML crawl job.

Args:
    crawl_id: ID of the crawl job to cancel

Returns:
    Dictionary containing the result of the cancellation

Inputs: crawl_id (required). Returns: result

cancel_jobB

Delete a specific job.

Args:
    job_id: ID of the job to cancel

Returns:
    String containing the response from the job cancellation

Inputs: job_id (required). Returns: result

check_crawlhtml_statusB

Check the status of an existing Firecrawl HTML crawl job.

Args:
    crawl_id: ID of the crawl job to check

Returns:
    Dictionary containing the current status of the crawl job

Inputs: crawl_id (required). Returns: result

check_llmtxt_statusB

Check the status of an existing llmfull.txt generation job.

Args:
    job_id: ID of the llmfull.txt generation job to check

Returns:
    Dictionary containing the current status of the job and text content if completed

Inputs: job_id (required). Returns: result

create_destination_connectorB

Create a destination connector based on type.

Args:
    ctx: Context object with the request and lifespan context
    name: A unique name for this connector
    destination_type: The type of destination being created

    type_specific_config:
        astradb:
            collection_name: The AstraDB collection name
            keyspace: The AstraDB keyspace
            batch_size: (Optional[int]) The batch size for inserting documents
        databricks_delta_table:
            catalog: Name of the catalog in Databricks Unity Catalog
            database: The database in Unity Catalog
            http_path: The cluster’s or SQL warehouse’s HTTP Path value
            server_hostname: The Databricks cluster’s or SQL warehouse’s Server Hostname value
            table_name: The name of the table in the schema
            volume: Name of the volume associated with the schema.
            schema: (Optional[str]) Name of the schema associated with the volume
            volume_path: (Optional[str]) Any target folder path within the volume, starting
                        from the root of the volume.
        databricks_volumes:
            catalog: Name of the catalog in Databricks
            host: The Databricks host URL
            volume: Name of the volume associated with the schema
            schema: (Optional[str]) Name of the schema associated with the volume. The default
                     value is "default".
            volume_path: (Optional[str]) Any target folder path within the volume,
                        starting from the root of the volume.
        mongodb:
            database: The name of the MongoDB database
            collection: The name of the MongoDB collection
        neo4j:
            database: The Neo4j database, e.g. "neo4j"
            uri: The Neo4j URI e.g. neo4j+s://<neo4j_instance_id>.databases.neo4j.io
            batch_size: (Optional[int]) The batch size for the connector
        pinecone:
            index_name: The Pinecone index name
            namespace: (Optional[str]) The pinecone namespace, a folder inside the
                       pinecone index
            batch_size: (Optional[int]) The batch size
        s3:
            remote_url: The S3 URI to the bucket or folder
        weaviate:
            cluster_url: URL of the Weaviate cluster
            collection: Name of the collection in the Weaviate cluster

            Note: Minimal schema is required for the collection, e.g. record_id: Text

Returns:
    String containing the created destination connector information

Inputs: name (required), destination_type (required), type_specific_config (required). Returns: result

create_source_connectorA

Create a source connector based on type. Args: ctx: Context object with the request and lifespan context name: A unique name for this connector source_type: The type of source being created (e.g., 'azure', 'onedrive', 'salesforce', 'gdrive', 's3', 'sharepoint')

    type_specific_config:
        azure:
            remote_url: The Azure Storage remote URL with the format
                        az://<container-name>/<path/to/file/or/folder/in/container/as/needed>
            recursive: (Optional[bool]) Whether to access subfolders
        gdrive:
            drive_id: The Drive ID for the Google Drive source
            recursive: (Optional[bool]) Whether to access subfolders
            extensions: (Optional[list[str]]) File extensions to filter
        onedrive:
            path: The path to the target folder in the OneDrive account
            user_pname: The User Principal Name (UPN) for the OneDrive user account
            recursive: (Optional[bool]) Whether to access subfolders
            authority_url: (Optional[str]) The authentication token provider URL
        s3:
            remote_url: The S3 URI to the bucket or folder (e.g., s3://my-bucket/)
            recursive: (Optional[bool]) Whether to access subfolders
        salesforce:
            username: The Salesforce username
            categories: (Optional[list[str]]) Optional Salesforce domain,the names of the
                        Salesforce categories (objects) that you want to access, specified as
                        a comma-separated list. Available categories include Account, Campaign,
                        Case, EmailMessage, and Lead.
        sharepoint:
            site: The SharePoint site to connect to
            user_pname: The username for the SharePoint site
            path: (Optional) The path within the SharePoint site
            recursive: (Optional[bool]) Whether to access subfolders
            authority_url: (Optional[str]) The authority URL for authentication

Returns:
    String containing the created source connector information

Inputs: name (required), source_type (required), type_specific_config (required). Returns: result

create_workflowB

Create a new workflow.

Args:
    workflow_config: A Typed Dictionary containing required fields (destination_id - should be a
    valid UUID, name, source_id - should be a valid UUID, workflow_type) and non-required fields
    (schedule, and workflow_nodes). Note workflow_nodes is only enabled when workflow_type
    is `custom` and is a list of WorkflowNodeTypedDict: partition, prompter,chunk, embed
    Below is an example of a partition workflow node:
        {
            "name": "vlm-partition",
            "type": "partition",
            "sub_type": "vlm",
            "settings": {
                        "provider": "your favorite provider",
                        "model": "your favorite model"
                        }
        }


Returns:
    String containing the created workflow information

Custom workflow DAG nodes

  • If WorkflowType is set to custom, you must also specify the settings for the workflow’s directed acyclic graph (DAG) nodes. These nodes’ settings are specified in the workflow_nodes array.

  • A Source node is automatically created when you specify the source_id value outside of the workflow_nodes array.

  • A Destination node is automatically created when you specify the destination_id value outside of the workflow_nodes array.

  • You can specify Partitioner, Chunker, Prompter, and Embedder nodes.

  • The order of the nodes in the workflow_nodes array will be the same order that these nodes appear in the DAG, with the first node in the array added directly after the Source node. The Destination node follows the last node in the array.

  • Be sure to specify nodes in the allowed order. The following DAG placements are all allowed:

    • Source -> Partitioner -> Destination,

    • Source -> Partitioner -> Chunker -> Destination,

    • Source -> Partitioner -> Chunker -> Embedder -> Destination,

    • Source -> Partitioner -> Prompter -> Chunker -> Destination,

    • Source -> Partitioner -> Prompter -> Chunker -> Embedder -> Destination

Partitioner node A Partitioner node has a type of partition and a subtype of auto, vlm, hi_res, or fast.

Examples:

  • auto strategy: { "name": "Partitioner", "type": "partition", "subtype": "vlm", "settings": { "provider": "anthropic", (required) "model": "claude-sonnet-4-20250514", (required) "output_format": "text/html", "user_prompt": null, "format_html": true, "unique_element_ids": true, "is_dynamic": true, "allow_fast": true } }

  • vlm strategy: Allowed values are provider and model. Below are examples: - "provider": "anthropic" "model": "claude-sonnet-4-20250514", - "provider": "openai" "model": "gpt-4o"

  • hi_res strategy: { "name": "Partitioner", "type": "partition", "subtype": "unstructured_api", "settings": { "strategy": "hi_res", "include_page_breaks": <true|false>, "pdf_infer_table_structure": <true|false>, "exclude_elements": [ "", "" ], "xml_keep_tags": <true|false>, "encoding": "", "ocr_languages": [ "", "" ], "extract_image_block_types": [ "image", "table" ], "infer_table_structure": <true|false> } }

  • fast strategy { "name": "Partitioner", "type": "partition", "subtype": "unstructured_api", "settings": { "strategy": "fast", "include_page_breaks": <true|false>, "pdf_infer_table_structure": <true|false>, "exclude_elements": [ "", "" ], "xml_keep_tags": <true|false>, "encoding": "", "ocr_languages": [ "", "" ], "extract_image_block_types": [ "image", "table" ], "infer_table_structure": <true|false> } }

Chunker node A Chunker node has a type of chunk and subtype of chunk_by_character or chunk_by_title.

  • chunk_by_character { "name": "Chunker", "type": "chunk", "subtype": "chunk_by_character", "settings": { "include_orig_elements": <true|false>, "new_after_n_chars": , (required, if not provided

set same as max_characters) "max_characters": , (required) "overlap": , (required, if not provided set default to 0) "overlap_all": <true|false>, "contextual_chunking_strategy": "v1" } }

  • chunk_by_title { "name": "Chunker", "type": "chunk", "subtype": "chunk_by_title", "settings": { "multipage_sections": <true|false>, "combine_text_under_n_chars": , "include_orig_elements": <true|false>, "new_after_n_chars": , (required, if not provided

set same as max_characters) "max_characters": , (required) "overlap": , (required, if not provided set default to 0) "overlap_all": <true|false>, "contextual_chunking_strategy": "v1" } }

Prompter node An Prompter node has a type of prompter and subtype of:

  • openai_image_description,

  • anthropic_image_description,

  • bedrock_image_description,

  • vertexai_image_description,

  • openai_table_description,

  • anthropic_table_description,

  • bedrock_table_description,

  • vertexai_table_description,

  • openai_table2html,

  • openai_ner

Example: { "name": "Prompter", "type": "prompter", "subtype": "", "settings": {} }

Embedder node An Embedder node has a type of embed

Allowed values for subtype and model_name include:

  • "subtype": "azure_openai"

    • "model_name": "text-embedding-3-small"

    • "model_name": "text-embedding-3-large"

    • "model_name": "text-embedding-ada-002"

  • "subtype": "bedrock"

    • "model_name": "amazon.titan-embed-text-v2:0"

    • "model_name": "amazon.titan-embed-text-v1"

    • "model_name": "amazon.titan-embed-image-v1"

    • "model_name": "cohere.embed-english-v3"

    • "model_name": "cohere.embed-multilingual-v3"

  • "subtype": "togetherai":

    • "model_name": "togethercomputer/m2-bert-80M-2k-retrieval"

    • "model_name": "togethercomputer/m2-bert-80M-8k-retrieval"

    • "model_name": "togethercomputer/m2-bert-80M-32k-retrieval"

Example: { "name": "Embedder", "type": "embed", "subtype": "", "settings": { "model_name": "" } }

Inputs: workflow_config (required). Returns: result

delete_destination_connectorC

Delete a destination connector.

Args:
    destination_id: ID of the destination connector to delete

Returns:
    String containing the result of the deletion

Inputs: destination_id (required). Returns: result

delete_source_connectorB

Delete a source connector.

Args:
    source_id: ID of the source connector to delete

Returns:
    String containing the result of the deletion

Inputs: source_id (required). Returns: result

delete_workflowB

Delete a specific workflow.

Args:
    workflow_id: ID of the workflow to delete

Returns:
    String containing the response from the workflow deletion

Inputs: workflow_id (required). Returns: result

get_destination_infoB

Get detailed information about a specific destination connector.

Args:
    destination_id: ID of the destination connector to get information for

Returns:
    String containing the destination connector information

Inputs: destination_id (required). Returns: result

get_job_infoC

Get detailed information about a specific job.

Args:
    job_id: ID of the job to get information for

Returns:
    String containing the job information

Inputs: job_id (required). Returns: result

get_source_infoC

Get detailed information about a specific source connector.

Args:
    source_id: ID of the source connector to get information for, should be valid UUID

Returns:
    String containing the source connector information

Inputs: source_id (required). Returns: result

get_workflow_infoB

Get detailed information about a specific workflow.

Args:
    workflow_id: ID of the workflow to get information for

Returns:
    String containing the workflow information

Inputs: workflow_id (required). Returns: result

invoke_firecrawl_crawlhtmlA

Start an asynchronous web crawl job using Firecrawl to retrieve HTML content.

Args:
    url: URL to crawl
    s3_uri: S3 URI where results will be uploaded
    limit: Maximum number of pages to crawl (default: 100)

Returns:
    Dictionary with crawl job information including the job ID

Inputs: url (required), s3_uri (required), limit. Returns: result

invoke_firecrawl_llmtxtA

Start an asynchronous llmfull.txt generation job using Firecrawl. This file is a standardized markdown file containing information to help LLMs use a website at inference time. The llmstxt endpoint leverages Firecrawl to crawl your website and extracts data using gpt-4o-mini Args: url: URL to crawl s3_uri: S3 URI where results will be uploaded max_urls: Maximum number of pages to crawl (1-100, default: 10)

Returns:
    Dictionary with job information including the job ID

Inputs: url (required), s3_uri (required), max_urls. Returns: result

list_destinationsB

List available destinations from the Unstructured API.

Args:
    destination_type: Optional destination connector type to filter by

Returns:
    String containing the list of destinations

Inputs: destination_type. Returns: result

list_jobsB
List jobs via the Unstructured API.

Args:
    workflow_id: Optional workflow ID to filter by
    status: Optional job status to filter by

Returns:
    String containing the list of jobs

Inputs: workflow_id, status. Returns: result

list_sourcesC
List available sources from the Unstructured API.

Args:
    source_type: Optional source connector type to filter by

Returns:
    String containing the list of sources

Inputs: source_type. Returns: result

list_workflowsB
List workflows from the Unstructured API.

Args:
    destination_id: Optional destination connector ID to filter by
    source_id: Optional source connector ID to filter by
    status: Optional workflow status to filter by

Returns:
    String containing the list of workflows

Inputs: destination_id, source_id, status. Returns: result

list_workflows_with_finished_jobsB
List workflows with finished jobs via the Unstructured API.
Args:
    source_type: Optional source connector type to filter by
    destination_type: Optional destination connector type to filter by
Returns:
    String containing the list of workflows with finished jobs and source and destination
    details

Inputs: source_type, destination_type. Returns: result

partition_local_fileA
Transform a local file into structured data using the Unstructured API.

Args:
    input_file_path: The absolute path to the file.
    output_file_dir: The absolute path to the directory where the output file should be saved.
    strategy: The strategy for transformation.
        Available strategies:
            VLM - most advanced transformation suitable for difficult PDFs and Images
            hi_res - high resolution transformation suitable for most document types
            fast - fast transformation suitable for PDFs with extractable text
            auto - automatically choose the best strategy based on the input file
    vlm_model: The VLM model to use for the transformation.
    vlm_model_provider: The VLM model provider to use for the transformation.
    output_type: The type of output to generate. Options: 'json' for json
                 or 'md' for markdown.

Returns:
    A string containing the structured data or a message indicating the output file
    path with the structured data.

Inputs: input_file_path (required), output_file_dir (required), strategy, vlm_model, +2 more. Returns: result

run_workflowB

Run a specific workflow.

Args:
    workflow_id: ID of the workflow to run

Returns:
    String containing the response from the workflow execution

Inputs: workflow_id (required). Returns: result

update_destination_connectorB

Update a destination connector based on type.

Args:
    ctx: Context object with the request and lifespan context
    destination_id: ID of the destination connector to update
    destination_type: The type of destination being updated

    type_specific_config:
        astradb:
            collection_name: (Optional[str]): The AstraDB collection name
            keyspace: (Optional[str]): The AstraDB keyspace
            batch_size: (Optional[int]) The batch size for inserting documents
        databricks_delta_table:
            catalog: (Optional[str]): Name of the catalog in Databricks Unity Catalog
            database: (Optional[str]): The database in Unity Catalog
            http_path: (Optional[str]): The cluster’s or SQL warehouse’s HTTP Path value
            server_hostname: (Optional[str]): The Databricks cluster’s or SQL warehouse’s
                             Server Hostname value
            table_name: (Optional[str]): The name of the table in the schema
            volume: (Optional[str]): Name of the volume associated with the schema.
            schema: (Optional[str]) Name of the schema associated with the volume
            volume_path: (Optional[str]) Any target folder path within the volume, starting
                        from the root of the volume.
        databricks_volumes:
            catalog: (Optional[str]): Name of the catalog in Databricks
            host: (Optional[str]): The Databricks host URL
            volume: (Optional[str]): Name of the volume associated with the schema
            schema: (Optional[str]) Name of the schema associated with the volume. The default
                     value is "default".
            volume_path: (Optional[str]) Any target folder path within the volume,
                        starting from the root of the volume.
        mongodb:
            database: (Optional[str]): The name of the MongoDB database
            collection: (Optional[str]): The name of the MongoDB collection
        neo4j:
            database: (Optional[str]): The Neo4j database, e.g. "neo4j"
            uri: (Optional[str]): The Neo4j URI
                  e.g. neo4j+s://<neo4j_instance_id>.databases.neo4j.io
            batch_size: (Optional[int]) The batch size for the connector
        pinecone:
            index_name: (Optional[str]): The Pinecone index name
            namespace: (Optional[str]) The pinecone namespace, a folder inside the
                       pinecone index
            batch_size: (Optional[int]) The batch size
        s3:
            remote_url: (Optional[str]): The S3 URI to the bucket or folder
        weaviate:
            cluster_url: (Optional[str]): URL of the Weaviate cluster
            collection: (Optional[str]): Name of the collection in the Weaviate cluster

            Note: Minimal schema is required for the collection, e.g. record_id: Text

Returns:
    String containing the updated destination connector information

Inputs: destination_id (required), destination_type (required), type_specific_config (required). Returns: result

update_source_connectorB

Update a source connector based on type.

Args:
    ctx: Context object with the request and lifespan context
    source_id: ID of the source connector to update
    source_type: The type of source being updated (e.g., 'azure', 'onedrive',
                 'salesforce', 'gdrive', 's3', 'sharepoint')

    type_specific_config:
        azure:
            remote_url: (Optional[str]) The Azure Storage remote URL with the format
                        az://<container-name>/<path/to/file/or/folder/in/container/as/needed>
            recursive: (Optional[bool]) Whether to access subfolders
        gdrive:
            drive_id: (Optional[str]) The Drive ID for the Google Drive source
            recursive: (Optional[bool]) Whether to access subfolders
            extensions: (Optional[list[str]]) File extensions to filter
        onedrive:
            path: (Optional[str]) The path to the target folder in the OneDrive account
            user_pname: (Optional[str]) The User Principal Name (UPN) for the OneDrive
                        user account
            recursive: (Optional[bool]) Whether to access subfolders
            authority_url: (Optional[str]) The authentication token provider URL
        s3:
            remote_url: (Optional[str]) The S3 URI to the bucket or folder
                        (e.g., s3://my-bucket/)
            recursive: (Optional[bool]) Whether to access subfolders
        salesforce:
            username: (Optional[str]) The Salesforce username
            categories: (Optional[list[str]]) Optional Salesforce domain,the names of the
                        Salesforce categories (objects) that you want to access, specified as
                        a comma-separated list. Available categories include Account, Campaign,
                        Case, EmailMessage, and Lead.
        sharepoint:
            site: Optional([str]) The SharePoint site to connect to
            user_pname: Optional([str]) The username for the SharePoint site
            path: (Optional) The path within the SharePoint site
            recursive: (Optional[bool]) Whether to access subfolders
            authority_url: (Optional[str]) The authority URL for authentication

Returns:
    String containing the updated source connector information

Inputs: source_id (required), source_type (required), type_specific_config (required). Returns: result

update_workflowB

Update an existing workflow.

Args:
    workflow_id: ID of the workflow to update
    workflow_config: A Typed Dictionary containing required fields (destination_id,
    name, source_id, workflow_type) and non-required fields (schedule, and workflow_nodes)

Returns:
    String containing the updated workflow information

Inputs: workflow_id (required), workflow_config (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 26 tools

    Disambiguation4/5

    Most tools have distinct purposes targeting specific resources like connectors, workflows, jobs, and local files, with clear separation between source/destination connectors and workflow operations. However, some ambiguity exists between cancel_job and cancel_crawlhtml_job, as both cancel jobs but for different job types, which could cause confusion without careful reading of descriptions.

    Naming Consistency5/5

    Tool names follow a highly consistent verb_noun pattern throughout, such as create_destination_connector, list_workflows, and update_source_connector. All tools use snake_case with clear action-object pairs, making the naming predictable and easy to understand across the entire set.

    Tool Count3/5

    With 26 tools, the count feels heavy for the server's purpose of managing unstructured data workflows, connectors, and jobs. While the domain is broad, the tool set includes many specific operations (e.g., separate tools for checking status of different job types) that could potentially be consolidated, making it borderline excessive but still manageable.

    Completeness5/5

    The tool set provides comprehensive coverage for the unstructured data processing domain, including full CRUD operations for connectors and workflows, job management with status checks and cancellation, workflow execution, and local file partitioning. There are no obvious gaps, and the tools support end-to-end workflows from source to destination with various processing nodes.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A server implementation that allows secure communication between MCP clients and privateGPT, enabling users to chat with privateGPT using knowledge bases and manage sources, groups, and users through a standardized Model Context Protocol.
      6
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A server implementation of the Model Context Protocol (MCP) that provides REST API endpoints for managing and interacting with MCP resources.
      -
    • A
      license
      B
      quality
      B
      maintenance
      An MCP (Model Context Protocol) server for interacting with a Paperless-NGX API server. This server provides tools for managing documents, tags, correspondents, and document types in your Paperless-NGX instance.
      44
      722 npm
      151
      TypeScript
      ISC
    • F
      license
      Not graded
      quality
      D
      maintenance
      An unofficial MCP server for DevRev integration, enabling AI assistants to search, manage works, explore product hierarchies, and retrieve object details seamlessly.
      3
      -