# Shot — canonical payload contracts

Render a public URL to a PNG/JPEG screenshot (Playwright + system Chromium).

**Service id:** `shot`  
**Docs:** [https://mcp.glc-rag.hu/guide/shot](https://mcp.glc-rag.hu/guide/shot)  
**Markdown docs:** [https://mcp.glc-rag.hu/guide/shot.md](https://mcp.glc-rag.hu/guide/shot.md)  
**MCP resource:** `docs://shot/payload`

POST `https://mcp.glc-rag.hu/mcp`. Values below are **type slots** from the live input schema (e.g. `<string, required>`), not example data. Fill them from the user task.

RPC result wrapper: `result.structuredContent` is the object in **Output schema**. `result.isError` mirrors `structuredContent.is_error`.

## `screenshot`

Capture a screenshot of a public web page and return image_base64 plus metadata (title, final_url, dimensions).

**Required arguments:** `url`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "screenshot",
    "arguments": {
      "url": "<string, required>",
      "width": "<integer, optional, default 1280, minimum 320, maximum 1920>",
      "height": "<integer, optional, default 720, minimum 240, maximum 1080>",
      "full_page": "<boolean, optional, default False>",
      "format": "<string, optional, enum png|jpeg, default 'png'>",
      "quality": "<integer, optional, minimum 1, maximum 100>",
      "wait_until": "<string, optional, enum load|domcontentloaded|networkidle|commit, default 'domcontentloaded'>",
      "timeout_ms": "<integer, optional, default 30000, minimum 1000, maximum 60000>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL to capture"
    },
    "width": {
      "type": "integer",
      "minimum": 320,
      "maximum": 1920,
      "default": 1280
    },
    "height": {
      "type": "integer",
      "minimum": 240,
      "maximum": 1080,
      "default": 720
    },
    "full_page": {
      "type": "boolean",
      "default": false,
      "description": "Capture full scrollable page"
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg"
      ],
      "default": "png"
    },
    "quality": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "JPEG quality (ignored for png)"
    },
    "wait_until": {
      "type": "string",
      "enum": [
        "load",
        "domcontentloaded",
        "networkidle",
        "commit"
      ],
      "default": "domcontentloaded"
    },
    "timeout_ms": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 60000,
      "default": 30000
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "image_url": {
      "type": "string"
    },
    "format": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    }
  },
  "additionalProperties": true,
  "required": [
    "image_url"
  ]
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

## `screenshot_status`

Screenshot service health and Chromium path.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "screenshot_status",
    "arguments": {}
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    }
  },
  "additionalProperties": true,
  "required": [
    "ok"
  ]
}
```

**Error object**

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```
