FrameAnyPhoto

Framed prints of public-domain art and NASA photos: search works, price prints, get checkout links.

Should I use this

Quality & Safety

A
Description quality
86%
Schema completeness
80%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_work' description lacks action verbin get_work

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,134Tokens (tool definitions)
~979 BTypical response size
Moderate attention impact (0.89% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "prints": {
      "url": "https://frameanyphoto.com/mcp"
    }
  }
}

Remote endpoints

https://frameanyphoto.com/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_works(query, limit)

Search works by title, artist, series, NASA ID, or keywords. Returns compact records sorted by PPI.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search text, for example Bierstadt or Earthrise"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 12
    }
  },
  "required": [
    "query"
  ]
}
🟢get_work(query)

Return one work by id, title, accession number, or NASA ID.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Exact id, title, accession, or NASA ID"
    }
  },
  "required": [
    "query"
  ]
}
🟢list_series

List collection rows and how many works each contains.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_policies

Store policies as JSON: shipping (free, US only, 14–21 days), returns (30-day money back by mail; buyer pays return shipping), payment (Stripe Checkout), sales tax, and contact.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_print_options(work)

Sizes, frames, and prices the site offers for one work. Sizes respect the scan's resolution (100 PPI minimum). Prices include the frame and shipping; tax is added at checkout.

Input Schema

{
  "type": "object",
  "properties": {
    "work": {
      "type": "string",
      "maxLength": 200,
      "description": "Prefer ascii_id (the slug) from search_works or get_work; the id with or without its en dash, a /w/ URL, exact title, accession, or NASA ID also work"
    }
  },
  "required": [
    "work"
  ],
  "additionalProperties": false
}
🟢quote_order(work, size, frame, quantity, ship_to)

Price a framed print: unit price, subtotal, shipping, and total before tax, with a summary of the store policies. Ships to the US only; tax is calculated by Stripe at checkout.

Input Schema

{
  "type": "object",
  "properties": {
    "work": {
      "type": "string",
      "maxLength": 200,
      "description": "Prefer ascii_id (the slug) from search_works or get_work; the id with or without its en dash, a /w/ URL, exact title, accession, or NASA ID also work"
    },
    "size": {
      "type": "string",
      "maxLength": 40,
      "description": "size_id from get_print_options, or Small, Medium, Large. Default: the site default (Large when the scan allows)"
    },
    "frame": {
      "type": "string",
      "maxLength": 120,
      "description": "frame_id from get_print_options. Default: the work's default frame"
    },
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "default": 1
    },
    "ship_to": {
      "type": "object",
      "description": "Optional. Checks that we ship there.",
      "properties": {
        "country": {
          "type": "string",
          "description": "ISO country code. Only US is accepted."
        },
        "state": {
          "type": "string",
          "description": "2-letter state code"
        },
        "zip": {
          "type": "string",
          "description": "US ZIP code"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "work"
  ],
  "additionalProperties": false
}
🟡create_checkout(work, size, frame, quantity, email)

Create a Stripe Checkout link for this order and return checkout_url, order_ref, and a summary of the store policies. Give the link to the buyer; they enter the address and pay on Stripe. This never charges a card. Rate-limited.

Input Schema

{
  "type": "object",
  "properties": {
    "work": {
      "type": "string",
      "maxLength": 200,
      "description": "Prefer ascii_id (the slug) from search_works or get_work; the id with or without its en dash, a /w/ URL, exact title, accession, or NASA ID also work"
    },
    "size": {
      "type": "string",
      "maxLength": 40,
      "description": "size_id from get_print_options, or Small, Medium, Large. Default: the site default (Large when the scan allows)"
    },
    "frame": {
      "type": "string",
      "maxLength": 120,
      "description": "frame_id from get_print_options. Default: the work's default frame"
    },
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "default": 1
    },
    "email": {
      "type": "string",
      "maxLength": 254,
      "description": "Optional buyer email to prefill"
    }
  },
  "required": [
    "work"
  ],
  "additionalProperties": false
}
🟢get_order_status(order_ref)

Checkout, payment, and shipping status for an order_ref from create_checkout. Returns no personal data.

Input Schema

{
  "type": "object",
  "properties": {
    "order_ref": {
      "type": "string",
      "maxLength": 255,
      "description": "order_ref from create_checkout"
    }
  },
  "required": [
    "order_ref"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools