Skip to main content
Glama

mcp-pexels โ€” Pexels MCP server for Claude, Cursor, and other AI agents

npm version npm downloads CI license: MIT Node โ‰ฅ20 MCP compatible

A Model Context Protocol server that exposes the Pexels API โ€” free stock photos, videos, and curated collections โ€” as MCP tools that any compatible AI client (Claude Desktop, Claude Code, Cursor, Cline, Continue, etc.) can call directly from a chat.

๐Ÿ“ฆ npm: mcp-pexels ยท ๐Ÿท Latest release: v1.0.0 ยท ๐Ÿ’ป Source: developer-ishan/mcp-pexels

Photos & videos provided by Pexels.

Drop-in config

{
  "mcpServers": {
    "pexels": {
      "command": "npx",
      "args": ["-y", "mcp-pexels"],
      "env": { "PEXELS_API_KEY": "your_key_here" }
    }
  }
}

Paste into your MCP client's config, restart, and the nine pexels_* tools are live. Get a free key at https://www.pexels.com/api/.


Related MCP server: pexels-mcp-server

Table of contents


What can you build with this?

Once mcp-pexels is connected to an AI client, the agent can pull royalty-free photos and videos straight into its workflow. A few concrete uses:

  • Slide-deck and document illustration โ€” "Find me a landscape photo of mountains at sunset for slide 3" โ†’ the agent searches Pexels, picks one, and embeds it.

  • Blog post / social media drafting โ€” "Suggest three thumbnail options for an article about remote work" โ†’ returns three Pexels URLs with photographer credit.

  • Background research for video editing โ€” "Show me popular drone footage under 30 seconds in 4K" โ†’ uses pexels_popular_videos with size and duration filters.

  • Mood boards โ€” "Build me a mood board of warm-toned coffee shop photos" โ†’ searches with color: "orange".

  • Coding agents โ€” generate CSS/HTML with realistic placeholder imagery instead of lorem-pixel boxes.

  • Curated collections โ€” pull a specific Pexels collection (e.g. company-owned shots tagged on Pexels) into the agent's context.

Because every response includes a _rateLimit object, the agent can self-throttle and respect the Pexels free-tier quota (200 req/hour, 20 000/month).


Capabilities โ€” nine tools

Domain

Tool

What it does

Photos

pexels_search_photos

Search photos by query with orientation / size / color / locale filters.

Photos

pexels_curated_photos

Fetch the Pexels team's real-time curated photo feed.

Photos

pexels_get_photo

Retrieve a single photo by its numeric id.

Videos

pexels_search_videos

Search videos by query with orientation / size / locale filters.

Videos

pexels_popular_videos

Fetch popular videos with optional width / height / duration constraints.

Videos

pexels_get_video

Retrieve a single video by its numeric id.

Collections

pexels_featured_collections

List Pexels featured collections.

Collections

pexels_my_collections

List the authenticated user's own collections.

Collections

pexels_collection_media

Retrieve the photos and videos inside a specific collection.

Each tool response is the raw Pexels JSON merged with a top-level _rateLimit field exposing limit, remaining, and reset (UNIX timestamp).

See docs/tools/ for per-tool parameter tables and example payloads.


Connect to your MCP client

All paths below use npx -y mcp-pexels โ€” no global install required. Replace your_key_here with a real Pexels API key.

Claude Desktop

Option 1 โ€” one-click .mcpb install (recommended). Download the latest mcp-pexels-*.mcpb from the Releases page, double-click the file, paste your Pexels API key when Claude Desktop prompts, and click Install.

Option 2 โ€” manual JSON config. Edit claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "pexels": {
      "command": "npx",
      "args": ["-y", "mcp-pexels"],
      "env": { "PEXELS_API_KEY": "your_key_here" }
    }
  }
}

Restart Claude Desktop.

Claude Code

claude mcp add pexels -e PEXELS_API_KEY=your_key_here -- npx -y mcp-pexels

Or edit ~/.claude.json directly and add the same mcpServers block as above.

Cursor

Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project):

{
  "mcpServers": {
    "pexels": {
      "command": "npx",
      "args": ["-y", "mcp-pexels"],
      "env": { "PEXELS_API_KEY": "your_key_here" }
    }
  }
}

Cline (VS Code)

Open the Cline extension settings โ†’ MCP Servers โ†’ Edit Settings. Add:

{
  "mcpServers": {
    "pexels": {
      "command": "npx",
      "args": ["-y", "mcp-pexels"],
      "env": { "PEXELS_API_KEY": "your_key_here" }
    }
  }
}

Continue.dev

In ~/.continue/config.json:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "mcp-pexels"],
          "env": { "PEXELS_API_KEY": "your_key_here" }
        }
      }
    ]
  }
}

Generic / other clients

If your client supports stdio MCP servers it just needs command, args, and env. Use the same shape as Cursor / Claude Desktop above. For inspector / debugging:

export PEXELS_API_KEY=your_key_here
npx -y @modelcontextprotocol/inspector npx -y mcp-pexels

This opens a browser UI where you can call each tool interactively.


Example prompts

Once connected, try prompts like:

  • "Find me five landscape photos of mountains at golden hour. Make sure they're at least full HD."

  • "Get me popular Pexels videos shorter than 15 seconds, 1080p or higher, of city traffic."

  • "Pull photo id 2014422 and tell me the photographer."

  • "List the featured Pexels collections โ€” I want one I can browse for cooking photos."

  • "Search videos of 'forest' in portrait orientation; pick the highest-quality HD file for me."

  • "Show me Pexels photos with predominantly orange tones suitable for a fall-themed newsletter header."

The agent will pick the appropriate tool, send the right parameters, and include photographer/videographer credit as part of its answer.


How it compares

mcp-pexels

Raw Pexels REST API

Image-only general MCP servers

Photos

โœ…

โœ…

varies

Videos

โœ…

โœ…

usually โŒ

Collections

โœ…

โœ…

โŒ

Rate-limit headers exposed to agent

โœ…

โŒ (raw headers, agent must parse)

โŒ

Zod-validated input

โœ…

โŒ

varies

npx-installable, zero config

โœ…

โŒ

varies

Type-safe TS source

โœ…

n/a

varies

MIT-licensed

โœ…

n/a

varies

If you only need photos and you already have a generic image MCP server wired up, that may be enough. If you want first-class video and collection support with rate-limit awareness, this is purpose-built for it.


FAQ

How do I get a Pexels API key?

Sign up at https://www.pexels.com/api/ โ€” keys are issued instantly and the free tier allows 200 requests/hour and 20 000 requests/month.

Does this cost anything?

No. The Pexels API is free, the npm package is free (MIT), and mcp-pexels itself does not call any paid service.

Will this work offline?

No โ€” the server is a thin wrapper over the Pexels HTTPS API and requires network access.

Can I use Pexels content commercially?

Yes, per the Pexels license, but you must attribute the platform and (when possible) the photographer. See Attribution.

Does it work with Claude.ai (browser)?

Claude.ai's web product doesn't yet support stdio MCP servers โ€” only Claude Desktop, Claude Code, and the API do. Anthropic is rolling out browser MCP support, so this should change.

Is there a hosted / SaaS version?

No. Run it locally via npx. Because Pexels API keys are per-user, hosting a shared instance doesn't make sense.

How do I update to a newer version?

npx always fetches the latest published version. If you've installed globally, run npm update -g mcp-pexels.

Can I add more Pexels endpoints?

The Pexels API surface is fully implemented (9/9 endpoints as of Pexels API v1). New endpoints will be added via PR โ€” see Contributing.

Does it work with @modelcontextprotocol/inspector?

Yes:

export PEXELS_API_KEY=your_key_here
npx -y @modelcontextprotocol/inspector npx -y mcp-pexels

How is rate limiting handled?

Every tool response includes a _rateLimit object with limit, remaining, and reset (UNIX timestamp). The agent can read this and self-throttle. If Pexels returns 429, the server surfaces it as a PexelsApiError so the agent sees the failure.

Where does my API key go?

It is read from the PEXELS_API_KEY env var on the local process. It never leaves your machine except in Authorization headers to api.pexels.com. Nothing is logged.


Requirements

  • Node.js โ‰ฅ 20 (uses native fetch and --env-file)

  • A free Pexels API key โ€” request one here


Development

git clone https://github.com/developer-ishan/mcp-pexels.git
cd mcp-pexels
npm install
echo "PEXELS_API_KEY=your_key_here" > .env

npm test           # 42 mocked vitest cases, no network
npm run build      # tsc โ†’ dist/
npm run dev        # tsx watch
npm run test:watch # vitest in watch mode
npm start          # node --env-file=.env dist/index.js

Project layout

