{
  "id": "storage.upload_url",
  "object": "tool",
  "name": "Upload to presigned URLs",
  "summary": "PUT or POST files to URLs you give.",
  "description": "Sends files to upload URLs you provide, such as S3 or GCS presigned URLs, an Azure SAS URL, or your own endpoint: an HTTP PUT of the raw bytes, or a multipart POST with extra form fields (S3 presigned POST). Optional headers are sent as given. Only public https URLs; redirects aren't followed. Returns each URL's host and path (never its query) with the status and bytes sent.",
  "category": "files",
  "hosted_by": "Opentools",
  "runtime": "worker",
  "side_effects": true,
  "status": "live",
  "credits": 1,
  "price": "$0.0010",
  "providers": [
    {
      "id": "opentools",
      "name": "Opentools",
      "price": "$0.0010"
    }
  ],
  "mcp_name": "storage_upload_url",
  "input_schema": {
    "type": "object",
    "properties": {
      "uploads": {
        "minItems": 1,
        "maxItems": 50,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "The upload URL (https)"
            },
            "file": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Public http(s) URL of the file"
                    }
                  },
                  "required": [
                    "url"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "file_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "An id returned by POST /v1/files"
                    }
                  },
                  "required": [
                    "file_id"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "base64": {
                      "type": "string",
                      "description": "Base64-encoded file bytes (up to 10 MB)"
                    },
                    "name": {
                      "type": "string",
                      "description": "File name, e.g. invoice.pdf"
                    },
                    "content_type": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "base64",
                    "name"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "connection": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64,
                      "description": "A storage connection id or name (see storage.connections)"
                    },
                    "path": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 1024,
                      "description": "Path of the file in that connection, e.g. reports/q3.pdf"
                    }
                  },
                  "required": [
                    "connection",
                    "path"
                  ]
                }
              ],
              "x-file": true,
              "description": "A file: { url }, { file_id }, { base64, name } or { connection, path } from connected storage"
            },
            "method": {
              "default": "PUT",
              "description": "PUT the raw bytes, or POST a multipart form",
              "type": "string",
              "enum": [
                "PUT",
                "POST"
              ]
            },
            "headers": {
              "description": "Extra request headers, e.g. {\"x-amz-acl\": \"private\"}",
              "type": "object",
              "propertyNames": {
                "type": "string",
                "pattern": "^[A-Za-z0-9-]{1,64}$"
              },
              "additionalProperties": {
                "type": "string",
                "maxLength": 4096
              }
            },
            "fields": {
              "description": "POST only: form fields sent before the file (presigned POST policy fields)",
              "type": "object",
              "propertyNames": {
                "type": "string",
                "maxLength": 256
              },
              "additionalProperties": {
                "type": "string",
                "maxLength": 8192
              }
            },
            "file_field": {
              "default": "file",
              "description": "POST only: the form field for the file",
              "type": "string",
              "maxLength": 64
            }
          },
          "required": [
            "url",
            "file"
          ]
        }
      }
    },
    "required": [
      "uploads"
    ]
  },
  "kind": "tool"
}