dub
Short links with click, lead and sale analytics, customers, tags and the partner programme.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen dub_update_link
- LOWen dub_approve_partner_application
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"dub": {
"url": "https://dub.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://dub.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (22)
🟢dub_list_links(domain, search, tagNames, folderId, showArchived, ...)
List short links, filtered by domain, tag, folder or a text search. Dub: GET /links.
Esquema de entrada
{
"type": "object",
"properties": {
"domain": {
"description": "Only links on this short domain.",
"type": "string"
},
"search": {
"description": "Free-text search over the key, URL and title.",
"type": "string"
},
"tagNames": {
"description": "Only links carrying these tag names.",
"type": "array",
"items": {
"type": "string"
}
},
"folderId": {
"description": "Only links in this folder.",
"type": "string"
},
"showArchived": {
"description": "Include archived links.",
"type": "boolean"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_get_link(linkId, externalId, domain, key)
Fetch a single link by its id, its external id, or its domain plus key. Dub: GET /links/info.
Esquema de entrada
{
"type": "object",
"properties": {
"linkId": {
"description": "The link's Dub id.",
"type": "string"
},
"externalId": {
"description": "Your own id for the link.",
"type": "string"
},
"domain": {
"description": "The short domain, used with key.",
"type": "string"
},
"key": {
"description": "The short key, used with domain.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_count_links(domain, search, folderId, groupBy)
Count links matching a filter, optionally grouped by domain, tag or folder. Cheaper than listing when you only need totals. Dub: GET /links/count.
Esquema de entrada
{
"type": "object",
"properties": {
"domain": {
"description": "Only links on this short domain.",
"type": "string"
},
"search": {
"description": "Free-text search.",
"type": "string"
},
"folderId": {
"description": "Only links in this folder.",
"type": "string"
},
"groupBy": {
"description": "Return counts grouped by this dimension.",
"type": "string",
"enum": [
"domain",
"tagId",
"folderId",
"userId"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_get_analytics(event, groupBy, linkId, domain, key, ...)
Get aggregated click, lead and sale analytics, grouped by a dimension such as country, device, referer or top links. The main reporting read. Dub: GET /analytics.
Esquema de entrada
{
"type": "object",
"properties": {
"event": {
"description": "Which event type to report. Defaults to clicks.",
"type": "string",
"enum": [
"clicks",
"leads",
"sales",
"composite"
]
},
"groupBy": {
"description": "Dimension to group by, e.g. count, timeseries, top_links, countries, cities, devices, browsers, os, referers, utm_sources.",
"type": "string"
},
"linkId": {
"description": "Only this link.",
"type": "string"
},
"domain": {
"description": "Only links on this domain.",
"type": "string"
},
"key": {
"description": "The short key, used with domain.",
"type": "string"
},
"interval": {
"description": "Relative time window. Use start/end instead for an absolute range.",
"type": "string",
"enum": [
"24h",
"7d",
"30d",
"90d",
"1y",
"mtd",
"qtd",
"ytd",
"all"
]
},
"start": {
"description": "ISO-8601 start of an absolute range.",
"type": "string"
},
"end": {
"description": "ISO-8601 end of an absolute range.",
"type": "string"
},
"country": {
"description": "Filter to one country code.",
"type": "string"
},
"device": {
"description": "Filter to one device type.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_events(event, linkId, customerId, interval, start, ...)
List individual click, lead and sale events rather than aggregates — the row-level detail behind the analytics. Dub: GET /events.
Esquema de entrada
{
"type": "object",
"properties": {
"event": {
"description": "Which event type to list.",
"type": "string",
"enum": [
"clicks",
"leads",
"sales"
]
},
"linkId": {
"description": "Only this link's events.",
"type": "string"
},
"customerId": {
"description": "Only this customer's events.",
"type": "string"
},
"interval": {
"description": "Relative time window. Use start/end instead for an absolute range.",
"type": "string",
"enum": [
"24h",
"7d",
"30d",
"90d",
"1y",
"mtd",
"qtd",
"ytd",
"all"
]
},
"start": {
"description": "ISO-8601 start of an absolute range.",
"type": "string"
},
"end": {
"description": "ISO-8601 end of an absolute range.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_customers(email, externalId, search, linkId, page, ...)
List the customers Dub has attributed to links, by email, external id or link. Dub: GET /customers.
Esquema de entrada
{
"type": "object",
"properties": {
"email": {
"description": "Only the customer with this email.",
"type": "string"
},
"externalId": {
"description": "Your own id for the customer.",
"type": "string"
},
"search": {
"description": "Free-text search.",
"type": "string"
},
"linkId": {
"description": "Only customers attributed to this link.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_get_customer(customer_id)
Fetch a single customer with their attribution. Dub: GET /customers/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"description": "The customer's Dub id."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_tags(search, page, pageSize)
List the tags available for organising links. Dub: GET /tags.
Esquema de entrada
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search over tag names.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_folders(search, page, pageSize)
List link folders and their access levels. Dub: GET /folders.
Esquema de entrada
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search over folder names.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_domains(archived, search, page, pageSize)
List the short domains configured on the workspace. Dub: GET /domains.
Esquema de entrada
{
"type": "object",
"properties": {
"archived": {
"description": "Include archived domains.",
"type": "boolean"
},
"search": {
"description": "Free-text search.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_partners(status, email, search, page, pageSize)
List the partners (affiliates) in the programme, by status, country or email. Dub: GET /partners.
Esquema de entrada
{
"type": "object",
"properties": {
"status": {
"description": "Only partners in this state, e.g. approved, pending.",
"type": "string"
},
"email": {
"description": "Only the partner with this email.",
"type": "string"
},
"search": {
"description": "Free-text search.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_get_partner_analytics(partnerId, groupBy, interval, start, end)
Get analytics for the partner programme — clicks, leads, sales and revenue per partner. Dub: GET /partners/analytics.
Esquema de entrada
{
"type": "object",
"properties": {
"partnerId": {
"description": "Only this partner.",
"type": "string"
},
"groupBy": {
"description": "Dimension to group by, e.g. count, timeseries, top_partners.",
"type": "string"
},
"interval": {
"description": "Relative time window. Use start/end instead for an absolute range.",
"type": "string",
"enum": [
"24h",
"7d",
"30d",
"90d",
"1y",
"mtd",
"qtd",
"ytd",
"all"
]
},
"start": {
"description": "ISO-8601 start of an absolute range.",
"type": "string"
},
"end": {
"description": "ISO-8601 end of an absolute range.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_partner_applications(page, pageSize)
List pending applications to join the partner programme. Dub: GET /partners/applications.
Esquema de entrada
{
"type": "object",
"properties": {
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_commissions(partnerId, customerId, status, type, interval, ...)
List partner commissions, by partner, status, customer or time window. Dub: GET /commissions.
Esquema de entrada
{
"type": "object",
"properties": {
"partnerId": {
"description": "Only this partner's commissions.",
"type": "string"
},
"customerId": {
"description": "Only commissions from this customer.",
"type": "string"
},
"status": {
"description": "Only commissions in this state.",
"type": "string"
},
"type": {
"description": "Only commissions of this type, e.g. sale, lead, click.",
"type": "string"
},
"interval": {
"description": "Relative time window. Use start/end instead for an absolute range.",
"type": "string",
"enum": [
"24h",
"7d",
"30d",
"90d",
"1y",
"mtd",
"qtd",
"ytd",
"all"
]
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢dub_list_payouts(partnerId, status, page, pageSize)
List partner payouts and their status. Dub: GET /payouts.
Esquema de entrada
{
"type": "object",
"properties": {
"partnerId": {
"description": "Only this partner's payouts.",
"type": "string"
},
"status": {
"description": "Only payouts in this state.",
"type": "string"
},
"page": {
"description": "1-based page number.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_create_link(url, domain, key, externalId, title, ...)
Create a short link. Omit `key` to let Dub generate one. Dub: POST /links.
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The destination URL."
},
"domain": {
"description": "Short domain to create it on. Defaults to the workspace default.",
"type": "string"
},
"key": {
"description": "The short key. Omit for a random one.",
"type": "string"
},
"externalId": {
"description": "Your own id for this link.",
"type": "string"
},
"title": {
"description": "Custom link preview title.",
"type": "string"
},
"description": {
"description": "Custom link preview description.",
"type": "string"
},
"tagNames": {
"description": "Tags to attach, by name.",
"type": "array",
"items": {
"type": "string"
}
},
"folderId": {
"description": "Folder to file it under.",
"type": "string"
},
"comments": {
"description": "An internal note.",
"type": "string"
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_update_link(linkId, url, key, title, tagNames, ...)
Change a link's destination, key, tags or archived state. Dub: PATCH /links/{linkId}.
Esquema de entrada
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "The link to update."
},
"url": {
"description": "New destination URL.",
"type": "string"
},
"key": {
"description": "New short key.",
"type": "string"
},
"title": {
"description": "New preview title.",
"type": "string"
},
"tagNames": {
"description": "Replace the link's tags.",
"type": "array",
"items": {
"type": "string"
}
},
"archived": {
"description": "Archive or unarchive the link.",
"type": "boolean"
},
"comments": {
"description": "New internal note.",
"type": "string"
}
},
"required": [
"linkId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_delete_link(linkId)
Delete a short link. The URL stops resolving immediately and its analytics go with it. Dub: DELETE /links/{linkId}.
Esquema de entrada
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "The link to delete."
}
},
"required": [
"linkId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_create_tag(name, color)
Create a tag for organising links. Dub: POST /tags.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The tag name."
},
"color": {
"description": "Tag colour in the dashboard.",
"type": "string",
"enum": [
"red",
"yellow",
"green",
"blue",
"purple",
"pink",
"brown"
]
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_create_folder(name, description, accessLevel)
Create a folder for grouping links. Dub: POST /folders.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The folder name."
},
"description": {
"description": "What the folder is for.",
"type": "string"
},
"accessLevel": {
"description": "Default workspace access to the folder.",
"type": "string",
"enum": [
"write",
"read",
"none"
]
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_approve_partner_application(applicationId, groupId)
Approve an application to join the partner programme. The partner gains links and starts earning commission. Dub: POST /partners/applications/approve.
Esquema de entrada
{
"type": "object",
"properties": {
"applicationId": {
"type": "string",
"description": "The application to approve."
},
"groupId": {
"description": "Place the partner in this group.",
"type": "string"
}
},
"required": [
"applicationId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴dub_reject_partner_application(applicationId)
Reject an application to join the partner programme. Dub: POST /partners/applications/reject.
Esquema de entrada
{
"type": "object",
"properties": {
"applicationId": {
"type": "string",
"description": "The application to reject."
}
},
"required": [
"applicationId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia