{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "",
    "endpoint": "https://hovercode.com/mcp/",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/hovercode-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/hovercode-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/hovercode-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 30072,
        "counts": {
          "error": 0,
          "note": 0,
          "warn": 8
        },
        "findings": [
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "build_page",
            "message": "blocks[].content (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "update_page",
            "message": "blocks[].content (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "create_form",
            "message": "the definition is about 2,940 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "create_page",
            "message": "the definition is about 1,526 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "create_qr_code",
            "message": "the definition is about 2,199 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "update_form",
            "message": "the definition is about 2,014 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC22",
            "severity": "warn",
            "tool": "update_qr_code",
            "message": "the definition is about 2,099 tokens",
            "fix": "Trim the description and parameter docs, or split the tool."
          },
          {
            "rule": "TC23",
            "severity": "warn",
            "message": "36 tools, about 27,761 tokens of definitions",
            "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:23:03Z",
      "count": 36,
      "note": "answered without the initialize handshake",
      "schemaTokens": 30072,
      "status": "ok",
      "tools": [
        {
          "name": "list_workspaces",
          "description": "List the workspaces this account can access, with their ids; the current (default) one is marked. Tools default to the current workspace, so you only need `workspace` to target a different one.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "current_workspace": {
                "description": "Id of the workspace tools default to.",
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "workspaces": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "current": {
                      "type": "boolean"
                    },
                    "dynamic_qr_limit": {
                      "type": "integer"
                    },
                    "dynamic_qr_used": {
                      "type": "integer"
                    },
                    "has_active_subscription": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "pages_used": {
                      "type": "integer"
                    },
                    "paid": {
                      "type": "boolean"
                    },
                    "plan": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List workspaces"
          }
        },
        {
          "name": "create_qr_code",
          "description": "Create a Hovercode QR code and return its details plus a rendered PNG. `dynamic: true` makes the destination changeable later and tracks scans; `dynamic: false` (the default, 'static') encodes the destination directly into the code image — it can never be retargeted or tracked, and this choice can't be changed after creation. When the request doesn't make clear which one someone wants, don't guess: stop and ask this exact question, verbatim, before calling this tool — 'Should this be trackable and editable later, or fixed permanently once printed?' — then wait for the answer. Dynamic codes are included free up to a per-workspace limit (list_workspaces' `dynamic_qr_used`/`dynamic_qr_limit`) — not a paid-only feature; past that limit this call fails asking for an upgrade. Supports full design control (colors, pattern, eye style, frames with captions, logo). Not for Hovercode forms, pages, or short links: those already have their own QR code (returned as `qr_id` / `id`) — use download_qr or update_qr_code with that id instead.",
          "inputSchema": {
            "properties": {
              "background_color": {
                "description": "Hex background color, or 'transparent'.",
                "type": "string"
              },
              "color_scope": {
                "description": "How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "display_name": {
                "description": "Internal name to find this code later.",
                "type": "string"
              },
              "dynamic": {
                "description": "Editable destination + scan tracking; can't be switched after creation. Free up to a per-plan limit, not paid-only. Default false (static: fixed forever, no tracking). Ask the user if their wording doesn't make the choice clear.",
                "type": "boolean"
              },
              "error_correction": {
                "description": "QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "folder": {
                "description": "Folder id or slug to file the new code into (list_qr_codes shows each code's folder).",
                "type": "string"
              },
              "frame": {
                "description": "Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "gps_tracking": {
                "description": "Prompt scanners to share location (dynamic codes).",
                "type": "boolean"
              },
              "has_border": {
                "description": "Draw a border around the code.",
                "type": "boolean"
              },
              "logo_url": {
                "description": "URL of a logo image to place in the center.",
                "type": "string"
              },
              "pattern": {
                "description": "Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "qr_data": {
                "description": "What the code encodes: a URL for qr_type 'Link', or the text for qr_type 'Text'. For 'vCard' send `vcard` instead.",
                "type": "string"
              },
              "qr_type": {
                "description": "QR content type. Default 'Link'. 'vCard' encodes a contact card from `vcard`.",
                "enum": [
                  "Link",
                  "Text",
                  "vCard"
                ],
                "type": "string"
              },
              "tags": {
                "description": "Labels to attach (created if new) so you can find these later — list_qr_codes and list_short_links search by tag.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "template": {
                "description": "Workspace template id to apply as design defaults (list_templates).",
                "type": "string"
              },
              "text": {
                "description": "Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_secondary": {
                "description": "Secondary caption line, where the frame supports it.",
                "type": "string"
              },
              "vcard": {
                "description": "Contact details for qr_type 'vCard' (use instead of qr_data). Scanning saves the contact to the phone. `dynamic: true` makes the card editable later.",
                "properties": {
                  "city": {
                    "type": "string"
                  },
                  "company_name": {
                    "type": "string"
                  },
                  "country": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "first_name": {
                    "type": "string"
                  },
                  "last_name": {
                    "type": "string"
                  },
                  "mobile_number": {
                    "type": "string"
                  },
                  "phone_number": {
                    "type": "string"
                  },
                  "position": {
                    "type": "string"
                  },
                  "post_code": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "street": {
                    "type": "string"
                  },
                  "website": {
                    "type": "string"
                  }
                },
                "required": [
                  "first_name"
                ],
                "type": "object"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "qr_data"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "background_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dynamic": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "error_correction": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_style": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "folder": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "The folder a code sits in (null when unfiled).",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "frame": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "frame_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "gps_tracking": {
                "type": "boolean"
              },
              "has_border": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pattern": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pdf_file_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "png": {
                "description": "PNG URL once rendered; null until then (use download_qr).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "primary_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_data": {
                "description": "Encoded data: the destination URL for URL codes.",
                "type": "string"
              },
              "qr_type": {
                "description": "Link, Text, vCard, or PDF.",
                "type": "string"
              },
              "shortlink_url": {
                "description": "Tracked short URL a dynamic code points at; null for static codes.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg": {
                "description": "Rendered QR as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg_file": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "text_secondary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "unique_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "vcard": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "Contact details encoded in a vCard code.",
                    "properties": {
                      "city": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "company_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "country": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "email": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "first_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "last_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "mobile_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "phone_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "position": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "post_code": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "state": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "street": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "website": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create QR code"
          }
        },
        {
          "name": "build_page",
          "description": "Build a rich, on-brand landing page from an ordered list of typed blocks, publish it, and return its live URL + its own QR code (`qr_id`; style it with the QR design args here, restyle later with update_qr_code — don't create another). This is the 'make me a page for X' tool — e.g. an event, product, restaurant, link-in-bio, or a scan-to-enter sweepstakes. Each block is {type, content}; call list_block_types first to see every type and its content shape. Blocks render in order in a centered column; a 'header' block (name/bio/photo) is the profile.",
          "inputSchema": {
            "properties": {
              "background_color": {
                "description": "For the QR code this mints: Hex background color, or 'transparent'.",
                "type": "string"
              },
              "bg_color": {
                "description": "Hex page background color.",
                "type": "string"
              },
              "blocks": {
                "description": "Ordered page blocks. Each is {type, content}. See list_block_types.",
                "items": {
                  "properties": {
                    "content": {
                      "description": "The block's content, matching that type's schema.",
                      "type": "object"
                    },
                    "form": {
                      "description": "For a 'form' block: the form id to embed.",
                      "type": "string"
                    },
                    "hidden": {
                      "description": "Hide this block from the live page.",
                      "type": "boolean"
                    },
                    "type": {
                      "description": "Block type, e.g. header, link, text, video, faq, countdown.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "color_scope": {
                "description": "For the QR code this mints: How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "description": {
                "description": "Optional SEO/description text.",
                "type": "string"
              },
              "domain": {
                "description": "Custom domain (else a default is used).",
                "type": "string"
              },
              "error_correction": {
                "description": "For the QR code this mints: QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "For the QR code this mints: Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "For the QR code this mints: Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "frame": {
                "description": "For the QR code this mints: Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "For the QR code this mints: Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "has_border": {
                "description": "For the QR code this mints: Draw a border around the code.",
                "type": "boolean"
              },
              "logo_url": {
                "description": "For the QR code this mints: URL of a logo image to place in the center.",
                "type": "string"
              },
              "pattern": {
                "description": "For the QR code this mints: Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "For the QR code this mints: Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "publish": {
                "description": "Publish immediately (default true). false leaves it a draft.",
                "type": "boolean"
              },
              "slug": {
                "description": "Custom URL slug (else auto-generated).",
                "type": "string"
              },
              "text": {
                "description": "For the QR code this mints: Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_color": {
                "description": "Hex text color.",
                "type": "string"
              },
              "text_secondary": {
                "description": "For the QR code this mints: Secondary caption line, where the frame supports it.",
                "type": "string"
              },
              "title": {
                "description": "The page title (browser tab + SEO).",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "title",
              "blocks"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "blocks": {
                "description": "Number of blocks on the page.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "published": {
                "type": "boolean"
              },
              "qr_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "share_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "workspace": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Build landing page"
          }
        },
        {
          "name": "create_form",
          "description": "Create a form, define its fields, brand it, publish it, and return a shareable short link + QR in one step. Use for 'make me a form to collect X, give me a link and QR to share it'. The result's `share_url` is the public link and `qr_id` is the form's own dynamic QR code (image included) — never call create_qr_code or create_short_link for a form's link; pass QR design args (primary_color, eye_style, frame, logo_url, …) here to style that code in the same call. Supports on-brand styling (theme/colors/logo), a `redirect_url` after submit, conditional logic (`show_when` on a field) and branching endings (`outcomes`), and a custom domain/slug. Publishing mints a dynamic short link and QR — always dynamic, no static option, since a form has to resolve somewhere live. Notifications are a separate, paid, verified-member setting. To change a form later, use update_form.",
          "inputSchema": {
            "properties": {
              "background_color": {
                "description": "For the QR code this mints: Hex background color, or 'transparent'.",
                "type": "string"
              },
              "bg_color": {
                "description": "Hex background color.",
                "type": "string"
              },
              "button_color": {
                "description": "Hex submit-button color.",
                "type": "string"
              },
              "button_text_color": {
                "description": "Hex button-text color.",
                "type": "string"
              },
              "color_scope": {
                "description": "For the QR code this mints: How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "description": {
                "description": "Optional description shown above the fields.",
                "type": "string"
              },
              "domain": {
                "description": "Custom domain to publish on (else a default is used).",
                "type": "string"
              },
              "error_correction": {
                "description": "For the QR code this mints: QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "For the QR code this mints: Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "For the QR code this mints: Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "fields": {
                "description": "The fields to collect, in order.",
                "items": {
                  "properties": {
                    "label": {
                      "description": "The field's question/label.",
                      "type": "string"
                    },
                    "max_label": {
                      "description": "scale only: label under the top value",
                      "type": "string"
                    },
                    "min_label": {
                      "description": "scale only: label under the lowest value",
                      "type": "string"
                    },
                    "nps": {
                      "description": "Make this a Net Promoter Score question (0–10, standard labels).",
                      "type": "boolean"
                    },
                    "options": {
                      "description": "Choices for select/radio/checkbox/ranking (strings or {value,label}); for image_choice pass {label, image} objects.",
                      "items": {
                        "type": [
                          "string",
                          "object"
                        ]
                      },
                      "type": "array"
                    },
                    "placeholder": {
                      "description": "Optional placeholder text.",
                      "type": "string"
                    },
                    "required": {
                      "description": "Whether an answer is required.",
                      "type": "boolean"
                    },
                    "show_when": {
                      "description": "Conditional logic: show this field only while its conditions match EARLIER answers (e.g. a follow-up question, or a statement recommending a product). Omit to always show.",
                      "properties": {
                        "action": {
                          "description": "'show' (default): shown only while the rules match. 'require': always shown, required only while they match. On a page_break field the rules skip the whole page.",
                          "enum": [
                            "show",
                            "require"
                          ],
                          "type": "string"
                        },
                        "match": {
                          "description": "Default 'all'.",
                          "enum": [
                            "all",
                            "any"
                          ],
                          "type": "string"
                        },
                        "rules": {
                          "items": {
                            "properties": {
                              "field": {
                                "description": "The question this condition looks at: its label, its id, or its 0-based position.",
                                "type": "string"
                              },
                              "op": {
                                "description": "eq / neq (is, is not), contains / not_contains (text or checkbox), gt / lt (numbers, ratings, dates), is_empty / not_empty (no value needed).",
                                "enum": [
                                  "eq",
                                  "neq",
                                  "contains",
                                  "not_contains",
                                  "gt",
                                  "lt",
                                  "is_empty",
                                  "not_empty"
                                ],
                                "type": "string"
                              },
                              "value": {
                                "description": "Value to compare with (an option's value for choice questions).",
                                "type": "string"
                              }
                            },
                            "required": [
                              "field",
                              "op"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "rules"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "description": "Field type. Default 'text'. Use select/radio/checkbox/ranking with `options`; image_choice with options carrying an `image` URL; scale with min_value/max_value and min_label/max_label (or nps: true).",
                      "enum": [
                        "text",
                        "email",
                        "phone",
                        "number",
                        "textarea",
                        "select",
                        "radio",
                        "checkbox",
                        "date",
                        "time",
                        "url",
                        "rating",
                        "scale",
                        "yes_no",
                        "image_choice",
                        "ranking",
                        "statement",
                        "hidden",
                        "page_break",
                        "image"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "label"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "frame": {
                "description": "For the QR code this mints: Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "For the QR code this mints: Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "has_border": {
                "description": "For the QR code this mints: Draw a border around the code.",
                "type": "boolean"
              },
              "logo_url": {
                "description": "URL of a logo image (JPEG/PNG/GIF/WebP) to show on the form.",
                "type": "string"
              },
              "outcomes": {
                "description": "Pathways / branching endings. After submit the first outcome whose rules match decides the ending: its own thank-you title/message and/or a redirect_url (e.g. send people to a different product page per answer). If none match, the default thank-you page is shown.",
                "items": {
                  "properties": {
                    "end_early": {
                      "description": "Screening: end the form as soon as this matches (checked on every page change), not just at submit.",
                      "type": "boolean"
                    },
                    "match": {
                      "description": "Default 'all'.",
                      "enum": [
                        "all",
                        "any"
                      ],
                      "type": "string"
                    },
                    "name": {
                      "description": "Short name, recorded on each response (e.g. 'Recommend Zero Sugar').",
                      "type": "string"
                    },
                    "redirect_url": {
                      "description": "Optional page to send the respondent to.",
                      "type": "string"
                    },
                    "rules": {
                      "items": {
                        "properties": {
                          "field": {
                            "description": "The question this condition looks at: its label, its id, or its 0-based position.",
                            "type": "string"
                          },
                          "op": {
                            "description": "eq / neq (is, is not), contains / not_contains (text or checkbox), gt / lt (numbers, ratings, dates), is_empty / not_empty (no value needed).",
                            "enum": [
                              "eq",
                              "neq",
                              "contains",
                              "not_contains",
                              "gt",
                              "lt",
                              "is_empty",
                              "not_empty"
                            ],
                            "type": "string"
                          },
                          "value": {
                            "description": "Value to compare with (an option's value for choice questions).",
                            "type": "string"
                          }
                        },
                        "required": [
                          "field",
                          "op"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "thank_you_message": {
                      "type": "string"
                    },
                    "thank_you_title": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "name",
                    "rules"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "pattern": {
                "description": "For the QR code this mints: Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "For the QR code this mints: Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "redirect_url": {
                "description": "URL to send respondents to after they submit.",
                "type": "string"
              },
              "slug": {
                "description": "Custom short-link slug (else auto-generated).",
                "type": "string"
              },
              "text": {
                "description": "For the QR code this mints: Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_color": {
                "description": "Hex text color.",
                "type": "string"
              },
              "text_secondary": {
                "description": "For the QR code this mints: Secondary caption line, where the frame supports it.",
                "type": "string"
              },
              "thank_you_message": {
                "description": "Shown after submitting (if no redirect).",
                "type": "string"
              },
              "theme": {
                "description": "Named color preset. Explicit colors below override it.",
                "enum": [
                  "light",
                  "dark",
                  "minimal",
                  "bold"
                ],
                "type": "string"
              },
              "title": {
                "description": "The form's title.",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "title",
              "fields"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "allow_multiple_submissions": {
                "type": "boolean"
              },
              "bg_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "dashboard_url": {
                "description": "Where the owner manages the form on hovercode.com.",
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "fields": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "field_type": {
                      "type": "string"
                    },
                    "help_text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "logic": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "max_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "max_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "min_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "min_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "options": {
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "label": {
                            "type": "string"
                          },
                          "value": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "order": {
                      "type": "integer"
                    },
                    "pattern": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "placeholder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "required": {
                      "type": "boolean"
                    },
                    "settings": {
                      "type": "object"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "has_unpublished_changes": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "modified": {
                "type": "string"
              },
              "notification_recipients": {
                "type": "array"
              },
              "outcomes": {
                "type": "array"
              },
              "qr_code_svg": {
                "description": "QR code for the share URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_id": {
                "description": "Id of the form's own QR code (published forms). Use with download_qr.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "redirect_delay": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "redirect_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "response_count": {
                "type": "integer"
              },
              "share_url": {
                "description": "Public URL respondents open (null until published).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_domain": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "show_powered_by": {
                "type": "boolean"
              },
              "show_progress": {
                "type": "boolean"
              },
              "status": {
                "description": "Draft, Published, or Closed.",
                "type": "string"
              },
              "text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_message": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create form"
          }
        },
        {
          "name": "get_analytics",
          "description": "Scan analytics over a period: totals, unique scanners, scans-by-day, and top countries/cities/OS/browsers. Pass a QR code `id` for one code, or omit it for the whole workspace (which also returns the top codes). Use this to answer 'how did my codes do this month and where were people scanning?'.",
          "inputSchema": {
            "properties": {
              "days": {
                "description": "Look-back window in days (default 30, max 365).",
                "type": "integer"
              },
              "end": {
                "description": "Range end, ISO date/datetime. Defaults to now when only `start` is given.",
                "type": "string"
              },
              "id": {
                "description": "QR code id for per-code analytics; omit for workspace-wide.",
                "type": "string"
              },
              "start": {
                "description": "Range start, ISO date or datetime (e.g. 2026-08-03 or 2026-08-03T14:00:00Z). Use start/end together for a fixed window instead of the rolling `days` look-back.",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "end": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "period_days": {
                "type": "integer"
              },
              "qr_code_id": {
                "description": "Set when the report is for a single code.",
                "type": "string"
              },
              "scans_by_day": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "scans": {
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "start": {
                "type": "string"
              },
              "top_browsers": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "scans": {
                      "type": "integer"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "top_cities": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "scans": {
                      "type": "integer"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "top_codes": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "scans": {
                      "type": "integer"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "top_countries": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "scans": {
                      "type": "integer"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "top_os": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "scans": {
                      "type": "integer"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "total_scans": {
                "type": "integer"
              },
              "unique_scans": {
                "type": "integer"
              },
              "workspace": {
                "description": "Set when the report is workspace-wide.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get scan analytics"
          }
        },
        {
          "name": "list_qr_codes",
          "description": "List QR codes in a workspace, newest first. Optional `query` searches destination, name, and tags. `folder` narrows to one folder, `include_tags` adds each code's tags (its folder is always shown), and `include_scans` adds scan counts — use it instead of calling get_analytics once per code.",
          "inputSchema": {
            "properties": {
              "folder": {
                "description": "Folder id or slug to filter by, or 'none' for codes in no folder.",
                "type": "string"
              },
              "include_scans": {
                "description": "Add total_scans and unique_scans (lifetime) to each code.",
                "type": "boolean"
              },
              "include_tags": {
                "description": "Add each code's tags. (Each code's folder is always included.)",
                "type": "boolean"
              },
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Results per page (max 200, default 25).",
                "type": "integer"
              },
              "query": {
                "description": "Search term (destination, display name, or tag).",
                "type": "string"
              },
              "subfolders": {
                "description": "With `folder`, also include codes in its subfolders.",
                "type": "boolean"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "background_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "created": {
                      "type": "string"
                    },
                    "display_name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "dynamic": {
                      "type": "boolean"
                    },
                    "error_correction": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "eye_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "eye_style": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "folder": {
                      "anyOf": [
                        {
                          "additionalProperties": true,
                          "description": "The folder a code sits in (null when unfiled).",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "path": {
                              "type": "string"
                            },
                            "slug": {
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "frame": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "frame_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "gps_tracking": {
                      "type": "boolean"
                    },
                    "has_border": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "logo": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "pattern": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "pdf_file_url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "png": {
                      "description": "PNG URL once rendered; null until then (use download_qr).",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "primary_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "qr_data": {
                      "description": "Encoded data: the destination URL for URL codes.",
                      "type": "string"
                    },
                    "qr_type": {
                      "description": "Link, Text, vCard, or PDF.",
                      "type": "string"
                    },
                    "shortlink_url": {
                      "description": "Tracked short URL a dynamic code points at; null for static codes.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "svg": {
                      "description": "Rendered QR as SVG markup.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "svg_file": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "tags": {
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "slug": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "text_secondary": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "total_scans": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "unique_scans": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "vcard": {
                      "anyOf": [
                        {
                          "additionalProperties": true,
                          "description": "Contact details encoded in a vCard code.",
                          "properties": {
                            "city": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "company_name": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "description": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "email": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "first_name": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "last_name": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "mobile_number": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "phone_number": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "position": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "post_code": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "state": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "street": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "type": "object"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List QR codes"
          }
        },
        {
          "name": "create_short_link",
          "description": "Create a tracked short link for a URL. It comes with its own QR code (same id; use download_qr). Supports a custom slug and a custom domain. The destination can be changed later with update_short_link, and clicks are tracked. Never shorten a link that is already a Hovercode short link, form link, or page link — those are already tracked and already have a QR code.",
          "inputSchema": {
            "properties": {
              "display_name": {
                "description": "Internal name to find this link later.",
                "type": "string"
              },
              "domain": {
                "description": "Custom short-link domain; else a default is used.",
                "type": "string"
              },
              "gps": {
                "description": "Prompt visitors to share their location.",
                "type": "boolean"
              },
              "link": {
                "description": "The destination URL to shorten.",
                "type": "string"
              },
              "slug": {
                "description": "Custom slug (letters/numbers/hyphens) or auto-generated.",
                "type": "string"
              },
              "tags": {
                "description": "Labels to attach (created if new) so you can find these later — list_qr_codes and list_short_links search by tag.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "link"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "domain": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "gps": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "link": {
                "description": "Destination URL.",
                "type": "string"
              },
              "link_type": {
                "type": "string"
              },
              "png": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "short_url": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "svg": {
                "description": "QR code for the short URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_clicks": {
                "type": "integer"
              },
              "unique_clicks": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create short link"
          }
        },
        {
          "name": "set_workspace",
          "description": "Switch the current (default) workspace by id or name. New codes, forms, and pages are created in the current workspace unless a tool is given an explicit `workspace`.",
          "inputSchema": {
            "properties": {
              "workspace": {
                "description": "Workspace id or name to switch to.",
                "type": "string"
              }
            },
            "required": [
              "workspace"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "current": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Switch workspace"
          }
        },
        {
          "name": "create_qr_codes_bulk",
          "description": "Create many QR codes at once from a list — e.g. 'make codes for these 20 product URLs in our brand colors'. All codes share the design/options you pass (colors, pattern, frame, dynamic, template). Returns the created codes and any per-item errors. Max 100 per call.",
          "inputSchema": {
            "properties": {
              "background_color": {
                "description": "Hex background color, or 'transparent'.",
                "type": "string"
              },
              "color_scope": {
                "description": "How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "dynamic": {
                "description": "Make all of them editable + tracked; can't be switched after creation. Free up to a per-plan limit, not paid-only — a large batch can exceed it partway through, which shows up as per-item errors, not a whole-batch failure.",
                "type": "boolean"
              },
              "error_correction": {
                "description": "QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "frame": {
                "description": "Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "has_border": {
                "description": "Draw a border around the code.",
                "type": "boolean"
              },
              "idempotency_key": {
                "description": "Optional client key to make retries safe: if a previous call used the same key (same workspace), the earlier result is replayed instead of creating duplicate codes. Use a fresh key per distinct batch.",
                "type": "string"
              },
              "items": {
                "description": "URLs to encode. Each item is a URL string, or an object {url, display_name}.",
                "items": {
                  "type": [
                    "string",
                    "object"
                  ]
                },
                "type": "array"
              },
              "logo_url": {
                "description": "URL of a logo image to place in the center.",
                "type": "string"
              },
              "pattern": {
                "description": "Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "tags": {
                "description": "Labels to attach (created if new) so you can find these later — list_qr_codes and list_short_links search by tag.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "template": {
                "description": "Workspace template id to apply to all.",
                "type": "string"
              },
              "text": {
                "description": "Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_secondary": {
                "description": "Secondary caption line, where the frame supports it.",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "items"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "created": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "display_name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "qr_data": {
                      "type": "string"
                    },
                    "short_url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "created_count": {
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "errors": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "index": {
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "failed_count": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create QR codes in bulk"
          }
        },
        {
          "name": "download_qr",
          "description": "Get downloadable, print-ready image links for a QR code — a high-resolution PNG and a vector SVG (best for print/large sizes). Returns URLs you can share or save.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "QR code id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "png_url": {
                "description": "Print-ready PNG; null if rendering failed.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg_url": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Download QR code files"
          }
        },
        {
          "name": "create_pdf_qr",
          "description": "Create a dynamic QR code and short link for a PDF (menus, flyers, tickets). Host the PDF by passing `pdf_url` (a link Hovercode fetches) or `pdf_base64` (the file's base64 bytes). Returns a shareable short link plus a rendered QR. Because it's dynamic you can later swap the PDF without reprinting the code — always dynamic, no static option here. Draws on the same free, per-workspace dynamic-code allowance as create_qr_code (list_workspaces' `dynamic_qr_limit`); past that limit this call fails asking for an upgrade, it isn't paid-only from the start.",
          "inputSchema": {
            "properties": {
              "display_name": {
                "description": "Internal name to find this code later.",
                "type": "string"
              },
              "domain": {
                "description": "Custom short-link domain (list_workspaces shows the plan).",
                "type": "string"
              },
              "filename": {
                "description": "Name for the stored file, e.g. 'menu.pdf'.",
                "type": "string"
              },
              "pdf_base64": {
                "description": "Base64-encoded PDF bytes (data-URI prefix allowed), max 20 MB. Or use pdf_url.",
                "type": "string"
              },
              "pdf_url": {
                "description": "URL of a PDF to fetch and host. Use this or pdf_base64.",
                "type": "string"
              },
              "tags": {
                "description": "Labels to attach (created if new) so you can find these later — list_qr_codes and list_short_links search by tag.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "background_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dynamic": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "error_correction": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_style": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "folder": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "The folder a code sits in (null when unfiled).",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "frame": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "frame_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "gps_tracking": {
                "type": "boolean"
              },
              "has_border": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pattern": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pdf_file_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "png": {
                "description": "PNG URL once rendered; null until then (use download_qr).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "primary_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_data": {
                "description": "Encoded data: the destination URL for URL codes.",
                "type": "string"
              },
              "qr_type": {
                "description": "Link, Text, vCard, or PDF.",
                "type": "string"
              },
              "shortlink_url": {
                "description": "Tracked short URL a dynamic code points at; null for static codes.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg": {
                "description": "Rendered QR as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg_file": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "text_secondary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "unique_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "vcard": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "Contact details encoded in a vCard code.",
                    "properties": {
                      "city": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "company_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "country": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "email": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "first_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "last_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "mobile_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "phone_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "position": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "post_code": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "state": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "street": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "website": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create PDF QR code"
          }
        },
        {
          "name": "get_qr_code",
          "description": "Get one QR code's details and scan analytics (total and unique scans), plus a rendered PNG.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "QR code id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "background_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dynamic": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "error_correction": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_style": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "folder": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "The folder a code sits in (null when unfiled).",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "frame": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "frame_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "gps_tracking": {
                "type": "boolean"
              },
              "has_border": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pattern": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pdf_file_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "png": {
                "description": "PNG URL once rendered; null until then (use download_qr).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "primary_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_data": {
                "description": "Encoded data: the destination URL for URL codes.",
                "type": "string"
              },
              "qr_type": {
                "description": "Link, Text, vCard, or PDF.",
                "type": "string"
              },
              "shortlink_url": {
                "description": "Tracked short URL a dynamic code points at; null for static codes.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg": {
                "description": "Rendered QR as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg_file": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "text_secondary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "unique_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "vcard": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "Contact details encoded in a vCard code.",
                    "properties": {
                      "city": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "company_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "country": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "email": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "first_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "last_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "mobile_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "phone_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "position": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "post_code": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "state": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "street": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "website": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get QR code"
          }
        },
        {
          "name": "update_qr_code",
          "description": "Update a QR code in place — the same code keeps working, so it's safe for already-printed codes. Changing `qr_data` retargets a DYNAMIC code's destination. Design fields (colors, pattern, eye style, frame, logo) restyle the code WITHOUT replacing it. Also supports renaming, toggling location tracking, moving it into a folder (`folder`, or 'none' to unfile), and adding/removing tags. Returns the re-rendered QR so you can preview the result. Any combination works in one call. Only include a design field when you actually intend to change it: every one you pass is applied exactly as given, even a color identical to what you set at creation — there's no way to tell 'leave this as-is' from 'set this back to what it already was'. In particular, someone may have since edited the design directly (a widget's own Edit panel can change eye/frame color, pattern, or frame without that edit ever appearing in this conversation) — resending a color or style you remember from an earlier turn will silently overwrite it. If you're not sure the design still matches what you last set, call get_qr_code first rather than restoring from memory.",
          "inputSchema": {
            "properties": {
              "add_tags": {
                "description": "Tag titles to add (created in the workspace if new).",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "background_color": {
                "description": "Hex background color, or 'transparent'.",
                "type": "string"
              },
              "color_scope": {
                "description": "How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "display_name": {
                "description": "New internal name.",
                "type": "string"
              },
              "error_correction": {
                "description": "QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "folder": {
                "description": "Move the code into this folder (id or slug from list_folders); 'none' unfiles it.",
                "type": "string"
              },
              "frame": {
                "description": "Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "gps_tracking": {
                "description": "Enable/disable location prompt.",
                "type": "boolean"
              },
              "has_border": {
                "description": "Draw a border around the code.",
                "type": "boolean"
              },
              "id": {
                "description": "QR code id.",
                "type": "string"
              },
              "logo_base64": {
                "description": "A logo image as base64 (JPEG/PNG/GIF/WebP, under 2 MB; a data: URI prefix is fine) to place in the center — use `logo_url` instead whenever the image is reachable at a URL. Producing this string means generating it yourself as text, and a single dropped or altered character anywhere in a long base64 string corrupts everything after it — the code then renders with a blank space where the logo should be, discovered only after the fact. If a call with this fails validation (e.g. 'corrupted or incomplete'), that's very likely this happening — retry by generating the string again rather than assuming the source image is bad.",
                "type": "string"
              },
              "logo_round": {
                "description": "Force the logo into a circle.",
                "type": "boolean"
              },
              "logo_url": {
                "description": "URL of a logo image to place in the center.",
                "type": "string"
              },
              "pattern": {
                "description": "Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "qr_data": {
                "description": "New destination URL/text (dynamic codes only).",
                "type": "string"
              },
              "remove_logo": {
                "description": "Remove the code's logo.",
                "type": "boolean"
              },
              "remove_tags": {
                "description": "Tags to remove from this code, by title, slug, or id.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "text": {
                "description": "Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_secondary": {
                "description": "Secondary caption line, where the frame supports it.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "background_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dynamic": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "error_correction": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "eye_style": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "folder": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "The folder a code sits in (null when unfiled).",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "path": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "frame": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "frame_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "gps_tracking": {
                "type": "boolean"
              },
              "has_border": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pattern": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pdf_file_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "png": {
                "description": "PNG URL once rendered; null until then (use download_qr).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "primary_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_data": {
                "description": "Encoded data: the destination URL for URL codes.",
                "type": "string"
              },
              "qr_type": {
                "description": "Link, Text, vCard, or PDF.",
                "type": "string"
              },
              "shortlink_url": {
                "description": "Tracked short URL a dynamic code points at; null for static codes.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg": {
                "description": "Rendered QR as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "svg_file": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "text_secondary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "unique_scans": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "vcard": {
                "anyOf": [
                  {
                    "additionalProperties": true,
                    "description": "Contact details encoded in a vCard code.",
                    "properties": {
                      "city": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "company_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "country": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "email": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "first_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "last_name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "mobile_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "phone_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "position": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "post_code": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "state": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "street": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "website": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Update QR code"
          }
        },
        {
          "name": "delete_qr_code",
          "description": "Delete a QR code. Dynamic codes stop redirecting after deletion.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "QR code id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "deleted": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Delete QR code"
          }
        },
        {
          "name": "get_qr_activity",
          "description": "List recent scan events for a dynamic QR code (time, location, device). Use this to answer questions like where or when a code was scanned.",
          "inputSchema": {
            "properties": {
              "end": {
                "description": "Range end, ISO date/datetime. Defaults to now when only `start` is given.",
                "type": "string"
              },
              "id": {
                "description": "QR code id.",
                "type": "string"
              },
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Events per page (max 200, default 25).",
                "type": "integer"
              },
              "start": {
                "description": "Range start, ISO date or datetime (e.g. 2026-08-03 or 2026-08-03T14:00:00Z). Use start/end together for a fixed window instead of the rolling `days` look-back.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "device": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "location": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "qr_code_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "scanner_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "time_timezone_aware": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "time_utc": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get QR code scan activity"
          }
        },
        {
          "name": "list_templates",
          "description": "List the workspace's saved QR design templates. Pass a template id to create_qr_code to reuse its branding.",
          "inputSchema": {
            "properties": {
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "background_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "created": {
                      "type": "string"
                    },
                    "eye_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "eye_style": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "frame": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "frame_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "has_border": {
                      "type": "boolean"
                    },
                    "has_logo": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "is_default": {
                      "description": "True for one of the platform's built-in designs; false for a template this workspace saved itself.",
                      "type": "boolean"
                    },
                    "logo": {
                      "description": "The template's logo image, if has_logo — pass as logo_url to update_qr_code/create_qr_code to carry it over.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "pattern": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "preview": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "primary_color": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "text_secondary": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "title": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List design templates"
          }
        },
        {
          "name": "list_folders",
          "description": "List the workspace's folders with their full path, code count, id and slug. Use a folder's id or slug with create_qr_code / update_qr_code (`folder`) to file codes, or with list_qr_codes to filter.",
          "inputSchema": {
            "properties": {
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "code_count": {
                      "type": "integer"
                    },
                    "created": {
                      "type": "string"
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parent": {
                      "description": "Parent folder id, null at the top level.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "path": {
                      "description": "Full path, e.g. Campaigns / Spring 2026.",
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List folders"
          }
        },
        {
          "name": "create_folder",
          "description": "Create a folder to organise QR codes, optionally nested under a parent. Creating a folder that already exists (same name, same parent) returns the existing one, so it's safe to call repeatedly.",
          "inputSchema": {
            "properties": {
              "name": {
                "description": "Folder name.",
                "type": "string"
              },
              "parent": {
                "description": "Parent folder id or slug to nest under (optional).",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "code_count": {
                "type": "integer"
              },
              "created": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "parent": {
                "description": "Parent folder id, null at the top level.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "path": {
                "description": "Full path, e.g. Campaigns / Spring 2026.",
                "type": "string"
              },
              "slug": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Create folder"
          }
        },
        {
          "name": "update_folder",
          "description": "Rename a folder and/or move it under another folder. `parent` 'none' moves it to the top level. Codes inside keep their filing.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Folder id (from list_folders).",
                "type": "string"
              },
              "name": {
                "description": "New folder name.",
                "type": "string"
              },
              "parent": {
                "description": "New parent folder id or slug, or 'none' for top level.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "code_count": {
                "type": "integer"
              },
              "created": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "parent": {
                "description": "Parent folder id, null at the top level.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "path": {
                "description": "Full path, e.g. Campaigns / Spring 2026.",
                "type": "string"
              },
              "slug": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Rename or move folder"
          }
        },
        {
          "name": "delete_folder",
          "description": "Delete a folder. The codes in it (and in its subfolders) are NOT deleted — they become unfiled — and its subfolders move up to its parent.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Folder id (from list_folders).",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "deleted": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Delete folder"
          }
        },
        {
          "name": "list_tags",
          "description": "List the workspace's tags (title + id). Tags are attached with create_qr_code (`tags`) or update_qr_code (`add_tags` / `remove_tags`), and list_qr_codes searches by tag.",
          "inputSchema": {
            "properties": {
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List tags"
          }
        },
        {
          "name": "update_form",
          "description": "Change an existing form without recreating it: edit its fields, settings (redirect, thank-you, title), or branding (theme/colors/logo), or close/reopen it. If you pass `fields`, provide the COMPLETE desired list — include each existing field's `id` (from get_form) to keep it; omit a field to remove it; leave `id` off a new field. If the form is already published, edits are re-published so they go live.",
          "inputSchema": {
            "properties": {
              "bg_color": {
                "description": "Hex background color.",
                "type": "string"
              },
              "button_color": {
                "description": "Hex submit-button color.",
                "type": "string"
              },
              "button_text_color": {
                "description": "Hex button-text color.",
                "type": "string"
              },
              "description": {
                "description": "New description.",
                "type": "string"
              },
              "fields": {
                "description": "Complete desired field list (see note); create_form shape plus an optional `id`.",
                "items": {
                  "properties": {
                    "id": {
                      "description": "Existing field id to keep/update; omit if new.",
                      "type": "string"
                    },
                    "label": {
                      "description": "The field's question/label.",
                      "type": "string"
                    },
                    "max_label": {
                      "description": "scale only: label under the top value",
                      "type": "string"
                    },
                    "min_label": {
                      "description": "scale only: label under the lowest value",
                      "type": "string"
                    },
                    "nps": {
                      "description": "Net Promoter Score preset (0–10, standard labels).",
                      "type": "boolean"
                    },
                    "options": {
                      "description": "Choices for select/radio/checkbox/ranking; {label, image} objects for image_choice.",
                      "items": {
                        "type": [
                          "string",
                          "object"
                        ]
                      },
                      "type": "array"
                    },
                    "required": {
                      "description": "Whether an answer is required.",
                      "type": "boolean"
                    },
                    "show_when": {
                      "description": "Conditional logic: show this field only while its conditions match EARLIER answers (e.g. a follow-up question, or a statement recommending a product). Omit to always show.",
                      "properties": {
                        "action": {
                          "description": "'show' (default): shown only while the rules match. 'require': always shown, required only while they match. On a page_break field the rules skip the whole page.",
                          "enum": [
                            "show",
                            "require"
                          ],
                          "type": "string"
                        },
                        "match": {
                          "description": "Default 'all'.",
                          "enum": [
                            "all",
                            "any"
                          ],
                          "type": "string"
                        },
                        "rules": {
                          "items": {
                            "properties": {
                              "field": {
                                "description": "The question this condition looks at: its label, its id, or its 0-based position.",
                                "type": "string"
                              },
                              "op": {
                                "description": "eq / neq (is, is not), contains / not_contains (text or checkbox), gt / lt (numbers, ratings, dates), is_empty / not_empty (no value needed).",
                                "enum": [
                                  "eq",
                                  "neq",
                                  "contains",
                                  "not_contains",
                                  "gt",
                                  "lt",
                                  "is_empty",
                                  "not_empty"
                                ],
                                "type": "string"
                              },
                              "value": {
                                "description": "Value to compare with (an option's value for choice questions).",
                                "type": "string"
                              }
                            },
                            "required": [
                              "field",
                              "op"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "rules"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "description": "Field type.",
                      "enum": [
                        "text",
                        "email",
                        "phone",
                        "number",
                        "textarea",
                        "select",
                        "radio",
                        "checkbox",
                        "date",
                        "time",
                        "url",
                        "rating",
                        "scale",
                        "yes_no",
                        "image_choice",
                        "ranking",
                        "statement",
                        "hidden",
                        "page_break",
                        "image"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "label"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "id": {
                "description": "Form id.",
                "type": "string"
              },
              "logo_url": {
                "description": "URL of a logo image (JPEG/PNG/GIF/WebP) to show on the form.",
                "type": "string"
              },
              "outcomes": {
                "description": "Pathways / branching endings. After submit the first outcome whose rules match decides the ending: its own thank-you title/message and/or a redirect_url (e.g. send people to a different product page per answer). If none match, the default thank-you page is shown.",
                "items": {
                  "properties": {
                    "end_early": {
                      "description": "Screening: end the form as soon as this matches (checked on every page change), not just at submit.",
                      "type": "boolean"
                    },
                    "match": {
                      "description": "Default 'all'.",
                      "enum": [
                        "all",
                        "any"
                      ],
                      "type": "string"
                    },
                    "name": {
                      "description": "Short name, recorded on each response (e.g. 'Recommend Zero Sugar').",
                      "type": "string"
                    },
                    "redirect_url": {
                      "description": "Optional page to send the respondent to.",
                      "type": "string"
                    },
                    "rules": {
                      "items": {
                        "properties": {
                          "field": {
                            "description": "The question this condition looks at: its label, its id, or its 0-based position.",
                            "type": "string"
                          },
                          "op": {
                            "description": "eq / neq (is, is not), contains / not_contains (text or checkbox), gt / lt (numbers, ratings, dates), is_empty / not_empty (no value needed).",
                            "enum": [
                              "eq",
                              "neq",
                              "contains",
                              "not_contains",
                              "gt",
                              "lt",
                              "is_empty",
                              "not_empty"
                            ],
                            "type": "string"
                          },
                          "value": {
                            "description": "Value to compare with (an option's value for choice questions).",
                            "type": "string"
                          }
                        },
                        "required": [
                          "field",
                          "op"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "thank_you_message": {
                      "type": "string"
                    },
                    "thank_you_title": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "name",
                    "rules"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "redirect_url": {
                "description": "URL to send respondents to after they submit.",
                "type": "string"
              },
              "status": {
                "description": "Close (stop responses) or reopen. When set, other edits are ignored.",
                "enum": [
                  "close",
                  "reopen"
                ],
                "type": "string"
              },
              "text_color": {
                "description": "Hex text color.",
                "type": "string"
              },
              "thank_you_message": {
                "description": "Shown after submitting (if no redirect).",
                "type": "string"
              },
              "theme": {
                "description": "Named color preset. Explicit colors below override it.",
                "enum": [
                  "light",
                  "dark",
                  "minimal",
                  "bold"
                ],
                "type": "string"
              },
              "title": {
                "description": "New title.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "allow_multiple_submissions": {
                "type": "boolean"
              },
              "bg_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "dashboard_url": {
                "description": "Where the owner manages the form on hovercode.com.",
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "fields": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "field_type": {
                      "type": "string"
                    },
                    "help_text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "logic": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "max_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "max_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "min_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "min_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "options": {
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "label": {
                            "type": "string"
                          },
                          "value": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "order": {
                      "type": "integer"
                    },
                    "pattern": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "placeholder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "required": {
                      "type": "boolean"
                    },
                    "settings": {
                      "type": "object"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "has_unpublished_changes": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "modified": {
                "type": "string"
              },
              "notification_recipients": {
                "type": "array"
              },
              "outcomes": {
                "type": "array"
              },
              "qr_code_svg": {
                "description": "QR code for the share URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_id": {
                "description": "Id of the form's own QR code (published forms). Use with download_qr.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "redirect_delay": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "redirect_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "response_count": {
                "type": "integer"
              },
              "share_url": {
                "description": "Public URL respondents open (null until published).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_domain": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "show_powered_by": {
                "type": "boolean"
              },
              "show_progress": {
                "type": "boolean"
              },
              "status": {
                "description": "Draft, Published, or Closed.",
                "type": "string"
              },
              "text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_message": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Update form"
          }
        },
        {
          "name": "list_forms",
          "description": "List the forms in a workspace, newest first. Optional `query` searches by title.",
          "inputSchema": {
            "properties": {
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Results per page (max 100, default 25).",
                "type": "integer"
              },
              "query": {
                "description": "Search term (matches the form title).",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "created": {
                      "type": "string"
                    },
                    "id": {
                      "type": "string"
                    },
                    "modified": {
                      "type": "string"
                    },
                    "response_count": {
                      "type": "integer"
                    },
                    "share_url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "status": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "workspace": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List forms"
          }
        },
        {
          "name": "get_form",
          "description": "Get one form's details: status, response count, share link, and QR.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Form id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "allow_multiple_submissions": {
                "type": "boolean"
              },
              "bg_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "button_text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created": {
                "type": "string"
              },
              "dashboard_url": {
                "description": "Where the owner manages the form on hovercode.com.",
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "fields": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "field_type": {
                      "type": "string"
                    },
                    "help_text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "logic": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "max_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "max_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "min_length": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "min_value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "options": {
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "label": {
                            "type": "string"
                          },
                          "value": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "order": {
                      "type": "integer"
                    },
                    "pattern": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "placeholder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "required": {
                      "type": "boolean"
                    },
                    "settings": {
                      "type": "object"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "has_unpublished_changes": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "logo": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "modified": {
                "type": "string"
              },
              "notification_recipients": {
                "type": "array"
              },
              "outcomes": {
                "type": "array"
              },
              "qr_code_svg": {
                "description": "QR code for the share URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "qr_id": {
                "description": "Id of the form's own QR code (published forms). Use with download_qr.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "redirect_delay": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "redirect_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "response_count": {
                "type": "integer"
              },
              "share_url": {
                "description": "Public URL respondents open (null until published).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_domain": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shortlink_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "show_powered_by": {
                "type": "boolean"
              },
              "show_progress": {
                "type": "boolean"
              },
              "status": {
                "description": "Draft, Published, or Closed.",
                "type": "string"
              },
              "text_color": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_message": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "thank_you_title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get form"
          }
        },
        {
          "name": "get_form_responses",
          "description": "List a form's submissions (newest first) so you can read or summarize them — e.g. 'summarize this week's feedback' or 'any complaints in the responses?'.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Form id.",
                "type": "string"
              },
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Responses per page (max 100, default 25).",
                "type": "integer"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "message": {
                "description": "Set when there are no responses yet.",
                "type": "string"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "completion_time_seconds": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "field_responses": {
                      "description": "One entry per answered field.",
                      "type": "array"
                    },
                    "id": {
                      "type": "string"
                    },
                    "is_complete": {
                      "type": "boolean"
                    },
                    "outcome": {},
                    "submitted_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get form responses"
          }
        },
        {
          "name": "create_page",
          "description": "Create a published micro landing page (link-in-bio style) with a title and a list of links, and return its live URL (`share_url`) + its own QR code (`qr_id`; style it with the QR design args here; don't create another). Use this for 'make me a page with these links and a QR to share it'. The page is a dynamic destination you can keep; it counts toward the workspace's page limit.",
          "inputSchema": {
            "properties": {
              "background_color": {
                "description": "For the QR code this mints: Hex background color, or 'transparent'.",
                "type": "string"
              },
              "bg_color": {
                "description": "Hex background color.",
                "type": "string"
              },
              "color_scope": {
                "description": "For the QR code this mints: How far a `primary_color` change should reach; only relevant alongside `primary_color`. Default 'whole' matches whole-code language — 'make it red', 'make the QR code dark green' — so pattern, eyes, and frame all follow `primary_color` together. Set 'pattern_only' for language that names one part specifically — 'change the pattern color to red', 'just recolor the dots' — so eyes and frame are left exactly as they are.",
                "enum": [
                  "whole",
                  "pattern_only"
                ],
                "type": "string"
              },
              "description": {
                "description": "Optional text shown under the title.",
                "type": "string"
              },
              "domain": {
                "description": "Custom page domain (else a default is used).",
                "type": "string"
              },
              "error_correction": {
                "description": "For the QR code this mints: QR error correction level: L, M, Q, or H (higher tolerates more damage but is denser). Already handled automatically — the renderer uses H whenever the code has a logo, Q otherwise — so leave this unset by default, including when adding or changing a logo in this same call; only set it to deliberately override that automatic choice.",
                "type": "string"
              },
              "eye_color": {
                "description": "For the QR code this mints: Hex color for the corner eyes, if different from `primary_color` (which they follow by default).",
                "type": "string"
              },
              "eye_style": {
                "description": "For the QR code this mints: Corner eye shape.",
                "enum": [
                  "Square",
                  "Rounded",
                  "Drop",
                  "Leaf"
                ],
                "type": "string"
              },
              "frame": {
                "description": "For the QR code this mints: Frame slug. A caption (`text`) works on any frame — set `text` without a `frame` and one that can show it is chosen automatically. Frames that show a caption: card, card-above, speech-bubble, speech-bubble-above.",
                "type": "string"
              },
              "frame_color": {
                "description": "For the QR code this mints: Hex color for the frame, if different from `primary_color` (which it follows by default).",
                "type": "string"
              },
              "has_border": {
                "description": "For the QR code this mints: Draw a border around the code.",
                "type": "boolean"
              },
              "links": {
                "description": "The link buttons on the page, in order.",
                "items": {
                  "properties": {
                    "title": {
                      "description": "Button label (defaults to the URL).",
                      "type": "string"
                    },
                    "type": {
                      "description": "Optional link type, e.g. Website, Instagram, YouTube.",
                      "type": "string"
                    },
                    "url": {
                      "description": "Destination URL.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "url"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "logo_url": {
                "description": "For the QR code this mints: URL of a logo image to place in the center.",
                "type": "string"
              },
              "pattern": {
                "description": "For the QR code this mints: Module pattern style.",
                "enum": [
                  "Original",
                  "Squares",
                  "Circles",
                  "Lines",
                  "Triangles",
                  "Diamonds"
                ],
                "type": "string"
              },
              "primary_color": {
                "description": "For the QR code this mints: Hex color for the QR pattern, e.g. #111111. Eyes and frame follow this automatically — one color request styles the whole code; only set `eye_color`/`frame_color` for a code that should use a *different* color for those, e.g. 'dark green with gold eyes'. See `color_scope` for language that names just the pattern.",
                "type": "string"
              },
              "slug": {
                "description": "Custom URL slug (else auto-generated).",
                "type": "string"
              },
              "text": {
                "description": "For the QR code this mints: Caption text. Renders on any frame that supports one; if `frame` isn't also given (or the one given can't show text), a frame that can is chosen automatically.",
                "type": "string"
              },
              "text_color": {
                "description": "Hex text color.",
                "type": "string"
              },
              "text_secondary": {
                "description": "For the QR code this mints: Secondary caption line, where the frame supports it.",
                "type": "string"
              },
              "title": {
                "description": "The page's heading.",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "required": [
              "title"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "blocks": {
                "description": "Block list; present for layout_version 2 pages.",
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "content": {
                      "type": "object"
                    },
                    "form": {
                      "description": "Linked form id for form/signup blocks.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "hidden": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "created": {
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "layout_version": {
                "description": "1 = legacy links list, 2 = block builder.",
                "type": "integer"
              },
              "links": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "qr_id": {
                "description": "The page's QR code id (use with download_qr / update_qr_code).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "share_url": {
                "description": "Live URL of the page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "type": "string"
              },
              "svg": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create link-in-bio page"
          }
        },
        {
          "name": "get_page",
          "description": "Get one landing page's details: status, live URL, QR, and its blocks (each block's id + type) so you can edit it with update_page.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Page id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "blocks": {
                "description": "Block list; present for layout_version 2 pages.",
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "content": {
                      "type": "object"
                    },
                    "form": {
                      "description": "Linked form id for form/signup blocks.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "hidden": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "created": {
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "layout_version": {
                "description": "1 = legacy links list, 2 = block builder.",
                "type": "integer"
              },
              "links": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "qr_id": {
                "description": "The page's QR code id (use with download_qr / update_qr_code).",
                "type": [
                  "string",
                  "null"
                ]
              },
              "share_url": {
                "description": "Live URL of the page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "slug": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "type": "string"
              },
              "svg": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get landing page"
          }
        },
        {
          "name": "update_page",
          "description": "Change an existing landing page without recreating it: edit its blocks, title, description, or colors, and publish/unpublish it. Use for 'fix the typo on my page', 'add a section', or 'take the page down'. If you pass `blocks`, provide the COMPLETE desired list (same {type, content} shape as build_page; include each block's `id` from get_page to keep it, omit to remove) — leaving `blocks` off keeps the existing blocks untouched. If the page is already published, edits are re-published so they go live; pass publish:false to take it offline.",
          "inputSchema": {
            "properties": {
              "bg_color": {
                "description": "Hex page background color.",
                "type": "string"
              },
              "blocks": {
                "description": "Complete desired block list (see note); each is {type, content} + optional id.",
                "items": {
                  "properties": {
                    "content": {
                      "description": "The block's content for that type.",
                      "type": "object"
                    },
                    "form": {
                      "description": "For a 'form' block: the form id to embed.",
                      "type": "string"
                    },
                    "hidden": {
                      "description": "Hide this block from the live page.",
                      "type": "boolean"
                    },
                    "id": {
                      "description": "Existing block id to keep/update; omit if new.",
                      "type": "string"
                    },
                    "type": {
                      "description": "Block type (see list_block_types).",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "description": {
                "description": "New SEO/description text.",
                "type": "string"
              },
              "id": {
                "description": "Page id.",
                "type": "string"
              },
              "publish": {
                "description": "true = publish/re-publish so edits go live; false = take offline (draft).",
                "type": "boolean"
              },
              "text_color": {
                "description": "Hex text color.",
                "type": "string"
              },
              "title": {
                "description": "New page title.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "blocks": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "content": {
                      "type": "object"
                    },
                    "form": {
                      "description": "Linked form id for form/signup blocks.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "hidden": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "design": {
                "type": "object"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              },
              "layout_version": {
                "type": "integer"
              },
              "publish": {
                "additionalProperties": true,
                "properties": {
                  "has_unpublished_changes": {
                    "type": "boolean"
                  },
                  "is_published": {
                    "type": "boolean"
                  },
                  "published_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "share_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "status": {
                    "type": "string"
                  },
                  "url_locked": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Update landing page"
          }
        },
        {
          "name": "delete_page",
          "description": "Delete a landing page. Its live URL stops serving and it leaves the workspace's page list. Use for 'delete that page' / 'remove the landing page'.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Page id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "deleted": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Delete landing page"
          }
        },
        {
          "name": "list_pages",
          "description": "List the landing pages in a workspace, newest first.",
          "inputSchema": {
            "properties": {
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "blocks": {
                      "description": "Block list; present for layout_version 2 pages.",
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "content": {
                            "type": "object"
                          },
                          "form": {
                            "description": "Linked form id for form/signup blocks.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "hidden": {
                            "type": "boolean"
                          },
                          "id": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "created": {
                      "type": "string"
                    },
                    "description": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "layout_version": {
                      "description": "1 = legacy links list, 2 = block builder.",
                      "type": "integer"
                    },
                    "links": {
                      "items": {
                        "additionalProperties": true,
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "qr_id": {
                      "description": "The page's QR code id (use with download_qr / update_qr_code).",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "share_url": {
                      "description": "Live URL of the page.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "slug": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "status": {
                      "type": "string"
                    },
                    "svg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List landing pages"
          }
        },
        {
          "name": "list_block_types",
          "description": "List the page BLOCK TYPES available to build_page, each with its content JSON Schema. Call this first when composing a rich page so you know the vocabulary (header, link, text, image, button, video, gallery, faq, countdown, socials, divider, form, …).",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "block_types": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "schema": {
                      "description": "JSON Schema for the block's `content`.",
                      "type": "object"
                    },
                    "type": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List page block types"
          }
        },
        {
          "name": "get_short_link",
          "description": "Get one short link's details, destination, click counts, and QR.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Short link id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "domain": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "gps": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "link": {
                "description": "Destination URL.",
                "type": "string"
              },
              "link_type": {
                "type": "string"
              },
              "png": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "short_url": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "svg": {
                "description": "QR code for the short URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_clicks": {
                "type": "integer"
              },
              "unique_clicks": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get short link"
          }
        },
        {
          "name": "list_short_links",
          "description": "List short links in a workspace, newest first. Optional `query` searches URL, name, and slug.",
          "inputSchema": {
            "properties": {
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Results per page (max 200, default 25).",
                "type": "integer"
              },
              "query": {
                "description": "Search term (destination, name, or slug).",
                "type": "string"
              },
              "workspace": {
                "description": "Workspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "created": {
                      "type": "string"
                    },
                    "display_name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "domain": {
                      "type": "string"
                    },
                    "gps": {
                      "type": "boolean"
                    },
                    "id": {
                      "type": "string"
                    },
                    "link": {
                      "description": "Destination URL.",
                      "type": "string"
                    },
                    "link_type": {
                      "type": "string"
                    },
                    "png": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "short_url": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "svg": {
                      "description": "QR code for the short URL, as SVG markup.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "total_clicks": {
                      "type": "integer"
                    },
                    "unique_clicks": {
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List short links"
          }
        },
        {
          "name": "update_short_link",
          "description": "Update a short link. Changing `link` retargets it — the short URL keeps working, it just points somewhere new. Also supports renaming and toggling location tracking.",
          "inputSchema": {
            "properties": {
              "display_name": {
                "description": "New internal name.",
                "type": "string"
              },
              "gps": {
                "description": "Enable/disable the location prompt.",
                "type": "boolean"
              },
              "id": {
                "description": "Short link id.",
                "type": "string"
              },
              "link": {
                "description": "New destination URL.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "created": {
                "type": "string"
              },
              "display_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "domain": {
                "type": "string"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "gps": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "link": {
                "description": "Destination URL.",
                "type": "string"
              },
              "link_type": {
                "type": "string"
              },
              "png": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "short_url": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "svg": {
                "description": "QR code for the short URL, as SVG markup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "total_clicks": {
                "type": "integer"
              },
              "unique_clicks": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Update short link"
          }
        },
        {
          "name": "delete_short_link",
          "description": "Delete a short link. It stops redirecting after deletion.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Short link id.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "deleted": {
                "type": "boolean"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Delete short link"
          }
        },
        {
          "name": "get_short_link_activity",
          "description": "List recent click events for a short link (time, location, device).",
          "inputSchema": {
            "properties": {
              "end": {
                "description": "Range end, ISO date/datetime. Defaults to now when only `start` is given.",
                "type": "string"
              },
              "id": {
                "description": "Short link id.",
                "type": "string"
              },
              "page": {
                "description": "1-based page number.",
                "type": "integer"
              },
              "page_size": {
                "description": "Events per page (max 200, default 25).",
                "type": "integer"
              },
              "start": {
                "description": "Range start, ISO date or datetime (e.g. 2026-08-03 or 2026-08-03T14:00:00Z). Use start/end together for a fixed window instead of the rolling `days` look-back.",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "properties": {
              "count": {
                "description": "Total matching rows across all pages.",
                "type": "integer"
              },
              "error": {
                "additionalProperties": true,
                "description": "Present only when the tool failed (the result is also flagged isError).",
                "properties": {
                  "cause": {
                    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "description": "Whether repeating the same call could succeed.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "next": {
                "description": "URL of the next page, or null on the last page.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "previous": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "results": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "device": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "location": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "qr_code_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "scanner_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "time_timezone_aware": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "time_utc": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get short link click activity"
          }
        }
      ]
    },
    "name": "Hovercode",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": [
      {
        "registryType": "npm",
        "identifier": "hovercode-mcp",
        "version": "1.0.1",
        "transport": "stdio"
      }
    ],
    "pageJsonUrl": "https://www.anchorterminal.com/tools/hovercode-mcp.json",
    "popularity": {
      "githubStars": 0,
      "npmWeekly": 51
    },
    "registryName": "com.hovercode/mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://hovercode.com/mcp/"
      }
    ],
    "repository": "https://github.com/Hovercode-Ltd/hovercode-mcp",
    "reviewed": false,
    "slug": "hovercode-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.hovercode/mcp",
    "summary": "Create and manage QR codes, short links, landing pages, and forms in your Hovercode workspace.",
    "updatedAt": "2026-09-14T18:52:19Z",
    "url": "https://www.anchorterminal.com/tools/hovercode-mcp",
    "vendor": "hovercode.com",
    "vendorUrl": "https://hovercode.com/integrations/mcp/",
    "version": "1.0.1",
    "websiteUrl": "https://hovercode.com/integrations/mcp/",
    "where": "both",
    "why": [
      "vendor"
    ]
  }
}
