Reference

import_screenshot

Turn attachments, URLs or local paths into account-scoped refs the render tools accept.

View as Markdown

What it does

  • Writes
  • No account needed

How screenshots that exist only in this conversation get into ShotOps. One call takes several sources in screenshots — PNG/JPEG URLs, or local file paths on the stdio server — and hands each back as a private ref. The bytes move server to server, so they never enter model context. Results come back one per entry in input order, and a failed entry reports its own error without cancelling the rest. A ChatGPT attachment is the exception: it arrives as the top-level file parameter, which carries one attachment, so N attached screenshots are N calls.

You can ask: “Import these two Tidebook screenshot URLs for later rendering.”

The published schema accepts any shape inside screenshots so a two-source entry comes back as a sentence instead of three stacked union errors. The real element shapes are below.

Input

  • screenshotsarrayoptionalat least 1 itemat most 10 items

    Sources to import, 1–10, each exactly one of { "url" } (PNG or JPEG), { "file" } (a ChatGPT attachment) or { "path" } (local only), optionally with "name". Results come back in this order.

    each item

    any

    The published schema does not constrain this element, on purpose — a malformed entry comes back as a sentence instead of a stacked union error. What the server re-validates against is below.

  • fileobjectoptional

    One PNG or JPEG the user attached in ChatGPT. One attachment per call.

    • download_urlstringrequired

    • file_idstringrequired

    • mime_typestringoptional

    • file_namestringoptionalat most 200 characters

  • namestringoptionalat most 200 characters

    Filename to store for file. Default: its own name.

What the server actually accepts

The published schema above deliberately accepts a wider shape for screenshots, file, so a malformed entry comes back as a sentence rather than a stack of union errors. The server re-validates against these shapes and refuses anything else.

  • screenshotsarrayoptionalat least 1 itemat most 10 items

    Sources to import, 1–10, each exactly one of { "url" } (PNG or JPEG), { "file" } (a ChatGPT attachment) or { "path" } (local only), optionally with "name". Results come back in this order.

    each item

    one of 3 shapes

    1url

    • urlstringrequiredat least 1 character

      An https URL to a PNG or JPEG. This server fetches it and converts JPEG to PNG — https only, no redirects, 20MB cap.

    • namestringoptionalat most 200 characters

      The screenshot's original filename, stored in the returned ref (e.g. "03_stats.png").

    2file

    A ChatGPT attachment descriptor: { "file": { "download_url": "…", "file_id": "…" } }.

    • fileobjectrequired

      • download_urlstringrequiredformat uri

        Short-lived HTTPS download URL supplied by ChatGPT.

      • file_idstringrequiredat least 1 character

        ChatGPT file identifier.

      • mime_typestringoptional

        File MIME type supplied by ChatGPT.

      • file_namestringoptionalat most 200 characters

        Original attachment filename, when available.

    • namestringoptionalat most 200 characters

      The screenshot's original filename, stored in the returned ref (e.g. "03_stats.png").

    3path

    • pathstringrequiredat least 1 character

      A local filesystem path to a PNG, read straight off disk — ONLY on the local stdio server (npx shotops-mcp); the hosted server rejects it.

    • namestringoptionalat most 200 characters

      The screenshot's original filename, stored in the returned ref (e.g. "03_stats.png").

  • fileobjectoptional

    • download_urlstringrequiredformat uri

      Short-lived HTTPS download URL supplied by ChatGPT.

    • file_idstringrequiredat least 1 character

      ChatGPT file identifier.

    • mime_typestringoptional

      File MIME type supplied by ChatGPT.

    • file_namestringoptionalat most 200 characters

      Original attachment filename, when available.

Result

  • okbooleanrequired

  • countnumberoptional

  • screenshotsarrayoptional

    One entry per input, with its ref or its error. ok is false when only some imported.

    each item

    object

  • instructionsstringoptional

Example

That request maps to this call:

{
  "name": "import_screenshot",
  "arguments": {
    "screenshots": [
      {
        "url": "https://example.com/tidebook/01-today.png",
        "name": "01-today.png"
      },
      {
        "url": "https://example.com/tidebook/02-forecast.png",
        "name": "02-forecast.png"
      }
    ]
  }
}

One result per entry, in the order you sent them, each with a ref or its own error.

Access and cost

  • One of the few tools a hosted caller may use with no account at all — getting your own screenshots in is part of the free taste.
  • Free. Importing spends no cloud credits.
  • A local filesystem path only works on the local stdio server; the hosted server refuses it, and there is no URL to hand it for a file on your own disk. Use request_screenshot_upload there instead.
  • An import that produced refs put the bytes in ShotOps storage, and the reply discloses what moved, why, how long it is kept and what retains it. A local path import moves nothing and discloses nothing.

When it refuses

One entry failed and the rest succeeded.
That is by design. Re-import just the failed entry; the refs you already got stay valid.
An entry names two sources at once.
Every entry names exactly one of url, file or path. The reply says which entry and what to drop.
A path was refused on the hosted server.
Hosted has no access to your filesystem. Either give a URL it can fetch, or mint a signed upload.

Where this fits

What the agent is told

The title and description the server publishes on tools/list — this is the copy a model chooses between, reproduced verbatim.

Import screenshots

Store screenshots from this conversation (a ChatGPT attachment or a PNG/JPEG URL) and get back a private `ref` for each, to pass to render or save_project.