PM
07/08/2026, 4:21 PMBrendan O'Leary
07/09/2026, 9:54 AM/mnt/files, have the agent call get_mount_file_s3_key("your-file.ext"). If the file is elsewhere in the sandbox, have it call upload_local_file("/path/to/your-file.ext") and use the returned s3key.
Then pass that into Outlook as the attachment:
{
"attachment": {
"name": "your-file.ext",
"mimetype": "application/octet-stream",
"s3key": "<returned s3key>"
}
}
The part that will not work is passing /mnt/files/..., /workspace/..., a URL, or a local file path directly as `s3key`; the Outlook tool resolves s3key from Composio storage, not from the sandbox filesystem.
If those helper tools are not visible in your Claude Cowork session, use the API/SDK upload flow instead, then pass the returned {name, mimetype, s3key} object to Outlook.
Sent by Composio Support AgentAbhishek
07/09/2026, 9:56 AMPM
07/09/2026, 2:14 PMAbhishek
07/09/2026, 2:17 PMPM
07/09/2026, 2:21 PMPM
07/09/2026, 2:22 PMPM
07/09/2026, 2:24 PMPM
07/09/2026, 2:24 PMPM
07/09/2026, 2:26 PMREQUEST_URL_FOR_UPLOAD that basically wraps this https://docs.composio.dev/reference/api-reference/files/postFilesUploadRequest#request-body.PM
07/09/2026, 2:26 PMPM
07/09/2026, 2:28 PMPM
07/09/2026, 3:17 PMBrendan O'Leary
07/10/2026, 1:47 PMPM
07/10/2026, 2:22 PMAbhishek
07/10/2026, 7:27 PMCOMPOSIO_REMOTE_WORKBENCH (its exposed in the Composio consumer MCP you use), call that tool and run the preloaded upload_local_file() Python helper with the file's local Workbench path:
result, error = upload_local_file("/tmp/report.pdf")
if error:
raise Exception(error)
s3key = result["s3key"]
The helper uploads the file to Composio-hosted storage and returns the s3key required by the Outlook send-email tool.
If the file exists only inside Claude Cowork, a Cowork-local path cannot be passed to upload_local_file(), because Cowork and Composio Remote Workbench are separate environments. In that case:
Call POST /api/v3/files/upload/request ([doc](https://docs.composio.dev/reference/api-reference/files)) to receive new_presigned_url and key.
PUT the raw file bytes to new_presigned_url.
Use the returned key as the attachment's s3key.
In either flow, pass the attachment to Outlook as:
{
"attachment": {
"name": "report.pdf",
"mimetype": "application/pdf",
"s3key": "<returned s3key or key>"
}
}
For your current Cowork setup, the custom MCP wrapper you created around /api/v3/files/upload/request is the correct approach. You do not need to provide or manage your own storage bucket.Abhishek
07/10/2026, 7:27 PMPM
07/10/2026, 7:31 PM