Skip to content

Mobile file uploads in ChatGPT app send incomplete file references instead of downloadable URLs #185

@guilhermeqmaia

Description

@guilhermeqmaia

Summary

When users upload images from mobile devices using the ChatGPT native app (iOS/Android) and request to use them with MCP tools, the file references sent to the MCP server are incomplete, preventing the server from downloading and processing the files.

Environment

  • Platform: ChatGPT native mobile app (iOS App Store / Android Play Store)
  • Devices Tested: iOS (iPhone), Android
  • MCP SDK Version: Latest (as of January 2025)
  • File Types Affected: Images (PNG, JPEG, etc.)

Expected Behavior

When a user uploads a file from the ChatGPT mobile app and instructs ChatGPT to pass it to an MCP tool that uses fileParams, the tool should receive a complete file object with:

{
  "file_id": "file-abc123",
  "download_url": "https://files.oaiusercontent.com/...",
  "name": "photo.jpg",
  "mime_type": "image/jpeg",
  "size": 123456
}

Actual Behavior

Instead, the MCP server receives only a string reference:

{
  "images": ["chat_upload"]
}

Or sometimes:

{
  "images": ["chat_upload://image_0"]
}

This lacks:

  • A valid download_url that the server can fetch from
  • Complete file metadata (mime_type, size)
  • A consistent format

Steps to Reproduce

  1. Open the ChatGPT mobile app on iOS or Android
  2. Upload an image from the device's photo library using the attachment button
  3. Instruct ChatGPT to process the image using an MCP tool with fileParams configured
  4. On the MCP server side, log the received parameters
  5. Observe that only a string reference is received instead of a complete file object

Tool Configuration (Example)

{
  name: "process_image",
  description: "Process uploaded images",
  parameters: {
    images: {
      type: "array",
      items: {
        type: "object",
        properties: {
          file_id: { type: "string" },
          download_url: { type: "string" },
          name: { type: "string" },
          mime_type: { type: "string" },
          size: { type: "number" }
        }
      }
    }
  },
  _meta: {
    "openai/fileParams": ["images"]
  }
}

Comparison: Web vs Mobile App

Web Upload (ChatGPT via browser) ✅ Works correctly:

{
  "images": [{
    "file_id": "file-abc123",
    "download_url": "https://files.oaiusercontent.com/file-xyz/...",
    "name": "screenshot.png",
    "mime_type": "image/png",
    "size": 245678
  }]
}

Mobile App Upload (iOS/Android) ❌ Incomplete:

{
  "images": ["chat_upload"]
}

Impact

This issue prevents MCP servers from:

  • Downloading and processing files uploaded via the mobile app
  • Implementing file upload features that work across all platforms
  • Providing a consistent user experience between web and mobile app users

Workarounds Attempted

  1. Parsing file_id from string reference: The string "chat_upload" doesn't provide enough information to fetch the file
  2. Requesting base64 encoding: Breaks the user experience and doesn't work for ChatGPT-managed file uploads from the app

Proposed Solutions

  1. Ensure fileParams binding works in mobile app: Make the auto-binding mechanism populate complete file objects in the native app, just like on web
  2. Consistent file reference format: If the mobile app must use a different format, provide documentation on how to resolve these references server-side
  3. Document the limitation: If mobile app file access is intentionally restricted, document this limitation clearly

Additional Context

  • This affects all MCP servers that need to process user-uploaded files from mobile devices
  • The issue appears to be specific to the ChatGPT native mobile apps (both iOS and Android)
  • Web uploads (via browser on any device) work perfectly with the same MCP tool configuration
  • The inconsistency creates a poor user experience where features work on web but fail on mobile app

Related Documentation

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions