mcp-pexels
Provides tools for searching, retrieving, and managing Pexels photos, videos, and curated collections, including filtered searches by orientation, size, color, and duration, with rate-limit awareness.
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., "@mcp-pexelssearch for photos of mountains"
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.
mcp-pexels โ Pexels MCP server for Claude, Cursor, and other AI agents
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_videoswith 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-pixelboxes.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 | Search photos by query with orientation / size / color / locale filters. | |
Photos | Fetch the Pexels team's real-time curated photo feed. | |
Photos | Retrieve a single photo by its numeric id. | |
Videos | Search videos by query with orientation / size / locale filters. | |
Videos | Fetch popular videos with optional width / height / duration constraints. | |
Videos | Retrieve a single video by its numeric id. | |
Collections | List Pexels featured collections. | |
Collections | List the authenticated user's own collections. | |
Collections | 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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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-pexelsOr 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-pexelsThis 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 |
| โ | โ | 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-pexelsHow 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
fetchand--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.jsProject 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 casesTesting approach
Tests construct a PexelsClient with a vi.fn() fetchImpl returned by makeMockClient(responses). No real HTTP is performed. Each tool is exercised for:
Happy path โ URL serialization and
Authorizationheader.Error mapping โ non-2xx โ
PexelsApiErrorwithstatusandbody.Zod validation โ required params, enum membership, integer bounds.
Releasing
This repo uses a tag-driven release workflow (.github/workflows/release.yml):
Bump the version:
npm version patch(orminor/major) โ creates a commit and tag.Push:
git push && git push --tags.The workflow runs tests, builds, publishes to npm with provenance using the
NPM_TOKENrepository secret, builds the.mcpbbundle vianpm 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
Smithery โ auto-discovered via
smithery.yaml.mcp.so โ community directory.
awesome-mcp-servers โ curated GitHub list.
modelcontextprotocol/servers โ Anthropic's official directory.
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 toolspexels_collection_mediaB
Retrieve photos and videos within a Pexels collection by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| page | No | ||
| sort | No | ||
| type | No | ||
| per_page | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No |
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 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.
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.
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.
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.
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.
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_featured_collectionsC
List featured collections on Pexels.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No |
TDQS
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 'List featured collections', which implies a read operation but provides no details on pagination defaults, response structure, authentication requirements, or rate limits. This is minimal disclosure.
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, front-loaded sentence with no filler or redundancy. It efficiently conveys the core function in five words.
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 absence of an output schema and annotations, the description is too sparse. It does not mention likely return values, pagination behavior, or any prerequisites. For a simple listing tool, more context is needed to fully understand expected results.
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 compensate by explaining the 'page' and 'per_page' parameters. Although the schema includes constraints and names are self-explanatory, the description adds no meaning beyond the schema.
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 clear verb ('List') and specifies the resource ('featured collections on Pexels'). It differentiates from siblings like 'my_collections' by the word 'featured', but does not explicitly contrast with alternatives.
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 such as pexels_my_collections or pexels_collection_media. The context is implied by the tool name, but there are no explicit use cases or exclusions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | 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 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.
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.
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.
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.
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.
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_popular_videosC
Fetch the current popular Pexels videos.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No | ||
| min_width | No | ||
| min_height | No | ||
| max_duration | No | ||
| min_duration | 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. The term 'Fetch' implies a read-only operation, but no other behavioral context is givenโsuch as pagination defaults, rate limits, or whether the result is a list or single item. For a read operation, this is minimal but not enough.
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, front-loaded sentence that is concise and grammatically clear. However, its brevity borders on under-specificationโevery word earns its place, but the tool clearly needs more content.
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 6 optional parameters, no output schema, and no annotations, a one-line description is wholly inadequate. The agent cannot infer the return structure, default values, or filtering behavior, making effective invocation nearly impossible.
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% (none of the 6 parameters are described in the schema) and the description adds no parameter information whatsoever. The agent has no idea what 'page', 'per_page', 'min_width', etc., do or how they relate to 'popular' videos.
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 verb 'Fetch' and the resource 'current popular Pexels videos', which is specific enough to understand the tool's core function. However, it does not differentiate itself from siblings like pexels_search_videos or pexels_get_video, leaving room for ambiguity.
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?
There is zero guidance on when to use this tool versus the sibling search/get tools. No mention of ideal use cases, alternatives, or exclusions, so the agent is left uninformed about selection.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| color | No | ||
| query | Yes | ||
| locale | No | ||
| per_page | No | ||
| orientation | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| query | Yes | ||
| locale | No | ||
| per_page | No | ||
| orientation | No |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v1.0.2- First observed
pexels_collection_media - First observed
pexels_curated_photos - First observed
pexels_featured_collections - First observed
pexels_get_photo - First observed
pexels_get_video - First observed
pexels_my_collections - First observed
pexels_popular_videos - First observed
pexels_search_photos - First observed
pexels_search_videos
TDQS
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.
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.
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.
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
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server that provides access to the Pexels API for searching and retrieving photos, videos, and collections.822-
- AlicenseAqualityCmaintenanceAn 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.8MIT
- AlicenseAqualityFmaintenanceAn MCP server that enables AI assistants to search for royalty-free images from Pexels and Unsplash using natural language, returning structured results with metadata.559MIT
- AlicenseAqualityCmaintenanceAn 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.13MIT
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/developer-ishan/mcp-pexels'
If you have feedback or need assistance with the MCP directory API, please join our Discord server