Image Asset Server MCP server for AI agents
Image Asset Server is a Model Context Protocol server. Connect it once and your agent can search every image source, check licences, pick the right size and fill every image slot of a page while it works on your site, app, slides or document.
MCP endpoint: https://image.shep.bot/mcp (Streamable HTTP, no authentication). Register it under the name images.
Claude Code
claude mcp add --transport http images https://image.shep.bot/mcp
Add --scope user to make it available in every project, or --scope project to share it with your team through .mcp.json. Check it with claude mcp list, or /mcp inside a session.
Cursor
Add this to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json for every project (the home page has a one-click “Add to Cursor” button):
{
"mcpServers": {
"images": { "url": "https://image.shep.bot/mcp" }
}
}
VS Code (GitHub Copilot)
Add to .vscode/mcp.json, then use Copilot Chat in Agent mode:
{
"servers": {
"images": { "type": "http", "url": "https://image.shep.bot/mcp" }
}
}
Or from a terminal: code --add-mcp '{"name":"images","type":"http","url":"https://image.shep.bot/mcp"}'
Claude desktop app and claude.ai
Open Settings → Connectors → Add custom connector, name it Image Asset Server and paste https://image.shep.bot/mcp.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"images": { "serverUrl": "https://image.shep.bot/mcp" }
}
}
OpenAI Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.images]
url = "https://image.shep.bot/mcp"
Gemini CLI
gemini mcp add --transport http images https://image.shep.bot/mcp
Any other client
Clients that only support stdio servers can bridge to the HTTP endpoint with mcp-remote:
{
"mcpServers": {
"images": { "command": "npx", "args": ["-y", "mcp-remote", "https://image.shep.bot/mcp"] }
}
}
Tools your agent gets
| Tool | What it does |
|---|---|
search_images |
Search every source. Arguments: query (designer words work: “mountain lake at sunrise”, “van gogh sunflowers”, “rocket icon svg”, “coffee cup transparent png”, “4k vertical forest”), categories (e.g. nature.ocean, animals, art.painting, art.drawing, space.planets, archive.map, background, icons), styles (photo, illustration, painting, drawing, vector, icon, transparent, black-white), orientation, min_resolution (720, 1080, 1440, 2160), transparent, formats, commercial_only (default true), free_only, downloadable_only, strict, providers, limit, offset. Also returns also_search_on: deep links into the image sites that can’t be searched automatically. |
get_image |
Details for one id: licence, verdict, editorial flag and credit line, every file (size, format), a display URL that loads in a browser straight from the source, and selection.downloadUrl for the smallest file at least width pixels wide (and format). |
build_image_set |
Turns a list of slots (a list, or text with one slot per line; “(1200px)” sets a width; “3 icons: rocket, shield, chart” makes three slots) into one image per slot matching its orientation, kind and width, commercial-safe by default, with alternatives, plus images.json, credits.html (<figure> snippets with credit captions), download.sh and ATTRIBUTION.md. |
list_sources |
Every source with what it is best for, categories, pricing, licence and whether it is searched or linked. |
download_image |
Local servers only: writes the chosen file into ./images/<category>/ and keeps ATTRIBUTION.md and credits.json up to date. |
The hosted server never writes to its own disk, so agents with a shell download through the links it returns (the download URL redirects to the file on the source):
mkdir -p images
curl -L -o images/hero.jpg "https://image.shep.bot/v1/images/<id>/download?width=1920"
Licence rules the agent follows
Image licences have traps, so the server tells every agent the same rules, and you can expect them to be followed:
- Searches are commercial-safe by default (
commercial_only=true). The agent turns that off only when you say the project is personal, educational or non-commercial. - It reports the verdict of every image it suggests, and never presents a
no(non-commercial),check-terms(unclear) or editorial image as cleared for advertising. license.editorial: truemeans people, insignia or brands appear without releases: fine for articles, books and education, not for ads or anything that implies endorsement. All NASA images carry it.- When an image needs credit (
yes-with-credit), it gives you the exactattributionline; local downloads and image sets collect them inATTRIBUTION.md. - CC BY-SA images are
restricted(an edited version must be share-alike), and CC BY-ND forbids cropping or editing.
Details: Image licences explained.
Prompts that work well
Find a wide, high-resolution photo of a misty forest for our landing page hero. Commercial-safe only, no editorial images. Show me its licence and credit line first.
Pick the images for this slide deck: a title slide background of the night sky, Saturn for slide 3, a vintage map of Europe for slide 5, and icons for growth, team and security. Give me credits.html.
I'm writing an article about Japanese art. Find public-domain Hokusai and Hiroshige prints, and tell me which museum each one is from.
Tips for agents and the people prompting them:
- Describe the picture, not the file: “close-up of coffee beans”, “aerial photo of a winding river”, “line icon of a shopping cart”.
- Put the format in the words or the filters: “vertical”, “4k”, “svg”, “transparent png”.
- Results with
downloadable: falsemust be fetched from theirurlon the source site.
Local mode: downloads straight to disk
For download_image and image-set downloads into your project, run the server locally over stdio:
claude mcp add images-local -- npx -y image-asset-server mcp
Or with Docker, mounting your images folder:
claude mcp add images-local -- docker run -i --rm \
--user "$(id -u):$(id -g)" -v "$PWD/images:/app/images" \
ghcr.io/arielshad/image-asset-server node dist/cli.js mcp
Files land in ./images/<category>/ (set IMAGE_DOWNLOAD_DIR to change it), with ATTRIBUTION.md and credits.json next to them. build_image_set with download=true saves the picks into ./images/sets/<name>/images/ and writes the exports next to them, pointing at the local files. No source needs an API key.
Agents without MCP
Any agent that can fetch URLs can use the REST API directly. Point it at /AGENTS.md; it has the whole workflow and the licence rules in a few lines. In Claude Code you can also install the ready-made skill:
mkdir -p ~/.claude/skills/images
curl -fsSL https://image.shep.bot/skill/SKILL.md -o ~/.claude/skills/images/SKILL.md
AI agent? This page is also available as markdown.