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
- Open the ChatGPT mobile app on iOS or Android
- Upload an image from the device's photo library using the attachment button
- Instruct ChatGPT to process the image using an MCP tool with
fileParams configured
- On the MCP server side, log the received parameters
- 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
- Parsing file_id from string reference: The string "chat_upload" doesn't provide enough information to fetch the file
- Requesting base64 encoding: Breaks the user experience and doesn't work for ChatGPT-managed file uploads from the app
Proposed Solutions
- Ensure fileParams binding works in mobile app: Make the auto-binding mechanism populate complete file objects in the native app, just like on web
- Consistent file reference format: If the mobile app must use a different format, provide documentation on how to resolve these references server-side
- 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
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
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:
download_urlthat the server can fetch fromSteps to Reproduce
fileParamsconfiguredTool Configuration (Example)
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:
Workarounds Attempted
Proposed Solutions
Additional Context
Related Documentation