Skip to main content
Glama
CryptoJones

UnSplashPlusMCP

by CryptoJones

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

  • pass entries:

    • unsplash/login

    • unsplash/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 build

Add 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_login

  • unsplash_plus_continue_login

  • unsplash_plus_status

  • unsplash_plus_search

  • unsplash_plus_get

  • unsplash_plus_download

  • unsplash_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

UNSPLASH_PLUS_OUTPUT_DIR

~/Downloads/unsplash-plus-mcp

UNSPLASH_PLUS_PROFILE_DIR

~/Library/Application Support/unsplash-plus-mcp

UNSPLASH_PLUS_DIAGNOSTICS_DIR

<profile>/diagnostics

UNSPLASH_PLUS_LOGIN_ENTRY

unsplash/login

UNSPLASH_PLUS_PASSWORD_ENTRY

unsplash/password

UNSPLASH_PLUS_TIMEOUT_MS

30000

UNSPLASH_PLUS_HEADLESS

unset; use 1 only after interactive login is complete

Run npm test for unit tests and npm run check for strict type checking.

Available Tools

7 tools
unsplash_plus_continue_loginContinue Unsplash+ loginA

Re-check login after the user completes a CAPTCHA, MFA, consent, or verification step in Chrome.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNo
assetSlugYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetSlugYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce a fresh login even if the profile appears authenticated

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statusUnsplash+ browser statusA

Report browser and authentication state without exposing credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 7 tool updatesv0.1.0
    • First observedunsplash_plus_continue_login
    • First observedunsplash_plus_download
    • First observedunsplash_plus_get
    • First observedunsplash_plus_login
    • First observedunsplash_plus_logout
    • First observedunsplash_plus_search
    • First observedunsplash_plus_status

TDQS

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    11
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for searching and retrieving photos from Unsplash with proper attribution, designed for LLMs building content pages.
    3
    24
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for the Unsplash API that enables searching, downloading, and inserting high-quality images with automatic photographer attribution into local projects.
    32
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that enables searching and downloading Unsplash photos and collections.
    4
    MIT

Latest Blog Posts

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