# MCP tools: links and QR codes

> Ten tools create, find, change, pause and resume your links and draw their QR codes. Every change to a live link shows a preview first and waits for your yes.

Source: https://straitlink.in/docs/mcp/links/

These tools work in the [hosted and the local MCP server](https://straitlink.in/docs/mcp/) alike. Each one calls the [REST API](https://straitlink.in/docs/api/) with your secret key, so it can do exactly what that key can do there and nothing more.

## The tools

| Tool | What it does | Changes something? |
|---|---|---|
| `create_link` | Creates one link and returns its `shortUrl` (`POST /v1/links`) | Yes, a new link |
| `batch_create_links` | Creates up to 500 links in one call; an existing slug is a per-link 409, so re-running is safe | Yes, new links |
| `get_link` | One active link by slug: destination, fallbacks, tags, expiry | No |
| `list_links` | Links a page at a time, newest first; `status: "paused"` lists paused links | No |
| `search_links` | Finds links by text in slug, title, destination, campaign or tags, or by an exact tag or campaign, including paused ones (`status: "all"`) | No |
| `update_link` | Changes destination, title, tags or expiry | Yes, after you confirm |
| `pause_link` | Pauses a link: taps get the "link not found" page until you resume it | Yes, after you confirm |
| `resume_link` | Turns a paused link back on; taps follow it again within about 30 seconds | Yes, after you confirm |
| `deactivate_link` | The same as `pause_link` (kept for older prompts) | Yes, after you confirm |
| `get_link_qr` | A print-ready QR code (PNG image or SVG) in your workspace's QR style; scans count as the `qr` channel | No |

`search_links` reads your links export, so it needs an owner's or admin's secret key (since 24 October 2026 only owners and admins can make secret keys). A link disabled for breaking the acceptable use policy can't be resumed.

## How confirming works

A tool that changes a live link runs twice. The first call, without `confirm`, changes nothing and returns `"preview": true` with the current and the new values. Your AI tool shows you that preview. Only when you agree does it call again with `"confirm": true`. `create_link` and `batch_create_links` don't ask, because they never change an existing link.

## Things to ask

- "Create a link `diwali` to https://shop.example.com/sale with the title Diwali sale and the tag diwali."
- "Which links point at /summer? Pause the ones tagged old."
- "Turn the spring-sale link back on." It looks among paused links, shows where the link will go, then asks.
- "Give me a QR code for `diwali` in dark grey, 1024 pixels."

The same calls over HTTP are in [Create and manage links](https://straitlink.in/docs/short-links/) and [Branded QR codes](https://straitlink.in/docs/qr-codes/).
