> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the ConvertAPI MCP server

The ConvertAPI MCP connector routes your AI agent's tool calls to ConvertAPI's own MCP server through Scalekit. Each user signs in to ConvertAPI once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 5 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Files & Documents, Automation
**Tools:** 5: 4 read, 1 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=CONVERTAPIMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the ConvertAPI MCP connection

   In **AgentKit > Connections**, create a ConvertAPI MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for ConvertAPI MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'convertapimcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize ConvertAPI MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'convertapimcp_get_converters_by_tags',
     toolInput: { tags: [] },
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "convertapimcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize ConvertAPI MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={"tags":[]},
       tool_name="convertapimcp_get_converters_by_tags",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'convertapimcp_get_conversion_parameters',
  toolInput: {
    fromFormat: '<fromFormat>',
    toFormat: '<toFormat>',
  },
  connector: 'convertapimcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="convertapimcp_get_conversion_parameters",
    tool_input={
        "fromFormat": "<fromFormat>",
        "toFormat": "<toFormat>",
    },
    connection_name="convertapimcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `convertapimcp_get_conversion_parameters`

Get Conversion Parameters · Read-only

Retrieve all available parameters, types, and constraints for a specific format conversion. Call this before 'convert' to understand which parameters are supported for your source and target formats.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `fromFormat` (`string`, required): Source file format to convert from.
- `toFormat` (`string`, required): Target file format to convert to.

Example input: `{"fromFormat":"<fromFormat>","toFormat":"<toFormat>"}`

### `convertapimcp_get_converters_by_tags`

Get Converters By Tags · Read-only

Retrieve a list of available ConvertAPI converters that match all specified tags. Returns only converters associated with every tag provided.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tags` (`array`, required): List of tags to filter converters by. Only converters matching all specified tags are returned.

Example input: `{"tags":[]}`

### `convertapimcp_request_upload_url`

Request Upload Url · Read-only

Generate a curl command to upload a local file to ConvertAPI and obtain a FileId. Use this when the file is not publicly accessible via URL; for public URLs pass the URL directly to the 'convert' tool instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `filePath` (`string`, required): Absolute or relative path to the file to upload.

Example input: `{"filePath":"<filePath>"}`

### `convertapimcp_search_converters`

Search Converters · Read-only

Search for available ConvertAPI converters that match the specified search terms. Each term is matched against converter metadata, and results include converters relevant to all provided terms.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `terms` (`array`, required): List of search terms to filter converters by. Each term is matched against converter metadata.

Example input: `{"terms":[]}`

### `convertapimcp_convert`

Convert · Write

Convert a file from one format to another using ConvertAPI. Call 'get_conversion_parameters' first to discover supported parameters, then submit a conversion request with the source format, target format, and any additional parameters. If the file was attached to the conversation, pass it via 'file'; for a public URL or an uploaded FileId, pass it in clientRequest.parameters['File'] instead.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `clientRequest` (`object`, required): No description.
- `file` (`object`, optional): The file to convert, when the user attached it to the conversation. Leave unset if passing a URL or FileId via clientRequest.parameters['File'].

Example input: `{"clientRequest":{}}`

## Related

Other Files & Documents connectors ([all 33](/agentkit/connectors/?category=files-documents)):

- [Google Drive](/agentkit/connectors/googledrive/): Scalekit connector, OAuth, 47 tools
- [Google Forms](/agentkit/connectors/googleforms/): Scalekit connector, OAuth, 10 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
