Unsplash MCP
An API that exposes Unsplash image search, listing, and random photo capabilities as MCP tools, enabling AI models like Claude to directly interact with Unsplash's services.
An API that exposes Unsplash image search, listing, and random photo capabilities as MCP tools, enabling AI models like Claude to directly interact with Unsplash's services.
Forked from unsplash-api by @aliosmankaya
This project provides an API to access the Unsplash service, allowing you to search, list, and get random images. Additionally, it integrates the Model Context Protocol (MCP), enabling AI models like Claude to interact directly with the Unsplash API.
Before using the Unsplash API, you need to:
UNSPLASH_CLIENT_ID
in the .env
file# Clone the repository
git clone https://github.com/your-username/unsplash-api-mcp.git
cd unsplash-api-mcp
# Install dependencies
pip install -r requirements.txt
# Configure environment variables
cp .env.example .env
# Edit the .env file and add your UNSPLASH_CLIENT_ID
# Clone the repository
git clone https://github.com/your-username/unsplash-api-mcp.git
cd unsplash-api-mcp
# Configure environment variables
cp .env.example .env
# Edit the .env file and add your UNSPLASH_CLIENT_ID
# Build and start the container
docker compose up -d
Create a .env
file in the project root with the following content:
UNSPLASH_CLIENT_ID=your_access_key_here
python main.py
The API will be available at http://localhost:8000
.
docker compose up -d
The API will be available at http://localhost:8000
.
Access the interactive API documentation at http://localhost:8000/docs
.
Endpoint to search for images on Unsplash.
Endpoint: /search
Method: GET
Parameters:
query
: Search term (Default: "nature")page
: Page number (Default: 1)per_page
: Number of photos per page (Default: 10)order_by
: Photo ordering (Default: "relevant", Options: "relevant", "latest")Request Example:
GET /search?query=mountains&page=1&per_page=5&order_by=latest
Response Example:
[
{
"alt_description": "mountain range under cloudy sky",
"created_at": "2023-05-15T12:34:56Z",
"username": "Photographer Name",
"image_link": "https://images.unsplash.com/photo-...",
"download_link": "https://unsplash.com/photos/...",
"likes": 123
},
...
]
Endpoint to list photos from the Unsplash landing page.
Endpoint: /photos
Method: GET
Parameters:
page
: Page number (Default: 1)per_page
: Number of photos per page (Default: 10)order_by
: Photo ordering (Default: "latest", Options: "latest", "oldest", "popular")Request Example:
GET /photos?page=1&per_page=5&order_by=popular
Response Example:
[
{
"alt_description": "scenic view of mountains during daytime",
"created_at": "2023-06-20T10:15:30Z",
"username": "Photographer Name",
"image_link": "https://images.unsplash.com/photo-...",
"download_link": "https://unsplash.com/photos/...",
"likes": 456
},
...
]
Endpoint to get random photos from Unsplash.
Endpoint: /random
Method: GET
Parameters:
query
: Search term to filter random photos (Default: "nature")count
: Number of photos to return (Default: 1, Maximum: 30)Request Example:
GET /random?query=ocean&count=3
Response Example:
[
{
"alt_description": "blue ocean waves crashing on shore",
"created_at": "2023-04-10T08:45:22Z",
"username": "Photographer Name",
"image_link": "https://images.unsplash.com/photo-...",
"download_link": "https://unsplash.com/photos/...",
"likes": 789
},
...
]
For more information about the Unsplash API, see the official documentation.
The Model Context Protocol (MCP) is a protocol that allows AI models to interact directly with APIs and services. This implementation uses FastAPI-MCP to expose the Unsplash API endpoints as MCP tools.
The MCP server is available at /mcp
and exposes all API endpoints as MCP tools:
AI models that support MCP can connect to this API using:
http://your-server:8000/mcp
For Claude, you can configure the connection in the model settings or via API.
You can test the MCP server with a simple Python client:
import requests
def test_mcp_metadata():
"""Test if the MCP server is working correctly."""
response = requests.get("http://localhost:8000/mcp/.well-known/mcp-metadata")
if response.status_code == 200:
print("MCP server working correctly!")
print(f"Response: {response.json()}")
else:
print(f"Error: {response.text}")
def list_mcp_tools():
"""List the available tools in the MCP server."""
response = requests.post(
"http://localhost:8000/mcp/jsonrpc",
json={
"jsonrpc": "2.0",
"id": 1,
"method": "mcp/list_tools"
}
)
if response.status_code == 200:
print("Available MCP tools:")
for tool in response.json()["result"]["tools"]:
print(f"- {tool[ name ]}: {tool[ description ]}")
else:
print(f"Error: {response.text}")
if __name__ == "__main__":
test_mcp_metadata()
list_mcp_tools()
For more information about using MCP, see the MCP_USAGE.md file.
To contribute to development:
pip install -r requirements.txt
.env
file with your Unsplash API keypython main.py
This project is licensed under the MIT License - see the LICENSE file for details.