# Gajo URL Shortener (remote · gajo.io)

Shorten URLs, manage gajo.io short links, and read click analytics. Free account, no credit card.

- Trust score: 83/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `gajo.io`: 83/100 (this document), [markdown](https://verifymcp.io/servers/io-gajo-url-shortener/gajo.md), [page](https://verifymcp.io/servers/io-gajo-url-shortener/gajo)

## Channel facts

- Endpoint: `https://gajo.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 92/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1680 tokens (~152/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 37/100
  - Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Gajo URL Shortener MCP server?

Gajo URL Shortener is a hosted endpoint at https://gajo.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-gajo-url-shortener 'https://gajo.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-gajo-url-shortener": {
      "url": "https://gajo.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-gajo-url-shortener": {
      "type": "http",
      "url": "https://gajo.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-gajo-url-shortener]
url = "https://gajo.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-gajo-url-shortener": {
      "type": "remote",
      "url": "https://gajo.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-gajo-url-shortener --url 'https://gajo.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-gajo-url-shortener:
    url: "https://gajo.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-gajo-url-shortener": {
      "Transport": "http",
      "Url": "https://gajo.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-gajo-url-shortener -t streamable-http -u 'https://gajo.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-gajo-url-shortener": {
      "type": "http",
      "url": "https://gajo.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 83, 0)

- [cosmetic] “create_app_link” reworded the description of “androidUrl”
- [cosmetic] “create_app_link” reworded the description of “iosUrl”
- [cosmetic] “create_app_link” reworded the description of “otherwise”
- [cosmetic] “update_app_link” reworded the description of “androidUrl”
- [cosmetic] “update_app_link” reworded the description of “iosUrl”
- [cosmetic] “update_app_link” reworded the description of “otherwise”

### 2026-10-24 (score 83, −1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “update_app_link”, which the server declares destructive
- [functional regression] Schema quality: pass → fail
- [functional] New tool “create_app_link”

### 2026-10-23 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 83, +1)

- [security] New tool “delete_url”, which the server declares destructive
- [security] Tool “deactivate_url” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 746 → 974
- [functional] Destructive annotations: pass → 100
- [functional] New tool “reactivate_url”

### 2026-10-21 (score 82, +1)

- [security] Tool “get_url” rewrote its description, which is the text the model reads
- [security] Tool “get_url_stats” rewrote its description, which is the text the model reads
- [security] Tool “get_usage” rewrote its description, which is the text the model reads
- [security] Tool “list_urls” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 95 → 106
- [functional] Schema quality: good → excellent

### 2026-10-19 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-17 (score 80, +14)

- [security improvement] Authorization: fail → pass
- [security] First check of Authorization: pass
- [security] The server rewrote its instructions, which are the text every model session reads
- [functional improvement] Tool “deactivate_url” now declares an output schema
- [functional improvement] Tool “get_url” now declares an output schema
- [functional improvement] Tool “get_url_stats” now declares an output schema
- [functional improvement] Tool “get_usage” now declares an output schema
- [functional improvement] Tool “list_urls” now declares an output schema
- [functional improvement] Tool “shorten_url” now declares an output schema
- [functional improvement] Tool “update_url” now declares an output schema
- [functional] First check of Tool coverage: 100
- [functional] Schema quality: excellent → good

### 2026-10-16 (score 66, +1)

- [security] Tool “get_url_stats” rewrote its description, which is the text the model reads
- [functional] Schema quality: good → excellent

## MCP tools (11)

### `shorten_url` (~180 tokens)

Shorten a URL

Create a gajo.io short link for a URL and return it as shortUrl. Links follow your plan's code length and lifetime and count against its monthly quota. Pro plans can pass customCode for a branded gajo.io/c/{code} link, or shorten app deep links (myapp://...) with a web fallbackUrl.

Input parameters:

- `customCode` (string): Pro only: custom code (3-50 letters, digits, or hyphens). Can't be combined with lifetimeDays.
- `fallbackUrl` (string): Pro, deep links only: web URL used when the app isn't installed.
- `lifetimeDays` (integer): Days until the link expires; capped at your plan maximum.
- `url` (string, required): The long URL to shorten (http, https, mailto, tel, ftp, sftp; Pro: app deep links).

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `create_app_link` (~358 tokens)

Create an app store link

Pro only: create one short link for a mobile app. iPhones and iPads that open it go to the app's App Store page, Android devices to its Google Play page, and any other device (such as a desktop) sees a Gajo page with a QR code to scan with a phone. Use it for a link that should send people to the right app store; for an ordinary link use shorten_url.

Input parameters:

- `androidUrl` (string, required): Where Android devices go: the app's Google Play page (https://play.google.com/store/apps/details?id=...) or a Google Play test link (https://play.google.com/apps/internaltest/... or /apps/testing/...…
- `appName` (string): The app's name for the page. Optional: looked up from the App Store when omitted.
- `customCode` (string): Optional custom code (3-50 letters, digits, or hyphens) for a gajo.io/c/{code} link.
- `iosUrl` (string, required): Where iPhones and iPads go: the app's App Store page (https://apps.apple.com/.../id...) or, for a beta, its TestFlight link (https://testflight.apple.com/join/...).
- `otherwise` (string, required): The page every other device (such as a desktop) sees, always with a QR code of the link to scan with a phone: mobile_only says the link must be opened in a mobile browser; store_links lists both stor…

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `list_urls` (~83 tokens)

List your short links

List your short links, newest first, with click counts. Use it to browse or to find a link's code; for one known code use get_url, and for clicks over time get_url_stats. Returns one page; use page to see more.

Input parameters:

- `limit` (integer): Links per page.
- `page` (integer): Page number, starting at 1.

Output parameters:

- `hasMore` (boolean)
- `limit` (integer)
- `links` (array)
- `page` (integer)
- `total` (integer)

### `get_url` (~78 tokens)

Get a short link

Look up one of your short links by code: destination, click count, status, and expiry. Use get_url_stats for clicks per day and where they came from.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `get_url_stats` (~100 tokens)

Get click stats

Get click analytics for one of your links, bots excluded: total clicks and clicks per day (7 days on Free, 90 on Basic, every day since the link was created on Pro). Basic and Pro also get referrers, devices, countries, and regions.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.

Output parameters:

- `clicksByDay` (array)
- `deviceBreakdown` (array)
- `historyDays` (integer): Days of history in clicksByDay.
- `shortCode` (string)
- `topCountries` (array)
- `topReferrers` (array)
- `topRegions` (array)
- `totalClicks` (integer)

### `update_url` (~73 tokens)

Change a link's destination

Pro only: point an existing short link at a new destination URL. Takes effect immediately.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.
- `url` (string, required): The new destination URL.

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `update_app_link` (~318 tokens)

Change an app store link

Pro only: change an app link's App Store or Google Play URL, its app name, or the page other devices see. Only the fields you pass change. For an ordinary link's destination use update_url.

Input parameters:

- `androidUrl` (string): Where Android devices go: the app's Google Play page (https://play.google.com/store/apps/details?id=...) or a Google Play test link (https://play.google.com/apps/internaltest/... or /apps/testing/...…
- `appName` (string): The app's name for the page. Optional: looked up from the App Store when omitted.
- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.
- `iosUrl` (string): Where iPhones and iPads go: the app's App Store page (https://apps.apple.com/.../id...) or, for a beta, its TestFlight link (https://testflight.apple.com/join/...).
- `otherwise` (string): The page every other device (such as a desktop) sees, always with a QR code of the link to scan with a phone: mobile_only says the link must be opened in a mobile browser; store_links lists both stor…

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `deactivate_url` (~90 tokens)

Deactivate a short link

Turn off one of your short links so it stops redirecting, keeping its destination and clicks. Generated codes are never reassigned; use reactivate_url to turn the link back on, or delete_url to erase it for good.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.

Output parameters:

- `active` (boolean)
- `shortCode` (string)

### `reactivate_url` (~88 tokens)

Reactivate a short link

Turn a link you deactivated back on, with its same code and destination. Expired links, links disabled as unsafe, and custom codes that were unassigned can't be reactivated; create a new link instead.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.

Output parameters:

- `active` (boolean)
- `appLink` (object): App links only: where iOS and Android go, and the page other devices see.
- `clickCount` (integer)
- `createdDate` (string): ISO-8601 instant.
- `expiresDate` (string|null): ISO-8601 instant; null when the link never expires.
- `fallbackUrl` (string|null)
- `isCustomCode` (boolean)
- `originalUrl` (string)
- `shortCode` (string)
- `shortUrl` (string): Ready-to-share short link.

### `delete_url` (~114 tokens)

Delete a short link permanently

Permanently delete one of your short links: its destination and click history are erased and it stops redirecting. It can't be undone or reactivated, and the code is never given to anyone else. Use it when a destination shouldn't be kept, e.g. a URL with a private token; to just switch a link off, use deactivate_url.

Input parameters:

- `code` (string, required): The link's short code (e.g. AbCdEf, or launch for gajo.io/c/launch). A full short URL also works.

Output parameters:

- `deleted` (boolean)
- `shortCode` (string)

### `get_usage` (~58 tokens)

Check plan and quota

Shows your plan and quota: links created and remaining this month, maximum link lifetime, and API requests per minute. Call it before creating many links or after a monthly-limit error; the allowance resets on the 1st of each month (UTC).

Output parameters:

- `maxLinkLifetimeDays` (integer|null): null when links never expire.
- `plan` (string)
- `requestsPerMinute` (integer)
- `totalClicks` (integer)
- `totalUrls` (integer)
- `urlsCreatedThisMonth` (integer)
- `urlsMonthlyLimit` (integer)
- `urlsRemaining` (integer)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-gajo-url-shortener/gajo#diagnostics

## Score history

- 2026-10-25: 83
- 2026-10-24: 83
- 2026-10-23: 84
- 2026-10-22: 83
- 2026-10-21: 82
- 2026-10-20: 81
- 2026-10-19: 81
- 2026-10-18: 80
- 2026-10-17: 80
- 2026-10-16: 66
- 2026-10-15: 65
- 2026-10-14: 65

## Common questions

### What is the Gajo URL Shortener MCP server?

Gajo URL Shortener is an MCP server listed in the public MCP registry as io.gajo/url-shortener. Shorten URLs, manage gajo.io short links, and read click analytics. Free account, no credit card. This page covers its hosted endpoint (https://gajo.io/mcp).

### Is the Gajo URL Shortener MCP server safe to use?

Gajo URL Shortener scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Gajo URL Shortener MCP server expose?

Gajo URL Shortener exposes 11 tools: shorten_url, create_app_link, list_urls, get_url, get_url_stats, and 6 more. Their descriptions and schemas cost roughly 1,540 tokens of context every time the server is loaded.

### Does the Gajo URL Shortener MCP server require authentication?

Yes. Gajo URL Shortener asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Gajo URL Shortener MCP server still maintained?

Gajo URL Shortener is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://gajo.io/mcp
- Website: https://gajo.io/docs#mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-gajo-url-shortener/gajo.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-gajo-url-shortener/gajo.json
- HTML version of this page: https://verifymcp.io/servers/io-gajo-url-shortener/gajo
