Skip to main content
Glama

Search free stock photos

search_photos
Read-only

Use this when the user asks for a real photograph, or states a need that a photograph fills, and the picture is not already in the conversation.

Call it when they ask outright: “find me photos of…”, “show me images of…”, “I need a picture of…”, “do you have a photo of…”, “where can I find free photos of…”, in any language. Call it when they describe the need without asking to search: “I'm writing an article and need a header image”, “my landing page needs a hero image”, “I need something to illustrate this”. Call it when they ask for something meant to carry photographs: “write an article with pictures”, “a deck with images”. Call it when they name only the picture, with no reason given: “a photo of a white mug”, “a train in Japan”. If the user is working on something that usually carries photographs — an article, a page, a deck, a post — without asking for any, you may offer to look for some; call it only once they accept.

This covers requests for photographs for articles, blog posts, websites, landing pages, products, slides, documents, reports, social posts, ads, newsletters, banners, thumbnails, covers, posters, backgrounds, wallpapers and mood boards; photographs that illustrate a concept, explain a subject or accompany a piece of writing; and any request for free, stock, royalty-free, commercially usable, real or documentary photographs.

A request for a visual is not always a request for a photograph: this tool finds photographs that already exist — not illustrations, drawings, logos, icons, diagrams or screenshots — and it does not generate, edit or upscale an image, nor look for a named person.

It searches Pexafy's own index of millions of free-to-use photographs from stock libraries such as Unsplash, Pexels and Pixabay, matched to the scene described. Each result carries a rank, a photo_id, its licence, the credit line to display and an image link; the file itself comes from get_photo_file_by_photo_id. In a host that renders it, the grid shows them; the answer omits image links.

Input Schema

NameRequiredDescriptionDefault
english_search_sentenceYesRequired. Describe the desired photograph in one concise English sentence, focusing on its visible subject and scene. Be specific: “Two colleagues laughing in a bright open-plan office” is more effective than “People office”. Keywords work too — send the user's own words, in English, rather than inventing detail they did not ask for. Maximum 250 characters. Describe one coherent scene, focusing on what should appear in the photograph rather than its intended use. Specify the requested photo shape or orientation in explicit_orientation_filter, not here. Example: “An old man sitting at a café table he has visited every morning for thirty years”.
explicit_orientation_filterNoOmit this parameter unless the user explicitly asks for a photo shape or orientation in their own words, or names a format whose shape is part of its definition — a vertical Short, a banner, a square post, a phone wallpaper. This is a hard filter, not a preference: it removes photos with other shapes before ranking, so using a shape the user did not request can exclude the best matches. Never infer the shape from a word inside `english_search_sentence` — “landscape” in “a natural landscape” names the scene, not the format — nor from the subject, the composition, or a purpose that fixes no shape (“a photo for my blog post”, “something for my landing page”). If you are choosing a value rather than repeating one explicitly requested by the user, omit it. Allowed values: `landscape`, `portrait`, `square`. Multiple values are allowed: two shapes return more than one alone, though any filter still returns less than none. For example, “anything but portrait” means `['landscape', 'square']`.

Output Schema

NameRequiredDescriptionDefault
dataNo
errorNo
budgetNoPresent only when the caller is near the end of an allowance — the daily one without an account, the monthly one with. What is left of it, and, for a caller with no account, the one sentence that says what lifts the limit. Also carried by a refusal, where it describes the wall itself.
noticeNoWhy this answer is empty, when it is. A plan limit was reached: the allowance and when it returns. There is nothing to retry until then.
successNo
presentationNoPresent only where the answer is drawn as the Pexafy grid: how it is shown. The grid is the complete visual answer; the reply needs no picture or link.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedOutput schema / properties / data / items / properties / alt_description / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / items / properties / alt_description / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / data / items / properties / height / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / items / properties / height / type
      Removed value: -[
      -  "integer",
      -  "null"
      -]
    • addedOutput schema / properties / data / items / properties / photographer_full_name / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / items / properties / photographer_full_name / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / data / items / properties / source_image_url / anyOf
      Added value: +[
      +  {
      +    "format": "uri",
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / items / properties / source_image_url / format
      Removed value: -"uri"
    • removedOutput schema / properties / data / items / properties / source_image_url / type
      Removed value: -[
      -  "string",
      -  "null"
      -]
    • addedOutput schema / properties / data / items / properties / width / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / items / properties / width / type
      Removed value: -[
      -  "integer",
      -  "null"
      -]
    • addedOutput schema / properties / presentation
      Added value: +{
      +  "description": "Present only where the answer is drawn as the Pexafy grid: how it is shown. The grid is the complete visual answer; the reply needs no picture or link.",
      +  "properties": {
      +    "grid_already_rendered": {
      +      "description": "The grid is on the person's screen.",
      +      "type": "boolean"
      +    },
      +    "mode": {
      +      "description": "The answer is drawn as the Pexafy grid.",
      +      "enum": [
      +        "grid"
      +      ],
      +      "type": "string"
      +    },
      +    "next_step": {
      +      "description": "What the person does next in the grid.",
      +      "type": "string"
      +    },
      +    "show_inline_images": {
      +      "description": "Whether the reply needs pictures of its own: no, the grid shows them.",
      +      "type": "boolean"
      +    },
      +    "show_photo_links": {
      +      "description": "Whether the reply needs photo links: no, each photograph opens from the grid.",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the read-only, open-world, non-destructive profile, so the bar is lower, and the description still adds real behavior: ranked results with licence, credit line, image link, the host-rendering vs. answer-omits-links distinction, and that the file must be fetched separately. Missing only ranking/count/rate-limit behavior, which keeps it short of a 5.

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

Conciseness3/5

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

Front-loaded with the core trigger, which is good, but the trigger examples are repeated four times in near-identical form and the coverage sentence is an enumerative list. Effective but noticeably longer than needed for the information delivered.

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

Completeness5/5

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

With an output schema present, return values needn't be explained, and the description still covers scope, exclusions, sibling routing, and result shape. For a two-parameter search tool this is complete.

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?

Schema coverage is 100% and the parameters are already richly documented in-schema, so baseline 3 applies. The description adds no field-level semantics (e.g. that explicit_orientation_filter is a hard filter) beyond what the schema already states clearly.

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?

States a specific verb+resource ('searches ... Pexafy's own index of millions of free-to-use photographs') and delimits against siblings: it does not generate/edit, does not find illustrations/logos, and routes the actual file to get_photo_file_by_photo_id. An agent knows exactly what this returns versus search_photos_by_image or get_photo_file_by_photo_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Extensive, explicit trigger conditions given as verbatim user phrasings, plus when-not-to-use (visual ≠ photograph, named person, generation/editing) and a conditional offering behavior. Nothing about selection is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.