src/
โ”œโ”€โ”€ index.ts                  # MCP server entrypoint (stdio)
โ”œโ”€โ”€ http/
โ”‚   โ”œโ”€โ”€ client.ts             # PexelsClient (injectable fetch for tests)
โ”‚   โ””โ”€โ”€ types.ts              # PexelsApiError, RateLimit, PexelsResponse
โ”œโ”€โ”€ tools/
โ”‚   โ”œโ”€โ”€ index.ts              # composes the three domain factories
โ”‚   โ”œโ”€โ”€ photos.ts             # 3 photo tools
โ”‚   โ”œโ”€โ”€ videos.ts             # 3 video tools
โ”‚   โ””โ”€โ”€ collections.ts        # 3 collection tools
โ””โ”€โ”€ types/
    โ”œโ”€โ”€ tool.ts               # defineTool helper + ToolDefinition
    โ”œโ”€โ”€ photos.ts
    โ”œโ”€โ”€ videos.ts
    โ””โ”€โ”€ collections.ts

tests/
โ”œโ”€โ”€ helpers/mockClient.ts     # makeMockClient() โ€” fake fetch via vitest mocks
โ”œโ”€โ”€ photos.test.ts            # 17 cases
โ”œโ”€โ”€ videos.test.ts            # 13 cases
โ””โ”€โ”€ collections.test.ts       # 12 cases

Testing approach

Tests construct a PexelsClient with a vi.fn() fetchImpl returned by makeMockClient(responses). No real HTTP is performed. Each tool is exercised for:

  1. Happy path โ€” URL serialization and Authorization header.

  2. Error mapping โ€” non-2xx โ†’ PexelsApiError with status and body.

  3. Zod validation โ€” required params, enum membership, integer bounds.


Releasing

This repo uses a tag-driven release workflow (.github/workflows/release.yml):

  1. Bump the version: npm version patch (or minor / major) โ€” creates a commit and tag.

  2. Push: git push && git push --tags.

  3. The workflow runs tests, builds, publishes to npm with provenance using the NPM_TOKEN repository secret, builds the .mcpb bundle via npm run pack:mcpb, and creates a GitHub release with auto-generated notes that includes the bundle as a downloadable asset.

See CHANGELOG.md for version history.


Contributing

Issues and pull requests welcome. See CONTRIBUTING.md for the development workflow and SECURITY.md to report a vulnerability privately.

If you ship mcp-pexels inside a tool or product, open a PR adding it to the "Used by" list in CONTRIBUTING.md.

Listed on / submit to

See docs/MARKETPLACES.md for the submission cheatsheet.


Attribution & License

When you use Pexels content, please follow the Pexels API guidelines:

  • Show a prominent link to Pexels โ€” e.g. "Photos provided by Pexels".

  • Credit photographers/videographers when possible โ€” e.g. "Photo by John Doe on Pexels".

The mcp-pexels package itself is released under the MIT License.

Available Tools

9 tools
pexels_collection_mediaB

Retrieve photos and videos within a Pexels collection by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
pageNo
sortNo
typeNo
per_pageNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only states the action without revealing any behavioral details such as pagination, type filtering, sort options, default behavior, or error handling. This leaves the agent without information about how the tool behaves beyond its basic purpose.

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, direct sentence with no redundant words, making it concise and easy to parse.

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?

With five parameters and no output schema or annotations, the one-sentence description is insufficient. It fails to clarify how optional parameters like type or sort function, what the response structure looks like, or how pagination works, leaving significant gaps for correct 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 only references 'id' while ignoring page, sort, type, and per_page. The agent cannot infer the meaning or effect of these parameters from the description, which is especially problematic given enums exist for sort and type.

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 the specific verb 'Retrieve' and names the resource 'photos and videos within a Pexels collection', clearly distinguishing it from sibling tools like pexels_search_photos or pexels_get_photo by focusing on collection membership.

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 usage when a collection ID is known and you want its media, but provides no explicit guidance on when to prefer this over alternatives or any exclusions. It does not mention that collection metadata is available via sibling tools like pexels_my_collections.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_curated_photosC

Fetch a real-time list of photos curated by the Pexels team.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo

TDQS

C2.6/5.0
Behavior2/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 only mentions fetching a list, but does not disclose return format, ordering, pagination behavior, potential errors, or any access limitations. The term 'real-time' is unexplained, adding ambiguity rather than clarity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant wording and the verb-resource structure is front-loaded. It is appropriately concise for a simple tool, though it sacrifices crucial detail. This brevity earns a high score on conciseness alone, independent of completeness.

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?

