Skip to content
noBSredir

MCP server

noBSredir has a built-in MCP server. Connect Claude Code, Cursor, Windsurf, or any MCP-compatible client and your AI agent can create links, pull analytics, run campaigns.

Setup

Add this to your .mcp.json (Claude Code) or your client’s MCP config:

{
"mcpServers": {
"nobsredir": {
"type": "streamable-http",
"url": "https://nobsredir.com/mcp",
"headers": {
"X-API-Key": "nobs_your_api_key_here"
}
}
}
}

That’s it. Your agent gets 12 tools, 3 resources, and 4 prompt workflows. For setup instructions for specific clients (Claude Code, Cursor, Windsurf, VS Code, JetBrains), see Using agents.

Authentication

Same as the REST API. Pass your API key in the X-API-Key header. The MCP server is workspace-scoped via your key.

Create a key from the dashboard, or via the API Keys endpoints.


Tools

Create a shortened link.

ParameterTypeRequiredDescription
targetstringyesDestination URL
titlestringnoHuman-readable title
slugstringnoCustom slug. Only works on custom domains, not fnl.sh.
domainstringnoDomain for the short link. Defaults to fnl.sh.
tagsstring[]noTags for organizing. Max 10 per link, auto-lowercased.
utm_paramsobjectnoUTM tracking params (source, medium, campaign, term, content)
expires_atstringnoISO 8601 datetime. Link stops redirecting after this.
fallback_urlstringnoWhere to redirect after expiry
passwordstringnoPassword-protect the link. Min 8 chars.
og_titlestringnoCustom Open Graph title
og_descriptionstringnoCustom Open Graph description
og_imagestringnoCustom Open Graph image URL
notestringnoInternal note. Not visible to visitors.

List links with filters. Paginated, default 20 per page, max 100.

ParameterTypeRequiredDescription
tagstringnoFilter by tag name
domainstringnoFilter by domain
prefixstringnoFilter slugs starting with this string
pagenumbernoPage number (default 1)
limitnumbernoResults per page (default 20, max 100)

Get full details for a link: tags, UTM params, OG metadata, expiry, routing rules, A/B variants. The has_password field tells you if password protection is on (the actual hash is never returned).

ParameterTypeRequiredDescription
link_idstringyesLink ID (UUID)

Update any field on a link. Pass only what you want to change. Set a field to null to clear it. Slug changes only work on custom domains.

ParameterTypeRequiredDescription
link_idstringyesLink ID (UUID)
targetstringnoNew destination URL
titlestring | nullnoNew title. Null clears it.
slugstringnoNew slug. Custom domains only.
tagsstring[] | nullnoReplace all tags. Null clears them.
utm_paramsobject | nullnoUTM params. Null clears them.
expires_atstring | nullnoExpiry datetime. Null clears it.
fallback_urlstring | nullnoFallback URL. Null clears it.
passwordstring | nullnoSet or change password. Null removes it. Min 8 chars.
og_titlestring | nullnoOG title. Null clears it.
og_descriptionstring | nullnoOG description. Null clears it.
og_imagestring | nullnoOG image URL. Null clears it.
notestring | nullnoInternal note. Null clears it.

Permanently delete a link. Removes the redirect and all click data. Can’t be undone.

ParameterTypeRequiredDescription
link_idstringyesLink ID (UUID)

Create up to 100 links in one shot. Each entry follows the same schema as create_link (minus the advanced fields). Invalid entries get skipped.

ParameterTypeRequiredDescription
linksarrayyesArray of link objects (max 100)

Each link object:

FieldTypeRequiredDescription
targetstringyesDestination URL
titlestringnoTitle
slugstringnoCustom slug. Custom domains only.
domainstringnoDomain. Defaults to fnl.sh.
tagsstring[]noTags (max 10 per link)

get_stats_summary

Aggregate click stats for the workspace: total clicks, unique visitors, breakdowns by country, referrer, browser, OS, device.

Requires Pro plan.

ParameterTypeRequiredDescription
fromstringnoStart date, YYYY-MM-DD. Max 365-day range.
tostringnoEnd date, YYYY-MM-DD
linkstringnoFilter by link ID
countrystringnoISO country code (US, GB, etc.)
browserstringnoBrowser name
osstringnoOperating system
devicestringnoDevice type: mobile, desktop, tablet
refererstringnoReferrer
include_botsstringno"true" to include bot traffic

