Recommended
MCP
Best for AI coding agents
Connect MCPDevelopers
Connect Cursor, Claude Code, Codex, or any MCP client to DropIMG. Upload and replace images, SVGs, favicons, and web fonts without changing the URL in your application.
Recommended
Best for AI coding agents
Connect MCPREST
Best for scripts and backend workflows
View examplesDrops
Best for screenshots and short-lived links
View Drops APISign in, create a Web Assets project, connect MCP, upload the first file, and paste the returned URL into the app. Temporary screenshot URLs still use the Drop API below.
Create your DropIMG account.
Use a slug like website.
https://dropimg.io/mcp
Upload this logo as branding/logo.
https://dropimg.io/m/acme/site/branding/logo
Replace the asset later and the URL stays unchanged.
{
"mcpServers": {
"dropimg": {
"url": "https://dropimg.io/mcp"
}
}
}
Cursor and compatible MCP clients can authenticate through OAuth.
https://dropimg.io/mcp
Canonical endpoint: https://dropimg.io/mcp. Streamable HTTP. One server for Drops and Web Assets — not a second MCP process.
list_media_projectscreate_media_projectlist_media_assetsget_media_assetupload_media_assetreplace_media_assetupload_imageget_imagelist_imagesdelete_imageApplication code does not change.
You:
Replace the homepage hero.
Agent:
✓ Found homepage/hero
✓ Requested replacement upload
✓ Uploaded new image
✓ Stable URL unchanged
https://dropimg.io/m/acme/site/homepage/hero
REST create is a signed-in session. Prefer the dashboard or MCP create_media_project. Project keys cannot create projects.
curl -X POST https://dropimg.io/api/v1/media/orgs
curl -X POST https://dropimg.io/api/v1/media/orgs/$ORG_ID/projects \
-H "Content-Type: application/json" \
-d '{
"slug": "website",
"name": "website"
}'
POST file bytes to the returned intent.uploadUrl with intent.headers. Do not put bytes in JSON.
curl -X POST https://dropimg.io/api/v1/media/projects/$PROJECT_ID/intents \
-H "Authorization: Bearer $DROPIMG_PROJECT_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "create",
"path": "branding/logo"
}'
curl -X POST "$UPLOAD_URL" \
-H "Authorization: Bearer $INTENT_TOKEN" \
--data-binary @logo.png
Replacement preserves the stable alias. MIME may change.
curl -X POST https://dropimg.io/api/v1/media/projects/$PROJECT_ID/intents \
-H "Authorization: Bearer $DROPIMG_PROJECT_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "replace",
"asset_id": "$ASSET_ID"
}'
const intentRes = await fetch(
`https://dropimg.io/api/v1/media/projects/${process.env.DROPIMG_PROJECT_ID}/intents`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DROPIMG_PROJECT_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ operation: "create", path: "branding/logo" }),
},
);
const { intent } = await intentRes.json();
const uploadRes = await fetch(intent.uploadUrl, {
method: "POST",
headers: intent.headers,
body: logoBytes,
});
const { asset } = await uploadRes.json();
console.log(asset.url);
import os
import requests
headers = {
"Authorization": f"Bearer {os.environ['DROPIMG_PROJECT_KEY']}",
"Content-Type": "application/json",
}
intent = requests.post(
f"https://dropimg.io/api/v1/media/projects/{os.environ['DROPIMG_PROJECT_ID']}/intents",
headers=headers,
json={"operation": "create", "path": "branding/logo"},
).json()["intent"]
asset = requests.post(
intent["uploadUrl"],
headers=intent["headers"],
data=open("logo.png", "rb"),
).json()["asset"]
print(asset["url"])
Upload a screenshot or image and get a short-lived share URL. Multipart field file. This is not the Web Assets quota.
curl -X POST https://dropimg.io/api/v1/images \
-H "Authorization: Bearer $DROPIMG_API_KEY" \
-F file=@screenshot.png \
-F expiry=7d
{
"id": "abc123xy",
"url": "https://dropimg.io/abc123xy",
"image_url": "https://dropimg.io/i/abc123xy",
"created_at": "2026-09-07T12:00:00.000Z",
"expires_at": "2026-09-14T12:00:00.000Z"
}
const form = new FormData();
form.append("file", file);
form.append("expiry", "7d");
const res = await fetch("https://dropimg.io/api/v1/images", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.DROPIMG_API_KEY}` },
body: form,
});
const image = await res.json();
console.log(image.url);
import os
import requests
r = requests.post(
"https://dropimg.io/api/v1/images",
headers={"Authorization": f"Bearer {os.environ['DROPIMG_API_KEY']}"},
files={"file": open("screenshot.png", "rb")},
data={"expiry": "7d"},
)
print(r.json()["url"])
Cursor, MCP clients, humans
Cursor and compatible MCP clients authenticate through OAuth.
Scripts, backend automation, multiple projects
Drops REST and MCP across projects. Minted once on Integrations.
CI/CD, one project, scoped automation
Web Assets REST for that project. Project keys cannot create projects.
| Plan | Projects | Storage | Deliveries | Keys | File |
|---|---|---|---|---|---|
| Free | 3 | 1 GB | 100K / month | 2 | 10 MB |
| Developer | 20 | 10 GB | 2M / month | 20 | 10 MB |
| Pro | 100 | 100 GB | 10M / month | 100 | 10 MB |
| Plan | File | Expiry | API / MCP |
|---|---|---|---|
| Drops Free | 25 MB | 1h · 24h · 7d · 30d | 20 uploads / 50 MB per day |
| Drops Pro | 25 MB (50 MB when enabled) | plus 90d · 180d | 100 uploads / 500 MB per day |
{
"error": "Plan allows 3 projects",
"code": "quota_exceeded"
}
| Code | When |
|---|---|
unauthorized |
Missing or invalid Bearer token. |
forbidden |
Key is missing the required scope, or a project key tried to create a project. |
quota_exceeded |
Plan limit reached — projects, storage, keys, or Drop API/MCP daily bucket. |
unsupported_type |
Bytes are not an accepted Web Asset or Drop type. |
not_found |
Org, project, asset, Drop, or intent does not exist. |
Yes. The primary product is permanent Web Assets with stable /m/… URLs. The same /mcp endpoint also uploads temporary Drops. Drops expire; Web Assets stay until you replace or delete them.
Yes for MCP OAuth, REST, and Web Assets projects. Create an account API key (dropimg_api_…) on Integrations, or a project key (dropimg_pk_…) for one project. Anonymous uploads stay on the website and ShareX — not on the public REST API.
A dropimg_pk_… key is scoped to one project. It can list, upload, and replace assets in that project. Project keys cannot create projects.
https://dropimg.io/openapi/v1.yaml — Drops images plus Web Assets (orgs, projects, keys, assets, intents). Public /m/… aliases are not confidential.
No. Web Assets plans cap projects, storage, keys, and monthly deliveries. Drops API/MCP share a separate daily bucket: Free 20 uploads / 50 MB, Drops Pro 100 / 500 MB. Site Drop uploads are not the same meter.