All MCP tools

open_uploader

Get a recording upload link

Use this when the user wants to add a local audio or video recording to BitterClip. Returns a shareable, token-gated upload link (a hosted drop-zone page) the user opens in a browser to drop their file — it uploads straight to storage and starts transcribing on its own. Pass `project` (a project name, slug, or public ID like "Landing 100") to scope the upload to that project, or omit it for the account's default uploads project. Give the returned `upload_url` to the user. Prefer this over asking the user for a public download URL.

Surface: App-only

Product release 1dce717408a55fac1047e7d779177fa3ef8ede51
Public contract commit 1ce47f7857ae3d9b6933fe83d5c33de3ae5efc64
Public contract SHA-256 241d47d25e4b4c1dae9d2263793874d06fc4ba7bc3c78d4cf2bc63fbb32ed7dc
Captured 2026-09-24T16:39:30.100Z. Review or improve this contract on GitHub.

These blocks show the complete MCP descriptors captured from serving Rails. Security schemes and resource URIs can differ by connected host.

App descriptor

{
  "name": "open_uploader",
  "title": "Get a recording upload link",
  "description": "Use this when the user wants to add a local audio or video recording to BitterClip. Returns a shareable, token-gated upload link (a hosted drop-zone page) the user opens in a browser to drop their file — it uploads straight to storage and starts transcribing on its own. Pass `project` (a project name, slug, or public ID like \"Landing 100\") to scope the upload to that project, or omit it for the account's default uploads project. Give the returned `upload_url` to the user. Prefer this over asking the user for a public download URL.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "project": {
        "type": "string",
        "description": "Optional project to attach uploads to — a project name, slug, or public ID. Omit for the default uploads project."
      },
      "capture_session_id": {
        "type": "string",
        "description": "Optional footage-session public ID. Every file uploaded through the link joins this same capture chronology."
      }
    },
    "required": [],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "securitySchemes": [
    {
      "type": "noauth"
    }
  ],
  "_meta": {
    "securitySchemes": [
      {
        "type": "noauth"
      }
    ],
    "ui": {
      "visibility": [
        "app"
      ]
    },
    "openai/widgetAccessible": true,
    "openai/visibility": "private"
  },
  "outputSchema": {
    "type": "object",
    "properties": {
      "mode": {
        "type": "string",
        "description": "\"upload_link\" when a shareable upload link is returned."
      },
      "upload_url": {
        "type": "string",
        "description": "The token-gated drop-zone page URL to give the user."
      },
      "project": {
        "type": "object",
        "description": "The resolved project the uploads land in, or null for the default project."
      },
      "capture_session": {
        "type": "object",
        "description": "The footage session the uploads join, when requested."
      },
      "expires_at": {
        "type": "string",
        "description": "ISO8601 link expiry (7 days out)."
      },
      "accepted_content_types": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "max_bytes": {
        "type": "integer"
      }
    },
    "required": [],
    "additionalProperties": false
  }
}

Errors

[
  "invalid_input"
]

Examples

[]