# Tools reference

The PROlinks MCP server exposes 29 tools. Your assistant chooses the tools for you, so you do not need to call them by name. Use this page to know what the assistant can do, and which arguments each tool accepts.

## Conventions

- **Organization:** every tool except `list-organizations-tool` accepts an optional `organization_id` argument (integer). [Organizations](/docs/mcp/organizations) explains how the server chooses the organization when you do not send it. The tables below do not repeat this argument.
- **Pagination:** list tools accept `page` (integer) and `per_page` (integer, 1 to 100, default 20). Their response includes a `meta` object with `current_page`, `last_page` and `total`.
- **Responses:** tools return structured JSON with the result in a `data` key. Delete tools return a short confirmation text.
- **Dates:** date arguments use the format `d/m/Y H:i`, for example `31/12/2026 18:00`.
- **Behavior:** each tool tells your client if it is read-only, idempotent or destructive. Most clients ask you to approve destructive tools before they run.

## Organizations

### `list-organizations-tool`

List the organizations the authenticated user belongs to.

**Behavior:** Read-only

**Arguments:** none.

### `get-organization-tool`

Get a single organization the authenticated user belongs to.

**Behavior:** Read-only

**Arguments:** `organization_id` only.

## Domains

### `list-domains-tool`

List the domains belonging to an organization.

**Behavior:** Read-only

**Arguments:** pagination only.

### `get-domain-tool`

Get a single domain belonging to an organization.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `domain_id` | integer | Yes | The ID of the domain to retrieve. |

### `create-domain-tool`

Add a custom domain to an organization. The domain starts in a pending state until DNS and SSL are provisioned.

**Behavior:** Writes data

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | The domain name to add, e.g. "links.example.com". Must not already be registered. |
| `redirect_url` | string | No | Optional URL to redirect visitors to when they hit the domain root. |

### `update-domain-tool`

Update an existing domain belonging to an organization.

**Behavior:** Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `domain_id` | integer | Yes | The ID of the domain to update. |
| `name` | string | Yes | The new domain name. Must not already be registered. |
| `redirect_url` | string | No | Optional URL to redirect visitors to when they hit the domain root. |

### `delete-domain-tool`

Delete a domain belonging to an organization.

**Behavior:** Destructive, Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `domain_id` | integer | Yes | The ID of the domain to delete. |

## Tags

### `list-tags-tool`

List the tags belonging to an organization.

**Behavior:** Read-only

**Arguments:** pagination only.

### `get-tag-tool`

Get a single tag belonging to an organization.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `tag_id` | integer | Yes | The ID of the tag to retrieve. |

### `create-tag-tool`

Create a new tag in an organization.

**Behavior:** Writes data

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | The name of the tag. Must be unique within the organization. |
| `color` | string (`red`, `orange`, `yellow`, `green`, `cyan`, `teal`, `blue`, `indigo`, `purple`, `fuchsia`, `pink`, `zinc`) | No | The color of the tag. Defaults to "zinc". |

### `update-tag-tool`

Update an existing tag belonging to an organization.

**Behavior:** Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `tag_id` | integer | Yes | The ID of the tag to update. |
| `name` | string | Yes | The new name of the tag. Must be unique within the organization. |
| `color` | string (`red`, `orange`, `yellow`, `green`, `cyan`, `teal`, `blue`, `indigo`, `purple`, `fuchsia`, `pink`, `zinc`) | No | The new color of the tag. Leave empty to keep the current color. |

### `delete-tag-tool`

Delete a tag belonging to an organization.

**Behavior:** Destructive, Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `tag_id` | integer | Yes | The ID of the tag to delete. |

## Campaign sources

### `list-campaign-sources-tool`

List the campaign sources belonging to an organization.

**Behavior:** Read-only

**Arguments:** pagination only.

### `get-campaign-source-tool`

Get a single campaign source belonging to an organization.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_source_id` | integer | Yes | The ID of the campaign source to retrieve. |

### `create-campaign-source-tool`

Create a new campaign source (utm_source) in an organization.

**Behavior:** Writes data

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | The name of the campaign source. Must be unique within the organization. |

### `update-campaign-source-tool`

Update an existing campaign source belonging to an organization.

**Behavior:** Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_source_id` | integer | Yes | The ID of the campaign source to update. |
| `name` | string | Yes | The new name of the campaign source. Must be unique within the organization. |

### `delete-campaign-source-tool`

Delete a campaign source belonging to an organization.

**Behavior:** Destructive, Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_source_id` | integer | Yes | The ID of the campaign source to delete. |

## Campaign mediums

### `list-campaign-mediums-tool`

List the campaign mediums belonging to an organization.

**Behavior:** Read-only

**Arguments:** pagination only.

### `get-campaign-medium-tool`

Get a single campaign medium belonging to an organization.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_medium_id` | integer | Yes | The ID of the campaign medium to retrieve. |

### `create-campaign-medium-tool`

Create a new campaign medium (utm_medium) in an organization.

**Behavior:** Writes data

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | The name of the campaign medium. Must be unique within the organization. |

### `update-campaign-medium-tool`

Update an existing campaign medium belonging to an organization.

