LinkJolt
For businesses that pay affiliates: set up and run your affiliate program from your AI assistant.
Should I use this
Quality & Safety
Findings (4)
- HIGH
- MEDIUMin get_setup_status
- LOWin fetch
- INFOin get_setup_status
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"linkjolt": {
"url": "https://www.linkjolt.io/api/mcp"
}
}
}Remote endpoints
https://www.linkjolt.io/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (28)
🟢plan_affiliate_program(price, billing, currency, commissionPercent)
Plan an affiliate program for a product before launching it: a commission rate, whether to pay on renewals, and how to approve affiliates, from LinkJolt's published benchmarks of real SaaS programs, plus what an affiliate would earn per sale at typical rates. Needs no LinkJolt account. Use it when someone asks what commission to offer or how to structure a program.
Input Schema
{
"type": "object",
"properties": {
"price": {
"type": "number",
"description": "What a customer pays per billing period, e.g. 49"
},
"billing": {
"type": "string",
"description": "How the price is billed (default monthly)",
"enum": [
"monthly",
"yearly",
"one_time"
]
},
"currency": {
"type": "string",
"description": "Three-letter currency code of the price (default USD)"
},
"commissionPercent": {
"type": "number",
"description": "A commission rate the person is considering, e.g. 25"
}
},
"required": [
"price"
]
}🟢get_linkjolt_plans
LinkJolt's plans and prices, each plan's monthly tracked-sales limit, what this connector can do on each plan, and how the free trial works. Needs no LinkJolt account. Use it when someone asks what LinkJolt costs or which plan they need.
Input Schema
{
"type": "object",
"properties": {}
}🟢switch_from_another_tool(from)
How to move an affiliate program to LinkJolt from Rewardful, Tolt, FirstPromoter or Affonso, or from anything else by CSV: the page where the person pastes their old tool's API key, and what happens after (LinkJolt fills in the campaign, imports the affiliates with their old links still working, gives one prompt for their coding tool, and emails the affiliates). Never ask for or accept an API key in the chat: the person pastes it on that page. Needs no LinkJolt account to call.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"enum": [
"rewardful",
"tolt",
"firstpromoter",
"affonso",
"other"
],
"description": "The affiliate tool the program runs on today; other for anything else (a CSV)."
}
},
"required": [
"from"
]
}🟢get_setup_status
Where this LinkJolt account is in setting up its affiliate program: the business name and website, the launch steps (business details, campaign, payment connection, first affiliate, first sale) with the next one to do, the tracking script tag for the site and whether it has been seen, and each campaign's join link. Call it first when helping someone set up or launch. When business.needsDetails is true the name is a placeholder LinkJolt made at sign-up (from the email domain, or the person's first name): ask for the real one. Connecting Stripe or another payment platform can only be done by the person in the browser; connectLinks gives Stripe's one-click link for this account and the page for the others. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Input Schema
{
"type": "object",
"properties": {}
}🔴update_business(businessName, website)
Set the business name and website for this LinkJolt account (the brand the connection belongs to). Affiliates see the name on the join page and in emails. Send either or both. Requires Pro plan or higher, or a new account that has not picked a plan yet; live keys only.
Input Schema
{
"type": "object",
"properties": {
"businessName": {
"type": "string",
"description": "The business or product name, at least 2 characters"
},
"website": {
"type": "string",
"description": "The website, e.g. acme.com (https:// is added when missing)"
}
}
}🟡create_campaign(name, commissionType, commissionValue, targetUrl, description, ...)
Create an affiliate campaign: what affiliates earn per sale and where their links send people. Returns the campaign and its joinUrl, the link to share with affiliates so they can sign up. Confirm the commission with the user before calling. A new campaign is active at once and, unless isPublic is false, listed in LinkJolt's Discovery marketplace where affiliates browse programs. Recurring commissions pay on renewals too. The plan's campaign limit applies. Requires Pro plan or higher; live keys only.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Campaign name affiliates see, at least 2 characters"
},
"commissionType": {
"type": "string",
"description": "Percentage of the sale, or a fixed amount per sale",
"enum": [
"percentage",
"fixed"
]
},
"commissionValue": {
"type": "number",
"description": "The percent (e.g. 20) or the fixed amount in the brand currency (e.g. 30)"
},
"targetUrl": {
"type": "string",
"description": "Where affiliate links send people, usually the business's website or pricing page"
},
"description": {
"type": "string",
"description": "What the program offers, shown to affiliates"
},
"isPublic": {
"type": "boolean",
"description": "List the campaign in the Discovery marketplace (default true)"
},
"autoApproveAffiliates": {
"type": "boolean",
"description": "Approve affiliates who join through the join link without review (default false)"
},
"enableRecurringCommissions": {
"type": "boolean",
"description": "Also pay commission on subscription renewals (default false)"
},
"recurringCommissionType": {
"type": "string",
"description": "Renewals pay the same rate as the first sale, or a custom rate (default same)",
"enum": [
"same",
"custom"
]
},
"recurringCommissionValue": {
"type": "number",
"description": "The renewal rate when recurringCommissionType is custom"
},
"recurringCommissionMode": {
"type": "string",
"description": "Limit renewals by months since the first sale, or by number of payments (default duration)",
"enum": [
"duration",
"payment_count"
]
},
"recurringCommissionDurationMonths": {
"type": "number",
"description": "Months of renewals that pay commission; omit for no limit"
},
"recurringCommissionCount": {
"type": "number",
"description": "Payments that pay commission, including the first; omit for no limit"
}
},
"required": [
"name",
"commissionType",
"commissionValue"
]
}🔴update_campaign(campaignId, name, description, targetUrl, status, ...)
Change an existing campaign: its name, description, where links send people, status (active, or inactive to pause it), the commission, whether it is listed in the Discovery marketplace, whether new affiliates are approved automatically, or the recurring commission terms. Send only what changes; everything else stays as it is. Confirm the exact change with the user before calling, because affiliates see the new terms at once. Commission tiers, coupon codes, files and prices are changed on the dashboard. Returns the campaign and `changed`, the fields that actually changed. Requires Pro plan or higher; live keys only.
Input Schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The campaign to change"
},
"name": {
"type": "string",
"description": "New campaign name, at least 2 characters"
},
"description": {
"type": "string",
"description": "New description shown to affiliates"
},
"targetUrl": {
"type": "string",
"description": "Where affiliate links send people"
},
"status": {
"type": "string",
"description": "active runs the campaign; inactive pauses it",
"enum": [
"active",
"inactive"
]
},
"commissionType": {
"type": "string",
"description": "Percentage of the sale, or a fixed amount per sale",
"enum": [
"percentage",
"fixed"
]
},
"commissionValue": {
"type": "number",
"description": "The percent (e.g. 25) or the fixed amount in the campaign currency"
},
"isPublic": {
"type": "boolean",
"description": "List the campaign in the Discovery marketplace"
},
"autoApproveAffiliates": {
"type": "boolean",
"description": "Approve affiliates who join through the join link without review"
},
"enableRecurringCommissions": {
"type": "boolean",
"description": "Also pay commission on subscription renewals"
},
"recurringCommissionType": {
"type": "string",
"description": "Renewals pay the same rate as the first sale, or a custom rate",
"enum": [
"same",
"custom"
]
},
"recurringCommissionValue": {
"type": "number",
"description": "The renewal rate when recurringCommissionType is custom"
},
"recurringCommissionMode": {
"type": "string",
"description": "Limit renewals by months since the first sale, or by number of payments",
"enum": [
"duration",
"payment_count"
]
},
"recurringCommissionDurationMonths": {
"type": "number",
"description": "Months of renewals that pay commission"
},
"recurringCommissionCount": {
"type": "number",
"description": "Payments that pay commission, including the first"
}
},
"required": [
"campaignId"
]
}⚪invite_affiliate(campaignId, email, name)
Email one person an invitation to join a campaign as an affiliate. This sends a real email in the business's name, so confirm the address and campaign with the user first. Refused when the person is already on the campaign or already has a waiting invitation. At most 10 a minute. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The campaign to invite them to"
},
"email": {
"type": "string",
"description": "The person's email address"
},
"name": {
"type": "string",
"description": "The person's name, used in the email greeting"
}
},
"required": [
"campaignId",
"email"
]
}🔴update_affiliate_status(affiliateId, campaignId, action)
Approve or reject an affiliate who applied to a campaign and is waiting for review (list_affiliates with status pending shows who is waiting, with each campaign they applied to). Approving lets them promote the campaign at once: they get their link by email, and a coupon code too when the campaign makes them. Rejecting is final from here: they cannot apply again, and only the dashboard can let them back in. Confirm each decision with the user before calling. This never approves sales or commissions. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"affiliateId": {
"type": "string",
"description": "The affiliate who applied"
},
"campaignId": {
"type": "string",
"description": "The campaign they applied to"
},
"action": {
"type": "string",
"description": "approve lets them in; reject turns them down",
"enum": [
"approve",
"reject"
]
}
},
"required": [
"affiliateId",
"campaignId",
"action"
]
}🟢get_tracking_instructions(platform)
The steps to track affiliate sales on one payment platform, filled in with this account's own tracking script and webhook address: the same text the Integrations page gives to AI assistants. Use it to help add the tracking script to the site and pass the referral to checkout, then check_tracking to confirm it works. Connecting the platform itself happens in the browser (connectLinks: Stripe in one click, the others on the Integrations page), and for Stripe, Paddle, Polar and Creem connecting there sets up the webhook, so a manual webhook step is only needed without that connection. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Input Schema
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"description": "Where the business takes payment. payment-links covers Stripe Payment Links, Gumroad and Lemon Squeezy.",
"enum": [
"stripe",
"payment-links",
"paddle",
"polar",
"creem",
"woocommerce",
"squarespace",
"bigcommerce",
"carrd",
"webflow",
"gopay",
"fourthwall",
"apple-iap",
"shopify-app-billing"
]
}
},
"required": [
"platform"
]
}🟢check_tracking(url)
Check that affiliate tracking works, after the tracking script has been added: fetches a page of the site (the business website unless url is given) and looks for this account's tag, then says whether a browser has run the script, whether a payment platform is connected, and whether a test-mode purchase has reached LinkJolt (the one tool that shows test sales). Each check comes with a sentence and next names the first thing left to do. Run it after the script is deployed, and again after the person buys once in their payment platform's test mode through an affiliate link. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The page to check, e.g. https://acme.com/pricing (default: the business website)"
}
}
}🟢list_campaigns(page, limit, sort)
List the affiliate campaigns on this LinkJolt account (the brand the API key belongs to), with stats. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"sort": {
"type": "string",
"description": "Sort as field:direction, e.g. createdAt:desc"
}
}
}🟢get_campaign(campaignId)
Get one campaign with full detail, including affiliate count. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The campaign id"
}
},
"required": [
"campaignId"
]
}🟢list_affiliates(page, limit, campaignId, status, sort)
List affiliates across your campaigns, with earnings and click counts. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"campaignId": {
"type": "string",
"description": "Only affiliates on this campaign"
},
"status": {
"type": "string",
"description": "Filter by status",
"enum": [
"pending",
"approved",
"rejected"
]
},
"sort": {
"type": "string",
"description": "Sort as field:direction, e.g. joinedAt:desc"
}
}
}🟢list_conversions(page, limit, status, campaignId, affiliateId, ...)
List conversions (tracked sales) with filters for status, campaign, affiliate and date range. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"status": {
"type": "string",
"description": "Filter by payment status",
"enum": [
"pending",
"trial_period",
"approved",
"paid",
"rejected",
"refunded"
]
},
"campaignId": {
"type": "string",
"description": "Only conversions for this campaign"
},
"affiliateId": {
"type": "string",
"description": "Only conversions for this affiliate"
},
"from": {
"type": "string",
"description": "Only conversions on or after this ISO date"
},
"to": {
"type": "string",
"description": "Only conversions on or before this ISO date"
},
"sort": {
"type": "string",
"description": "Sort as field:direction, e.g. createdAt:desc"
}
}
}🟢get_stats(from, to)
Get aggregate stats for the brand: revenue, commissions, conversions, clicks (optionally within a date range), with money also listed per currency in byCurrency. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start of the range as an ISO date"
},
"to": {
"type": "string",
"description": "End of the range as an ISO date"
}
}
}🟡create_conversion(campaignId, affiliateId, amount, orderId, clickId, ...)
Manually record a conversion (a sale to credit to an affiliate). Like any tracked sale, a live one notifies the merchant's team and emails the affiliate it credits. Requires an Ultimate or Scale plan key with write access. Test keys record test data and email nobody.
Input Schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The campaign the sale belongs to"
},
"affiliateId": {
"type": "string",
"description": "The affiliate to credit"
},
"amount": {
"type": "number",
"description": "Sale amount (positive, major units, e.g. 49.99)"
},
"orderId": {
"type": "string",
"description": "Your order reference; duplicates are rejected"
},
"clickId": {
"type": "string",
"description": "Originating click id, when known"
},
"customerEmail": {
"type": "string",
"description": "Buyer email (enables fraud checks)"
},
"customerName": {
"type": "string",
"description": "Buyer name, shown on the commissions page"
},
"conversionType": {
"type": "string",
"description": "Defaults to one_time",
"enum": [
"one_time",
"recurring",
"trial"
]
},
"parentConversionId": {
"type": "string",
"description": "For recurring: the original conversion id"
},
"currency": {
"type": "string",
"description": "3-letter ISO code; defaults to the campaign currency"
}
},
"required": [
"campaignId",
"affiliateId",
"amount"
]
}🔴update_conversion(conversionId, status, confirmAboveSale)
Approve or reject a pending conversion. Requires an Ultimate or Scale plan key with write access. Refunded conversions are terminal and cannot be changed. Approving a conversion whose commission is more than 5 times its sale (or any commission on a zero sale) is refused with commission_above_sale and changes nothing; show the user the returned sentence and set confirmAboveSale to true only after they confirm. If automatic payouts are switched on for the brand, approving a conversion queues its commission for the next automatic payout run (at least a day later, Stripe payouts only; affiliates paid by PayPal or Wise are paid by hand), and rejecting an approved one takes it back out of that queue. This tool never sends money itself.
Input Schema
{
"type": "object",
"properties": {
"conversionId": {
"type": "string",
"description": "The conversion id"
},
"status": {
"type": "string",
"description": "New status",
"enum": [
"approved",
"rejected"
]
},
"confirmAboveSale": {
"type": "boolean",
"description": "Approve even though the commission is more than 5 times its sale. Send true only after the user has seen the commission_above_sale message and confirmed it."
}
},
"required": [
"conversionId",
"status"
]
}🟢list_teams(page, limit)
List Affiliate Teams with rosters, targets and pending awards. Requires the Scale plan.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
}
}
}🟢get_team(teamId)
Get one Affiliate Team with members, campaigns and goals. Requires the Scale plan.
Input Schema
{
"type": "object",
"properties": {
"teamId": {
"type": "string",
"description": "The team id"
}
},
"required": [
"teamId"
]
}🟢list_team_goals(teamId)
List a team's targets and current-period progress. Requires the Scale plan.
Input Schema
{
"type": "object",
"properties": {
"teamId": {
"type": "string",
"description": "The team id"
}
},
"required": [
"teamId"
]
}🟢list_awards(page, limit, status, periodKey, affiliateId, ...)
List team bonus awards across all teams, for reconciliation. Read-only: approving awards is deliberately not available to assistants. Requires the Scale plan.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"status": {
"type": "string",
"description": "Filter by award status"
},
"periodKey": {
"type": "string",
"description": "Filter by period, e.g. 2026-07"
},
"affiliateId": {
"type": "string",
"description": "Only awards for this affiliate"
},
"teamId": {
"type": "string",
"description": "Only awards for this team"
}
}
}🟢list_coupons(page, limit, campaignId, affiliateId, provider, ...)
List registered affiliate coupon codes. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"campaignId": {
"type": "string",
"description": "Only coupons for this campaign"
},
"affiliateId": {
"type": "string",
"description": "Only coupons for this affiliate"
},
"provider": {
"type": "string",
"description": "Filter by provider",
"enum": [
"stripe",
"paddle",
"apple",
"polar",
"creem",
"lemonsqueezy"
]
},
"code": {
"type": "string",
"description": "Look up one code"
}
}
}🟡create_coupon(campaignId, affiliateId, code, createInProvider, duration, ...)
Give an affiliate a discount code so sales using it are credited to them. With createInProvider true, LinkJolt creates the code in the brand's connected Stripe, Polar or Creem (the one it creates codes in unless provider is given), as the dashboard's Add coupon does: set percentOff, or amountOff with currency, and duration (once, forever, or repeating with durationInMonths). Without it, the code must already exist in the payment platform and this registers it (for a Stripe code customers type, pass its promo_ id). Confirm the code, the discount and the affiliate with the person first. If no platform that creates codes is connected, the answer gives the link to connect Stripe. Requires an Ultimate or Scale plan key with write access; a test key only registers.
Input Schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The campaign the coupon belongs to"
},
"affiliateId": {
"type": "string",
"description": "The affiliate the code is attributed to"
},
"code": {
"type": "string",
"description": "The readable code, e.g. SARAH20"
},
"createInProvider": {
"type": "boolean",
"description": "Create the code in the brand's connected Stripe, Polar or Creem instead of registering one that already exists"
},
"duration": {
"type": "string",
"description": "With createInProvider: how long the discount lasts for a customer",
"enum": [
"once",
"forever",
"repeating"
]
},
"durationInMonths": {
"type": "number",
"description": "With duration repeating: for how many months (1-36)"
},
"description": {
"type": "string",
"description": "With createInProvider: the discount's name in the payment platform (default: the code)"
},
"provider": {
"type": "string",
"description": "Where the discount lives (default stripe when registering; with createInProvider, the platform the brand creates codes in)",
"enum": [
"stripe",
"paddle",
"apple",
"polar",
"creem",
"lemonsqueezy"
]
},
"stripePromotionCodeId": {
"type": "string",
"description": "Registering a Stripe code: its promotion code id (promo_...). Needed for a code customers type: Stripe sends only this id with the sale, never the code text"
},
"paddleDiscountId": {
"type": "string",
"description": "Registering a Paddle code: its discount id (dsc_...)"
},
"polarDiscountId": {
"type": "string",
"description": "Registering a Polar code: its discount id"
},
"creemDiscountId": {
"type": "string",
"description": "Registering a Creem code: its discount id (dis_...)"
},
"appleOfferType": {
"type": "number",
"description": "Apple offer type: 1 introductory, 2 promotional, 3 offer code",
"enum": [
1,
2,
3
]
},
"percentOff": {
"type": "number",
"description": "Percent off (1-100): the real discount with createInProvider, a label when registering"
},
"amountOff": {
"type": "number",
"description": "Fixed amount off, with currency: the real discount with createInProvider, a label when registering"
},
"currency": {
"type": "string",
"description": "3-letter ISO code for amountOff"
}
},
"required": [
"campaignId",
"affiliateId",
"code"
]
}🟢list_payouts(page, limit, status, affiliateId, conversionId, ...)
List the affiliate payout queue for reconciliation. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)"
},
"limit": {
"type": "number",
"description": "Results per page, max 100 (default 25)"
},
"status": {
"type": "string",
"description": "Filter by payout status"
},
"affiliateId": {
"type": "string",
"description": "Only payouts for this affiliate"
},
"conversionId": {
"type": "string",
"description": "Only payouts for this conversion"
},
"from": {
"type": "string",
"description": "Only payouts on or after this ISO date"
},
"to": {
"type": "string",
"description": "Only payouts on or before this ISO date"
}
}
}🟢search(query)
Use this to find records in the caller's own LinkJolt affiliate program by free text: campaign names, affiliate names or emails, coupon codes, and conversion order ids or customer names. Returns result ids that the fetch tool resolves to full records. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search text, at least 2 characters"
}
},
"required": [
"query"
]
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"url"
]
}
}
},
"required": [
"results"
]
}🟢get_program_overview
This month's program snapshot in one call: revenue, conversions, commissions, top affiliates by commission, and the most recent conversions. In clients that show MCP Apps cards (Claude, ChatGPT) this renders as an interactive card; other clients get the same data as JSON. Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"properties": {
"period": {
"type": "object"
},
"currency": {
"type": "string"
},
"revenue": {
"type": "number"
},
"commissions": {
"type": "number"
},
"conversionsCount": {
"type": "number"
},
"topAffiliates": {
"type": "array"
},
"recentConversions": {
"type": "array"
}
},
"required": [
"revenue",
"conversionsCount",
"topAffiliates",
"recentConversions"
]
}🟢fetch(id)
Use this to fetch the full record behind a search result id (campaign:<id>, affiliate:<id>, coupon:<id>, or conversion:<id>). Requires Pro plan or higher.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A composite id returned by the search tool"
}
},
"required": [
"id"
]
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"url": {
"type": "string"
},
"metadata": {
"type": "object"
}
},
"required": [
"id",
"title",
"text",
"url"
]
}Community
Evidence