These same filters (from, to, country, browser, os, device, referer, include_bots) apply to get_daily_clicks and get_link_stats too.


get_daily_clicks

Click counts by day. Returns {date, clicks} objects sorted chronologically. Supports all the stat filters from get_stats_summary.

ParameterTypeRequiredDescription
daysnumbernoLookback window, 1-365. Default 30.

Top links ranked by clicks.

ParameterTypeRequiredDescription
daysnumbernoLookback window, 1-365. Default 7.
limitnumbernoHow many to return, 1-100. Default 5.

Full analytics for one link: click counts, country breakdown, referrers, hourly distribution, browser/OS/device splits. Supports all the stat filters from get_stats_summary.

ParameterTypeRequiredDescription
link_idstringyesLink ID (UUID)

list_domains

List all domains in the workspace with verification status. No parameters.

Custom domains need DNS verification (TXT + CNAME) before they can be used. Call this before create_link to see what’s available.


list_tags

List all tags with metadata: name, color, description, and optional date range for campaign-scoped tags. No parameters. Max 100 tags per workspace.


Resources

Resources give your agent context before it acts. Good agents read these first.

workspace://overview

Dynamic. Fetches current workspace name, plan, available domains, and all tags. Your agent reads this to know what domains it can use and what tags exist before creating links.

docs://features

Static. Reference covering every link feature: custom slugs, UTM params, tags, expiry, password protection, OG overrides, A/B testing, geo/device routing, deep links. The agent reads this when it needs to understand what’s possible.

docs://utm-guide

Static. UTM naming conventions and patterns for email, social, paid ads, QR codes. The agent reads this before setting up campaign tracking so naming stays consistent.


Prompts

Pre-built multi-step workflows. Call these from your MCP client and the agent handles the rest.

create_campaign

Give it a campaign name and URLs. The agent creates a tag, builds links with consistent UTM params, and hands back a summary table.

ArgumentRequiredDescription
campaign_nameyesUsed as the tag name and utm_campaign value
urlsyesComma or newline-separated target URLs
domainnoDomain for the short links
utm_sourcenoe.g. newsletter, twitter
utm_mediumnoe.g. email, social, cpc

analyze_performance

The agent pulls your stats, spots trends, finds your top performers, and tells you what’s working and what isn’t.

ArgumentRequiredDescription
daysnoLookback period in days. Default 30.
tagnoFocus on links with this tag

bulk_import

Hand it a list of URLs. The agent validates them, creates links in bulk, and reports what got created and what got skipped.

ArgumentRequiredDescription
urlsyesOne URL per line
domainnoDomain for all links
tagnoTag to apply to all links

setup_ab_test

Provide 2-4 variant URLs. The agent sets up the split test with proper weights and explains how to track results.

ArgumentRequiredDescription
variantsyesComma-separated URLs (2-4)
slugnoCustom slug. Requires custom domain.
domainnoDomain for the link

Example sessions

Creating a campaign:

> Use the create_campaign prompt with campaign_name "spring-sale" and these URLs:
> https://example.com/landing, https://example.com/pricing
The agent:
1. Reads workspace://overview to check available domains
2. Reads docs://utm-guide for naming conventions
3. Creates a "spring-sale" tag
4. Creates two links with utm_campaign=spring-sale
5. Returns a summary table with short URLs

Checking performance:

> How are my links doing this month?
The agent:
1. Calls get_stats_summary for the last 30 days
2. Calls get_daily_clicks to see the trend
3. Calls get_top_links to find winners
4. Tells you what's up, what's down, what to double down on

Quick link:

> Shorten https://example.com/my-very-long-page and tag it "docs"
The agent calls create_link with target and tags, returns the short URL.
One tool call, done.

Transport

Streamable HTTP, pretty standard. No local process, no websocket connection to manage. Each request is authenticated via your API key.

Constraints

Same limits as the REST API:

  • Custom slugs work on custom domains only (not fnl.sh)
  • 10 tags per link, 100 per workspace
  • Passwords must be 8+ characters
  • Bulk operations cap at 100 links per request
  • Stats API rate limited to 60 requests/minute
  • Analytics API needs a Pro plan