**Behavior:** Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_medium_id` | integer | Yes | The ID of the campaign medium to update. |
| `name` | string | Yes | The new name of the campaign medium. Must be unique within the organization. |

### `delete-campaign-medium-tool`

Delete a campaign medium belonging to an organization.

**Behavior:** Destructive, Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `campaign_medium_id` | integer | Yes | The ID of the campaign medium to delete. |

## Links

### `list-links-tool`

List the links belonging to an organization, optionally filtered by domain.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `domain_id` | integer | No | Optionally filter links to a single domain. |
| `view` | string (`summary`, `full`) | No | How much of each link to return. "summary" gives the domain, destination, slug, short link, description, tags, clicks, campaign source and medium, active state and creation date. "full" adds the platform redirects, schedule, expiry and remaining campaign fields, which are unset on most links. Use "summary" unless you need one of the fields only "full" carries. Default: `full`. |

This tool also accepts the pagination arguments.

### `get-link-tool`

Get a single link belonging to an organization.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `link_id` | integer | Yes | The ID of the link to retrieve. |

### `create-link-tool`

Create a new short link in an organization. A random slug is generated when none is provided.

**Behavior:** Writes data

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `domain_id` | integer | Yes | The ID of the domain to create the link on. |
| `url` | string | Yes | The destination URL the short link redirects to. |
| `slug` | string | No | Optional custom slug. Must be unique within the domain. A random slug is generated when omitted. |
| `description` | string | No | Optional description of the link. |
| `tags` | array of integers | No | Optional IDs of tags to attach to the link. |
| `campaign_source_id` | integer | No | Optional campaign source (utm_source) ID. |
| `campaign_medium_id` | integer | No | Optional campaign medium (utm_medium) ID. |
| `campaign_id` | string | No | Optional utm_id value. |
| `campaign_name` | string | No | Optional utm_campaign value. |
| `campaign_term` | string | No | Optional utm_term value. |
| `campaign_content` | string | No | Optional utm_content value. |
| `schedule` | boolean | No | Whether the link only becomes active at a scheduled time. |
| `schedule_at` | string | No | When the link becomes active, formatted as "d/m/Y H:i". Required when schedule is true. |
| `schedule_url` | string | No | Optional URL to redirect to before the scheduled time. |
| `expires` | boolean | No | Whether the link expires at a given time. |
| `expires_at` | string | No | When the link expires, formatted as "d/m/Y H:i". Required when expires is true. |
| `expires_url` | string | No | Optional URL to redirect to after expiration. |
| `protect` | boolean | No | Whether the link is password protected. |
| `ios` | boolean | No | Whether iOS visitors are redirected to a dedicated URL. |
| `ios_url` | string | No | The URL for iOS visitors. Required when ios is true. |
| `android` | boolean | No | Whether Android visitors are redirected to a dedicated URL. |
| `android_url` | string | No | The URL for Android visitors. Required when android is true. |
| `windows` | boolean | No | Whether Windows visitors are redirected to a dedicated URL. |
| `windows_url` | string | No | The URL for Windows visitors. Required when windows is true. |
| `macos` | boolean | No | Whether macOS visitors are redirected to a dedicated URL. |
| `macos_url` | string | No | The URL for macOS visitors. Required when macos is true. |
| `linux` | boolean | No | Whether Linux visitors are redirected to a dedicated URL. |
| `linux_url` | string | No | The URL for Linux visitors. Required when linux is true. |

### `update-link-tool`

Update an existing link belonging to an organization. Only the provided fields are changed.

**Behavior:** Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `link_id` | integer | Yes | The ID of the link to update. |
| `url` | string | No | The new destination URL the short link redirects to. |
| `slug` | string | No | The new slug. Must be unique within the domain. |
| `description` | string | No | The new description of the link. |
| `is_active` | boolean | No | Whether the link is active. |
| `tags` | array of integers | No | IDs of tags to attach to the link. Replaces the current tags. |
| `campaign_source_id` | integer | No | The new campaign source (utm_source) ID. |
| `campaign_medium_id` | integer | No | The new campaign medium (utm_medium) ID. |
| `campaign_id` | string | No | The new utm_id value. |
| `campaign_name` | string | No | The new utm_campaign value. |
| `campaign_term` | string | No | The new utm_term value. |
| `campaign_content` | string | No | The new utm_content value. |
| `schedule` | boolean | No | Whether the link only becomes active at a scheduled time. |
| `schedule_at` | string | No | When the link becomes active, formatted as "d/m/Y H:i". Required when schedule is true. |
| `schedule_url` | string | No | URL to redirect to before the scheduled time. |
| `expires` | boolean | No | Whether the link expires at a given time. |
| `expires_at` | string | No | When the link expires, formatted as "d/m/Y H:i". Required when expires is true. |
| `expires_url` | string | No | URL to redirect to after expiration. |
| `protect` | boolean | No | Whether the link is password protected. |
| `ios` | boolean | No | Whether iOS visitors are redirected to a dedicated URL. |
| `ios_url` | string | No | The URL for iOS visitors. Required when ios is true. |
| `android` | boolean | No | Whether Android visitors are redirected to a dedicated URL. |
| `android_url` | string | No | The URL for Android visitors. Required when android is true. |
| `windows` | boolean | No | Whether Windows visitors are redirected to a dedicated URL. |
| `windows_url` | string | No | The URL for Windows visitors. Required when windows is true. |
| `macos` | boolean | No | Whether macOS visitors are redirected to a dedicated URL. |
| `macos_url` | string | No | The URL for macOS visitors. Required when macos is true. |
| `linux` | boolean | No | Whether Linux visitors are redirected to a dedicated URL. |
| `linux_url` | string | No | The URL for Linux visitors. Required when linux is true. |

### `delete-link-tool`

Delete a link belonging to an organization.

**Behavior:** Destructive, Idempotent

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `link_id` | integer | Yes | The ID of the link to delete. |

### `get-link-qr-code-tool`

Get the QR code for a link, as a PNG image plus the URL it encodes.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `link_id` | integer | Yes | The ID of the link to generate a QR code for. |

### `list-link-clicks-tool`

List the recorded clicks for a link, subject to the organization's analytics retention period.

**Behavior:** Read-only

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `link_id` | integer | Yes | The ID of the link to retrieve clicks for. |

This tool also accepts the pagination arguments.
