Unsplash MCP Server
Provides access to the Unsplash API, enabling AI assistants to search and retrieve high-quality photos, browse collections, view photographer profiles, and get photo statistics with advanced filtering options.
README
Unsplash MCP Server
A Model Context Protocol (MCP) server that provides access to the Unsplash API, enabling AI assistants to search and retrieve high-quality, free-to-use photos.
Features
- š Search Photos: Search millions of high-quality photos by keywords with advanced filters
- šø Photo Details: Get detailed information about specific photos including EXIF data
- š² Random Photos: Get random photos, optionally filtered by query or orientation
- š Collections: Search and browse curated photo collections
- š¤ User Profiles: Search photographers and view their portfolios
- š Statistics: Get view, download, and like statistics for photos
- šØ Advanced Filters: Filter by orientation, color, content safety level
- š Multiple Formats: Response in JSON or Markdown format
Installation
Prerequisites
- Node.js 18 or higher
- An Unsplash API access key
Getting an Unsplash API Key
- Visit Unsplash Developers
- Create an account or log in
- Click "New Application"
- Fill in the required details and accept the terms
- Copy your Access Key
Note: Demo accounts are limited to 50 requests per hour. Apply for production access for higher limits.
Setup
# Clone or download this repository
cd unsplash-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
# Set your API key
export UNSPLASH_ACCESS_KEY=your_access_key_here
Usage
Running with stdio (for Claude Desktop, etc.)
npm start
# or
node dist/index.js
Running with HTTP transport
TRANSPORT=http PORT=3000 npm start
Configuration for Claude Desktop
Add to your Claude Desktop configuration file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"unsplash": {
"command": "node",
"args": ["/path/to/unsplash-mcp-server/dist/index.js"],
"env": {
"UNSPLASH_ACCESS_KEY": "your_access_key_here"
}
}
}
}
Available Tools
Photo Search & Retrieval
unsplash_search_photos
Search for photos by keywords with advanced filtering.
Parameters:
query(string, required): Search keywordspage(number): Page number (default: 1)per_page(number): Results per page, 1-30 (default: 10)orientation(string): Filter by "landscape", "portrait", or "squarish"content_filter(string): "low" (default) or "high" safety filtercolor(string): Filter by color name (e.g., "black", "white", "red")order_by(string): Sort by "relevant" (default) or "latest"response_format(string): "markdown" (default) or "json"
Example:
Search for: "mountain sunset"
Filter by: orientation="landscape", color="orange"
unsplash_get_photo
Get detailed information about a specific photo.
Parameters:
id(string, required): Unsplash photo IDresponse_format(string): "markdown" or "json"
unsplash_get_random
Get one or more random photos.
Parameters:
query(string): Optional search filterorientation(string): Filter by orientationcontent_filter(string): Safety filter levelcount(number): Number of photos, 1-30 (default: 1)response_format(string): Output format
unsplash_list_photos
List photos from Unsplash's editorial feed.
Parameters:
page(number): Page numberper_page(number): Results per pageorder_by(string): "latest", "oldest", or "popular"response_format(string): Output format
unsplash_get_statistics
Get view, download, and like statistics for a photo.
Parameters:
id(string, required): Photo IDresponse_format(string): Output format
unsplash_track_download
Track a photo download (required by Unsplash API guidelines).
Parameters:
id(string, required): Photo ID being downloaded
Important: Always call this before downloading/using a photo programmatically.
Collections
unsplash_search_collections
Search for curated photo collections.
Parameters:
query(string, required): Search keywordspage(number): Page numberper_page(number): Results per pageresponse_format(string): Output format
unsplash_get_collection_photos
Get photos from a specific collection.
Parameters:
id(string, required): Collection IDpage(number): Page numberper_page(number): Results per pageorientation(string): Filter by orientationresponse_format(string): Output format
Users
unsplash_search_users
Search for photographers and users.
Parameters:
query(string, required): Search keywordspage(number): Page numberper_page(number): Results per pageresponse_format(string): Output format
unsplash_get_user_photos
Get photos by a specific user.
Parameters:
username(string, required): Unsplash usernamepage(number): Page numberper_page(number): Results per pageorder_by(string): "latest", "oldest", or "popular"orientation(string): Filter by orientationresponse_format(string): Output format
API Guidelines & Attribution
Unsplash API Usage
When using photos from Unsplash:
- Track Downloads: Always call
unsplash_track_downloadwhen downloading photos programmatically - Attribution: While not required, attribution to photographers is appreciated
- Hotlinking: Use the Unsplash CDN URLs directly (don't re-host images)
- Rate Limits: Demo accounts have 50 requests/hour; production accounts have higher limits
Example Attribution
Photo by [Photographer Name] on Unsplash
Development
Project Structure
unsplash-mcp-server/
āāā src/
ā āāā index.ts # Main entry point
ā āāā types.ts # TypeScript type definitions
ā āāā constants.ts # Configuration constants
ā āāā services/
ā ā āāā unsplash-client.ts # API client
ā ā āāā formatters.ts # Response formatting
ā āāā schemas/
ā ā āāā index.ts # Zod validation schemas
ā āāā tools/
ā āāā photos.ts # Photo-related tools
ā āāā collections-users.ts # Collection/user tools
āāā dist/ # Compiled JavaScript
āāā package.json
āāā tsconfig.json
āāā README.md
Building
npm run build
Development with Watch Mode
npm run dev
Error Handling
The server provides clear error messages for common issues:
- 401 Unauthorized: Invalid or missing API key
- 403 Forbidden: Rate limit exceeded or insufficient permissions
- 404 Not Found: Photo, collection, or user doesn't exist
- Network errors: Connection issues with Unsplash API
License
MIT License - See LICENSE file for details
Credits
- Built with the MCP TypeScript SDK
- Uses the Unsplash API
- All photos provided by Unsplash photographers
Support
For issues with:
- This MCP server: Open an issue in this repository
- Unsplash API: Contact api@unsplash.com or visit Unsplash Help
- MCP Protocol: See MCP Documentation
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.