@hanoak/unsplash-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Log level: debug, info, warn, error (default info) | |
| UNSPLASH_APP_NAME | No | Your registered Unsplash app name, used as the attribution utm_source. Defaults to a generic value if unset. | |
| UNSPLASH_ACCESS_KEY | Yes | Your Unsplash API access key |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| unsplash_random_photoA | Fetch a single random photo from Unsplash. Optionally filter by search term, orientation, collections, topics, or user. Returns photo URLs, dimensions, color, and ready-to-use attribution (text + HTML). Content is filtered to "high" safety by default. Read-only. Each photo includes a |
| unsplash_list_photosA | List the latest featured Unsplash photos (paginated). Returns compact photo objects with URLs and ready-to-use attribution. Read-only. Each photo includes a |
| unsplash_get_photoA | Get a single Unsplash photo by its ID or slug, with full detail, URLs, and ready-to-use attribution. Read-only. Each photo includes a |
| unsplash_photo_statisticsA | Get download and view totals for a photo over the last N days (default 30). Read-only. |
| unsplash_track_downloadA | Register a download for a photo when it is actually used/displayed, as required by Unsplash's API guidelines. Pass the |
| unsplash_update_photoA | Update metadata on a photo owned by the authenticated user (description, tags, location, EXIF, profile visibility). Only the fields you pass are changed. Requires OAuth sign-in — run |
| unsplash_search_photosA | Search Unsplash photos by keyword, with optional filters (orientation, color, order, collections, language). Returns paginated compact photos with URLs and ready-to-use attribution. Content is filtered to "high" safety by default. Read-only. Each photo includes a |
| unsplash_search_collectionsA | Search Unsplash collections by keyword. Returns paginated compact collections (title, description, cover photo, curator). Read-only. |
| unsplash_search_usersA | Search Unsplash users by keyword. Returns paginated compact user profiles (name, username, bio, profile link, photo/collection counts). Read-only. |
| unsplash_get_userA | Get an Unsplash user's public profile by username. Read-only. |
| unsplash_user_photosA | List a user's photos (paginated), with URLs and ready-to-use attribution. Read-only. Each photo includes a |
| unsplash_user_collectionsB | List a user's collections (paginated). Read-only. |
| unsplash_user_statisticsA | Get a user's download and view totals over the last N days (default 30). Read-only. |
| unsplash_list_collectionsB | List the latest featured Unsplash collections (paginated). Read-only. |
| unsplash_get_collectionA | Get a single Unsplash collection by its ID. Read-only. |
| unsplash_collection_photosA | List the photos in a collection (paginated), with URLs and ready-to-use attribution. Read-only. Each photo includes a |
| unsplash_related_collectionsA | List collections related to a given collection. Read-only. |
| unsplash_create_collectionA | Create a new collection owned by the authenticated user. Requires OAuth sign-in — run |
| unsplash_update_collectionA | Update a collection owned by the authenticated user. Only the fields you pass are changed. Requires OAuth sign-in — run |
| unsplash_delete_collectionA | Permanently delete a collection owned by the authenticated user. This cannot be undone. Requires OAuth sign-in — run |
| unsplash_add_photo_to_collectionA | Add a photo to a collection owned by the authenticated user. Requires OAuth sign-in — run |
| unsplash_remove_photo_from_collectionA | Remove a photo from a collection owned by the authenticated user. Requires OAuth sign-in — run |
| unsplash_list_topicsB | List Unsplash topics (curated themes), paginated. Read-only. |
| unsplash_get_topicA | Get a single Unsplash topic by its ID or slug. Read-only. |
| unsplash_topic_photosA | List the photos in a topic (paginated), with URLs and ready-to-use attribution. Read-only. Each photo includes a |
| unsplash_total_statsA | Get Unsplash-wide totals: photos, downloads, views, photographers, and more. Read-only. |
| unsplash_month_statsA | Get Unsplash-wide totals for the past 30 days: new photos, downloads, views, and more. Read-only. |
| unsplash_get_my_profileA | Get the authenticated user's own Unsplash profile, including private fields (email, remaining uploads). Requires OAuth sign-in — run |
| unsplash_update_my_profileA | Update the authenticated user's own Unsplash profile. Only the fields you pass are changed. Requires OAuth sign-in — run |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| find_photo | Search Unsplash for a photo matching a description and present it with attribution. |
| photo_gallery | Search Unsplash for a themed set of photos and present them all with attribution. |
| topic_spotlight | Showcase a curated Unsplash topic's best photos with attribution. |
| photographer_spotlight | Look up a user's profile and showcase their best work with attribution. |
| platform_pulse | A quick briefing of Unsplash-wide stats: all-time totals and this month. |
| curate_collection | Search Unsplash for a theme, then build (or extend) a real collection from the best matches. Requires OAuth sign-in. |
| describe_photo | Add a description and/or tags to a photo you own. Requires OAuth sign-in. |
| refresh_profile | Update your own bio, location, or portfolio URL. Requires OAuth sign-in. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| attribution-guide | How to correctly attribute and use Unsplash photos from this server: attribution, download tracking, hotlinking, and content safety. |
| oauth-setup-guide | How to sign in via OAuth to unlock the 8 write/`me` tools (profile, collections, photo metadata). |
| prompts-guide | A reference for the 8 available prompts and when to use each. |
TDQS
Scored across 29 tools
Each tool targets a distinct resource-action combination: photos, users, collections, topics, stats, and profile are clearly separated. Overlapping photo-listing tools like list, search, random, user, collection, and topic photos are differentiated by their scope in the descriptions. No two tools appear to perform the same function.
The unsplash_ prefix is consistent, but the action-object pattern is mixed: list_*, get_*, search_*, and create_* coexist with noun-phrase names like user_photos, photo_statistics, related_collections, total_stats, and month_stats. A uniform verb_noun format would be more predictable. Still, all names are readable and distinguishable.
With 29 tools, the server exceeds the typical well-scoped range and leans toward heavy. The count is broadly justified by the wide coverage of Unsplash's API, but agents may find the large surface area overwhelming. A smaller core set or grouped endpoints could tighten the server.
The surface covers most of the Unsplash API: full CRUD for collections, extensive photo retrieval and statistics, user/profile info, topics, and global stats. Notable gaps are missing like/unlike photo functionality and a user's liked photos, which are standard Unsplash API features. Otherwise, the server is quite complete for search, retrieval, and curation workflows.