Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Bitly MCP connector

OAuth 2.1/DCRMarketingCRM & Sales

Connect with Bitly MCP for URL shortening, link analytics, and branded links.

Bitly MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. 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>
  3. 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.actions
    const connector = 'bitlymcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Bitly MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'bitlymcp_get_custom_domains',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Create and manage short links — shorten URLs, create links with custom back-halves, update link metadata, and delete links
  • Create and manage QR codes — generate QR codes for links, update QR code settings, and retrieve QR code images
  • Analyze link performance — get click summaries, engagement metrics, and breakdowns by city, country, device, referrer, and referring domain
  • Analyze QR code scans — get scan summaries and breakdowns by city, country, device, and browser
  • Analyze group-level engagement — query top links, clicks, scans, and engagement trends across all links in a group
  • Manage account structure — retrieve organizations, groups, custom domains, and user details

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.

bitlymcp_bulk_upload_file#Upload a CSV or XLSX file to the signed URL returned by bulk_upload_validate. Pass the upload_url, headers, and file_content from the validate response. Requires an enterprise plan.6 params

Upload a CSV or XLSX file to the signed URL returned by bulk_upload_validate. Pass the upload_url, headers, and file_content from the validate response. Requires an enterprise plan.

NameTypeRequiredDescription
file_contentstringrequiredThe actual file content (CSV or XLSX file bytes as a string) from the conversation context.
headersobjectrequiredThe headers map returned from bulk_upload_validate (as a JSON object with string keys and string values).
upload_urlstringrequiredThe signed upload URL returned from bulk_upload_validate.
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
content_typestringoptionalMIME type for the upload. e.g. text/csv for CSV files or application/vnd.openxmlformats-officedocument.spreadsheetml.sheet for XLSX.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bulk_upload_validate#Validate a bulk upload request and get a signed upload URL. upload_type: 'link' (links only), 'qr_code' (QR codes, requires template_id), 'coupled_link' (both, requires template_id). Template IDs: 'QTDTmplWLogo' (with Bitly logo), 'QTDTmplNLogo' (without). Returns upload_url and headers for use with bulk_upload_file. Requires an enterprise plan.7 params

Validate a bulk upload request and get a signed upload URL. upload_type: 'link' (links only), 'qr_code' (QR codes, requires template_id), 'coupled_link' (both, requires template_id). Template IDs: 'QTDTmplWLogo' (with Bitly logo), 'QTDTmplNLogo' (without). Returns upload_url and headers for use with bulk_upload_file. Requires an enterprise plan.

NameTypeRequiredDescription
filenamestringrequiredLogical filename for the bulk upload (for example, "contacts.csv" or "links.xlsx").
upload_typestringrequiredType of bulk upload. Must be exactly one of: "link", "qr_code", or "coupled_link".
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
domainstringoptionalOptional short domain to use for created links. If omitted, backend defaults and validation apply.
group_guidstringoptionalOptional group GUID to associate with this bulk upload. If omitted, the default group may be used.
response_formatstringoptional'text' (default) or 'json'
template_idstringoptionalQR code template ID. Required for qr_code and coupled_link uploads. Use 'QTDTmplWLogo' to include Bitly logo, 'QTDTmplNLogo' to exclude it.
bitlymcp_create_qr_code#Create a QR code linked to a URL. Supports visual customizations (colors, patterns). Use create_short_link_with_qr to create both a short link and QR code in one step.8 params

Create a QR code linked to a URL. Supports visual customizations (colors, patterns). Use create_short_link_with_qr to create both a short link and QR code in one step.

NameTypeRequiredDescription
group_guidstringrequiredThe GUID of the group to create the QR code in
long_urlstringrequiredThe destination URL for the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived (default: false)
bitlink_idstringoptionalExisting short link ID to use as destination
render_customizationsobjectoptionalVisual customizations for the QR code as a JSON object. e.g. {"dot_pattern_color": "#EF8000", "dot_pattern_type": "rounded", "background_color": "#ffffff"}. Supports corner colors, gradient, and logo configuration.
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe title of the QR code
bitlymcp_expand#Look up the original long URL behind any Bitly short link. Returns destination URL and creation timestamp.3 params

Look up the original long URL behind any Bitly short link. Returns destination URL and creation timestamp.

NameTypeRequiredDescription
bitlink_idstringrequiredThe complete short link in 'domain/hash' format (e.g., 'bit.ly/ABC123' or 'custom-domain.com/keyword')
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_custom_domains#List all custom domains (branded short domains) available to the user. These can be used instead of 'bit.ly' when creating links.2 params

List all custom domains (branded short domains) available to the user. These can be used instead of 'bit.ly' when creating links.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_group_details#Get metadata for a specific group by GUID, including name, organization, creation date, and BSDs.3 params

Get metadata for a specific group by GUID, including name, organization, creation date, and BSDs.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_group_engagements_cities#Get engagement metrics (clicks + scans) for all links in a group, broken down by city. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by city. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_countries#Get engagement metrics (clicks + scans) for all links in a group, broken down by country. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by country. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_devices#Get engagement metrics (clicks + scans) for all links in a group, broken down by device type. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by device type. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_over_time#Get engagement metrics (clicks + scans) for all links in a group as a time series. Requires a paid Bitly plan.6 params

Get engagement metrics (clicks + scans) for all links in a group as a time series. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_referrers#Get engagement metrics for all links in a group broken down by referrer source (Facebook, Google, direct, etc.). Requires a paid Bitly plan.7 params

Get engagement metrics for all links in a group broken down by referrer source (Facebook, Google, direct, etc.). Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_referring_networks#Get engagement metrics for all links in a group broken down by referring network category. Requires a paid Bitly plan.7 params

Get engagement metrics for all links in a group broken down by referring network category. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_top#Get top-performing links in a group ranked by total engagements. Requires a paid Bitly plan.7 params

Get top-performing links in a group ranked by total engagements. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_qr_codes#List QR codes in a group with optional search and pagination.7 params

List QR codes in a group with optional search and pagination.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedstringoptionalFilter by archived status: 'on' (archived only), 'off' (non-archived only), 'both' (all)
querystringoptionalSearch term to filter QR codes by title or destination URL
response_formatstringoptional'text' (default) or 'json'
search_afterstringoptionalPagination cursor for retrieving next page of results
sizestringoptionalNumber of QR codes to return (default: 50, max: 100)
bitlymcp_get_groups#List all groups (workspaces) the authenticated user has access to. Groups contain links and QR codes. Use the returned group_guid with other tools.3 params

List all groups (workspaces) the authenticated user has access to. Groups contain links and QR codes. Use the returned group_guid with other tools.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
organization_guidstringoptionalOptional organization GUID to filter groups by specific organization. If provided, only groups belonging to this organization will be returned.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_organizations#List all organizations the authenticated user belongs to, including org GUIDs, names, tier, and associated custom domains.2 params

List all organizations the authenticated user belongs to, including org GUIDs, names, tier, and associated custom domains.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_code#Get metadata for a QR code by qrcode_id: destination URL, type, customizations, and creation date.3 params

Get metadata for a QR code by qrcode_id: destination URL, type, customizations, and creation date.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_code_image#Get the QR code image as a base64 data URI in SVG (default) or PNG format. Note: most AI UIs cannot render raw image data.4 params

Get the QR code image as a base64 data URI in SVG (default) or PNG format. Note: most AI UIs cannot render raw image data.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
formatstringoptionalImage format: 'svg' or 'png' (default: svg)
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_scan_metrics#Get QR scan metrics as a time series for a specific QR code. Requires a paid Bitly plan.6 params

Get QR scan metrics as a time series for a specific QR code. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scan_summary#Get total scan count for a specific QR code over a time range. Requires a paid Bitly plan.6 params

Get total scan count for a specific QR code over a time range. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_browser#Get QR scan metrics for a specific QR code broken down by browser. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by browser. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_city#Get QR scan metrics for a specific QR code broken down by city. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by city. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_country#Get QR scan metrics for a specific QR code broken down by country. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by country. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_device#Get QR scan metrics for a specific QR code broken down by device OS. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by device OS. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_user#Get the authenticated user's profile including email addresses, 2FA status, and default group GUID.2 params

Get the authenticated user's profile including email addresses, 2FA status, and default group GUID.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_update_qr_code#Update a QR code's title, visual customizations, or archived status.6 params

Update a QR code's title, visual customizations, or archived status.

NameTypeRequiredDescription
qrcode_idstringrequiredThe QR code ID to update
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived
render_customizationsobjectoptionalVisual customizations for the QR code as a JSON object. e.g. {"dot_pattern_color": "#EF8000", "dot_pattern_type": "rounded", "background_color": "#ffffff"}. Supports corner colors, gradient, and logo configuration.
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe new title for the QR code