Upload Post Image
upload_post_imageUpload an image for a blog post. Send the file bytes as base64 — works in local and hosted MCP. Converted to WebP and stored; returns a stable HTTPS URL. Allowed types: JPEG, PNG, GIF, WebP. Max 10 MB decoded.
A URL this tool returned for this workspace is the only one the API accepts as a cover or an author photo. The URL also works for in-body images. Markdown is not restricted by the API, but external, guessed or placeholder image URLs may not render, and local file paths are not publicly accessible.
The URL has three independent uses, and setting one does not set the others:
COVER. CoverImageURL on create_post or edit_post: the post page/card/social-metadata/newsletter image, described by CoverImageAlt.
AUTHOR PHOTO. AuthorAvatarURL on create_post or edit_post: the photo beside the byline and the author's image in structured data.
BODY ILLUSTRATION. Insert it into Markdown as
where the text earns it — a diagram or figure that shows something the prose cannot.
It takes real image bytes, such as a file the user supplied. Nothing else substitutes for them: the blog renders markdown with raw HTML disabled, so inline SVG and fenced mermaid blocks publish as visible literal text rather than as a picture. A markdown table or a structured list is the correct way to carry a comparison or a set of figures.
A body illustration's alt text describes what the image SHOWS. It is what screen readers announce and what appears when the image fails to load; the filename is only a fallback. For the cover, that description goes in CoverImageAlt on create_post/edit_post, and is omitted when the cover only decorates the title.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"ContentType": "<ContentType>",
"DataBase64": "<DataBase64>"
},
"name": "upload_post_image"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Filename | No | Optional original filename, used as a hint for alt text. A descriptive name (retry-queue-latency.png, not image1.png) is the fallback when the alt text is thin. | |
| DataBase64 | Yes | Raw base64 image bytes, no data-URL prefix - strip any leading data:image/png;base64, before sending. Max 10 MB decoded. These must be real image bytes you actually hold, from a generated image or a file the user supplied; there is no way to synthesise them from a description. | |
| ContentType | Yes | MIME type of the bytes you are sending: image/jpeg, image/png, image/gif, or image/webp. SVG is NOT accepted, and would not render even if it were - the blog escapes raw markup. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| URL | Yes | Stable HTTPS URL of the stored WebP. Assign it as a post's cover via create_post/edit_post's CoverImageURL, as the author's photo via their AuthorAvatarURL, or insert it into Markdown as  for an in-body illustration - the placements are independent. | |
| Bytes | Yes | Stored WebP size in bytes. | |
| Width | Yes | Stored image width in pixels. | |
| Height | Yes | Stored image height in pixels. |