{"Status":true,"Message":"","Response":{"post":{"postuid":"1da31974-22b9-49ee-a4bb-c346db51d701","tenantuid":"d8b744fc-2e70-4089-bb80-dd1d08f6c7b2","projectuid":"fc6490ac-7527-4f49-b06e-46f701280e85","title":"Adding Images to Articles with MCP","slug":"article/adding-images-to-articles-with-mcp","html":"\u003Cp\u003EWhen an AI assistant such as Claude is connected to your project through the \u003Ca href=\u0022/article/model-context-protocol\u0022\u003EModel Context Protocol\u003C/a\u003E, it can add screenshots and other images to your articles as well as text. This article explains how image uploads work over MCP, and how to let Claude\u0027s code sandbox reach the upload address so they succeed.\u003C/p\u003E\u003Ch2 id=\u0022how_image_uploads_work\u0022\u003EHow image uploads work\u003C/h2\u003E\u003Cp\u003EThe image file never passes through the AI conversation. Instead, the assistant uploads it straight to HelpGuides storage, then asks HelpGuides to publish it. It takes four tool calls (see \u003Ca href=\u0022/model-context-protocol-endpoints\u0022\u003EModel Context Protocol Endpoints\u003C/a\u003E for every parameter):\u003C/p\u003E\u003Col\u003E\u003Cli\u003E\u003Cb\u003Ecreate_image_upload\u003C/b\u003E returns an upload ID and a private upload link that\u0027s valid for 10 minutes and can only be written to.\u003C/li\u003E\u003Cli\u003EThe assistant uploads the file to that link with an HTTP PUT, for example with \u003Ccode\u003Ecurl\u003C/code\u003E. This is the only step that runs on the assistant\u0027s side.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003Efinish_image_upload\u003C/b\u003E checks the file, publishes it to your CDN and returns its public URL, width and height.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003Eadd_image_to_article\u003C/b\u003E inserts the image into the article, with alt text, where you want it. By default it saves a working copy, so you can review the image in the editor before you publish.\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003EImages must be PNG, JPEG, GIF or WebP files of 5 MB or less. The file type is checked from the file itself, not its name.\u003C/p\u003E\u003Ch2 id=\u0022which_addresses_the_assistant_needs_to_reach\u0022\u003EWhich addresses the assistant needs to reach\u003C/h2\u003E\u003Cp\u003EOnly step 2 makes a direct connection, and it goes to HelpGuides storage at:\u0026nbsp;\u003Ccode class=\u0022inline-code\u0022\u003Egraffiticms.blob.core.windows.net\u003C/code\u003E\u003C/p\u003E\u003Cp\u003EThe other steps are ordinary MCP tool calls. Claude makes those from its own servers through your connector, so nothing else needs to be allowed. The CDN address the published images are served from only matters to people reading your articles.\u003C/p\u003E\u003Ch2 id=\u0022why_the_upload_can_fail_in_claude\u0022\u003EWhy the upload can fail in Claude\u003C/h2\u003E\u003Cp\u003EIn Claude on the web and in Claude Desktop, Claude runs the upload in a code sandbox in the cloud. That sandbox only connects to addresses your Claude settings allow. If HelpGuides storage isn\u0027t allowed, the upload fails before it reaches HelpGuides, usually with an error such as \u003Ccode\u003ECONNECT tunnel failed, response 403\u003C/code\u003E, while \u003Cb\u003Ecreate_image_upload\u003C/b\u003E itself succeeds.\u003C/p\u003E\u003Cp\u003EClaude Code, and other assistants that run on your own computer, upload from your computer instead, so they work without changing any settings.\u003C/p\u003E\u003Ch2 id=\u0022allow_helpguides_storage_in_claude\u0022\u003EAllow HelpGuides storage in Claude\u003C/h2\u003E\u003Cp\u003ETo enable file upload of images Allow network egress must be enabled for the \u003Ccode class=\u0022inline-code\u0022\u003Egraffiticms.blob.core.windows.net\u003C/code\u003E domain.\u003C/p\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221291\u0022 data-height=\u0022970\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/fc6490ac-7527-4f49-b06e-46f701280e85/29c9412e-0b79-49c4-b9ea-383aa49936bc.png?v=677398983\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Ch3 id=\u0022team_and_enterprise_plans\u0022\u003ETeam and Enterprise plans\u003C/h3\u003E\u003Cp\u003EAn organization owner makes this change once for everyone:\u003C/p\u003E\u003Col\u003E\u003Cli\u003ESign in to claude.ai as an owner and go to \u003Cb\u003EOrganization settings\u003C/b\u003E, then \u003Cb\u003ECapabilities\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003EMake sure \u003Cb\u003ECode execution and file creation\u003C/b\u003E is turned on.\u003C/li\u003E\u003Cli\u003EUnder network access, choose \u003Cb\u003EAllow network egress to package managers and specific domains\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003EAdd \u003Ccode\u003Egraffiticms.blob.core.windows.net\u003C/code\u003E to the allowed domains and save.\u003C/li\u003E\u003Cli\u003EStart a \u003Cb\u003Enew\u003C/b\u003E conversation and ask Claude to add the image again. Conversations that were already open may keep the old settings.\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003EChoosing \u003Cb\u003EAll domains\u003C/b\u003E also works, but it lets Claude reach any site, so allowing just the one domain is safer.\u003C/p\u003E\u003Ch3 id=\u0022free_pro_and_max_plans\u0022\u003EFree, Pro and Max plans\u003C/h3\u003E\u003Col\u003E\u003Cli\u003EGo to \u003Cb\u003ESettings\u003C/b\u003E, then \u003Cb\u003ECapabilities\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003ETurn on \u003Cb\u003ECode execution and file creation\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003ETurn on \u003Cb\u003EAllow network egress\u003C/b\u003E. If your settings show a list of allowed domains, add \u003Ccode\u003Egraffiticms.blob.core.windows.net\u003C/code\u003E to it.\u003C/li\u003E\u003Cli\u003EStart a new conversation and try again.\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003EClaude\u0027s settings change from time to time. For the current options, see Anthropic\u0027s help article on creating and editing files with Claude.\u003C/p\u003E\u003Ch2 id=\u0022if_the_upload_is_still_blocked\u0022\u003EIf the upload is still blocked\u003C/h2\u003E\u003Cul\u003E\u003Cli\u003ECheck that you started a new conversation after changing the setting.\u003C/li\u003E\u003Cli\u003ECheck that the domain is entered exactly, with no \u003Ccode\u003Ehttps://\u003C/code\u003E and no path.\u003C/li\u003E\u003Cli\u003EOn Team and Enterprise plans, check that the setting was changed by an owner in \u003Cb\u003EOrganization settings\u003C/b\u003E, not in your personal settings.\u003C/li\u003E\u003Cli\u003EIf Claude still reports a 403 from the tunnel or proxy, the block is in Claude, not HelpGuides. Contact your Claude administrator or Anthropic support.\u003C/li\u003E\u003C/ul\u003E\u003Cp\u003EMeanwhile, you can have Claude write the article and save it as a working copy, then add the screenshots yourself in the editor. You can drag, upload or paste them, as described in \u003Ca href=\u0022/article/working-with-images\u0022\u003EWorking with Images\u003C/a\u003E. Or use Claude Code, which uploads from your own computer.\u003C/p\u003E\u003Ch2 id=\u0022tips_for_screenshots\u0022\u003ETips for screenshots\u003C/h2\u003E\u003Cul\u003E\u003Cli\u003ECrop each screenshot to the part of the screen that matters.\u003C/li\u003E\u003Cli\u003EDon\u0027t capture personal data, customer records, API keys or other secrets.\u003C/li\u003E\u003Cli\u003EAsk Claude to place each screenshot directly after the step it illustrates, with alt text that describes what it shows.\u003C/li\u003E\u003C/ul\u003E","publish_status":0,"post_type":"Article","authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d","author":{"authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d"},"featured_image_updating":false,"meta_description":"Learn how to enable image uploads with Claude via Model Context Protocol, configure network access, and troubleshoot common issues in HelpGuides integration.","display_toc":true,"has_workingcopy":false,"allow_indexing":true,"total_views":1,"date_published":"2026-10-20T20:17:16.17","date_updated":"2026-10-20T20:17:17.133","date_created":"2026-10-20T20:12:25.77"}}}