Skip to main content
Артём маликов
New Participant
September 28, 2026
Question

Figma MCP upload_assets returns HTTP 405

Hello Figma Support,

I’m working in ChatGPT with the officially connected Figma MCP plugin. I have edit access to the target file, and other canvas editing actions work, but image uploads fail.

On September 28, 2026 at 16:18 UTC, I requested a fresh submitUrl from upload_assets for file E1r9TavVGj7XrvGMaL6RAb. Following the tool’s preferred instructions, I sent a 706,594-byte PNG via POST as multipart/form-data, with the image in the file field.

The endpoint on mcp.figma.com returned HTTP/2 405 Not Allowed, with a 163-byte HTML response from openresty/1.27.1.1. There was no Allow header or request ID, and the image was not placed.

Could you investigate why the fresh upload URL rejects the request format specified by upload_assets?

6 replies

Jaycee Lewis
Figmate
Figmate
September 28, 2026

Hi ​@Артём маликов 👋 Thank you very much for your detailed post.I have a few questions:

  • Could you share the upload_assets tool call and its complete response, especially the upload instructions? Seeing the HTTP request (method, URL path, Content-Type, and body format) and the response status, headers, and body is super helpful for troubleshooting. (Please redact the full submitUrl, including its query string, along with any credentials)
  • Was this in ChatGPT, the Codex app or CLI, or another client?

If you’re comfortable, here’s a quick test to see if we get success or another 4XX response:

Using the same session in Codex (if possible), request Codex to use fresh upload URL and send the same PNG as raw bytes:

curl -i --request POST \
--header 'Content-Type: image/png' \
--data-binary '@/path/to/image.png' \
'<fresh submitUrl from upload_assets>'

Make sure to replace both placeholders locally.

Talk soon! — Jaycee

Артём маликов
New Participant
October 2, 2026

Hi Jaycee,

I ran the test in the ChatGPT web interface with the officially connected Figma MCP plugin, not in the Codex app or CLI. The connected account is artmalikoff@gmail.com. I can edit the target file: I successfully created a square in the same frame after the upload test.

Here is the upload_assets call:

{
"fileKey": "E1r9TavVGj7XrvGMaL6RAb",
"currentPageId": "264:16525",
"count": 1,
"nodeIds": ["444:5193"],
"scaleMode": "FIT"
}

Here is its complete text response, with only the full submitUrl redacted:

{
"uploads": [
{
"submitUrl": "[REDACTED: FULL URL INCLUDING QUERY STRING]",
"targetNodeId": "444:5193"
}
],
"instructions": "Upload each asset by POSTing to the submitUrl. You can POST the upload URLs in parallel. You can use either format:\n1. multipart/form-data with a 'file' field (PREFERRED — the filename from the upload is used as the layer name in Figma)\n2. Raw bytes with the correct Content-Type header (e.g. image/png, image/jpeg)\n\nSupported types: image/png, image/jpeg, image/gif, image/webp, image/svg+xml. SVGs (image/svg+xml) are imported as editable vector node trees; nodeId, nodeIds, and scaleMode do not apply to them. Each URL is single-use and expires after 10 minutes. The response from each POST will contain the imageHash and placement details."
}

I sent HIBERG_HDQ11-10_B_prepared.png (706,594 bytes) to the fresh URL as requested:

POST /mcp/upload/[REDACTED ID]/submit?[REDACTED QUERY] HTTP/2
Host: mcp.figma.com
Content-Type: image/png

[raw PNG bytes; not multipart/form-data]

The equivalent curl invocation used --request POST, --header 'Content-Type: image/png', and --data-binary @...png. The upload response at 2026-10-02 08:32:35 UTC was:

HTTP/2 405
server: openresty/1.27.1.1
date: Fri, 02 Oct 2026 08:32:35 GMT
content-type: text/html
content-length: 163

Complete response body:

<html>
<head><title>405 Not Allowed</title></head>
<body>
<center><h1>405 Not Allowed</h1></center>
<hr><center>openresty/1.27.1.1</center>
</body>
</html>

No Allow header or request ID was returned. The PNG was not placed. I removed the empty temporary target layer afterward; the existing image in the frame remains intact.

Ira999
New Member
October 15, 2026

Hi everyone! I’m experiencing the same issue. Has a solution or workaround been found yet?

adamsmasher
Figmate
Figmate
October 15, 2026

Hi, ​@Ira999. Thanks for your reply - it’s unfortunate you ran into this issue, too.

 

Could you try again and let me know the following information?

  • The exact time the failed attempt occurred
  • The timezone for that timestamp
  • Any error message shown in ChatGPT for that specific attempt
  • A link to the Figma file you were trying to add the image to, shared with support-share@figma.com with view access (this won’t affect your billing).

 

I’ll share that with our engineering team to review with the current report. Thanks!