UnSplashPlusMCP
Automates an Unsplash+ account to sign in, search Plus-only results, and download licensed images with metadata receipts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@UnSplashPlusMCPSearch for 'mountain lake' and download the top 5 photos."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unsplash+ MCP
A private, local MCP server that drives a dedicated Chrome profile to sign in to an Unsplash+ account, search Plus-only results, and download licensed images.
This project automates the Unsplash website rather than using its API. Website automation is fragile and may conflict with Unsplash's terms. It deliberately does not bypass CAPTCHA, MFA, bot detection, or other access controls.
Requirements
Node.js 22 or newer
Google Chrome installed
passentries:unsplash/loginunsplash/password
An active single-user Unsplash+ subscription
Only the first line of each pass entry is read. Credentials are entered directly into the visible Chrome login form and are never returned over MCP.
Related MCP server: unsplash-mcp
Install and build
npm install
npm run buildAdd the server to an MCP client using:
{
"mcpServers": {
"unsplash-plus": {
"command": "node",
"args": ["/absolute/path/to/UnSplashPlusMCP/dist/src/index.js"]
}
}
}Chrome is visible by default. If Unsplash presents CAPTCHA, MFA, or another verification step, complete it in Chrome and then call unsplash_plus_continue_login.
Tools
unsplash_plus_loginunsplash_plus_continue_loginunsplash_plus_statusunsplash_plus_searchunsplash_plus_getunsplash_plus_downloadunsplash_plus_logout
Downloads default to ~/Downloads/unsplash-plus-mcp. Each image receives a JSON receipt with source metadata and a SHA-256 checksum.
Configuration
Variable | Default |
|
|
|
|
|
|
|
|
|
|
|
|
| unset; use |
Run npm test for unit tests and npm run check for strict type checking.
Available Tools
7 toolsunsplash_plus_continue_loginContinue Unsplash+ loginA
Re-check login after the user completes a CAPTCHA, MFA, consent, or verification step in Chrome.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It does not explain the tool's effects (e.g., whether it completes the login, mutates session state, or returns a result), nor does it mention any side effects or prerequisites. The phrase 're-check login' is vague about what the tool actually does beyond initiating a check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that conveys purpose and usage context without any redundancy. It front-loads the action and includes only essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers the core action and trigger context. However, it does not mention what the function returns or any limitations, which would be helpful for an agent to fully understand the outcome. It is adequate but has room to include return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description adds no parameter-specific meaning, but none is needed. Per the rubric, a baseline of 4 applies for tools with 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: re-check login after a user completes a verification step (CAPTCHA, MFA, consent). It uses a specific verb ('re-check') and identifies the resource ('login') and the triggering context, distinguishing it from the initial 'login' and general 'status' sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: after a user completes a CAPTCHA, MFA, consent, or verification step in Chrome. It does not name alternative tools or provide exclusion criteria, but the context is clear enough to guide usage without confusing it with the initial login or a status check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_downloadDownload Unsplash+ assetB
Download an Unsplash+ image through the authenticated website UI and write an audit receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| assetSlug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that authentication via the website UI is required and that an audit receipt is written, which is useful. However, it does not mention failure modes, idempotency, or other side effects beyond the receipt.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence efficiently communicates the primary action and a key side effect. No filler or redundant information, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the low complexity, the description omits parameter meanings and any return or failure behavior. The audit receipt is mentioned but not explained, leaving the description incomplete for a reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention assetSlug or filename. Since the schema provides no descriptions and the tool text fails to compensate, the agent receives no semantic information about parameters needed for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Download' with a clear resource 'Unsplash+ image' and adds an additional action 'write an audit receipt', which distinguishes it from sibling tools like get or search. It is immediately clear what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like unsplash_plus_get or unsplash_plus_search. The mention of 'authenticated website UI' implies a prerequisite but does not offer clear context for selection or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_getGet Unsplash+ assetA
Open an Unsplash+ asset page and return its current metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| assetSlug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden but only says it opens and returns metadata. It doesn't disclose authentication requirements, error behavior, or that this is a read-only operation, though the intent is reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and contains no filler. Every word contributes to the core meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the basic purpose and return type, but omits important context like whether authentication is required and how the asset slug is obtained. It is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the assetSlug parameter or explain how to identify an asset. With 0% schema description coverage, the description fails to compensate, leaving the parameter semantics largely to the schema's property name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens an Unsplash+ asset page and returns its metadata, with a specific verb and resource. It is distinguishable from sibling tools like search and download, which target different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to retrieve current metadata for a specific Unsplash+ asset, which provides clear context. However, it does not explicitly exclude alternatives or mention when to prefer this over search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_loginLog in to Unsplash+A
Open the dedicated Chrome profile and sign in with credentials stored in pass.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force a fresh login even if the profile appears authenticated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses that it opens a dedicated Chrome profile and uses credentials from pass, but does not mention side effects on existing authentication sessions or that it may skip login if already authenticated. With no annotations provided, the description carries the full burden but falls short of explaining the consequences of running this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action ('Open the dedicated Chrome profile'). It contains no filler or redundant information, making it optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional boolean and no output schema, so the description doesn't need to explain return values. However, it does not mention expected outcomes or prerequisites like pass being installed, which leaves a small gap for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the force parameter with 100% coverage, so the baseline is 3. The description adds no extra parameter information, but this is acceptable given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool signs in to Unsplash+ using a dedicated Chrome profile and credentials from pass. This is a specific verb+resource combination that distinguishes it from sibling tools like unsplash_plus_logout or unsplash_plus_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when login is needed, but does not explicitly mention when to use alternatives like unsplash_plus_continue_login. It also lacks guidance on prerequisites such as pass being configured or when to set the force parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_logoutLog out of Unsplash+A
Clear Unsplash state from the dedicated browser profile and close Chrome.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that the tool clears state and closes Chrome, which are key side effects. It does not elaborate on reversibility or prerequisites, but for a logout action, this level of detail is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that fully captures the tool's behavior without any fluff. It earns every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete. It specifies the action, the scope (dedicated browser profile), and a notable side effect (closing Chrome), making it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric the baseline score is 4. The description does not need to add parameter detail since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to clear Unsplash state from the dedicated browser profile and close Chrome. This is a specific verb-resource pair that distinguishes it from sibling tools like login, status, and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to log out of Unsplash+), and the title reinforces this. However, it does not explicitly mention alternatives or when not to use it, but the context is unambiguous for this simple operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_searchSearch Unsplash+B
Search the Unsplash website and return only results explicitly marked as Unsplash+.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevant | |
| limit | No | ||
| query | Yes | ||
| orientation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the key behavior of returning only Unsplash+ marked results, which is useful. However, it doesn't mention pagination, sorting behavior, authentication requirements, or any edge case handling. The stated constraint adds some transparency but not a rich behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose and filtering rule. It wastes no words and is appropriately sized for a straightforward search tool, though it omits details that other dimensions penalize.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core function and key constraint, but for a tool with no output schema, no annotations, and zero parameter coverage, it lacks essential context for an agent: no mention of authentication needs (sibling login tools suggest it may be required), no information about result format, and no usage guidance. It's minimally acceptable but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions none of the four parameters. The schema offers only types and enums, not human-readable explanations. For a search tool with query, sort, limit, and orientation, the description should have compensated but does so not at all, leaving the agent to infer semantics from names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and the specific resource ('the Unsplash website') plus the filtering behavior ('only results explicitly marked as Unsplash+'). This distinguishes it from siblings like get or download, and gives a precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells what the tool does but provides no guidance on when to use it versus alternatives, no exclusions, and no mention of prerequisites like authentication. For a search tool among login/status/get/download siblings, it's missing context on when this is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsplash_plus_statusUnsplash+ browser statusA
Report browser and authentication state without exposing credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It does disclose a key safety trait ('without exposing credentials'), which is valuable. However, it lacks explicit statements about the tool being read-only, whether it requires an existing session, or what 'browser state' entails, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that directly states the purpose and a critical constraint. Every word earns its place, and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, no annotations), the description covers the core purpose and a notable safety limitation. However, it does not clarify the format of the reported state (e.g., boolean, string, object) or how to interpret 'browser state', which might require the agent to infer expected outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific information, but none is needed. It does not contradict or omit anything regarding inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Report browser and authentication state' with the specific verb 'Report' and a distinct resource ('browser and authentication state'). It differentiates from siblings like login, search, get, download, and logout, as it focuses on status rather than actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of scenarios like checking login status before performing a search or download, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
unsplash_plus_continue_login - First observed
unsplash_plus_download - First observed
unsplash_plus_get - First observed
unsplash_plus_login - First observed
unsplash_plus_logout - First observed
unsplash_plus_search - First observed
unsplash_plus_status
TDQS
Each tool has a unique, non-overlapping role: login, login continuation for multi-step auth, status, search, get metadata, download, and logout. No two tools could be confused for one another.
All tools follow the consistent 'unsplash_plus_' prefix followed by a clear verb (login, status, search, get, download, logout). Even the compound 'continue_login' maintains the pattern.
With 7 tools, the set is well-scoped for a focused workflow of authenticated Unsplash+ access and downloading. Each tool is necessary and there is no bloat.
The tool surface covers the full lifecycle from login through authentication handling, status checking, searching, retrieving metadata, downloading, and logout. No critical gaps exist for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- HasDataOAuthcom.hasdata
All HasData scraping tools in one MCP server: Google, TikTok, Instagram, maps, e-commerce and more.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
One MCP for the Web. Easily search, crawl, navigate, and extract websites without getting blocked.…
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Related MCP Servers
- AlicenseAqualityDmaintenanceA local TypeScript MCP server for macOS that connects to Chrome via CDP to search and download high-quality image candidates from curated sources like Unsplash, Pexels, and others for use in posters, wallpapers, and inspiration boards.11MIT
- AlicenseAqualityDmaintenanceAn MCP server for searching and retrieving photos from Unsplash with proper attribution, designed for LLMs building content pages.324MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for the Unsplash API that enables searching, downloading, and inserting high-quality images with automatic photographer attribution into local projects.321MIT
- AlicenseAqualityCmaintenanceMCP server that enables searching and downloading Unsplash photos and collections.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CryptoJones/UnSplashPlusMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server