Native MCP Server — Live

Droid Apps MCP Server

Connect any MCP-compatible AI agent to the Droid Apps FFmpeg API in under two minutes. One tool to submit any video or audio job. One tool to get the result.

What is the Droid Apps MCP server?

Droid Apps exposes a native Model Context Protocol (MCP) server at https://app.droidapps.one/mcp over Streamable HTTP transport. Any MCP-compatible client — Claude Desktop, Cursor, Continue, or a custom agent — can connect with an API key and immediately call FFmpeg operations on video and audio.

The server exposes a generic async job API: call submit_job with an operation path and JSON body, then call wait_for_task to retrieve the processed file. There are no operation-specific tools — one tool covers all 11+ API endpoints, keeping the surface minimal and the integration uniform.

The server name is droidapps-ffmpeg. Authentication uses your Droid Apps API key via X-API-Key header or Authorization: Bearer.

How do I connect an AI agent to the MCP server?

Step 1 — Get an API key

Subscribe to any plan, sign in, and generate a key under API Keys. The same key works for both REST and MCP.

Step 2 — Configure your client

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "droidapps-ffmpeg": {
      "type": "streamable-http",
      "url": "https://app.droidapps.one/mcp",
      "headers": {
        "X-API-Key": "YOUR_DROID_APPS_API_KEY"
      }
    }
  }
}

Cursor / VS Code MCP extension (.cursor/mcp.json)

{
  "mcpServers": {
    "droidapps-ffmpeg": {
      "url": "https://app.droidapps.one/mcp",
      "headers": {
        "X-API-Key": "YOUR_DROID_APPS_API_KEY"
      }
    }
  }
}

Step 3 — Submit a job and wait

The core pattern is always the same: submit_jobwait_for_task.

// 1. Submit a job — trim a video to 30 seconds starting at 0
const job = await mcp.callTool("submit_job", {
  path: "/cut",
  body: {
    video_url: "https://cdn.example.com/source.mp4",
    start: 0,
    duration: 30
  }
})
// Returns: { task_id: "abc123", status: "queued", ... }
// 2. Wait for the result (polls automatically)
const result = await mcp.callTool("wait_for_task", {
  task_id: job.task_id
})
// Returns: { status: "completed", download_url: "https://..." }

More submit_job examples

Merge two clips with fade transition

// Merge two clips with a fade transition
const job = await mcp.callTool("submit_job", {
  path: "/merge_urls",
  body: {
    urls: [
      "https://cdn.example.com/clip1.mp4",
      "https://cdn.example.com/clip2.mp4"
    ],
    transition: "fade",
    duration: 0.75
  }
})

Replace /merge_urls with any of the paths below for other operations. The body fields match the REST API parameters documented in API Docs.

Which paths can I pass to submit_job?

Pass any of these as the path argument to submit_job. The body fields for each path are documented on the corresponding tool page.

  • /cutTrim a clip — start offset + duration
  • /cropCrop a rectangle — w, h, x, y in pixels
  • /merge_urlsConcatenate clips with optional transitions
  • /redubReplace or mix audio tracks
  • /redub_ttsDub video with TTS from a script
  • /redub_vcVoice conversion on video audio
  • /captions/autoAuto-generate subtitles / captions
  • /visualizeAudio visualizer overlay on video
  • /animate_photoAnimate a still image to MP4/WebM/GIF
  • /silence_processRemove silence / dead air from video
  • /frame/lastExtract the final frame as a JPEG

Full tool list

submit_job
processing

Post any FFmpeg operation. Takes path (e.g. /cut, /crop, /merge_urls) and a JSON body with media URLs and parameters. Returns a task_id.

get_task
processing

Check the status of an async job by task_id. Returns current state: queued, processing, completed, or failed.

wait_for_task
processing

Poll a task until it reaches a terminal state. Returns the download URL on success. Use this after submit_job.

delete_task
processing

Delete a completed task and its stored output file.

health_check
processing

Verify the Droid Apps API is reachable. No API key forwarded to upstream.

api_info
processing

Retrieve current API information and available endpoints.

list_eleven_voices
processing

List ElevenLabs voices available for TTS dubbing (/redub_tts). Requires your ElevenLabs API key.

list_tasks
dashboard

List your recent FFmpeg processing tasks with status and result URLs.

list_api_keys
dashboard

List your active API keys (names and metadata only — never raw secrets).

list_api_logs
dashboard

Retrieve recent API request logs for your account.

usage_summary
dashboard

Get a summary of API usage: total requests, today's count, active keys, and last request timestamp.

subscription_status
dashboard

Check your active subscription tier and billing status.

Connection details

MCP endpointhttps://app.droidapps.one/mcp
TransportStreamable HTTP (MCP spec)
Server namedroidapps-ffmpeg
Auth headerX-API-Key: YOUR_KEY or Authorization: Bearer YOUR_KEY
Session initPOST /mcp without Mcp-Session-Id to initialize

Frequently asked questions

What MCP tools does Droid Apps expose?

The server exposes submit_job (post any FFmpeg operation), get_task (check status), wait_for_task (poll until done), delete_task, health_check, api_info, and list_eleven_voices. Dashboard tools include list_tasks, list_api_keys, list_api_logs, usage_summary, and subscription_status.

How do I authenticate with the MCP server?

Pass your Droid Apps API key as X-API-Key header or Authorization: Bearer <key>. Generate a key from your dashboard after subscribing. The key authorizes both REST and MCP calls against the same account.

What MCP transport does the server use?

Streamable HTTP — the standard transport defined in the MCP specification. This works with Claude Desktop, Cursor, and any MCP-compatible client that supports HTTP-based servers. The server name is droidapps-ffmpeg.

Do I need a subscription to use the MCP server?

Yes. The MCP server authenticates via your Droid Apps API key, which requires an active Basic, Boost, or Elite subscription. Rate limits and feature access match your plan tier.

Can I use the MCP server without knowing FFmpeg?

Yes. submit_job handles all FFmpeg invocation. You specify the operation path (/cut, /crop, /merge_urls, etc.) and a JSON body with the media URL and parameters. The server processes asynchronously and returns a download link via wait_for_task.

Ready to connect?

Subscribe, grab an API key, and your agent is processing video in minutes.