Marketing & SEO
Google Search Console
Request indexing, removals, users and index reports for your sites.
15 endpoints
Your agent searches Unsplash for the photos a post or campaign needs and reads each photographer and link. It builds collections, fills them and clears out the old ones. All of it runs in your own Unsplash account.
12 tools Read and write
Unsplash has a public REST API (v1) for photos, search, collections and users, free at 50 requests an hour in demo mode and 1,000 after production approval (Unsplash API documentation, checked 6 Nov 2026). It also runs an official hosted MCP server at mcp.unsplash.com, listed in Claude's connector directory since July 2026 with 23 tools and an OAuth sign-in. Cotlet runs 12 Unsplash tools in your signed-in account: no API key, no developer app, and nothing to code. It works inside the ChatGPT and Claude apps, runs around the clock in our hosting, and one Cotlet account covers many apps.
| What you need | Unsplash API | Official MCP | Cotlet |
|---|---|---|---|
| Search photos, collections and photographers | Yes | Yes | Yes |
| Create and edit collections, add and remove photos | Yes, with an OAuth token | Yes | Yes |
| Read one photo by ID, list a photographer's photos | Yes | No tool of that name | Yes |
| No developer app or access key | You register an app | Sign in with OAuth | Sign in once |
| Works in the ChatGPT and Claude apps | You build the connection | Claude directory listing | Paste one address |
| One account for many apps | One API | Unsplash only | Yes |
Checked 6 Nov 2026. Sources: Unsplash API documentation · Claude connector directory: Unsplash · Make: Unsplash app · Unsplash License
Use your own account in its Cotlet Cloud Browser.
Paste one address into Claude or ChatGPT.
Your agent searches, saves and tidies for you.
We never keep your Unsplash password, and a public collection changes only after you say OK. Who can see your session
Three steps. Chat apps sign in with OAuth. Editors, n8n and scripts use an API key.
Enable Unsplash for agents. Sign up, log in to Unsplash in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Unsplash next to your other apps. If you enable Unsplash after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-unsplash \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-unsplash": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-unsplash]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key> Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key> get_photo returns the links and the photographer for a credit line. It does not download the file.
Returns the photos of one results page with the ID, description, size, photographer and a link to the photo page. Order follows the sort you pass, relevance by default. The next_cursor field is empty on the last page. Your account does not need any special role.
MCP callunsplash_read → search_photos
REST endpointGET https://cotlet.dev/api/v1/unsplash/photos/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Search words, as typed in the Unsplash search box. |
| order_by string | string | Sort order: relevant or latest. |
| orientation string | string | Photo orientation, as in the search filters. |
| color string | string | Dominant color, as in the search filters. |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"photos": [
{
"photo_id": "Hy4kT9xQe2A",
"description": "Laptop on a wooden desk by a window",
"width": 6000,
"height": 4000,
"photographer": "Maria Costa",
"photographer_url": "https://unsplash.com/@mariacosta",
"url": "https://unsplash.com/photos/Hy4kT9xQe2A"
},
{
"photo_id": "Qm7bLw3Rn5c",
"description": "Home office with a plant and a notebook",
"width": 5400,
"height": 3600,
"photographer": "Tom Becker",
"photographer_url": "https://unsplash.com/@tombecker",
"url": "https://unsplash.com/photos/Qm7bLw3Rn5c"
}
],
"next_cursor": "eyJwYWdlIjoyfQ"
} Returns the description, size, photographer with the profile link, the photo page link and the image links shown on the page. Use it before you put a photo in a post, so the credit line is right. It does not download the file.
MCP callunsplash_read → get_photo
REST endpointGET https://cotlet.dev/api/v1/unsplash/photos/{photo_id}
| Name | Type | Description |
|---|---|---|
| photo_id string required | string | Photo ID from search_photos, get_photo or list_collection_photos. |
{
"photo_id": "photo_8c41d2"
} {
"photo_id": "Hy4kT9xQe2A",
"description": "Laptop on a wooden desk by a window",
"width": 6000,
"height": 4000,
"photographer": "Maria Costa",
"photographer_url": "https://unsplash.com/@mariacosta",
"url": "https://unsplash.com/photos/Hy4kT9xQe2A",
"image_url": "https://images.unsplash.com/photo-hy4kt9xqe2a?w=1080"
} Public collections of anyone, and private ones that your account owns. Any other private collection is not found.
Returns collections with the ID, title, owner and photo count, in the order the Unsplash search gives them. Private collections of other people are not listed. Open one with list_collection_photos.
MCP callunsplash_read → search_collections
REST endpointGET https://cotlet.dev/api/v1/unsplash/collections/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Search words. |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"collections": [
{
"collection_id": "8841203",
"title": "Remote work",
"owner": "Maria Costa",
"total_photos": 62,
"url": "https://unsplash.com/collections/8841203/remote-work"
},
{
"collection_id": "5527710",
"title": "Home office",
"owner": "Tom Becker",
"total_photos": 38,
"url": "https://unsplash.com/collections/5527710/home-office"
}
],
"next_cursor": ""
} Returns the photos of a collection in the order Unsplash shows them, with ID, description, photographer and photo link. It works for public collections and for private ones that your account owns. Any other private collection returns APP_NOT_FOUND.
MCP callunsplash_read → list_collection_photos
REST endpointGET https://cotlet.dev/api/v1/unsplash/collection-photos
| Name | Type | Description |
|---|---|---|
| collection_id string required | string | Collection ID from search_collections or list_my_collections. |
| cursor string | string | Next page cursor from the previous call. |
{
"collection_id": "collection_8c41d2"
} {
"collection_id": "8841203",
"title": "Remote work",
"photos": [
{
"photo_id": "Hy4kT9xQe2A",
"description": "Laptop on a wooden desk by a window",
"photographer": "Maria Costa",
"url": "https://unsplash.com/photos/Hy4kT9xQe2A"
},
{
"photo_id": "Qm7bLw3Rn5c",
"description": "Home office with a plant and a notebook",
"photographer": "Tom Becker",
"url": "https://unsplash.com/photos/Qm7bLw3Rn5c"
}
],
"next_cursor": ""
} Returns each collection with ID, title, visibility and photo count, as on the Collections tab of your profile. Use the IDs with list_collection_photos, add_photo_to_collection and remove_photo_from_collection.
MCP callunsplash_read → list_my_collections
REST endpointGET https://cotlet.dev/api/v1/unsplash/my-collections
| Name | Type | Description |
|---|---|---|
| cursor string | string | Next page cursor from the previous call. |
{
"collections": [
{
"collection_id": "9034471",
"title": "Blog hero images",
"visibility": "public",
"total_photos": 24
},
{
"collection_id": "9034502",
"title": "Spring launch",
"visibility": "private",
"total_photos": 9
},
{
"collection_id": "9034518",
"title": "Newsletter covers",
"visibility": "private",
"total_photos": 41
}
],
"next_cursor": ""
} Only what the public profile shows. Pass the username from search_users, without the @.
Returns the username, display name, photo count and profile link of each match, in the order the Unsplash search gives them. Pass a username to get_user or list_user_photos.
MCP callunsplash_read → search_users
REST endpointGET https://cotlet.dev/api/v1/unsplash/users/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Name or username. |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"users": [
{
"username": "maya_lin",
"name": "Maya Lin",
"total_photos": 134,
"url": "https://unsplash.com/@maya_lin"
}
],
"next_cursor": ""
} Returns the display name, bio, location, photo count, collection count and profile link as shown on the public profile. Only public information comes back.
MCP callunsplash_read → get_user
REST endpointGET https://cotlet.dev/api/v1/unsplash/user
| Name | Type | Description |
|---|---|---|
| username string required | string | Username from search_users, without the @. |
{
"username": "username"
} {
"username": "maya_lin",
"name": "Maya Lin",
"bio": "Food and kitchen photography.",
"location": "Lisbon, Portugal",
"total_photos": 134,
"total_collections": 6,
"url": "https://unsplash.com/@maya_lin"
} Returns the member's public photos, newest first as on the Photos tab of the profile, with ID, description and photo link. Use get_photo for the full details of one.
MCP callunsplash_read → list_user_photos
REST endpointGET https://cotlet.dev/api/v1/unsplash/user-photos
| Name | Type | Description |
|---|---|---|
| username string required | string | Username from search_users, without the @. |
| cursor string | string | Next page cursor from the previous call. |
{
"username": "username"
} {
"photos": [
{
"photo_id": "Zr2nVd8Ks4f",
"description": "Sliced lemons on a marble counter",
"url": "https://unsplash.com/photos/Zr2nVd8Ks4f"
},
{
"photo_id": "Lt6pJc1Wy9h",
"description": "Open kitchen with morning light",
"url": "https://unsplash.com/photos/Lt6pJc1Wy9h"
}
],
"next_cursor": ""
} Only collections your account owns. Public collections show every change to everyone on Unsplash, so those calls wait for your OK.
Returns the new collection ID, title, visibility and link. A public collection is visible to everyone on Unsplash, so the call waits for your OK. Pass private true to keep it to yourself; you can change it later with update_collection. By default you confirm each call; you can switch that off for this tool.
MCP callunsplash_write → create_collection
REST endpointPOST https://cotlet.dev/api/v1/unsplash/collections
| Name | Type | Description |
|---|---|---|
| title string required | string | Collection title. |
| description string | string | Collection description. |
| private boolean | boolean | true makes the collection private. Default: public. |
{
"title": "title"
} {
"collection_id": "9034502",
"title": "Spring launch",
"visibility": "private",
"total_photos": 0,
"url": "https://unsplash.com/collections/9034502/spring-launch"
} Returns the collection as it is after the change. Only collections your account owns can be edited; any other returns APP_PERMISSION_DENIED. Making a collection public shows it to everyone on Unsplash, so the call waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callunsplash_write → update_collection
REST endpointPATCH https://cotlet.dev/api/v1/unsplash/collections/{collection_id}
| Name | Type | Description |
|---|---|---|
| collection_id string required | string | Collection ID from search_collections or list_my_collections. |
| title string | string | New title. |
| description string | string | New description. |
| private boolean | boolean | true makes the collection private, false makes it public. |
{
"collection_id": "collection_8c41d2"
} {
"collection_id": "9034502",
"title": "Spring launch 2027",
"visibility": "private",
"total_photos": 9
} Returns the collection with its new photo count. A photo that is already in the collection is not added twice. Collections that are public show the new photo to everyone on Unsplash, so the call waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callunsplash_write → add_photo_to_collection
REST endpointPOST https://cotlet.dev/api/v1/unsplash/collections/{collection_id}/photos/{photo_id}/to-collection
| Name | Type | Description |
|---|---|---|
| collection_id string required | string | Collection ID from search_collections or list_my_collections. |
| photo_id string required | string | Photo ID from search_photos, get_photo or list_collection_photos. |
{
"collection_id": "9034471",
"photo_id": "Hy4kT9xQe2A"
} {
"collection_id": "9034471",
"title": "Blog hero images",
"photo_id": "Hy4kT9xQe2A",
"total_photos": 25
} Returns the collection with its new photo count. The photo stays on Unsplash; only the link to your collection goes. It reaches no one and is undone in one call with add_photo_to_collection, so it does not wait for your OK.
MCP callunsplash_write → remove_photo_from_collection
REST endpointDELETE https://cotlet.dev/api/v1/unsplash/collections/{collection_id}/photos/{photo_id}/from-collection
| Name | Type | Description |
|---|---|---|
| collection_id string required | string | Collection ID from search_collections or list_my_collections. |
| photo_id string required | string | Photo ID from search_photos, get_photo or list_collection_photos. |
{
"collection_id": "collection_8c41d2",
"photo_id": "photo_8c41d2"
} {
"collection_id": "9034471",
"title": "Blog hero images",
"photo_id": "Qm7bLw3Rn5c",
"total_photos": 23
} Your logged-in Unsplash profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 12 Unsplash tools. Never the cookie.
Your profile and collections, public and private.
Unsplash+ billing, password, uploads and the account itself.
Your agent gets a link to sign in again. You type the login, we never do.
Disable for agents or reset the browser in the Cotlet console, one click each.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
When Unsplash moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a collection | Delete it in Unsplash, or make it private |
| Change title, description or visibility | Run update_collection with the old values |
| Add a photo | Run remove_photo_from_collection, one call |
| Remove a photo | Run add_photo_to_collection, one call |
| Searches and reads | Nothing to undo, they only read |
3 of 12 tools ask first: create_collection, update_collection, add_photo_to_collection. Removing a photo reaches no one and is undone in one call, so it runs at once. Switch the wait off per tool for a scheduled run.
Make a collection private while your agent fills it, then public when you are happy with it. Unsplash shows a public collection to everyone as soon as it changes.
{
"name": "add_photo_to_collection",
"arguments": {
"collection_id": "9034471",
"photo_id": "Hy4kT9xQe2A"
}
} curl -X POST https://cotlet.dev/api/v1/unsplash/collections/9034471/photos/Hy4kT9xQe2A/to-collection \
-H "Authorization: Bearer $COTLET_API_KEY" {
"collection_id": "9034471",
"title": "Blog hero images",
"photo_id": "Hy4kT9xQe2A",
"total_photos": 25
} Scripts and cron jobs reach the same tools over REST, with the same key and price. A collection that is not yours returns Unsplash's permission message, and a failed call costs nothing.
About $15 a monthfor a content marketer picking photos for 8 posts, 2,560 credits. Unsplash itself stays free.
| Job | Calls | Credits |
|---|---|---|
| Photos and credit lines for a post | 5 × 8 | 400 |
| Campaign collection with 8 photos | 12 × 2 | 240 |
| Weekly newsletter covers | 4 × 4 | 160 |
| Clean up an old collection | 9 × 2 | 180 |
| Look through a photographer's work | 4 × 2 | 80 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 2,560 |
The month is our example: photos and credit lines for 8 posts, 2 campaign collections, 4 weekly newsletter covers, 2 clean-ups and 2 photographer lookups. Unsplash publishes no typical account size. Photos are free under the Unsplash License; Unsplash+ is a separate paid plan (Unsplash, 6 Nov 2026). Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Unsplash official MCP | Hosted at mcp.unsplash.com. 23 tools: search, collections, bookmarks, illustrations. OAuth sign-in, in the Claude directory since July 2026. | No tool to read one photo or list a photographer's photos. Not in Unsplash's own docs. One app only. |
| hellokaton/unsplash-mcp-server | Python server for photo search. 239 stars, MIT, last commit 12 Oct 2026. | Search only. You register a developer app and keep the access key. |
| hanoak/unsplash-mcp-server | Node server with 29 tools: photos, collections, topics, users, stats. 8 write tools after an OAuth sign-in. 3 stars, MIT, last commit 19 Aug 2026. | Runs on your computer with your own access key. |
| drumnation/unsplash-smart-mcp-server | One tool that searches, downloads and writes the attribution. 64 stars, MIT, last commit 17 Jan 2026. | One tool, no collections. Needs your access key. |
| Make | Unsplash app with 29 modules for scenarios. | Runs in Make scenarios, not in an AI chat. |
Unsplash's own server is the first thing to try if you only search and fill collections in Claude. The GitHub servers suit a developer who wants a key and a local process. Cotlet adds photo and photographer reads, ChatGPT, scripts and schedules, hosted, with one sign-in for many apps.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Unsplash tools.
Sign up at cotlet.dev, log in to Unsplash once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Unsplash account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Unsplash: find photos for a blog post; build a collection for a campaign; clean up an old collection. You ask in plain words, and anything that reaches other people waits for your OK first.
Create a free account at https://cotlet.dev, open Unsplash under Integrations in the console and log in to Unsplash in its Cloud Browser. The trial starts with your first app, no card asked.
No. Cotlet works in your own Unsplash account, so there is no developer app, access key or OAuth setup. Unsplash's own API sends your access key with every call, and a new app starts in demo mode with 50 requests an hour (Unsplash API documentation, checked 6 Nov 2026).
Under the Unsplash License, credit is optional but encouraged, and Unsplash suggests "Photo by [Photographer] on Unsplash" (Unsplash License, checked 6 Nov 2026). Every photo the agent returns carries the photographer's name and profile link, so the credit line is one step. Apps built on Unsplash's API have their own attribution rules in the API Terms.
No. The tools search and read photos, photographers and collections, and manage collections in your account. They return photo page and image links; they do not upload photos or save image files.
Yes. Unsplash runs a hosted server at https://mcp.unsplash.com/mcp, listed in Claude's connector directory as made by Unsplash with 23 tools and an OAuth sign-in (Claude directory, checked 6 Nov 2026). Unsplash's API documentation and help center do not mention it. Cotlet adds photo and photographer reads, ChatGPT, scripts and one account for many apps.
Only the door is different. Both expose the same 12 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Unsplash.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy