MCP Image Resolver
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.
README
MCP Image Resolver Server
An MCP (Model Context Protocol) server that provides royalty-free image search for AI hosts like Cursor, Claude Desktop, VS Code, Windsurf, and more. Ask your AI assistant to find images by natural language—it uses the search_images tool and returns structured results from Pexels and Unsplash.
Features
- search_images — Search for royalty-free images (supports limit, page, orientation)
- extract_image_query — Transform free-form text into an image search query
- get_best_image — Return a single best image for a query
- search_images_batch — Run multiple searches in parallel
- resolve_image_attribution — Generate provider-compliant attribution text
- Pexels & Unsplash — Multi-provider support (free tier for both)
- Unified response — Structured results with url, source, dimensions, photographer, tags
- Works everywhere — Any MCP client that supports stdio servers
Requirements
- Node.js 18+
- At least one API key: Pexels (pexels.com/api) and/or Unsplash (unsplash.com/oauth/applications)
Quick Start (No Installation Required)
No cloning or building needed. Just add this config to your MCP client and it runs via npx automatically:
{
"mcpServers": {
"image-resolver": {
"command": "npx",
"args": ["-y", "@ahmaddioxide/mcp-image-resolver"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
At least one API key is required. Both are free — get them here:
- Pexels: pexels.com/api
- Unsplash: unsplash.com/oauth/applications
Architecture (High-Level)
┌─────────────────────────────────────────────────────────────────────────────┐
│ MCP Client (Cursor, Claude, VS Code, etc.) │
│ │ │
│ stdio (stdin/stdout) │
└─────────────────────────────────────┼───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ MCP Image Resolver Server │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ index.ts MCP server entry, registers tools, stdio transport│ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ tools/search-images.ts Tool handler: search_images(query) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ providers/pexels.ts │ │ providers/unsplash.ts │ │
│ │ Pexels API adapter │ │ Unsplash API adapter │──▶ ImageResult schema │
│ └──────────────────────┘ └──────────────────────┘ │
│ │ │ │
│ └────────────────────────┴────▶ utils/normalize.ts │
└─────────────────────────────────────┼───────────────────────────────────────┘
│
┌─────────────────┴─────────────────┐
▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────────────────┐
│ Pexels API │ │ Unsplash API │
│ api.pexels.com │ │ api.unsplash.com │
└──────────────────────────────┘ └──────────────────────────────────────────┘
Flow: MCP client → stdio → index.ts (registers tools) → search-images.ts → Pexels and Unsplash providers (when keys are set). Results are merged (Pexels first, then Unsplash) and normalized to the unified ImageResult schema.
Client Setup
Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"image-resolver": {
"command": "npx",
"args": ["-y", "@ahmaddioxide/mcp-image-resolver"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
Restart Cursor after config changes.
Claude Desktop
Add to your Claude config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Via Settings: Developer → Edit Config
{
"mcpServers": {
"image-resolver": {
"command": "npx",
"args": ["-y", "@ahmaddioxide/mcp-image-resolver"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
Restart Claude Desktop completely after saving.
VS Code
Add to .vscode/mcp.json (workspace) or your user profile mcp.json:
{
"servers": {
"image-resolver": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@ahmaddioxide/mcp-image-resolver"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
Note: VS Code uses
servers(notmcpServers) and requires"type": "stdio".
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"image-resolver": {
"command": "npx",
"args": ["-y", "@ahmaddioxide/mcp-image-resolver"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
Refresh the MCP config after changes.
Other MCP Clients
Any client that supports stdio MCP servers (Amp, Continue.dev, Amazon Q, etc.) can use this server:
- Command:
npx - Args:
["-y", "@ahmaddioxide/mcp-image-resolver"] - Env:
{ "PEXELS_API_KEY": "your-key", "UNSPLASH_ACCESS_KEY": "your-key" }(at least one required)
Usage
Once configured, ask your AI assistant to find images in natural language. It will call the search_images tool automatically.
Example prompts:
- "Find royalty-free images of a sunset mosque"
- "Search for zen yoga images suitable for a wellness app"
- "Get some minimalist office workspace photos"
- "Find images for a cooking blog header"
The tool returns image URLs and metadata. Use the links to view or download images.
Tool Schema
| Tool | Params | Description |
|---|---|---|
| search_images | query, limit?, page?, orientation? | Search images from Pexels and Unsplash |
| extract_image_query | context | Extract search terms from free-form text |
| get_best_image | query, orientation? | Return a single best image |
| search_images_batch | queries, limit? | Run multiple searches in parallel |
| resolve_image_attribution | photographer, source, url? | Generate attribution text |
Response: JSON with results array of { url, source, width, height, photographer, tags }. Each result includes source ("Pexels" or "Unsplash") for attribution.
Note: When both providers are configured, results are merged with Pexels first, then Unsplash. Use limit: 20 or higher to see results from both providers in a single search.
Testing
Example prompts to verify the tools:
- "Search for mountain landscape with limit 20 and show me which results came from Pexels vs Unsplash."
- "Use extract_image_query on: I need a hero image for a meditation app with mountains."
- "Use search_images_batch for 'sunset mosque', 'pakistani flag', and 'zen yoga'."
- "Get a single best image for coffee shop and generate attribution for it."
Development
To contribute or run locally, clone the repo and build from source:
git clone https://github.com/ahmaddioxide/image-resolver-mcp.git
cd image-resolver-mcp
npm install
cp .env.example .env
# Add PEXELS_API_KEY and/or UNSPLASH_ACCESS_KEY to .env
npm run build
Or run in development mode without building, using tsx:
{
"mcpServers": {
"image-resolver": {
"command": "npx",
"args": ["tsx", "/path/to/image-resolver-mcp/src/index.ts"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key",
"UNSPLASH_ACCESS_KEY": "your-unsplash-access-key"
}
}
}
}
Attribution
Images are sourced from Pexels and Unsplash. Per their API terms:
- Provide prominent links to Pexels and Unsplash
- Credit photographers: "Photo by [Name] on Pexels" / "Photo by [Name] on Unsplash"
- Response metadata includes
photographerandsource; useresolve_image_attributionfor compliant text
Contributing
Contributions are welcome. Please read CONTRIBUTING.md for guidelines and CODE_OF_CONDUCT.md for community standards. See SECURITY.md for vulnerability reporting.
License
MIT — see LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器