Unsplash MCP Server
Enables searching and downloading photos from Unsplash via the Unsplash API, with support for pagination, orientation filtering, and multiple resolutions.
README
Unsplash MCP Server
This project implements a Model Context Protocol (MCP) server that provides tools for interacting with the Unsplash API, allowing users to search for and download photos.
(Note: Replace
@shariqriazz with the correct username/namespace if needed)
Git Repository: https://github.com/shariqriazz/upsplash-mcp-server (Please update if this is not the correct URL)
Features
- Provides MCP tools to interact with the Unsplash API.
- Search for photos based on queries, pagination, and orientation.
- Download photos at specified resolutions (raw, full, regular, small).
- Requires an Unsplash Access Key configured via environment variables.
- Downloads photos to a local
unsplash/directory within the workspace.
Tools Provided
-
search_photos: Searches for photos on Unsplash.- Input Schema:
{ "type": "object", "properties": { "query": { "type": "string", "description": "The search term(s)." }, "page": { "type": "number", "description": "Page number (default: 1).", "default": 1 }, "per_page": { "type": "number", "description": "Items per page (default: 10, max: 30).", "default": 10, "maximum": 30 }, "orientation": { "type": "string", "enum": ["landscape", "portrait", "squarish"], "description": "Filter by orientation." } }, "required": ["query"] } - Output: Returns JSON data containing search results and a formatted text summary with image links.
- Input Schema:
-
download_photo: Downloads an Unsplash photo to the workspace'sunsplash/folder after triggering the download tracking event.- Input Schema:
{ "type": "object", "properties": { "photo_id": { "type": "string", "description": "The ID of the photo to download." }, "resolution": { "type": "string", "enum": ["raw", "full", "regular", "small"], "description": "Desired resolution (default: raw).", "default": "raw" }, "filename": { "type": "string", "description": "Optional filename (e.g., my-image.jpg). Defaults to sanitized description or {photo_id}.jpg." } }, "required": ["photo_id"] } - Output: Returns a success message with the path to the downloaded file.
- Input Schema:
(Note: Schemas are illustrative. The server exposes the exact schemas via MCP.)
Prerequisites
- Node.js (v18+ recommended)
- Bun (
npm install -g bun) - Unsplash Account and API Access Key (https://unsplash.com/developers)
Setup & Installation
- Clone the Repository:
git clone https://github.com/shariqriazz/upsplash-mcp-server.git # Update URL if needed cd upsplash-mcp-server - Install Dependencies:
bun install - Configure Environment:
- Create a
.envfile in the project root (or copy.env.exampleif provided). - Add your Unsplash Access Key:
UNSPLASH_ACCESS_KEY="YOUR_UNSPLASH_ACCESS_KEY"
- Create a
- Build the Server:
This compiles the TypeScript code tobun run buildbuild/index.js.
Usage (Standalone / NPX)
Standalone (Local Build):
You can run the compiled server directly using bun or node. Ensure the UNSPLASH_ACCESS_KEY environment variable is set in your shell or .env file.
# Ensure UNSPLASH_ACCESS_KEY is set
bun run build/index.js
# OR
node build/index.js
Using NPX (If Published to npm):
If this package is published to npm (e.g., as unsplash-mcp-server), you could run it directly using npx.
# Ensure UNSPLASH_ACCESS_KEY is set in your environment
npx -y unsplash-mcp-server
Note: This requires the package to be published on npm under the specified name.
Running with Cline
-
Configure MCP Settings: Add or update the configuration in your Cline MCP settings file (e.g.,
.roo/mcp.jsonor global settings). You have two primary options:Option A: Using Bun/Node (Direct Path - Recommended for Local Development)
This method uses
bun(ornode) to run the compiled script directly from your local project directory.{ "mcpServers": { "unsplash-mcp-server": { "command": "bun", // Or "node" "args": [ // Use the absolute path to the compiled index.js in your project "/path/to/your/upsplash-mcp-server/build/index.js" ], "env": { // Required: Ensure this matches your .env or is set here "UNSPLASH_ACCESS_KEY": "YOUR_UNSPLASH_ACCESS_KEY" // Replace with your actual key }, "disabled": false, "alwaysAllow": [ "search_photos", "download_photo" // "trigger_download" // Include if this tool exists and is separate ], "timeout": 3600 // Optional: Timeout in seconds (e.g., 1 hour) } // Add other servers here... } }- Important: Replace
/path/to/your/upsplash-mcp-server/build/index.jswith the correct absolute path on your system. - Replace
"YOUR_UNSPLASH_ACCESS_KEY"with your actual key. Remove comments from the actual JSON file.
Option B: Using NPX (Requires Package Published to npm)
This method uses
npxto automatically download and run the server package from the npm registry. This is convenient if you don't want to clone the repository locally or prefer using the published version.{ "mcpServers": { "unsplash-mcp-server": { "command": "npx", "args": [ "-y", // Auto-confirm installation "unsplash-mcp-server" // Assumed npm package name - update if different ], "env": { // Required: Ensure this is set here or in your environment "UNSPLASH_ACCESS_KEY": "YOUR_UNSPLASH_ACCESS_KEY" // Replace with your actual key }, "disabled": false, "alwaysAllow": [ "search_photos", "download_photo" ], "timeout": 3600 // Optional: Timeout in seconds } // Add other servers here... } }- Ensure the
envblock contains the necessaryUNSPLASH_ACCESS_KEY. - Update
"unsplash-mcp-server"inargsif the published npm package name is different.
- Important: Replace
-
Restart/Reload Cline: Cline should detect the configuration change and start the server based on your chosen method.
-
Use Tools: You can now use the
search_photosanddownload_phototools via Cline.
Development
- Watch Mode:
bun run watch(Typically starts the server and restarts on file changes) - Linting:
bun run lint(Checks code for style and potential errors) - Formatting:
bun run format(Formats code according to project standards)
(Note: Assumes standard package.json scripts like watch, lint, format. Update if your scripts differ.)
License
This project is licensed under the MIT License - see the LICENSE file for details.
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.