
Branded short links, instant page & file hosting, and dynamic QR codes with unified analytics.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Widget-only helper: mint a one-time upload session so the file upload form can send the selected file to QRCodeKIT without exposing credentials. Not intended for direct use; prefer 'Upload a File → Get a Link & QR'.
Original filename of the selected file.
Use 'file' for an arbitrary file or 'pdf' for a PDF.
Size of the selected file in bytes. Must be at most 50 MB.
MIME type reported by the browser for the selected file.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Widget-only helper: mint a one-time upload session so the file upload form can send the selected file to QRCodeKIT without exposing credentials. Not intended for direct use; prefer 'Upload a File → Get a Link & QR'.
| Argument | Type | Description |
|---|---|---|
| filename* | string | Original filename of the selected file. |
| typology* | string | Use 'file' for an arbitrary file or 'pdf' for a PDF. |
| mime_type | any | MIME type reported by the browser for the selected file. |
| size_bytes* | integer | Size of the selected file in bytes. Must be at most 50 MB. |
{
"type": "object",
"title": "create_file_upload_sessionArguments",
"required": [
"filename",
"size_bytes",
"typology"
],
"properties": {
"filename": {
"type": "string",
"title": "Filename",
"maxLength": 255,
"minLength": 1,
"description": "Original filename of the selected file."
},
"typology": {
"enum": [
"file",
"pdf"
],
"type": "string",
"title": "Typology",
"description": "Use 'file' for an arbitrary file or 'pdf' for a PDF."
},
"mime_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mime Type",
"default": null,
"description": "MIME type reported by the browser for the selected file."
},
"size_bytes": {
"type": "integer",
"title": "Size Bytes",
"maximum": 50000000,
"minimum": 1,
"description": "Size of the selected file in bytes. Must be at most 50 MB."
}
}
}Move an existing QRCodeKIT link and its QR code to the active account's trash. Use this only when the user asks to delete, remove, or discard a specific link. Reversible from the QRCodeKIT web app. Resolve the exact qr_id before deleting when the target is ambiguous.
| Argument | Type | Description |
|---|---|---|
| qr_id* | string | Stable QRCodeKIT identifier for the link. |
{
"type": "object",
"title": "delete_linkArguments",
"required": [
"qr_id"
],
"properties": {
"qr_id": {
"type": "string",
"title": "Qr Id",
"minLength": 1,
"description": "Stable QRCodeKIT identifier for the link."
}
}
}Retrieve analytics for the whole QRCodeKIT account or for one link. Reports total, unique, and repeat visits, unique-visitor ratio, activity over time, and — when the account plan supports advanced analytics — breakdowns by country, city, device, operating system, and browser. Account-wide results also include the number of links and the top links ranked by lifetime visits. Use this when the user asks about QR scans, short-link clicks, campaign performance, audience location, devices, trends, comparisons, or top-performing links. Every visit to the short URL is counted, so link clicks and QR scans are combined: one campaign can live in a printed QR, an Instagram bio, and an email and report in one place. Select a link by qr_id, slug, or part of its title via `qr`; omit it for the whole account. Defaults to the last 30 days; the interval can be auto, hourly, daily, weekly, or monthly. The structured result contains the full tables for answering questions about the data.
| Argument | Type | Description |
|---|---|---|
| qr | any | Optional link to deep-dive into: the QRCodeKIT qr_id, the short-link slug, or (part of) the link title. Omit for account-wide stats. |
| end_date | any | Last day of the stats window (YYYY-MM-DD). Defaults to today. |
| interval | string | Time-series bucket size: 1h, 1d, 1w, or 1M. Use 'auto' (default) to pick a sensible bucket from the range length. |
| start_date | any | First day of the stats window (YYYY-MM-DD). Defaults to 29 days before end_date. |
Upload and host a local PDF, image, document, spreadsheet, or other file, and get a permanent public short link plus a downloadable dynamic QR code that opens or downloads it. Use this when the user wants to publish or share an attached PDF or file — a PDF menu, brochure, catalog, CV, ticket, presentation, or any document — without a separate file-hosting account. QRCodeKIT copies the attachment to its own asset storage and validates PDFs as real PDF documents. When `qr_id` is provided, replace the hosted file while preserving the existing public URL and printed QR code.
| Argument | Type | Description |
|---|---|---|
| file* | any | Attached file to host — PDF or any other type — stored as a QRCodeKIT asset before creating the link. |
| qr_id | any | Optional QRCodeKIT identifier for updating an existing link instead of creating one. |
| title* | string | Display title for the link. |
{
"type": "object",
"$defs": {
"OpenAIFileParam": {
"type": "object",
"title": "OpenAIFileParam",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"title": "File Id",
"minLength": 1,
"description": "Host-specific stable identifier for the attached file."
},
"file_name": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
],
"title": "File Name",
"default": null,
"description": "Optional original filename reported by the host. Defaults to 'file'."
},
"mime_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mime Type",
"default": null,
"description": "Optional MIME type reported by the host for the attached file."
},
"download_url": {
"type": "string",
"title": "Download Url",
"format": "uri",
"minLength": 1,
"description": "Temporary HTTPS URL from which the MCP server can download the attached file."
}
},
"description": "The file-object shape passed by OpenAI Apps file parameters.",
"additionalProperties": false
}
},
"title": "host_fileArguments",
"required": [
"title",
"file"
],
"properties": {
"file": {
"$ref": "#/$defs/OpenAIFileParam",
"description": "Attached file to host — PDF or any other type — stored as a QRCodeKIT asset before creating the link."
},
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing link instead of creating one."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Display title for the link."
}
}
}Return the account's QRCodeKIT links as structured data: title, destination or hosted content, short URL, slug, QR image download URLs, timestamps, and lifetime visits. Lifetime visits combine short-link clicks and QR scans. Use this when the assistant needs to search, filter by link type, compare, inspect, or process existing links programmatically. Use show_links instead when the user asks to see, show, display, preview, or download their links or QR codes.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of links to return from the active account. |
| typology | string | Link typology internal name to filter by. Use 'all' or omit this field to return all typologies. |
{
"type": "object",
"title": "list_linksArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of links to return from the active account."
},
"typology": {
"enum": [
"all",
"website",
"file",
"pdf",
"menu",
"social",
"bcard",
"landing",
"whatsapp",
"app_store",
"deep_link",
"digital_link",
"email",
"payment"
],
"type": "string",
"title": "Typology",
"default": "all",
"description": "Link typology internal name to filter by. Use 'all' or omit this field to return all typologies."
}
}
}Open an interactive form for the user to upload a file or PDF from their device and get a permanent short link plus a downloadable dynamic QR code. Use this on Claude and other MCP hosts that cannot pass an attached file directly, whenever the user wants to share or host a PDF, menu, brochure, CV, ticket, or other file by link or QR. The form uploads the file to QRCodeKIT and saves the link; when `qr_id` is provided, it replaces the file of an existing link while preserving its short URL and QR code.
| Argument | Type | Description |
|---|---|---|
| qr_id | any | Optional QRCodeKIT identifier when updating an existing QR instead of creating one. |
| title | any | QR title used when the upload is saved; the form has no title input. Always pass a sensible title from the conversation; when updating an existing QR, pass that QR's current title. Defaults to the uploaded filename. |
| typology | string | Initial file typology hint for the form heading. The final typology is inferred from the uploaded file's extension, so this is only a default. |
{
"type": "object",
"title": "render_file_upload_qr_formArguments",
"properties": {
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier when updating an existing QR instead of creating one."
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"title": "Title",
"default": null,
"description": "QR title used when the upload is saved; the form has no title input. Always pass a sensible title from the conversation; when updating an existing QR, pass that QR's current title. Defaults to the uploaded filename."
},
"typology": {
"enum": [
"file",
"pdf"
],
"type": "string",
"title": "Typology",
"default": "file",
"description": "Initial file typology hint for the form heading. The final typology is inferred from the uploaded file's extension, so this is only a default."
}
}
}Create a device-routing smart link and dynamic QR code for a mobile app: the same short link sends iPhone users to the Apple App Store and Android users to Google Play. Use this for 'download our app' campaigns in print, ads, websites, or link-in-bio pages. An app name and at least one store URL (iOS or Android) are required; an icon URL is optional. When `qr_id` is provided, update the app destinations while preserving the existing short link and QR code.
| Argument | Type | Description |
|---|---|---|
| qr_id | any | Optional QRCodeKIT identifier for updating an existing QR instead of creating one. |
| ios_url | any | Optional Apple App Store URL, such as https://apps.apple.com/app/example/id123. |
| app_name* | string | App name shown on the App Store QR landing page. |
| image_url | any | Optional app icon image URL. |
| android_url | any | Optional Google Play URL, such as https://play.google.com/store/apps/details?id=com.example. |
{
"type": "object",
"title": "save_app_store_linkArguments",
"required": [
"app_name"
],
"properties": {
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing QR instead of creating one."
},
"ios_url": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Ios Url",
"format": "uri",
"default": null,
"description": "Optional Apple App Store URL, such as https://apps.apple.com/app/example/id123."
},
"app_name": {
"type": "string",
"title": "App Name",
"maxLength": 120,
"minLength": 1,
"description": "App name shown on the App Store QR landing page."
},
"image_url": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Image Url",
"format": "uri",
"default": null,
"description": "Optional app icon image URL."
},
"android_url": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Android Url",
"format": "uri",
"default": null,
"description": "Optional Google Play URL, such as https://play.google.com/store/apps/details?id=com.example."
}
}
}Create a short link and dynamic QR code that opens a pre-filled email with a recipient, required subject, optional body, and optional CC recipients. Use this for 'contact us' flows, support or quote requests, RSVPs, feedback, reservations, or other email calls to action. When `qr_id` is provided, update the email details while preserving the existing short link and QR code.
| Argument | Type | Description |
|---|---|---|
| cc | any | Optional CC email addresses. |
| body | string | Optional pre-filled email body. |
| qr_id | any | Optional QRCodeKIT identifier for updating an existing QR instead of creating one. |
| title* | string | Display title for the link. |
| subject* | string | Pre-filled email subject. |
| email_address* | string | Recipient email address for the email QR. |
{
"type": "object",
"title": "save_email_linkArguments",
"required": [
"title",
"email_address",
"subject"
],
"properties": {
"cc": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Cc",
"default": null,
"description": "Optional CC email addresses."
},
"body": {
"type": "string",
"title": "Body",
"default": "",
"maxLength": 2000,
"description": "Optional pre-filled email body."
},
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing QR instead of creating one."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Display title for the link."
},
"subject": {
"type": "string",
"title": "Subject",
"maxLength": 200,
"minLength": 1,
"description": "Pre-filled email subject."
},
"email_address": {
"type": "string",
"title": "Email Address",
"minLength": 1,
"description": "Recipient email address for the email QR."
}
}
}Create or update a permanent short link and dynamic QR code for a file or PDF that is already hosted at a public URL. Use this as a fallback when the host cannot pass an attached file; prefer host_file for local or host-native attachments. When `qr_id` is provided, update the file destination while preserving the existing short link and QR code. Also used as the finalizer step by the in-chat upload form.
| Argument | Type | Description |
|---|---|---|
| qr_id | any | Optional QRCodeKIT identifier for updating an existing QR instead of creating one. |
| title* | string | Display title for the QR. |
| file_url* | string | Already-hosted public file URL, preferably a QRCodeKIT asset URL. |
| typology* | string | Use 'file' for an arbitrary file or 'pdf' for a PDF. |
| asset_iri | any | Optional QRCodeKIT asset IRI returned by an earlier upload. |
| original_filename | any | Original filename to show for the download. Defaults to 'file'. |
{
"type": "object",
"title": "save_file_url_qrArguments",
"required": [
"title",
"file_url",
"typology"
],
"properties": {
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing QR instead of creating one."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Display title for the QR."
},
"file_url": {
"type": "string",
"title": "File Url",
"format": "uri",
"minLength": 1,
"description": "Already-hosted public file URL, preferably a QRCodeKIT asset URL."
},
"typology": {
"enum": [
"file",
"pdf"
],
"type": "string",
"title": "Typology",
"description": "Use 'file' for an arbitrary file or 'pdf' for a PDF."
},
"asset_iri": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Asset Iri",
"default": null,
"description": "Optional QRCodeKIT asset IRI returned by an earlier upload."
},
"original_filename": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
],
"title": "Original Filename",
"default": null,
"description": "Original filename to show for the download. Defaults to 'file'."
}
}
}Publish a single-page static HTML site live on the web and get a permanent public URL and shareable link, plus a downloadable dynamic QR code that opens it. Use this when the user asks to create, publish, deploy, host, share, or put online a landing page, one-pager, business page, digital menu, event page, portfolio, product page, campaign page, or microsite — especially when they do not have a website or hosting provider. No separate hosting account, build step, or deployment token is required. Accepts one complete HTML document up to 6 MB: a single file, not a multi-page site. When `qr_id` is provided, update the hosted page in place while preserving its public URL and printed QR code.
| Argument | Type | Description |
|---|---|---|
| html* | string | Complete HTML document for a static page, such as an AI-generated landing page or microsite, to publish at a public QRCodeKIT-hosted URL and share through the returned shortlink. Maximum size is 6 MB when encoded as UTF-8. |
| qr_id | any | Optional QRCodeKIT identifier for updating an existing hosted HTML page in place while preserving the same public URL and QR code. |
| title* | string | Human-readable title for the hosted page. |
{
"type": "object",
"title": "save_html_file_qrArguments",
"required": [
"title",
"html"
],
"properties": {
"html": {
"type": "string",
"title": "Html",
"maxLength": 6000000,
"minLength": 1,
"description": "Complete HTML document for a static page, such as an AI-generated landing page or microsite, to publish at a public QRCodeKIT-hosted URL and share through the returned shortlink. Maximum size is 6 MB when encoded as UTF-8."
},
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing hosted HTML page in place while preserving the same public URL and QR code."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Human-readable title for the hosted page."
}
}
}Create a branded short link and dynamic QR code for an existing website URL, with an optional custom slug (e.g. qrkit.co/summer-sale). Use this when the user already has a destination URL and wants to shorten or brand it, track visits, or get a QR code for it: every link includes a scannable QR code that opens the same destination, and clicks and scans are tracked together in one analytics dashboard. When `qr_id` is provided, change the destination while preserving the existing short URL and printed QR code. Use set_link_slug instead when the user wants to rename the slug of an existing link.
| Argument | Type | Description |
|---|---|---|
| qr_id | any | Optional QRCodeKIT identifier for updating an existing link instead of creating one. |
| title* | string | Display title for the link. |
| short_code | any | Optional custom slug for the new short link, such as 'summer-sale' — the branded part of the short URL (qrkit.co/summer-sale). Letters, digits, dots, hyphens, and underscores only; must be unique within the domain. Only valid when creating; use set_link_slug to rename an existing link. |
| destination_url* | string | Destination URL the short link and QR code redirect to. |
{
"type": "object",
"title": "save_short_linkArguments",
"required": [
"title",
"destination_url"
],
"properties": {
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing link instead of creating one."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Display title for the link."
},
"short_code": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z0-9._-]+$",
"maxLength": 128,
"minLength": 1
},
{
"type": "null"
}
],
"title": "Short Code",
"default": null,
"description": "Optional custom slug for the new short link, such as 'summer-sale' — the branded part of the short URL (qrkit.co/summer-sale). Letters, digits, dots, hyphens, and underscores only; must be unique within the domain. Only valid when creating; use set_link_slug to rename an existing link."
},
"destination_url": {
"type": "string",
"title": "Destination Url",
"format": "uri",
"minLength": 1,
"description": "Destination URL the short link and QR code redirect to."
}
}
}Create a short link and dynamic QR code that opens a WhatsApp conversation with a phone number in international format and an optional pre-filled message. Use this for 'chat with us' or contact buttons, customer support, reservations, sales enquiries, printed signage, business cards, or link-in-bio pages. When `qr_id` is provided, update the phone number or message while preserving the existing short link and QR code.
| Argument | Type | Description |
|---|---|---|
| qr_id | any | Optional QRCodeKIT identifier for updating an existing QR instead of creating one. |
| title* | string | Display title for the link. |
| message | string | Optional pre-filled WhatsApp message. |
| phone_number* | string | WhatsApp phone number with international country code, such as +12025550123. |
{
"type": "object",
"title": "save_whatsapp_linkArguments",
"required": [
"title",
"phone_number"
],
"properties": {
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for updating an existing QR instead of creating one."
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 120,
"minLength": 1,
"description": "Display title for the link."
},
"message": {
"type": "string",
"title": "Message",
"default": "",
"maxLength": 1000,
"description": "Optional pre-filled WhatsApp message."
},
"phone_number": {
"type": "string",
"title": "Phone Number",
"minLength": 1,
"description": "WhatsApp phone number with international country code, such as +12025550123."
}
}
}Change the custom slug (short code) of an existing QRCodeKIT short link, for any link type — e.g. turn qrkit.co/x7Ab9c into qrkit.co/summer-sale. The link keeps its identity and analytics. Use this only when the user explicitly wants to rename the short URL; to change a destination, use the corresponding save tool instead. WARNING: warn the user that the previous short URL stops redirecting and the QR image is regenerated, so any printed or shared copies of the old QR must be replaced.
| Argument | Type | Description |
|---|---|---|
| qr_id* | string | Stable QRCodeKIT identifier for the link. |
| short_code* | string | New slug for the short link, such as 'my-campaign-2026'. Letters, digits, dots, hyphens, and underscores only. Must be unique within the short-link domain. |
{
"type": "object",
"title": "set_link_slugArguments",
"required": [
"qr_id",
"short_code"
],
"properties": {
"qr_id": {
"type": "string",
"title": "Qr Id",
"minLength": 1,
"description": "Stable QRCodeKIT identifier for the link."
},
"short_code": {
"type": "string",
"title": "Short Code",
"pattern": "^[A-Za-z0-9._-]+$",
"maxLength": 128,
"minLength": 1,
"description": "New slug for the short link, such as 'my-campaign-2026'. Letters, digits, dots, hyphens, and underscores only. Must be unique within the short-link domain."
}
}
}Display the account's QRCodeKIT links in an interactive gallery: short URL, QR image, combined click-and-scan totals, and download actions. Available QR assets may include SVG, PNG, PDF, and EPS. Use this when the user asks to see, show, preview, display, or download their links or QR codes. When qr_id is provided, show only that link; otherwise show links from the active account.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of links to render when qr_id is absent. |
| qr_id | any | Optional QRCodeKIT identifier for showing a single link instead of the gallery list. |
{
"type": "object",
"title": "show_linksArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of links to render when qr_id is absent."
},
"qr_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr Id",
"default": null,
"description": "Optional QRCodeKIT identifier for showing a single link instead of the gallery list."
}
}
}{
"type": "object",
"title": "get_link_statsArguments",
"properties": {
"qr": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Qr",
"default": null,
"description": "Optional link to deep-dive into: the QRCodeKIT qr_id, the short-link slug, or (part of) the link title. Omit for account-wide stats."
},
"end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "End Date",
"default": null,
"description": "Last day of the stats window (YYYY-MM-DD). Defaults to today."
},
"interval": {
"enum": [
"auto",
"1h",
"1d",
"1w",
"1M"
],
"type": "string",
"title": "Interval",
"default": "auto",
"description": "Time-series bucket size: 1h, 1d, 1w, or 1M. Use 'auto' (default) to pick a sensible bucket from the range length."
},
"start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Start Date",
"default": null,
"description": "First day of the stats window (YYYY-MM-DD). Defaults to 29 days before end_date."
}
}
}