Linkrunner MCP server
Yes. Linkrunner publishes an official MCP server at https://mcp.linkrunner.io/mcp. It's hosted. It offers 44 tools. We last checked it on 24 Oct 2026.
Official: documented on Linkrunner's own site, at linkrunner.io. Checked 24 Oct 2026. Maintained by Stuart Brameld.
Key facts
As of 24 Oct 2026, Linkrunner's official MCP server scores 65/100 (provisional) on MartechDB's Agent Readiness Index (v1.1). It lists 44 tools.
How the Agent Readiness Index works · Wrong? Suggest a correction
Linkrunner MCP server review
65/100
Linkrunner's Linkrunner MCP scores 65/100 on MartechDB's Agent Readiness Index: easy to connect an AI agent to, with a few gaps.
The good
Hosted by Linkrunner: connect by URL, with nothing to install
Documented, with 44 tools known
The bad
Nothing we've found.
Not checked yet: how you sign in; what agent access costs. Anything not checked scores nothing.
Official MCP server
Linkrunner MCP
- Address
- https://mcp.linkrunner.io/mcp
- Runs
- Hosted
- Sign-in
- Vendor docs
- Official MCP Registry
- Not listed
- How we know it's official
-
- Documented on Linkrunner's own site, at linkrunner.io.
- Documentation
- linkrunner.io/ai
- Tools
- 44 tools · listed 24 Oct 2026
- First seen
- 23 Oct 2026
- Last checked
- Reachable ·
Linkrunner MCP tools (44)
As the server lists them. Names and descriptions are the vendor's own.
-
get_my_accountMy Linkrunner accountReturns the signed-in Linkrunner user (email, first name, granted scopes), whether they can create a project (can_create_project, create_project_blocked_reason) and the billing accounts a new project can join. Call this first in a conversation, together with list_projects.
-
list_projectsList my projectsLists the Linkrunner projects the signed-in user belongs to: id, name, company, role, store links, website, timezone and display currency. Pass a project's id as project_id to every project tool. An empty list means the user has no project yet; offer to set one up (find_app_in_store, then create_project).
-
find_app_in_storeFind an app in the App Store or Play StoreSearches the App Store (Apple's iTunes Search API) or Google Play for a published app, or looks up a store URL the user pasted. Pass either `url`, or `store` and `query`; search one store per call (call twice for an app on both stores). Show the matches to the user and ask which one is theirs before calling create_project with its url. Setup guide: https://docs.linkrunner.io/features/mcp. App projects need a live App Store or Play Store listing, so an app that is not published yet cannot be set up until it is.
-
create_projectCreate a Linkrunner projectCreates a new Linkrunner project in the signed-in user's account and returns its project_id and SDK token. Rules: (1) A company email is required to create a Linkrunner project; Gmail accounts cannot create projects. Check get_my_account first; if can_create_project is false, tell the user why and suggest a work email or [email protected]. (2) App projects need a live App Store or Play Store listing, so an app that is not published yet cannot be set up until it is. Use type app with app_store_link and/or play_store_link from find_app_in_store; never create a website project for an app instead. Use type website only for a website with no app. Confirm the store listing, name, company and timezone with the user before calling. (3) If get_my_account lists billing_accounts, ask the user which one this project belongs to and pass its id as billing_account_id. With none, leave it out and a new billing account is created. For a person's first project, ask once how they heard about Linkrun…
-
get_project_infoProject infoReturns the connected Linkrunner project's name, timezone, and display currency. Call this once at the start of a session so subsequent answers use the right currency and timezone.
-
get_sdk_configurationSDK configurationReturns the connected project's active client-side project token plus canonical dashboard and official documentation links. Call this for SDK installation, initialization, setup, signing, or testing questions. Use the returned project_token in customer-specific setup examples. Render dashboard and docs destinations as Markdown links instead of bare text. If has_project_token is false, direct the user to the returned project_settings_url instead of inventing a token.
-
list_event_namesList event namesLists the NAMES of every distinct custom event and revenue event the project has recorded. Names only — no counts, no amounts, no date range. Call this to learn what events exist before filtering by event name; for counts of an event use list_campaigns with metrics including custom_events.
-
get_project_statsProject performance overviewReturns headline KPIs (clicks, installs, onboards, revenue) as both lifetime and current-month totals. Same totals as the dashboard's overview. Call this first for any 'how are we doing?' question. For a day-by-day trend of these same KPIs, use get_metrics_trend instead.
-
get_metrics_trendDay-by-day metric trend, current monthDaily trend for clicks, organic installs, sign-ups and revenue — 'how has X been trending', 'show me the trend for this month', 'which day had the spike'. CURRENT CALENDAR MONTH ONLY, one point per day — this is the only timeseries endpoint wired up today, so it cannot show a prior month, a custom range, or per-campaign/per-channel breakdown (list_campaigns/get_channel_performance answer non-trend versions of those). installs_per_click and signups_per_install are daily conversion-rate trends, opt-in via `metrics` since they're rarely the question.
-
get_billing_usageBilling usage and free-install allowanceBilling-only. Returns daily and cumulative install counts for the current month against the project's free-install allowance. Call this ONLY when the user explicitly asks about billing, plan limits, free installs, overage, invoice, or quota. Do NOT call it for performance questions ('how are my campaigns doing?') or routine briefings — it's not relevant there.
-
list_campaignsList campaigns with metricsONE ROW PER CAMPAIGN, for a date range. Use for any question that ranks, compares or filters campaigns — 'how are my campaigns performing', 'which campaign has the best ROAS', 'top 5 by installs'. Returns one sorted page of up to 200 campaigns, so prefer it over get_campaign_details unless the user named a single campaign. A large project has thousands of campaigns: do not page through all of them to add up a total; get_channel_performance gives totals across every campaign in one call (leave out its ORGANIC row). Ask only for the metrics you need via `metrics`: the response carries just those, and a metric you did not request is absent rather than zero. A row carrying `system_campaign: true` is infrastructure the project never created — the per-domain 'MAIN_DOMAIN' row that backs root-domain click resolution (one is auto-added by every create_domain call) or the 'lr-test' SDK-console campaign. They are real, active campaigns that consume campaign credit, so they are reported rather t…
-
find_campaignLook up a campaign's display_id by nameCheap id/display_id/name lookup by substring match — NO metrics computed, just the campaign's identity fields. Use this to resolve a display_id for get_campaign_details when the user names a specific campaign, instead of list_campaigns (which computes full metrics for every match just to read off an id). Not for ranking or comparing campaigns — use list_campaigns for that.
-
get_campaign_detailsDeep-dive one campaign over timeONE CAMPAIGN, day by day. Returns headline totals plus a daily time series — the only tool that gives a trend for a single campaign. Use only when the user names a specific campaign and wants its detail or trajectory. To compare campaigns or find the best one, use list_campaigns, which returns them all in one call. Requires a display_id — resolve it with find_campaign (cheap, no metrics computed) rather than list_campaigns (computes full metrics for every match just to read off an id). This tool cannot look a campaign up by name itself.
-
get_channel_performancePerformance by acquisition channelONE ROW PER CHANNEL — Meta, Google, TikTok, Snapchat, Apple Search Ads, Linkrunner Links, Organic — with installs, sign-ups, spend, revenue, retention and active users. Use for any question about a NETWORK rather than an individual campaign: 'which channel is working', 'Meta vs Google', 'where should I move budget'. For individual campaigns use list_campaigns instead; rolling campaigns up into channels by hand double-counts web-to-app. Meta and Google appear as separate direct and web-to-app rows. Ask only for the metrics you need via `metrics`: the response carries just those, and a metric you did not request is absent rather than zero.
-
get_organic_performanceOrganic (unattributed) performanceThe project's ORGANIC total: installs, sign-ups and revenue carrying no campaign and no ad network — users who found the app on their own. NOT filtered by any attribution window. Use to size the non-paid baseline or answer 'how much of my growth is organic'. Returns a single total, not a breakdown. get_channel_performance already includes an Organic row with the same numbers if you want it beside the paid channels. Ask only for the metrics you need via `metrics`: the response carries just those, and a metric you did not request is absent rather than zero.
-
search_event_logSearch individual event rowsINDIVIDUAL EVENT ROWS — one per user action, with timestamp, event name, user, campaign, platform and device. A raw feed for investigating specific behaviour ('show me recent purchases', 'did this user finish signup'), NOT for counting. For counts of an event use list_campaigns with metrics including custom_events; for step-to-step drop-off use run_funnel. Call list_event_names first to learn which names exist. IMPORTANT: the `total` in the response is an ALL-TIME count of matching events and ignores your date range — never quote it as a count for the window; count the rows you actually got.
-
list_funnelsList saved funnelsNames and step definitions of the funnels saved in the dashboard. Call this before run_funnel when the user refers to a funnel by name, so you can pass its id rather than rebuilding the steps.
-
run_funnelCompute step-to-step conversionComputes a conversion funnel: how many users reached each step and how many dropped off between them. Use for any 'where are users dropping off' or 'what % of installs reach checkout' question. Pass funnel_id to run a saved funnel (from list_funnels) OR steps to run an ad-hoc one — exactly one of the two. Step 1 defines the entry cohort and is the ONLY step bounded by the date range; later steps are unbounded forward, so someone entering on the last day can still convert afterwards.
-
create_funnelSave a new funnelSaves a new named funnel definition to the dashboard so it can be run later via run_funnel(funnel_id) or shown in list_funnels, instead of re-typing steps every time. Same step rules as run_funnel's ad-hoc steps: 2-10 steps, step 1 exactly one event (it defines the entry cohort), later steps up to 5 alternative events each.
-
update_funnelEdit a saved funnelUpdates a saved funnel's name, description, and/or steps. All fields are optional but at least one must be provided. Passing `steps` replaces the entire step list — it is not a per-step patch. Get funnel_id from list_funnels.
-
lookup_attributionLook up attribution for a user or deviceReturns the full attribution chain for a single install: the matching click, the campaign it was attributed to, and click parameters (gclid, ttclid, etc). Use this to answer 'why did this user attribute the way they did?' Pass either a customer_user_id (the id sent to Linkrunner via setUserId) or a device_identifier (gaid, idfa, or install_instance_id). If both are supplied, customer_user_id wins.
-
list_domainsList the project's domainsLists the domains configured for this project (primary domain first). Use to fill domain_id on create_campaign, or to confirm a fully-qualified link URL targets a valid domain. The primary domain is used automatically when domain_id is omitted, so only call this when the user wants a non-default domain or the project may have more than one.
-
list_store_listingsList the project's custom store listingsLists custom App Store / Play Store listings configured for this project. Use to fill store_listing_ids on create_campaign, or to get the row id needed by update_store_listing / delete_store_listing. At most one IOS and one ANDROID listing may be attached to a campaign.
-
list_ad_accountsList connected ad-network accountsLists every live ad-network account (Meta, Google, TikTok, Snapchat, etc.) connected to this project in one array, each row tagged with its network_name. There is no server-side network filter — this always returns every connected network's accounts; filter the result yourself if the user only cares about one network. Use to fill network_account_id on create_campaign / edit_campaign. An empty result means no ad-network account is connected yet — tell the user to connect one in the dashboard before retrying. Each row also carries `health` (read it for 'Meta is not getting my events', 'No META Account with Dataset ID and Access Token found', 'wrong dataset', 'reconnect' or stale spend questions): reauth_required, latest_metrics_date and metrics_freshness (fresh, stale, no_metrics, unavailable; the newest day with ad metrics in Linkrunner, which is the real freshness signal, unlike last_sync_at), and findings [{id, severity, owner, text}] to quote. Meta rows add health.meta_capi: dataset…
-
create_campaignCreate a campaign (attribution link)Creates a campaign in the connected project. Equivalent to the dashboard's 'Create Campaign' modal — both go through the same backend validation, so anything that works in the dashboard works here. Use when the user wants a new tracking link for an ad creative, an organic channel, an influencer, a web-to-app flow, etc. Recommended pre-flight when the user hasn't given you IDs: list_ad_accounts for network_account_id, list_domains for domain_id, list_store_listings for store_listing_ids. If a required field is missing, the response includes explicit guidance on which lookup tool to call next — surface that to the user. Returns the new campaign plus a dashboard_url the user can open to view or edit it.
-
edit_campaignEdit an existing campaignEdits fields on an existing campaign. The campaign is identified by `campaign_display_id`, which is what the upstream route calls it — but `display_id` is accepted as an alias here, since every other tool in this server uses that name. Pass either one (not both with different values). Resolve the id first with find_campaign if you only have a name. At least one editable field must be provided. Every field is a partial update: an omitted field is left untouched, while an explicit null (or [] / "" where the field documents it) CLEARS the stored value.
-
create_deeplinkSet a deeplink for an ad set or ad creativeCreates or updates the deep-link destination for one ad entity (an ad set or an ad creative) under a Meta or Google ad-network campaign ONLY — a TikTok/Snapchat/LinkedIn/organic campaign is rejected with 'Deep links are only supported for Meta and Google campaigns', even though it may have its own ad network. Used for per-creative / per-adset deep linking, distinct from the campaign-level `link`. Requires the campaign's display_id (find_campaign) and the ad network's entity id for the ad set/creative. The value you send is REWRITTEN before it is stored, so what you read back will not match what you sent: the backend verifies the URL's host equals the campaign's own tracking domain and then stores only the path+query+fragment, dropping the scheme and host (send 'https://bld.linkrunner.io/promo/x', the stored deeplink is '/promo/x'). This is by design — the domain is implied by the campaign — so do NOT treat the shortened value as a failed write or re-send it to 'correct' it.
-
update_custom_channelRename a custom channelRenames a Linkrunner-link custom channel (the organic/influencer channel label shown in the dashboard, distinct from ad-network campaigns). Only the display name changes — the channel's internal slug (its stable reporting key) does not change to match, by design. IMPORTANT — obtaining custom_channel_id: it is only present in the `custom_channels[].id` array of a create_campaign / edit_campaign RESPONSE. list_campaigns and find_campaign do NOT return it (they expose only custom_channel_code / custom_channel_name, which are the slug and label, not the id), and there is no list-custom-channels tool. So this tool is realistically only usable on a channel you created or edited earlier in the same session and whose numeric id you still have. Do not pass a channel code/slug or a name — it must be the positive integer row id, or the call fails with 'Custom channel id is missing or invalid!'.
-
delete_custom_channelDelete a custom channelDeletes a Linkrunner-link custom channel. This only removes the channel label — it does not delete the underlying campaign. Low-risk / reversible-ish (the channel can be recreated by editing the campaign again), which is why it's included in this tool set. Same custom_channel_id caveat as update_custom_channel: the numeric id appears only in a create_campaign / edit_campaign response, never in list_campaigns / find_campaign output.
-
get_webhookRead the project's configured webhookReturns whether a webhook is configured for this project, its host, and its send_organic setting — or null if none is set. The URL is PARTIALLY REDACTED and always will be: you get the scheme and host, but the path and query come back as '[REDACTED]' (e.g. 'https://hooks.slack.com/[REDACTED]'). That is deliberate — a Slack webhook path is a bearer credential — so this tool CANNOT be used to read the current URL in order to restore it later. Do not attempt to reconstruct or guess the full URL from it, and never pass a redacted value back into update_webhook as if it were real. Use this to confirm WHETHER a webhook exists, which host it points at, and what send_organic is — enough to troubleshoot an integration or to change send_organic (update_webhook can flip that without the URL). If the user needs the full URL, they must read it from their own dashboard or webhook provider.
-
update_webhookConfigure the project's webhookUpdates the project's single webhook — its URL and/or its send_organic flag. Provide at least one of them. Requires the project to already have an active SDK/private key (generated in the dashboard). TO CHANGE ONLY send_organic, OMIT `url` — the stored URL is reused automatically. Do this rather than trying to supply a URL you read from get_webhook, because that value is redacted and passing it back would fail or clobber the real one. PROVIDING `url` IS DESTRUCTIVE AND IRREVERSIBLE: there is one webhook per project, the new URL replaces the old one, and the old one CANNOT be recovered afterwards — get_webhook only ever returns a redacted path, so nothing in this server can restore it. Confirm with the user before replacing a URL you did not just set yourself, and make sure they have the previous value if they might want it back. IMPORTANT — saving is itself a LIVE send: before storing anything, the backend POSTs a real sample payload to the URL and only saves if the endpoint responds…
-
test_webhookSend a test payload to the configured webhookFires a real sample payload to whatever webhook URL is already configured for this project — this is a LIVE test send, not a dry-run/validation check. It will show up wherever the webhook is wired (e.g. a real message in a Slack channel). Fails if no webhook is configured yet — call update_webhook first. Note update_webhook already sends one such payload of its own when it stores a URL, so calling this straight afterwards delivers a second message.
-
create_store_listingCreate a custom store listingCreates a custom App Store / Play Store listing (e.g. for a custom product page or store listing variant) that campaigns can route to. See list_store_listings for existing ones and create_campaign / edit_campaign's store_listing_id(s) for how to attach it to a campaign.
-
update_store_listingUpdate a custom store listingUpdates a custom store listing's name and/or its platform listing string. `id` is the Linkrunner row id (from list_store_listings). `store_listing_id` in the input is NOT that row id — it's the platform listing string being changed (same field name create_store_listing uses, different meaning than the URL's row id). Only the provided fields are changed.
-
delete_store_listingDelete a custom store listingDeletes a custom store listing by its row id (from list_store_listings). Low-risk / reversible-ish — it can be recreated with create_store_listing — which is why it's included in this tool set. BLOCKED, not silent, if any campaign still points at it: the backend rejects the delete with an error naming the campaign(s) using it. Remove the listing from those campaigns first (edit_campaign with store_listing_id: null), or tell the user which campaigns are blocking it. On success the response body is null — no error means it worked.
-
create_domainAdd a domain to the projectRegisters a new domain (or subdomain) for the project's tracking links. DNS should already point it at Linkrunner for links to actually resolve, but this tool does NOT verify that — it accepts and saves any syntactically valid domain name, DNS-configured or not. Confirm with the user that DNS is set up, or warn them it needs to be. Since there is deliberately no delete_domain tool in this set, a typo here becomes a permanent row — double-check the spelling before calling. Re-adding a previously deleted name restores that row instead of creating a new one. SIDE EFFECTS beyond adding the domain row, none of them undoable here: (1) a campaign named 'MAIN_DOMAIN' is auto-created for each brand-new domain — it counts against the project's campaign credit limit and can never be renamed or deleted; (2) if this is the project's FIRST domain, an extra 'Test Campaign' (display_id 'lr-test') is created too; (3) is_primary: true DEMOTES the current primary domain, which silently changes which dom…
-
list_postback_event_mapsList postback event mappingsLists the project's event-name -> ad-network-event-name postback mappings (which internal events get sent to which ad networks, and under what name). Optionally filter to one ad network. Use to find the `id` needed by update_postback_event_map / delete_postback_event_map, or to see what ad_network_id values are already in use before create_postback_event_map. Rows are of two kinds and only one is editable: a SAVED mapping has a numeric `id` and canDelete: true, while an ad network's BUILT-IN DEFAULT has a string id like 'meta_default_0', canDelete: false, and no underlying row — it cannot be updated or deleted. Always read canDelete before passing an id to another tool; the defaults are listed FIRST, so taking the first row is usually wrong. Note the defaults only appear when you pass ad_network_id (and only for a connected network), so an unfiltered call can look like a network has no event mapping at all when in fact its defaults are active.
-
create_postback_event_mapCreate a postback event mappingMaps one of the project's internal event names to the name an ad network expects in its postback, optionally with revenue sharing. Creating a mapping for Meta/Google/TikTok/Snapchat/LinkedIn/Reddit immediately fires a test postback to every connected NetworkAccount for that network. Call list_postback_event_maps first to check for an existing mapping and to see valid ad_network_id values.
-
update_postback_event_mapUpdate a postback event mappingUpdates fields on an existing postback event mapping. `id` is the mapping's row id, from list_postback_event_maps. All body fields are optional — only the fields you provide are sent through, but at least one is required. IMPORTANT: exactly like create_postback_event_map, EVERY successful update immediately fires a live test postback to every connected NetworkAccount for that mapping's network (Meta/Google/TikTok/Snapchat/LinkedIn/Reddit) — there is no dry-run. This injects a synthetic conversion event into the customer's real ad accounts, so avoid repeated or exploratory updates and confirm with the user first. Only rows with canDelete: true can be updated — the built-in network defaults list_postback_event_maps returns (canDelete: false, string id like 'meta_default_0') have no database row and cannot be edited; add a real mapping for the same event_name instead.
-
delete_postback_event_mapDelete a postback event mappingDeletes a postback event mapping by its row id (from list_postback_event_maps). Low-risk / reversible-ish — it can be recreated with create_postback_event_map — which is why it's included in this tool set. Only rows with canDelete: true can be deleted: list_postback_event_maps also returns the ad network's built-in defaults, which carry canDelete: false and a STRING id like 'meta_default_0' and have no database row behind them. Those defaults are listed FIRST, so check canDelete before picking a row rather than taking the first one. On success the response body is null — no error means it worked.
-
get_postback_delivery_logPostback delivery log: what was sent to each ad network and what it repliedRead this before answering 'Meta/Google is not receiving my events', 'Meta blocks my events', 'Meta shows fewer conversions than Linkrunner', or 'did my affiliate get this conversion'. Returns, for the project and a UTC window (default the last 7 days, at most 30 days, kept 90 days): `summary` with conversions, delivered, failed, not_sent and success_rate_pct overall, `by_network` (with the network's top error codes and messages) and `by_event`; then `deliveries`, one row per conversion at its final attempt, newest first and paginated (`pagination.total`). A delivery row has the event as logged (`event_name`; for Meta this is already the Meta event name), the event name inside the payload (`network_event_name`), `status` (delivered, failed, transport_failed, not_sent, fraud_rejected, fraud_withheld), `http_status`, `attempts`, the campaign (display_id, name), and `error` {error_class, http_status, code, subcode, type, message} when it failed (message is at most 200 characters, read fr…
-
check_link_setupCheck deep link setup: AASA, assetlinks.json and what a campaign link does on each deviceRead this before answering 'is my iOS / Android link setup right', 'is my AASA or assetlinks correct', or 'the link opens the store instead of my installed app'. Checks, live: (1) `config`, the project's iOS bundle ID, App Store ID, Android package, app URI scheme and store links, and the saved association files parsed the way iOS and Android read them (team ID + bundle in the AASA; package, handle_all_urls relation and SHA-256 fingerprints in assetlinks); (2) `domains`, what each of the project's own link domains actually serves at /.well-known/apple-app-site-association and /.well-known/assetlinks.json (HTTP status, redirects, whether it matches what is saved); (3) `link_probe`, what one campaign link does for iOS Safari, Android Chrome and the Facebook in-app browser on iOS and Android: each redirect hop, where it lands (App Store, Play Store, app scheme, web) and, for the Linkrunner link page, which app link and store it will try. `findings` lists each problem with an id, severity…
-
search_documentationSearch Linkrunner documentationSearches the current official docs.linkrunner.io content and returns canonical links plus relevant Markdown. You MUST call this before answering any Linkrunner how-to, setup, installation, configuration, integration, or troubleshooting question, including Meta Ads, Google Ads, SDK, deep linking, and iOS SKAN questions. Base the steps on the returned documentation and cite the returned URLs. Never invent a docs URL.
-
get_linkrunner_overviewLinkrunner overviewWhat Linkrunner is, which SDKs it supports, how to set it up through this connector, and what a new project needs. Works without signing in. Call it when the user asks what Linkrunner is, how to get started, or whether it fits their app.
Connect your AI to Linkrunner
Add the official Linkrunner MCP server to Claude, ChatGPT or your editor.
Connect Linkrunner MCP to Claude
Claude.ai and Claude Desktop
Open Customize, then Connectors.
Click +, then Add custom connector.
Name it Linkrunner, paste the address below and click Add.
Connect Linkrunner MCP to ChatGPT
Open Settings, then Apps, then Advanced settings.
Turn on Developer mode, then click Create.
Name it Linkrunner and paste the address below.
ChatGPT usually only connects to servers with self-serve sign-in or none.
Connect Linkrunner MCP to Cursor
Opens Cursor if it's installed. If nothing happens, use the JSON below.
Connect Linkrunner MCP to VS Code
Opens VS Code if it's installed. Otherwise add the JSON settings from the Cursor tab to your .vscode/mcp.json.
Linkrunner MCP server questions
Does Linkrunner have an official MCP server?
Yes. Linkrunner publishes its MCP server itself. Linkrunner's own documentation describes it. MartechDB only lists servers a vendor publishes, never community copies.
What is the Linkrunner MCP server URL?
The address is https://mcp.linkrunner.io/mcp.
How do I connect Linkrunner MCP to Claude, ChatGPT or Cursor?
In Claude, add https://mcp.linkrunner.io/mcp as a custom connector (Customize, Connectors, Add custom connector). In Cursor, use the Add to Cursor link on MartechDB's page, or paste the JSON settings into your mcp.json. In Claude Code, run: claude mcp add --transport http linkrunner https://mcp.linkrunner.io/mcp
What can the Linkrunner MCP server do?
It offers 44 tools, including get_my_account, list_projects, find_app_in_store, create_project and get_project_info (as listed on 24 Oct 2026). 27 are marked read-only and 16 can delete or overwrite data.
Is the Linkrunner MCP server in the official MCP Registry?
No. Linkrunner hasn't published it to the official MCP Registry.
Is the Linkrunner MCP server working?
Yes. It answered our most recent check. We last checked it on 24 Oct 2026.
What are the alternatives to Linkrunner's MCP server?
In Marketing attribution, the most agent-friendly alternatives with an official MCP server are Seal Metrics (100/100), Admetrics (100/100), Airbridge (95/100), Factors.ai (91/100) and Dreamdata (91/100). Linkrunner scores 65/100 on the same index.
Alternatives to Linkrunner's MCP server
Vendors in Marketing attribution with an official MCP server, the most agent-friendly first. Linkrunner scores 65/100.
Seal Metrics
sealmetrics.com
Admetrics
admetrics.io
Airbridge
airbridge.io
Factors.ai
factors.ai
Dreamdata
dreamdata.io
Change history
What we've seen change for Linkrunner, newest first.
-
Linkrunner: Added to MartechDB with Linkrunner MCP
Use with AI
Connect your AI to MartechDB
Then ask it about Linkrunner, or any of the 1,622 marketing tools with an official MCP server. Free, no sign-in.
Claude.ai and Claude Desktop
Open Customize, then Connectors.
Click +, then Add custom connector.
Name it MartechDB, paste the address below and click Add. There's no sign-in.
The free plan allows one custom connector. On Team and Enterprise plans, an owner adds the connector first.
Claude Code
Run this in your terminal:
ChatGPT
Open Settings, then Apps, then Advanced settings.
Turn on Developer mode, then click Create.
Name it MartechDB, paste the address below and choose No authentication.
Developer mode is on Plus and Pro plans, and on Business, Enterprise and Edu if an admin allows it.
API
The same data as JSON, with no sign-in. See the OpenAPI description for every endpoint and field.
CLI
Search the directory and print the command to connect a vendor's server, from your terminal. Needs Node 18 or later. View on npm
Show that your MCP server is verified
If you work at Linkrunner, add this badge to your MCP docs or README. It's free, it's the same for every vendor, and it updates from our daily checks: it shows uptime while the server responds, and says so if it stops.
Something wrong or out of date? Suggest a correction or email us, and we'll check it against the evidence. Every correction we make is listed on Corrections.