picgo-mcp
This MCP server lets you upload images to your configured PicGo image host and inspect PicGo status.
Upload one local file,
file://URL, or HTTP(S) image URL withupload_image.Batch upload 1–20 images with
upload_images, processed serially with per-item results and partial-success reporting.Inspect PicGo status with
get_picgo_status: config existence/path, PicGo version, active uploader, configured field names, and available uploaders without exposing secrets.Reuse existing PicGo Core/Desktop/CLI configuration without requiring the PicGo desktop app or its local
127.0.0.1:36677service.Apply configured filename and output templates for uploaded images.
Allows uploading images to a GitHub repository configured as a PicGo image bed, with support for custom remote paths and generated CDN URLs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@picgo-mcp upload the image at /tmp/screenshot.png"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
picgo-mcp
Quick start: Send the following prompt to your Coding Agent:
请从 https://github.com/timerring/PicGo-MCP 安装并配置 PicGo MCP Server。
An MCP stdio server that embeds PicGo Core directly into the process. It lets MCP clients such as Codex and Claude Desktop reuse existing PicGo image hosting configurations, without requiring the PicGo desktop app to run and without going through 127.0.0.1:36677.
Features
Directly invokes PicGo Core 3, with no desktop app dependency.
Supports local files,
file://URLs, and HTTP(S) image URLs.Supports single image uploads and batch uploads of up to 20 images.
Automatically discovers PicGo Desktop, PicGo Core, and CLI configurations.
Supports custom uploaded file names and return formats.
Concurrent calls are automatically queued to prevent PicGo's mutable upload state from interfering with each other.
Status tools do not return config values such as tokens or secrets, and display the user's home directory as
~.
Related MCP server: flin-imgbb-mcp
Requirements
Node.js
>=20.19.0A working PicGo configuration file
Installation
Install from source:
npm install
npm run build
npm install -g .Verify the command is available:
picgo-mcp --helpInstalling into Codex
codex mcp add picgo -- picgo-mcp
codex mcp get picgoAfter adding the new MCP server, start a new task or refresh the client so the tool list reloads.
Other MCP clients
After a global install, the following stdio configuration can be used:
{
"mcpServers": {
"picgo": {
"command": "picgo-mcp"
}
}
}When the config file needs to be explicitly specified:
{
"mcpServers": {
"picgo": {
"command": "picgo-mcp",
"args": ["--config", "/path/to/picgo/config.json"]
}
}
}You can also set the environment variable PICGO_CONFIG_PATH. --config takes precedence over the environment variable and automatic discovery.
PicGo configuration
The following locations are searched in order:
macOS:
~/Library/Application Support/picgo/data.jsonWindows:
%APPDATA%/picgo/data.jsonLinux:
$XDG_CONFIG_HOME/picgo/data.jsonor~/.config/picgo/data.jsonAll platforms:
~/.picgo/config.json
GitHub image hosting example
The following example uploads images to the repository's images/ directory and returns CDN URLs via jsDelivr:
{
"picBed": {
"uploader": "github",
"current": "github",
"github": {
"repo": "OWNER/REPOSITORY",
"branch": "main",
"path": "images/",
"customUrl": "https://cdn.jsdelivr.net/gh/OWNER/REPOSITORY@main",
"token": "YOUR_GITHUB_TOKEN"
}
},
"picgoPlugins": {},
"settings": {
"picgoMcp": {
"uploadNameTemplate": "${dateTime}-${fileName}${extName}",
"outputFormat": "${url}"
}
}
}The GitHub token needs write access to the target repository. Do not commit real tokens to Git, issues, logs, or chat history, and restrict the config file permissions to be readable only by the current user:
chmod 600 ~/.picgo/config.jsonWhen PicGo Core 3 reads a legacy config for the first time, it may fill in an uploader config and internal metadata; this is normal automatic migration behavior.
File name templates
Configuration location:
{
"settings": {
"picgoMcp": {
"uploadNameTemplate": "${dateTime}-${fileName}${extName}"
}
}
}Supported variables:
Variable | Example | Description |
|
| Local date |
|
| Local time accurate to the second |
|
| Original file name, without extension |
|
| Original extension |
|
| Zero-based index for batch uploads; empty for single image uploads |
Recommended:
${dateTime}-${fileName}${extName}Using only ${dateTime}${extName} can cause name collisions for images uploaded within the same second. Templates only perform whitelist placeholder replacement, do not execute JavaScript, and do not allow extra paths such as ../ to be written through the file name; remote directories should be set using the uploader's path config.
Output template
Configuration location:
{
"settings": {
"picgoMcp": {
"outputFormat": "${url}"
}
}
}Supported variables:
${url}: the URL of the uploaded image.${uploadedName}: the uploaded file name, without extension.
Common formats:
${url}
Tool responses always include image info, a URL array, Markdown, and a formattedOutput generated from the template, so callers can choose the fields they need.
MCP tools
upload_image
Upload a local or remote image:
{
"source": "/path/to/image.png"
}upload_images
Batch upload 1–20 images:
{
"sources": [
"/path/to/first.png",
"https://example.com/second.jpg"
]
}get_picgo_status
Returns whether a config exists, the PicGo version, the current uploader, configured field names, and available uploaders. This tool does not return config values or image-hosting credentials.
Sample upload result
{
"images": [
{
"url": "https://cdn.example.com/images/2026-08-23-17-34-47-example.png",
"fileName": "2026-08-23-17-34-47-example.png",
"width": 800,
"height": 600,
"size": 123456
}
],
"urls": [
"https://cdn.example.com/images/2026-08-23-17-34-47-example.png"
],
"markdown": "",
"formattedOutput": "https://cdn.example.com/images/2026-08-23-17-34-47-example.png"
}How it works
MCP clients typically start a picgo-mcp stdio process and reuse it for the duration of the client session. Images are read and image source/hosting services are only accessed when an upload tool is called; once the client closes the connection, the server process exits and releases memory.
PicGo holds mutable input and output state on the instance, so this project serializes concurrent upload requests.
Security notes
Do not pass tokens in command arguments; credentials should be managed by the PicGo config.
MCP tools do not return image-hosting credentials; status tools only return field names.
Home directory paths are replaced with
~in tool responses.HTTP(S) images are first downloaded by PicGo, then uploaded to the configured image-hosting service.
PicGo loads plugins according to its config; only install and enable trusted plugins.
Do not expose the stdio server to untrusted clients.
Development and verification
npm install
npm test
npm run check
npm run buildTesting currently covers config discovery, MCP tool registration, status redaction, upload input validation, naming templates, output templates, and privacy checks for hosted files.
License
Available Tools
3 toolsget_picgo_statusInspect PicGo statusARead-onlyIdempotent
Show the selected config path, PicGo version, active uploader, configured field names, and available uploaders. Secret values are never returned.
Inputs: no named parameters.
upload_imageUpload one image with PicGoA
Upload one local image file or HTTP(S) image URL using the active PicGo uploader.
Inputs: source (required).
upload_imagesUpload multiple images with PicGoA
Upload up to 20 local image files or HTTP(S) image URLs in one PicGo batch.
Inputs: sources (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
upload_image and upload_images are clearly differentiated as singular vs. batch operations, and get_picgo_status serves a distinct diagnostic purpose. No tools overlap in a way that would cause selection confusion.
All tool names follow the same snake_case verb_noun pattern: upload_image, upload_images, get_picgo_status. The naming is predictable and consistent across the set.
Three tools is on the smaller side but well-suited for a focused image-upload server. Each tool provides a distinct needed capability: single upload, batch upload, and status/configuration inspection.
The server covers the core upload lifecycle well, including single and batch uploads plus status/uploader information. A minor gap is the lack of an explicit uploader-selection or configuration tool, but the active uploader is readable via status, so agents can work around it.
Maintenance
Related MCP Connectors
MCP server exposing the YourImageShare upload API (upload/list/delete) as tools for AI agents.
Image infrastructure for agents. Upload, transform, and deliver images through MCP, CLI, or API.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Convert images to PNG, JPEG, WebP, or AVIF through one public remote MCP tool.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP server for image processing and cloud uploads that automates resizing, converting, optimizing, and uploading images to services like AWS S3, Cloudflare R2, and Google Cloud Storage.14 npm18MIT
- AlicenseAqualityDmaintenanceMCP server for uploading images to ImgBB from Claude-compatible clients.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables uploading images to a running PicGo application through its built-in server.2 npm5Apache 2.0
- AlicenseAqualityCmaintenanceA local (stdio) MCP server for PixelVault — agent-first image hosting, enabling upload of local files by path without base64.68 npmMIT