prompts.chat
MCPShips with promptschat: f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open…
Searches and downloads free stock photos and videos for creative projects.
Claude Code
> /plugin marketplace add DojoCodingLabs/remotion-superpowers> /plugin install remotion-superpowers@remotion-superpowers
Codex
$ codex mcp add Pexels -- npx -y @hanoak/pexels-mcp-server@1.0.2
Cursor
{ "mcpServers": { "Pexels": { "command": "npx", "args": [ "-y", "@hanoak/pexels-mcp-server@1.0.2" ] } } }
Add it to mcp.json.
Gemini CLI
{ "mcpServers": { "Pexels": { "command": "npx", "args": [ "-y", "@hanoak/pexels-mcp-server@1.0.2" ] } } }
Add it to settings.json.
GitHub Copilot
$ copilot mcp add Pexels -- npx -y @hanoak/pexels-mcp-server@1.0.2
OpenCode
{ "mcp": { "Pexels": { "type": "local", "command": [ "npx", "-y", "@hanoak/pexels-mcp-server@1.0.2" ] } } }
Add it to opencode.json.
Windsurf
{ "mcpServers": { "Pexels": { "command": "npx", "args": [ "-y", "@hanoak/pexels-mcp-server@1.0.2" ] } } }
Add it to mcp_config.json.
From the README
9 tools covering every documented Pexels endpoint
photos (search, curated, get), videos (search, popular, get), and collections (featured, media, mine).
License-aware by design
Pexels doesn't require attribution, but every photo still returns a ready-to-use courtesy credit (text + HTML), and the server's instructions steer the model around the license restrictions that do…
Real image & video URLs
each photo returns Pexels' own pre-sized src URLs (original/large2x/large/medium/small/portrait/landscape/tiny); each video returns its video_files renditions (trimmed to the highest-resolution few…
Token-efficient output
full Pexels responses are trimmed to a compact shape (URLs + metadata as text, never base64 blobs) to keep model context small.
Robust
typed failures returned as MCP isError results the model can recover from, plus retries/backoff, timeouts, and rate-limit-aware quota short-circuiting (Pexels omits its rate-limit headers on a 429,…
Safe
API-key redaction in all error output, and untrusted-text handling guidance for indirect prompt-injection defence.
Lean & modern
ESM, Node 20+, zero-install via npx, no telemetry.
Security report
Low risk
Known flaws
None known
Signed build
Yes
Build provenance published
Maintained
Oct 29, 2026
Last push
Licence
MIT
Runs as
npx
On your machine
Deprecated
No
Signals from public registries, not an audit. Checked Nov 12, 2026.
A production-ready Model Context Protocol (MCP) server for the Pexels API. It gives AI assistants — Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any MCP client — tools to search and fetch Pexels photos, videos, and collections, covering every endpoint the Pexels API documents.
Important Unofficial project. This is not affiliated with, endorsed by, or sponsored by Pexels. "Pexels" is a trademark of its respective owner. You use it under your own Pexels API account and are responsible for complying with the Pexels License.
credit (text + HTML), and the server's instructions steer the model around the license restrictions that do apply (no resale of unaltered content, no redistribution to other stock platforms, no trademark/logo use, no implied endorsement).src URLs (original/large2x/large/medium/small/portrait/landscape/tiny); each video returns its video_files renditions (trimmed to the highest-resolution few in list results, complete on a single-item lookup).isError results the model can recover from, plus retries/backoff, timeouts, and rate-limit-aware quota short-circuiting (Pexels omits its rate-limit headers on a 429, so the client caches the last-known reset time instead of guessing).npx, no telemetry.Create a free account at pexels.com/api and you'll receive an API key instantly — no app review, no approval wait.
Claude Desktop — edit claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"pexels": {
"command": "npx",
"args": ["-y", "@hanoak/pexels-mcp-server"],
"env": {
"PEXELS_API_KEY": "your_api_key"
}
}
}
}
Restart the client. See Configuration for every supported variable.
Other clients (Claude Code, Cursor, VS Code, Windsurf, generic stdio)
Claude Code (CLI):
claude mcp add pexels \
--env PEXELS_API_KEY=your_api_key \
-- npx -y @hanoak/pexels-mcp-server
Cursor — ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project): use the exact same mcpServers block as Claude Desktop above.
Windsurf — ~/.codeium/windsurf/mcp_config.json: same mcpServers block as Claude Desktop above.
VS Code — .vscode/mcp.json (note the top-level key is servers, not mcpServers):
{
"servers": {
"pexels": {
"command": "npx",
"args": ["-y", "@hanoak/pexels-mcp-server"],
"env": {
"PEXELS_API_KEY": "your_api_key"
}
}
}
}
Any other MCP client — run the server over stdio with:
PEXELS_API_KEY=your_api_key npx -y @hanoak/pexels-mcp-server
Point your client's stdio transport at command: npx, args: ["-y", "@hanoak/pexels-mcp-server"], and pass the key via env.
Restart your client and ask:
"Find me a photo of mountains on Pexels."
A typical flow: the model calls pexels_search_photos, picks a result, and presents the image with its courtesy credit.
You: Find a landscape photo of a foggy pine forest.
Assistant: (calls
pexels_search_photoswithquery: "foggy pine forest",orientation: "landscape", picks the best result) Here's a great match — photo by Jane Doe on Pexels — along with the image URL and a ready-to-use credit line.
Each tool returns a compact JSON payload. Here's the shape of a single photo result (illustrative values):
Example tool output
{
"photo": {
"id": 1103970,
"alt": "Photography of Trees at Foggy Forest",
"width": 4000,
"height": 2667,
"avg_color": "#3E361F",
"url": "https://www.pexels.com/photo/photography-of-trees-at-foggy-forest-1103970/",
"src": {
"original": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg",
"large2x": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
"large": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
"medium": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=350",
"small": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&h=130",
"portrait": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=1200&w=800",
"landscape": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=627&w=1200",
"tiny": "https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=200&w=280"
},
"photographer": {
"name": "Jane Doe",
"url": "https://www.pexels.com/@janedoe",
"id": 42
},
"credit": {
"text": "Photo by Jane Doe on Pexels",
"html": "Photo by <a href=\"https://www.pexels.com/@janedoe\">Jane Doe</a> on <a href=\"https://www.pexels.com\">Pexels</a>"
}
},
"rate_limit": { "limit": 200, "remaining": 199, "resetEpoch": 1755000000 }
}
Every tool result includes a rate_limit object (limit, remaining, resetEpoch) read from the Pexels response headers. List/search tools wrap results in photos/videos/collections/media arrays with pagination fields (total_results, page, per_page, has_next_page).
Configuration is entirely via environment variables — no config files, no flags for secrets.
| Environment variable | Required | Description |
|---|---|---|
PEXELS_API_KEY | yes | Your Pexels API key. The server exits at startup with a clear message if it is missing or blank. |
LOG_LEVEL | no | debug | info | warn | error (default info). All logs go to stderr; stdout carries only the MCP protocol. |
CLI flags: --version and --help are supported (e.g. npx @hanoak/pexels-mcp-server --version).
All tools are namespaced pexels_* and every one is read-only (readOnlyHint: true) — Pexels' API has no write endpoints, so a client can safely auto-approve the entire server. per_page is clamped to a max of 80 (Pexels' own documented max), and page is 1-based.
| Domain | Tools |
|---|---|
| Photos | search_photos, curated_photos, get_photo |
| Videos | search_videos, popular_videos, get_video |
| Collections | list_featured_collections, list_my_collections, get_collection_media |
Photos
| Tool | Parameters | Description |
|---|---|---|
pexels_search_photos | query (required), orientation? (landscape|portrait|square), size? (large|medium|small), color? (named color or hex code), locale?, page?, per_page? | Keyword photo search with filters. |
pexels_curated_photos | page?, per_page? | Pexels' hand-curated photo picks, refreshed hourly. |
pexels_get_photo | id (required) | A single photo by its numeric ID, full detail. |
Videos
| Tool | Parameters | Description |
|---|---|---|
pexels_search_videos | query (required), orientation?, size? (large=4K|medium=Full HD|small=HD), locale?, page?, per_page? | Keyword video search with filters. |
🎬 Full video production studio for Remotion — for Claude Code, Codex, Gemini CLI & any Agent Skills agent. AI voiceovers, music, stock footage, image/video generation, TikTok captions, transitions & AI review loop. 15 skills, 5 MCP servers. Free & open source by Dojo Coding.
Ships with promptschat: f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open…
Ships with emdash: A full-stack TypeScript CMS built on Astro. EmDash takes the ideas that made WordPress dominant --…