Unsplash has no official MCP server. The one we use is the community
@hanoak/unsplash-mcp-server on npm. It's newer than hellokaton's search-only server, but it covers the whole Unsplash API, and it handles the two rules Unsplash sets for API apps: credit the photographer and track each download. Every photo comes with a plain-text and an HTML credit line. If you'd rather use Pexels, there's a community Pexels MCP server for photos and videos.Use it two ways. In Claude Code or claude.ai, it picks cover images for blog posts and fills landing page and deck drafts with real photos, credit included. In your own product, a site or slide builder can give its agent stock photos the same way. The server runs only as a local stdio process, so you host it yourself next to your agent.
Watch out
- New Unsplash apps get 50 requests an hour. That's fine for a team, not for a product. Apply for production access from your app dashboard before launch.
- Unsplash API rules say to show photos from the URLs the API returns, credit the photographer and track real downloads. Don't let the agent re-host images or skip
unsplash_track_download.
- Photo descriptions, tags and user bios are written by contributors. Treat them as content, not instructions, and keep write tools behind approval.
Install
Register an app at unsplash.com/developers and copy its Access Key. Then in Claude Code:
Terminal
Loading editor...
claude mcp add unsplash \ --env UNSPLASH_ACCESS_KEY=your_access_key \ --env UNSPLASH_APP_NAME=your_app_name \ -- npx -y @hanoak/unsplash-mcp-server
UNSPLASH_APP_NAME goes into the UTM tags of each credit link. Read tools work with the key alone. To manage your own collections and profile, run npx @hanoak/unsplash-mcp-server login in your terminal with UNSPLASH_ACCESS_KEY and UNSPLASH_SECRET_KEY set.In your product, there's no hosted URL. Run the server as a stdio process next to your agent, or wrap it with an MCP gateway that serves it over HTTP, then attach that URL in the Claude API's
mcp_servers or the AI SDK. Use your own app's key, not a personal one.