Skip to main content

A friendly MCP server for searching royalty-free stock images

Project description

Stocky Logo
Stocky
Find beautiful royalty-free stock images 📸

Python 3.8+ MCP Compatible License: MIT

✨ Features

  • 🔍 Multi-Provider Search - Search across Pexels and Unsplash simultaneously
  • 📊 Rich Metadata - Get comprehensive image details including dimensions, photographer info, and licensing
  • 📄 Pagination Support - Browse through large result sets with ease
  • 🛡️ Graceful Error Handling - Robust error handling for API failures
  • Async Performance - Lightning-fast concurrent API calls
  • 🎯 Provider Flexibility - Search specific providers or all at once

Photography Example

Beautiful stock photography at your fingertips
Example image used for demonstration purposes

Mountain Landscape Stunning landscapes available through multiple providers

Photo by Simon Berger on Unsplash

🚀 Quick Start

Installation

  1. Clone the repository:
git clone https://github.com/yourusername/stocky-mcp.git
cd stocky-mcp
  1. Install dependencies:
pip install -r requirements.txt

API Key Setup

You'll need free API keys from each provider:

  1. Pexels 📷 - Get your key at pexels.com/api
  2. Unsplash 🌅 - Sign up at unsplash.com/developers

API Key Configuration

You'll need to configure your API keys when setting up the MCP server. These keys are used to authenticate with the stock image providers.

Running as an MCP Server

Stocky is designed to be run as an MCP (Model Context Protocol) server, not as a standalone application. It should be configured in your MCP client configuration.

🔧 MCP Client Configuration

Add Stocky to your MCP client configuration:

{
  "mcpServers": {
    "stocky": {
      "command": "python",
      "args": ["/path/to/stocky_mcp.py"],
      "env": {
        "PEXELS_API_KEY": "your_pexels_key",
        "UNSPLASH_ACCESS_KEY": "your_unsplash_key",

      }
    }
  }
}

📖 Usage Examples

Stock Photography Example

Find the perfect image for your project

Searching for Images

Search across all providers:

results = await search_stock_images("sunset beach")

Search specific providers:

results = await search_stock_images(
    query="mountain landscape",
    providers=["pexels", "unsplash"],
    per_page=30,
    page=1
)

Getting Image Details

details = await get_image_details("unsplash_abc123xyz")

Downloading Images

# Download and save to disk
result = await download_image(
    image_id="pexels_123456", 
    size="medium", 
    output_path="/path/to/save.jpg"
)

# Get base64-encoded image data
result = await download_image(
    image_id="unsplash_abc123", 
    size="original"
)

🛠️ Tools Documentation

search_stock_images

Search for royalty-free stock images across multiple providers.

Parameters:

  • query (str, required) - Search terms for finding images
  • providers (list, optional) - List of providers to search: ["pexels", "unsplash"]
  • per_page (int, optional) - Results per page, max 50 (default: 20)
  • page (int, optional) - Page number for pagination (default: 1)
  • sort_by (str, optional) - Sort results by "relevance" or "newest"

Returns: List of image results with metadata

get_image_details

Get detailed information about a specific image.

Parameters:

  • image_id (str, required) - Image ID in format provider_id (e.g., pexels_123456)

Returns: Detailed image information including full metadata

download_image

Download an image to local storage or get base64 encoded data.

Parameters:

  • image_id (str, required) - Image ID in format provider_id (e.g., pexels_123456)
  • size (str, optional) - Image size variant to download (default: "original")
    • Options: thumbnail, small, medium, large, original
  • output_path (str, optional) - Path to save the image locally
    • If not provided, returns base64 encoded image data

Returns: Dictionary with download information or error

📄 License Information

License Information

Royalty-free images for your creative projects

All images returned by Stocky are free to use:

  • Pexels ✅ - Free for commercial and personal use, no attribution required
  • Unsplash ✅ - Free under the Unsplash License

Always check the specific license for each image before use in production.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

🙏 Acknowledgments

🐛 Troubleshooting

Common Issues

"API key not found" error

  • Ensure your .env file exists and contains valid API keys
  • Check that environment variables are properly loaded
  • Verify API key names match exactly (case-sensitive)

No results returned

  • Try different search terms
  • Check your internet connection
  • Verify API keys are active and have not exceeded rate limits

Installation issues

  • Ensure Python 3.8+ is installed
  • Try creating a virtual environment: python -m venv venv
  • Update pip: pip install --upgrade pip

Rate Limiting

Each provider has different rate limits:

  • Pexels: 200 requests per hour
  • Unsplash: 50 requests per hour (demo), 5000 per hour (production)

Made with 💜 by the Stocky Team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_mcp_joelio_stocky-1.0.0.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iflow_mcp_joelio_stocky-1.0.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file iflow_mcp_joelio_stocky-1.0.0.tar.gz.

File metadata

File hashes

Hashes for iflow_mcp_joelio_stocky-1.0.0.tar.gz
Algorithm Hash digest
SHA256 7d40bcedde933b438368206df469cbc012fc15c50e7c0b1f8914b3a8ff1bd499
MD5 42b1c93818b1e9ca271581e4ee2845ea
BLAKE2b-256 01f15661213360d252ee8618e5de299ad3e6f1f488fa146a6271b8004dee63db

See more details on using hashes here.

File details

Details for the file iflow_mcp_joelio_stocky-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for iflow_mcp_joelio_stocky-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0a2a75bdec55ffea4286881158e898b0a56acf2753b5597bf7eaef7e90942efb
MD5 0e0390122fe7bf9c994dd2876ee1e764
BLAKE2b-256 f7e6df6aa1e384c187be9787f7a28e6a37fdf874fa8fb282f70fbb0d4234ff23

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page