LinklyHQ MCP connector
OAuth 2.1/PKCEMarketingAnalyticsLinklyHQ MCP is a URL shortening and link management platform offering click analytics, custom domains, UTM tracking, QR codes, and webhook integrations for...
LinklyHQ MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Set up the connector
Section titled “Set up the connector”Register your Linkly credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps
LinklyHQ MCP uses Dynamic Client Registration (DCR) — no client ID or secret is required. The only step is creating a connection in Scalekit and authorizing your Customer.io account.
-
Create a connection in Scalekit
- In the Scalekit dashboard, go to AgentKit → Connections → Create Connection.
- Search for LinklyHQ MCP and click Create.
- Note the Connection name — use this as
connection_namein your code (e.g.,linklymcp).
-
Authorize your Customer.io account
Generate an authorization link and open it in a browser to complete the Customer.io OAuth flow.
The user is redirected to Customer.io to sign in and grant access. Scalekit stores the token and injects it automatically into every tool call — no further configuration is needed.
-
-
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'linklymcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize LinklyHQ MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'linklymcp_get_analytics',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "linklymcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize LinklyHQ MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="linklymcp_get_analytics",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Batchdeletelinks records — Batch delete multiple LinklyHQ links by their IDs
- Create domain, link — Add a custom domain to the LinklyHQ workspace
- Delete domain, link — Remove a custom domain from the LinklyHQ workspace
- Clicks export — Export detailed click records with full information including timestamp, browser, country, URL, platform, referrer, bot status, ISP, and URL parameters
- Get analytics, analytics by, clicks — Get time-series click analytics data for charting
- List domains, link webhooks, links — List all custom domains configured in the LinklyHQ workspace
Common workflows
Section titled “Common workflows”Check authentication status
Use linklymcp_test_authentication to verify the connection is active and your credentials are valid.
const result = await actions.executeTool({ connectionName: 'linklymcp', identifier: 'user_123', toolName: 'linklymcp_test_authentication', toolInput: {},});console.log(result);result = actions.execute_tool( connection_name="linklymcp", identifier="user_123", tool_name="linklymcp_test_authentication", tool_input={},)print(result)Create a short link with UTM tracking
Use linklymcp_create_link to shorten a URL and attach UTM parameters for campaign tracking.
const link = await actions.executeTool({ connectionName: 'linklymcp', identifier: 'user_123', toolName: 'linklymcp_create_link', toolInput: { url: 'https://example.com/landing-page', name: 'Summer Campaign', utm_source: 'newsletter', utm_medium: 'email', utm_campaign: 'summer2024', },});console.log(link.full_url);link = actions.execute_tool( connection_name="linklymcp", identifier="user_123", tool_name="linklymcp_create_link", tool_input={ "url": "https://example.com/landing-page", "name": "Summer Campaign", "utm_source": "newsletter", "utm_medium": "email", "utm_campaign": "summer2024", },)print(link["full_url"])Get click analytics by dimension
Use linklymcp_get_analytics_by to break down click counts by country, browser, or platform over a date range.
const analytics = await actions.executeTool({ connectionName: 'linklymcp', identifier: 'user_123', toolName: 'linklymcp_get_analytics_by', toolInput: { counter: 'country', start: '2024-01-01', end: '2024-01-31', },});console.log(analytics);analytics = actions.execute_tool( connection_name="linklymcp", identifier="user_123", tool_name="linklymcp_get_analytics_by", tool_input={ "counter": "country", "start": "2024-01-01", "end": "2024-01-31", },)print(analytics)Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
linklymcp_batchdeletelinks#Batch delete multiple LinklyHQ links by their IDs. This action is permanent and cannot be undone.1 param
Batch delete multiple LinklyHQ links by their IDs. This action is permanent and cannot be undone.
idsarrayrequiredArray of link IDs to deletelinklymcp_create_domain#Add a custom domain to the LinklyHQ workspace. The domain must already be configured to point to LinklyHQ servers via DNS.1 param
Add a custom domain to the LinklyHQ workspace. The domain must already be configured to point to LinklyHQ servers via DNS.
namestringrequiredThe fully-qualified domain name to add to the LinklyHQ workspace. The domain must already have DNS configured to point to LinklyHQ servers before calling this.linklymcp_create_link#Create a short link or URL shortener. Use when the user asks to shorten a URL, create a short link, or make a link shorter. Supports UTM tracking, custom domains, pixel tracking, and link expiry.23 params
Create a short link or URL shortener. Use when the user asks to shorten a URL, create a short link, or make a link shorter. Supports UTM tracking, custom domains, pixel tracking, and link expiry.
urlstringrequiredDestination URL for the short linkblock_botsbooleanoptionalBlock known bots and spiderscloakingbooleanoptionalHide destination URL by opening in an iframedomainstringoptionalCustom domain for the short link (without trailing /)enabledbooleanoptionalWhether the link is active (default: true)expiry_datetimestringoptionalISO 8601 datetime when the link expiresexpiry_destinationstringoptionalFallback URL after expiry (404 if blank)fb_pixel_idstringoptionalMeta/Facebook Pixel ID for trackingforward_paramsbooleanoptionalForward URL parameters to destinationga4_tag_idstringoptionalGoogle Analytics 4 tag IDgtm_idstringoptionalGoogle Tag Manager container IDhide_referrerbooleanoptionalHide referrer information when users clicknamestringoptionalNickname for the linknotestringoptionalPrivate note about this linkog_descriptionstringoptionalOpen Graph description for social media previewsog_imagestringoptionalOpen Graph image URL for social media previewsog_titlestringoptionalOpen Graph title for social media previewsslugstringoptionalCustom slug/suffix (must start with /)utm_campaignstringoptionalUTM campaign parameterutm_contentstringoptionalUTM content parameterutm_mediumstringoptionalUTM medium parameterutm_sourcestringoptionalUTM source parameterutm_termstringoptionalUTM term parameterlinklymcp_delete_domain#Remove a custom domain from the LinklyHQ workspace. This action is permanent.1 param
Remove a custom domain from the LinklyHQ workspace. This action is permanent.
domain_idintegerrequiredThe integer ID of the domain to permanently remove from the LinklyHQ workspace. Use list_domains to find the domain's ID before calling this.linklymcp_delete_link#Delete a LinklyHQ link by its ID. This action is permanent and cannot be undone.1 param
Delete a LinklyHQ link by its ID. This action is permanent and cannot be undone.
link_idintegerrequiredThe ID of the link to deletelinklymcp_export_clicks#Export detailed click records with full information including timestamp, browser, country, URL, platform, referrer, bot status, ISP, and URL parameters.6 params
Export detailed click records with full information including timestamp, browser, country, URL, platform, referrer, bot status, ISP, and URL parameters.
botsstringoptionalBot filtering mode for the export. Use 'include' to export all clicks, 'exclude' to remove bot traffic, or 'only' to export bot clicks only.countrystringoptionalFilter exported clicks by ISO country code (e.g., US, GB). Only clicks from that country will be included.endstringoptionalEnd date for the export range in YYYY-MM-DD format. Defaults to yesterday if omitted.link_idintegeroptionalFilter exported records to a specific link by its integer ID. If omitted, exports clicks from all links in the workspace.platformstringoptionalFilter exported clicks by platform type (e.g., desktop, mobile, tablet). Only clicks from that platform will be included.startstringoptionalStart date for the export range in YYYY-MM-DD format. Defaults to 30 days ago if omitted.linklymcp_get_analytics#Get time-series click analytics data for charting. Returns click counts over time with optional date range, link, and demographic filters.9 params
Get time-series click analytics data for charting. Returns click counts over time with optional date range, link, and demographic filters.
botsstringoptionalBot filtering mode. Use 'include' to count all clicks, 'exclude' to remove bot traffic, or 'only' to see bot-only data.browserstringoptionalFilter results by browser name (e.g., Chrome, Firefox, Safari). Only clicks from that browser will be included.countrystringoptionalFilter results by ISO country code (e.g., US, GB, DE). Only clicks from that country will be included.endstringoptionalEnd date of the analytics range in YYYY-MM-DD format. Defaults to today if omitted.frequencystringoptionalTime granularity for the time-series data. Use 'day' for daily aggregation or 'hour' for hourly. Defaults to 'day'.link_idintegeroptionalFilter analytics to a specific link by its integer ID. If omitted, returns data for all links in the workspace.platformstringoptionalFilter results by platform type (e.g., desktop, mobile, tablet). Only clicks from that platform will be included.startstringoptionalStart date of the analytics range in YYYY-MM-DD format. Defaults to 30 days ago if omitted.uniquebooleanoptionalWhen true, count only unique clicks (deduplicated by IP address). When false or omitted, counts all clicks including repeats.linklymcp_get_analytics_by#Get click counts grouped by a dimension such as country, platform, or browser. Useful for breakdowns and top-N reports.8 params
Get click counts grouped by a dimension such as country, platform, or browser. Useful for breakdowns and top-N reports.
counterstringrequiredThe dimension to group click counts by. Supported values: country, platform, browser_name, referer, isp, link_id, destination, bot_name.botsstringoptionalBot filtering mode. Use 'include' to count all clicks, 'exclude' to remove bot traffic, or 'only' to see bot-only data.countrystringoptionalFilter results by ISO country code (e.g., US, GB). Only clicks from that country will be included in the grouped breakdown.endstringoptionalEnd date of the analytics range in YYYY-MM-DD format. Defaults to today if omitted.link_idintegeroptionalFilter the grouped analytics to a specific link by its integer ID. If omitted, includes data from all links.platformstringoptionalFilter results by platform type (e.g., desktop, mobile). Only clicks from that platform will be included in the grouped breakdown.startstringoptionalStart date of the analytics range in YYYY-MM-DD format. Defaults to 30 days ago if omitted.uniquebooleanoptionalWhen true, count only unique clicks (deduplicated by IP address). When false or omitted, counts all clicks.linklymcp_get_clicks#Get recent click data for the workspace, optionally filtered by a specific link ID.1 param
Get recent click data for the workspace, optionally filtered by a specific link ID.
link_idintegeroptionalFilter clicks by link ID. Provide the integer ID of the link to scope results to that link only. If omitted, returns clicks across all links in the workspace.linklymcp_get_link#Get details of a specific LinklyHQ link by its ID, including destination URL, slug, UTM parameters, and settings.1 param
Get details of a specific LinklyHQ link by its ID, including destination URL, slug, UTM parameters, and settings.
link_idintegerrequiredThe ID of the link to retrievelinklymcp_list_domains#List all custom domains configured in the LinklyHQ workspace.0 params
List all custom domains configured in the LinklyHQ workspace.
linklymcp_list_link_webhooks#List all webhook URLs subscribed to a specific LinklyHQ link's click events.1 param
List all webhook URLs subscribed to a specific LinklyHQ link's click events.
link_idintegerrequiredThe ID of the linklinklymcp_list_links#List links in the workspace with optional sorting and search filtering.5 params
List links in the workspace with optional sorting and search filtering.
pageintegeroptionalPage number for paginationpage_sizeintegeroptionalNumber of links per pagesearchstringoptionalSearch query to filter linkssort_bystringoptionalField to sort results bysort_dirstringoptionalSort direction: asc or desclinklymcp_list_webhooks#List all webhook URLs subscribed to the LinklyHQ workspace. These webhooks receive click events for all links.0 params
List all webhook URLs subscribed to the LinklyHQ workspace. These webhooks receive click events for all links.
linklymcp_list_workspaces#Return details of the authenticated LinklyHQ workspace, including ID and name.0 params
Return details of the authenticated LinklyHQ workspace, including ID and name.
linklymcp_ping#Health check for the LinklyHQ MCP server.1 param
Health check for the LinklyHQ MCP server.
messagestringrequiredA message to pinglinklymcp_search_links#Search for links by name, destination URL, or note. Returns matching links with click statistics.1 param
Search for links by name, destination URL, or note. Returns matching links with click statistics.
querystringrequiredSearch query to match against link names, destination URLs, and notes. The search is performed across all three fields to find relevant links.linklymcp_subscribe_link_webhook#Subscribe a webhook URL to receive click events for a specific LinklyHQ link.2 params
Subscribe a webhook URL to receive click events for a specific LinklyHQ link.
link_idintegerrequiredThe ID of the linkurlstringrequiredThe webhook URL to receive click event notificationslinklymcp_subscribe_webhook#Subscribe a webhook URL to receive click events for all links in the LinklyHQ workspace.1 param
Subscribe a webhook URL to receive click events for all links in the LinklyHQ workspace.
urlstringrequiredThe webhook URL to receive click event notificationslinklymcp_test_authentication#Test API authentication with LinklyHQ. Use this to verify your credentials are valid.0 params
Test API authentication with LinklyHQ. Use this to verify your credentials are valid.
linklymcp_unsubscribe_link_webhook#Unsubscribe a webhook URL from a specific LinklyHQ link's click events.2 params
Unsubscribe a webhook URL from a specific LinklyHQ link's click events.
link_idintegerrequiredThe ID of the linkurlstringrequiredThe webhook URL to unsubscribelinklymcp_unsubscribe_webhook#Unsubscribe a webhook URL from workspace-level click events.1 param
Unsubscribe a webhook URL from workspace-level click events.
urlstringrequiredThe webhook URL to unsubscribelinklymcp_update_domain_favicon#Update the favicon URL for a custom domain in the LinklyHQ workspace.2 params
Update the favicon URL for a custom domain in the LinklyHQ workspace.
domain_idintegerrequiredThe integer ID of the domain whose favicon should be updated. Use list_domains to find the domain's ID.favicon_urlstringrequiredThe fully-qualified URL pointing to the favicon image to use for this custom domain (e.g., https://example.com/favicon.ico).linklymcp_update_link#Update an existing LinklyHQ link by its ID. Modify the destination URL, name, UTM parameters, tracking pixels, or expiry settings.22 params
Update an existing LinklyHQ link by its ID. Modify the destination URL, name, UTM parameters, tracking pixels, or expiry settings.
link_idintegerrequiredThe ID of the link to updateblock_botsbooleanoptionalBlock botscloakingbooleanoptionalEnable URL cloakingenabledbooleanoptionalWhether the link is activeexpiry_datetimestringoptionalExpiry datetime ISO 8601expiry_destinationstringoptionalFallback URL after expiryfb_pixel_idstringoptionalMeta Pixel IDforward_paramsbooleanoptionalForward URL parametersga4_tag_idstringoptionalGoogle Analytics 4 tag IDgtm_idstringoptionalGoogle Tag Manager IDhide_referrerbooleanoptionalHide referrernamestringoptionalNew nickname for the linknotestringoptionalNew private noteog_descriptionstringoptionalOpen Graph descriptionog_imagestringoptionalOpen Graph image URLog_titlestringoptionalOpen Graph titleurlstringoptionalNew destination URLutm_campaignstringoptionalUTM campaign parameterutm_contentstringoptionalUTM content parameterutm_mediumstringoptionalUTM medium parameterutm_sourcestringoptionalUTM source parameterutm_termstringoptionalUTM term parameterlinklymcp_update_workspace#Update workspace settings including the workspace name and webhook notification URL.2 params
Update workspace settings including the workspace name and webhook notification URL.
namestringrequiredWorkspace namewebhooksstringrequiredWebhook URL for workspace click notifications