Given two parameters, no annotations, and no output schema, the description is far too sparse. It does not explain pagination semantics, what the user will receive, or how this tool fits into the broader API. The agent lacks enough information to invoke the tool correctly with confidence.

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?

The input schema has two parameters (page, per_page) with zero description coverage. The tool description does not mention them at all, so their purpose and meaning are completely undocumented. An agent cannot infer what these parameters do beyond their basic type and constraints, making the tool effectively unusable without external knowledge.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch') and the specific resource ('a real-time list of photos curated by the Pexels team'), which distinguishes it from search or single-photo tools. The term 'curated by the Pexels team' further differentiates it from user-query-based searches. A slight ambiguity in 'real-time' prevents a perfect score.

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?

The description provides no explicit guidance on when to use this tool versus siblings like pexels_search_photos or pexels_get_photo. It implies a browsing use case but lacks any mention of alternatives, exclusions, or context for when this tool is preferred. The agent is left to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_get_photoB

Retrieve a single Pexels photo by its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.3/5.0
Behavior2/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 only states the basic retrieval action and provides no details about rate limits, authentication, error cases (e.g., photo not found), or the structure of the returned object. This is a minimal description without any behavioral context.

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, front-loaded with the core purpose. Every word is necessary and there is no fluff or redundancy.

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 tool with one parameter and no output schema, the description is sufficient to convey the core operation. However, it omits any mention of return value format, possible error responses, or prerequisites. While the simplicity lowers the burden, a brief note about expected output would improve completeness.

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 description mentions 'by its id', which links the single parameter to the photo's identifier, adding some semantic meaning beyond the schema's bare 'id' property. However, the schema already defines `id` as an integer with a minimum of 1, and the description does not elaborate on formats, units, or usage details. It provides slight clarification but does not fully compensate for the 0% schema_description_coverage.

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 'Retrieve a single Pexels photo by its id' uses a specific verb (retrieve) and resource (single Pexels photo) with a clear access method (by id). It distinguishes itself from sibling tools like search or curated photos, which involve listing or querying.

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. While it implies direct retrieval by ID (versus searching), there is no explicit 'use this when you have an ID' or mention of when not to use it. The description offers no exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_get_videoA

Retrieve a single Pexels video by its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. The verb 'retrieve' implies a read-only operation, but the description does not mention potential errors (e.g., invalid ID, 404), rate limits, or what the response contains. It lacks the detailed context expected for a tool with no annotation support.

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 immediately communicates the tool's purpose. It contains no redundant jargon or filler, earning a top score for efficiency.

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?

For a simple 1-parameter retrieval tool, the description is largely complete. It specifies the action and the parameter. It does not describe the return value or error behavior, but given the tool's simplicity and the presence of sibling tools for search/listing, this is a minor gap. The description provides enough context for basic usage.

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?

With 0% schema description coverage, the description must compensate for parameter meaning. It does mention 'by its id', linking the sole parameter to the video identifier. However, this adds minimal value beyond the parameter name 'id' already in the schema. It does not elaborate on expected formats or edge cases, but for a single simple parameter, this is adequate.

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 'Retrieve a single Pexels video by its id' clearly states the verb (retrieve), the resource (Pexels video), and the specific scope (by its id). It distinguishes itself from sibling tools like pexels_search_videos and pexels_popular_videos, which are for searching or listing videos, while this one fetches a specific item.

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?

Usage is implied: the description indicates this tool is for retrieving a single video by ID, which implies it should be used when a specific Pexels video ID is known. However, it does not explicitly state when not to use it or mention alternatives, such as using search_videos to find IDs first. The guidance is minimal and left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_my_collectionsB

List the authenticated user's own Pexels collections.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clarifies that only the authenticated user's own collections are returned, implying an auth requirement and read-only nature. However, it does not disclose error cases, rate limits, or pagination behavior beyond what the schema hints at.

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, front-loaded with the action ('List') and scope ('authenticated user's own'), with no filler words. It is appropriately minimal for a straightforward list operation.

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?

Given the absence of annotations, an output schema, and any parameter descriptions, the description is minimal. It explains the core function but not the structure of returned collections, pagination behavior, or special cases, leaving significant gaps for an agent preparing to invoke the tool.

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%; the description does not mention the 'page' or 'per_page' parameters at all. While the parameter names are conventional, the description adds no semantic meaning to the schema, leaving the agent to guess about pagination defaults and behavior.

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 ('List') and resource ('authenticated user's own Pexels collections'), clearly distinguishing it from sibling tools like pexels_featured_collections and pexels_collection_media. The scope is unambiguous and directly tied to the tool name.

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 usage for retrieving the user's personal collections, but it does not explicitly contrast it with alternatives such as featured collections or mention when not to use this tool. The context is clear but guidance on alternatives is only implicit via the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_search_photosB

Search Pexels photos by query with optional filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
colorNo
queryYes
localeNo
per_pageNo
orientationNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavior, but it only states that it searches photos with optional filters. It does not mention pagination, response format, rate limits, or that it is a read-only operation. The description adds minimal value beyond the tool name.

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, front-loaded sentence with no wasted words. It effectively communicates the core function in minimal space, making it concise and well-structured.

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?

For a search tool with 7 parameters, no annotations, and no output schema, this description is insufficient. It does not cover pagination, response structure, or filter interactions, leaving the agent without essential information for correct invocation. The description is too sparse for the tool's complexity.

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 schema has 0% description coverage, so the description must compensate by explaining parameters. It mentions 'query' and 'optional filters' but does not explain any of the six filter parameters (size, color, orientation, locale, page, per_page). The enums are self-explanatory, but the meaning of page/per_page and how filters interact is left unclear.

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 'Search Pexels photos by query with optional filters' clearly identifies the action (search), the resource (Pexels photos), and the scope (query with filters). This distinguishes it from sibling tools like pexels_search_videos and pexels_curated_photos, as the verb 'search' and the resource 'photos' are explicit and unambiguous.

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 should be used when querying for photos with optional filters, but it does not explicitly state when to prefer this over alternatives like pexels_curated_photos or pexels_get_photo. It provides clear context ('by query') but lacks explicit exclusions or mention of alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pexels_search_videosC

Search Pexels videos by query with optional filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
queryYes
localeNo
per_pageNo
orientationNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states 'Search... with optional filters' and offers no details about pagination, result structure, rate limits, or side effects. This leaves the agent largely uninformed about operational characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and object. It is appropriately brief, though it sacrifices detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, no output schema, and no annotations, the description is severely incomplete. It doesn't explain return values, pagination behavior, or how filters work, making it insufficient for 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%, so the description must compensate. It merely mentions 'query' and 'filters' without explaining any of the six parameters, adding no meaning beyond the schema's field names and types.

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 ('Search') and resource ('Pexels videos') with a clear qualifier ('by query'), clearly distinguishing it from sibling tools like pexels_get_video and pexels_search_photos. It effectively communicates the tool's primary function.

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 this tool is for query-based searches but doesn't explicitly contrast it with pexels_popular_videos or pexels_get_video. No exclusions or alternative recommendations are provided, so usage guidance is only implied.

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. 9 tool updatesv1.0.2
    • First observedpexels_collection_media
    • First observedpexels_curated_photos
    • First observedpexels_featured_collections
    • First observedpexels_get_photo
    • First observedpexels_get_video
    • First observedpexels_my_collections
    • First observedpexels_popular_videos
    • First observedpexels_search_photos
    • First observedpexels_search_videos

TDQS

A3.5/5.0
Disambiguation5/5

Each tool targets a distinct resource-action pair: search, curated/popular, get for photos and videos, and collection listing/media. No two tools overlap in purpose; the curated and search functions are clearly differentiated by their descriptions.

Naming Consistency5/5

All tools follow a consistent pattern: 'pexels_' prefix followed by operation and resource in snake_case (e.g., pexels_search_photos, pexels_get_video). Even descriptive modifiers like 'curated' and 'popular' fit the pattern without breaking consistency.

Tool Count5/5

With 9 tools, the server is well-scoped for a media API covering photos, videos, and collections. Each tool represents a necessary endpoint or feature, and the count is neither too sparse nor overwhelming.

Completeness5/5

The tool set covers all major Pexels API capabilities: searching, fetching curated/popular lists, retrieving individual media, and handling collections. No obvious gaps exist; the server supports both listing and retrieval for each resource type.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    C
    maintenance
    An MCP server that enables AI agents to search, retrieve, and curate free stock photos and videos from Pexels, with tools, resources, and prompts for easy integration.
    8
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    An MCP server that enables AI assistants to search for royalty-free images from Pexels and Unsplash using natural language, returning structured results with metadata.
    5
    59
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server for the Pexels API that provides inline visual previews, video storyboards, and batch operations for efficient stock media selection in Claude and other MCP clients.
    13
    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/developer-ishan/mcp-pexels'

If you have feedback or need assistance with the MCP directory API, please join our Discord server