Skip to main content
LinkedIn Ads is a read + guardrailed write connector. Tools are called via tools/call over POST /linkedin-ads/mcp. The connector is connected with OAuth (LinkedIn login). See Forbind LinkedIn Ads.
Endpoint: https://mcp.consile.ai/linkedin-ads/mcp. LinkedIn Ads is its own named connector with only its own tools. Tools are listed and must be called with the qualified name linkedin-ads__<tool> (e.g. linkedin-ads__list_ad_accounts); a bare name such as list_campaigns returns Unknown tool.. If the account has added extra LinkedIn portals in the Consile portal, each one has its own endpoint (https://mcp.consile.ai/linkedin-ads-2/mcp, -3, …) with the same tools under the prefix linkedin-ads-2__, each bound to its own LinkedIn login. tools/list on every LinkedIn endpoint also includes the unprefixed connect_account tool, which returns a link to (re)connect LinkedIn that is valid for 10 minutes.
This connector can write. The two create tools for ad objects create in DRAFT by default (no serving, no spend), and a DRAFT or PAUSED create is applied immediately. Activating (status ACTIVE), archiving, changing a budget or bid, removing a campaign↔conversion association, and publishing, editing or deleting public content (except removing a reaction) require explicit confirm: true; without it the tool returns a dry-run preview and sends no write to LinkedIn. Name, end-date and targeting edits apply without confirmation. See Write tools & guardrails.

Scopes & authentication

The connector requests three OAuth scopes from LinkedIn:
The connector uses OAuth 2.0 authorization-code login with LinkedIn, and Consile renews the access automatically. If the access has expired or been revoked, the tool returns an error result whose text ends in reconnect required (for example LinkedIn access token has expired; reconnect required). Other LinkedIn errors (for example invalid arguments or throttling) return the generic text Tool invocation failed.; LinkedIn’s message and HTTP status are not passed to the client. If every call fails, including list_ad_accounts, reconnect LinkedIn Ads in the portal.

Tools that are not available yet

22 of the 64 tools are listed in tools/list but are not available yet: they cannot read from or change anything on LinkedIn, and calls that need LinkedIn fail with the tool error Tool invocation failed.. They are the 8 organic-social write tools (create_organization_post, create_member_post, update_post, delete_post, create_comment, delete_comment, create_reaction, delete_reaction) and these 14 read tools: list_administered_organizations, get_organization, find_organization_by_vanity_name, get_organization_follower_count, list_organization_posts, get_organization_page_statistics, get_organization_follower_statistics, get_organization_share_statistics, get_post, get_post_social_metadata, list_post_comments, list_post_reactions, get_my_profile, get_my_connections_count. The other 42 tools are available.

Guardrail model (write tools)

All 19 write tools pass through the connector’s built-in guardrail. The rules are:
  1. New ad objects (create_campaign_group, create_campaign) are created in DRAFT status by default. They do not serve and do not spend. A create with status DRAFT or PAUSED is applied immediately, including any budget passed at creation; only ACTIVE or ARCHIVED at creation requires confirm: true.
  2. New organic posts (create_organization_post, create_member_post) default to DRAFT lifecycle. They are not publicly visible.
  3. Confirmation required (confirm: true) whenever the action:
    • sets status to ACTIVE (starts serving / spending);
    • sets status to ARCHIVED (destructive);
    • changes a budget or bid amount;
    • publishes public content (a post, comment, or reaction);
    • deletes a post or comment (delete_post, delete_comment);
    • edits the commentary of a post (update_post);
    • removes a campaign↔conversion association.
  4. Without confirm: true, a gated tool returns a preview object (the exact method, path, and body it would send) and sends no write to LinkedIn.
  5. Setting status to PAUSED or DRAFT applies without confirmation (stops serving/spend immediately).
  6. Applied without confirmation: creates with status DRAFT or PAUSED (including any budget set at creation), updates that change only name, end date or targeting, create_conversion_rule, update_conversion_rule (including enabled: false), associate_campaign_conversion, delete_reaction, and update_post that only sets lifecycleState: "DRAFT".
See Write tools & guardrails for how the preview and confirm work across connectors.

Preview shape

When a confirmation-gated tool is called without confirm: true, it returns:
This example is the response to create_campaign called with status: "ACTIVE" and no confirm. The same call with the default DRAFT status is executed immediately and returns { id, body, status }. The preview is a normal successful tool result (isError is not set). action is the bare tool name.

Tool annotations

Every tool in tools/list carries MCP annotations. The 45 read tools: readOnlyHint: true, destructiveHint: false, openWorldHint: false. All 19 write tools: readOnlyHint: false, destructiveHint: true, openWorldHint: true. MCP clients can use these hints to ask the user before each write call. The annotations add to the confirm guardrail and do not replace it.

Shared parameters

Numeric ids

Most tools take bare numeric id strings (digits only, no URN prefix). The connector builds the required URNs internally. conversionId and formId are also digits only.
string
required
LinkedIn ad account id (digits only). Obtain from list_ad_accounts or search_ad_accounts.
string
Campaign group id (digits only). From list_campaign_groups.
string
Campaign id (digits only). From list_campaigns.
string
Organization (Company Page) id (digits only). From list_administered_organizations.

Money format

All money values (budgets, bids, conversion values) use LinkedIn’s major-unit format: a decimal string plus a currency code (not micros).
The currencyCode must match the ad account’s currency. Supply amounts as dailyBudgetAmount / totalBudgetAmount / unitCostAmount (string) plus currencyCode (ISO 4217 three-letter code). currencyCode is required whenever an amount is given; without it the call fails.

Limit

integer
default:"100"
Maximum rows returned by list/finder tools (1-1000). The connector follows LinkedIn’s paging automatically and returns up to limit elements.

Analytics facet

get_ad_analytics, get_ad_statistics and get_ad_demographics take one facet. Pass one of accounts, campaigns or campaignGroups. Passing none is an error. If you pass several, only the first non-empty one is used, in the order accounts, campaigns, campaignGroups. get_attributed_revenue instead takes a single adAccountId.
string[]
Ad account ids to report on (most common).
string[]
Campaign ids to report on.
string[]
Campaign group ids to report on.

Response shapes

  • Paginated list tools (list_ad_accounts, search_ad_accounts, list_ad_account_users, list_campaign_groups, list_campaigns, list_creatives, list_targeting_entities, typeahead_targeting_entities, similar_targeting_entities, list_conversion_rules, list_insight_tag_domains, list_campaign_conversions, list_lead_forms, list_administered_organizations, find_organization_by_vanity_name, list_organization_posts, list_post_comments, list_post_reactions): { count, elements, paging, metadata }, where elements holds LinkedIn’s objects unchanged and count is the number of rows returned.
  • All other reads (single objects, list_targeting_facets, resolve_targeting_urns, get_insight_tag, the analytics tools and query): LinkedIn’s JSON response unchanged. Budgets are { amount, currencyCode } and analytics cost fields are decimal strings, both in major units of the account currency. get_my_connections_count returns { count, paging }.
  • Applied writes: { id, body, status }. id is the new object’s id on create, status is LinkedIn’s HTTP status (201 on create, 200 or 204 on update and delete), and body is often empty.
  • Gated writes without confirm: the preview shown above.

Connector limits

List tools follow LinkedIn’s paging and return at most limit rows (default 100, max 1000). The analytics response caps are set by LinkedIn: get_ad_analytics / get_ad_statistics return a single, non-paginated response that LinkedIn caps at 15,000 elements, and accept at most 20 metric fields per call. Consile’s own request limits are described in Errors & limits.

Read tools (45)

Ad accounts & structure

list_ad_accounts

List every ad account the connected member can access, with account URN and role. The entry point that yields the account ids all other tools take.
integer
default:"100"

search_ad_accounts

Search accessible ad accounts with full detail (currency, status, servingStatuses, type). No filter returns all accessible accounts.
string[]
Filter by account status. Enum: ACTIVE DRAFT CANCELED PENDING_DELETION REMOVED.
integer
default:"100"

get_ad_account

Fetch one ad account by id: currency, status, type, servingStatuses, reference, notification flags, test flag.
string
required

list_ad_account_users

List all users and roles on a given ad account (audit who has access). Inverse of list_ad_accounts.
string
required
integer
default:"100"

list_campaign_groups

Search/list campaign groups under an account (the budget/status container above campaigns): name, status, runSchedule, totalBudget/dailyBudget, objective.
string
required
string[]
Filter by status. Enum: ACTIVE PAUSED DRAFT ARCHIVED REMOVED.
integer
default:"100"

get_campaign_group

Fetch one campaign group: name, status, runSchedule, totalBudget/dailyBudget, servingStatuses, objective.
string
required
string
required

list_campaigns

Search/list campaigns within an account: status, type, objectiveType, costType, budgets, bid (unitCost), runSchedule, targetingCriteria, servingStatuses.
string
required
string[]
Filter by status. Enum: ACTIVE PAUSED DRAFT ARCHIVED COMPLETED REMOVED.
string
Scope to one campaign group id.
integer
default:"100"

get_campaign

Fetch one campaign with full targetingCriteria, budgets, bid (unitCost), runSchedule, objectiveType, optimizationTargetType, servingStatuses, versionTag.
string
required
string
required

list_creatives

Search/list creatives (ads) under an account: reference, status (intendedStatus), variant content.
string
required
integer
default:"100"

get_creative

Fetch one creative by its URN (status, content reference, variant/intendedStatus).
string
required
string
required
The creative URN, e.g. urn:li:sponsoredCreative:123.

get_ad_preview

Render a preview of an existing creative in a placement, matching the render LinkedIn Campaign Manager shows.
string
required
string
required
urn:li:sponsoredCreative:123 to preview.

Reporting & analytics

get_ad_analytics

Core single-pivot performance report: group metrics by one dimension over a date range and time granularity. Cost fields are decimal strings in the account currency (not micros).
string
required
Dimension to group by. One of: COMPANY ACCOUNT SHARE CAMPAIGN CREATIVE CAMPAIGN_GROUP CONVERSION CONVERSION_COMPONENT OBJECTIVE_TYPE SERVING_LOCATION PLACEMENT_NAME IMPRESSION_DEVICE_TYPE, plus the MEMBER_* demographic set (see get_ad_demographics).
string
default:"ALL"
Time bucketing: ALL (one total) | DAILY | MONTHLY | YEARLY.
string
required
Report window start (YYYY-MM-DD).
string
required
Report window end (YYYY-MM-DD).
string[]
Ad account ids (most common facet; see Analytics facet).
string[]
Campaign ids (alternative facet).
string[]
Campaign group ids (alternative facet).
string
CSV of metric fields (max 20). Defaults to: impressions,clicks,costInLocalCurrency,externalWebsiteConversions,oneClickLeads,landingPageClicks.

get_ad_statistics

Multi-dimensional report: group metrics by up to three pivots at once (e.g. CAMPAIGN × CREATIVE × SERVING_LOCATION) for cross-tabs the single-pivot finder cannot express.
string[]
required
1–3 dimensions from the same enum as get_ad_analytics.
string
default:"ALL"
string
required
string
required
string[]
string[]
string[]
string

get_ad_demographics

Professional-demographic breakdown: analytics pivoted by a MEMBER_* dimension (company/size/industry/seniority/job title/function/country/region): “who saw or engaged with my ads”. Data is delayed approximately 12–24 hours; resolve the returned URNs with resolve_targeting_urns. Time granularity is fixed to ALL.
string
required
One of: MEMBER_COMPANY MEMBER_COMPANY_SIZE MEMBER_INDUSTRY MEMBER_SENIORITY MEMBER_JOB_TITLE MEMBER_JOB_FUNCTION MEMBER_COUNTRY_V2 MEMBER_REGION_V2 MEMBER_COUNTY.
string
required
string
required
string[]
string[]
string[]
string
Defaults to impressions,clicks,costInLocalCurrency.

get_attributed_revenue

CRM revenue-attribution report (ROAS, won/open opportunities, deal size, days-to-close) by ACCOUNT / CAMPAIGN_GROUP / CAMPAIGN. Returns empty results unless the advertiser has connected a CRM to Business Manager. Takes a single adAccountId instead of the analytics facets.
string
required
string[]
default:"[\"CAMPAIGN\"]"
1–3 from ACCOUNT CAMPAIGN_GROUP CAMPAIGN.
string
required
string
required
string
CSV of revenueAttributionMetrics fields.

get_budget_pricing

Suggested, minimum and maximum bids plus daily-budget limits for a bid/campaign type on an account. Forecast only. No spend.
string
required
string
required
e.g. CPM, CPC, CPV.
string
required
e.g. SPONSORED_UPDATES, TEXT_AD, DYNAMIC.
string
Optional bid match type.
string
Advanced: a pre-built RestLi targetingCriteria fragment (passed verbatim).
Returns {amount, currencyCode} money objects.

forecast_ad_supply

Forecast impressions, clicks, spend, reach, and leads for a hypothetical campaign’s targeting + competing bid over a time range.
string
required
e.g. SPONSORED_UPDATES.
string
required
A pre-built RestLi targeting fragment (target.includedTargetingFacets:...).
integer
required
Forecast window start (epoch ms).
integer
required
Forecast window end (epoch ms).
string
Optional competing bid fragment.

get_organization_page_statistics

Organization page view and click statistics. Lifetime breakdown (by geo, country, function, industry, seniority, staffCountRange) is shown when no time interval is given. Not available yet.
string
required

get_organization_follower_statistics

Follower demographics (lifetime, by 7 facets). The total count is not here. Use get_organization_follower_count for that. Not available yet.
string
required

get_organization_share_statistics

Organic engagement stats for an org’s posts: aggregate lifetime stats (impressions, clicks, likes, comments, shares, engagement rate). Organic only. For sponsored content use get_ad_analytics. Not available yet.
string
required

Audiences & targeting

get_audience_count

Estimate the reachable LinkedIn audience size (active + total) for a targetingCriteria expression. Validates the 300-member campaign minimum before launch. Returns total: 0 when the audience is below LinkedIn’s privacy floor.
string
required
A pre-built RestLi targetingCriteria fragment. Build facet URNs with the targeting tools below.

list_targeting_facets

List all targeting facet categories (industries, titles, seniorities, skills, locations, jobFunctions, staffCountRanges, interests, etc.) and which entity finders each supports. The catalog you build targetingCriteria from. No arguments.

list_targeting_entities

Enumerate all values for an enumerable facet (e.g. seniorities, genders, jobFunctions, ageRanges), resolving closed-list facets to URNs.
string
required
The facet name (e.g. seniorities) or a full adTargetingFacet URN.
string
Optional locale, e.g. en_US.
integer
default:"100"

typeahead_targeting_entities

Free-text search for targeting entity URNs within a facet (find geo / skill / company / title / field-of-study URNs). The main way to turn natural-language words into targeting URNs.
string
required
The facet name (e.g. locations, skills) or a full adTargetingFacet URN.
string
required
Free-text search, e.g. Copenhagen or machine learning.
string
Optional locale, e.g. en_US.
integer
default:"100"

similar_targeting_entities

Given seed entity URN(s) in a facet, return similar entities (lookalike companies / industries / skills / titles) for audience expansion.
string
required
The facet name or a full adTargetingFacet URN.
string[]
required
Seed entity URNs (at least one).
integer
default:"100"

resolve_targeting_urns

Resolve a batch of entity URNs to human-readable names and facet membership (e.g. urn:li:geo:102095887 → "California, United States") to display a campaign’s stored targeting or demographics.
string[]
required
Entity URNs to resolve (at least one).

Conversions & Insight Tag

list_conversion_rules

List all conversion rules for an ad account (including conversionMethod=CONVERSIONS_API and enabled flags). The value field is {currencyCode, amount} in major units.
string
required
integer
default:"100"

get_conversion_rule

Fetch one conversion rule by id: type, attribution windows, value, urlMatchRuleExpression, associated campaigns, imagePixelTag.
string
required
string
required
Numeric conversion id (digits only).

get_insight_tag

Find the Insight Tag for an ad account and retrieve its tracking snippet and firstParty state.
string
required

list_insight_tag_domains

List domains observed firing the account’s Insight Tag (most recent first) with blocked status and last-callback time. Verify tag installation.
string
required
integer
default:"100"

list_campaign_conversions

List all conversion-rule associations for one or more campaigns (which campaigns attribute which conversions).
string[]
required
Campaign ids to look up (at least one).
integer
default:"100"

Lead form definitions

These tools expose form structure only: questions, hidden fields, consent text, post-submission CTA. Submitted leads are not available through this connector.

list_lead_forms

List lead gen form definitions for an ad account.
string
required
integer
default:"100"

get_lead_form

Fetch one lead gen form definition by id (full questions, hidden fields, consents, post-submission CTA).
string
required
Numeric form id (digits only).

Organization pages & organic content (read)

Every tool in this section is not available yet, like the three get_organization_*_statistics reads under Reporting & analytics. See Tools that are not available yet.

list_administered_organizations

List the organizations the connected member administers (org URN, role, state). The entry point for organization selection. Filter to ADMINISTRATOR + APPROVED for usable organizations. Not available yet.
string
default:"ADMINISTRATOR"
string
default:"APPROVED"
integer
default:"100"

get_organization

Fetch full admin-visible org profile by id (name, website, industries, locations, logo, staffCountRange). Not available yet.
string
required

find_organization_by_vanity_name

Resolve an organization by its vanityName (URL slug) to its URN and profile. Not available yet.
string
required
The URL slug, e.g. example-company.

get_organization_follower_count

Total first-degree follower count for an organization (the headline number). Not available yet.
string
required

list_organization_posts

List organic posts authored by an organization (the page’s content feed), newest first. Not available yet.
string
required
string
default:"LAST_MODIFIED"
LAST_MODIFIED or CREATED.
integer
default:"100"

get_post

Fetch a single organic post by its share/ugcPost URN (commentary, author, visibility, content). Not available yet.
string
required
urn:li:share:123 or urn:li:ugcPost:123.

get_post_social_metadata

Reaction and comment summary for a post (commentsState, commentSummary, reactionSummaries by type). Not available yet.
string
required
The post/share/ugcPost URN.

list_post_comments

List comments on a post (or nested replies on a comment). Not available yet.
string
required
The post/share/ugcPost URN.
integer
default:"100"

list_post_reactions

List reactions on a post or comment with reactionType (LIKE / PRAISE / EMPATHY / INTEREST / APPRECIATION / ENTERTAINMENT). Not available yet.
string
required
The post/share/ugcPost URN.
integer
default:"100"

Member profile

Both member-profile reads are not available yet. Use list_ad_accounts as a connectivity check.

get_my_profile

The connected member’s own profile: id (person URN), name, headline, vanityName (public-URL slug), photo. Not available yet. No arguments.

get_my_connections_count

The connected member’s number of first-degree connections (count only, not the list). The viewer is implied by the access token. Not available yet. No arguments.
integer
Number of first-degree connections.
object
LinkedIn’s paging object from the connections finder.

Advanced: query (escape hatch)

query

Advanced read of a LinkedIn REST or v2 resource, for reads that no dedicated tool covers. It is read-only: it cannot create or change anything.
string
required
A bare path under /rest or /v2 without a query string, e.g. /rest/adCampaigns/123. Pass parameters in params.
object
Read params as a string/number record. Percent-encode URN values. Supported keys: q, fields, projection, start, count, pageSize, pageToken, search, pivot, pivots, timeGranularity, dateRange, timeIntervals, facet, query, urns, entities, ids, owner, account, organization, organizationalEntity, sort, sortBy, sortOrder, viewContext, edgeType. count and pageSize are at most 1000.
query makes one request and returns LinkedIn’s response as-is; it does not follow pagination. The first path segment after /rest or /v2 must be one of these resources: adAccounts, adAccountUsers, adCampaignGroups, adCampaigns, creatives, adPreviews, adAnalytics, adBudgetPricing, adSupplyForecasts, audienceCounts, adTargetingFacets, adTargetingEntities, conversions, insightTags, insightTagDomains, campaignConversions, leadForms, organizations, organizationAcls, organizationPageStatistics, organizationalEntityFollowerStatistics, organizationalEntityShareStatistics, networkSizes, posts, socialMetadata, socialActions, reactions, me, connections, geo. Reads of Company Page, post and member-profile resources (organizations, organizationAcls, organizationPageStatistics, organizationalEntityFollowerStatistics, organizationalEntityShareStatistics, networkSizes, posts, socialMetadata, socialActions, reactions, me, connections) are not available yet, like the matching tools.

Ad-management write tools (11)

All 11 tools go through the guardrail described above. See Write tools & guardrails for the full model.

Campaign groups

create_campaign_group

Create a campaign group (the budget/status container above campaigns). Created DRAFT by default (no serving). status: "ACTIVE" or "ARCHIVED" requires confirm: true; DRAFT and PAUSED create the group immediately, including any total budget you pass.
string
required
string
required
1–100 characters.
integer
required
runSchedule.start (epoch ms).
integer
runSchedule.end (epoch ms; required if totalBudget is set).
string
default:"DRAFT"
DRAFT | ACTIVE | PAUSED | ARCHIVED. ACTIVE and ARCHIVED require confirm: true.
string
Total budget as a decimal string (major units).
string
ISO 4217 code; required when a budget amount is provided.
boolean
Set true to apply when confirmation is required.

update_campaign_group

Edit a campaign group’s name, end date (endMs) or total budget. The start date cannot be changed. A budget change requires confirm: true; name and end date alone apply immediately. Pass at least one field.
string
required
string
required
string
string
string
integer
New runSchedule.end (epoch ms).
boolean

set_campaign_group_status

Set a campaign group to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED stops serving immediately and applies without confirmation. ACTIVE and ARCHIVED require confirm: true.
string
required
string
required
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Campaigns

create_campaign

Create a campaign under a group. Created DRAFT by default (no spend). status: "ACTIVE" or "ARCHIVED" requires confirm: true; DRAFT and PAUSED create the campaign immediately. Money is major units. At least one of dailyBudgetAmount and totalBudgetAmount is required. Without country and language, the campaign locale is US / en.
string
required
string
required
Parent campaign group id.
string
required
string
required
Campaign type, e.g. SPONSORED_UPDATES, TEXT_AD, DYNAMIC.
string
required
Bidding cost type: CPM | CPC | CPV.
string
default:"us"
locale.country (ISO 3166-1 alpha-2).
string
default:"en"
locale.language (ISO 639-1).
string
Daily budget (decimal string). Provide daily, total, or both.
string
Total budget (decimal string). Provide daily, total, or both.
string
Required when a budget amount is provided.
string
Bid (unitCost) amount (decimal string).
string
required
targetingCriteria as a JSON object string. Build URNs with the targeting read tools.
string
e.g. WEBSITE_VISITS, LEAD_GENERATION, BRAND_AWARENESS.
string
Required by LinkedIn on create; set the value appropriate to your account/region.
string
default:"DRAFT"
DRAFT | ACTIVE | PAUSED | ARCHIVED. ACTIVE and ARCHIVED require confirm: true.
boolean

update_campaign

Edit a campaign’s name, budgets, bid (unitCost), or targetingCriteria. A budget or bid change always requires confirm: true. Name and targeting changes alone apply immediately, also on a live campaign. Pass at least one field.
string
required
string
required
string
string
string
string
string
string
New targetingCriteria as a JSON object string.
boolean

set_campaign_status

Set a campaign to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED stops spend immediately (no confirmation needed). ACTIVE and ARCHIVED require confirm: true.
string
required
string
required
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Creatives

set_creative_status

Set a creative (ad) to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED is immediate. ACTIVE (starts serving and spending) and ARCHIVED require confirm: true.
string
required
string
required
urn:li:sponsoredCreative:123.
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Conversion tracking

create_conversion_rule

Create a conversion rule for an account (measurement setup; does not spend). Applies without confirm: true (measurement only, no spend or publish). On success the write result’s id holds the new rule’s id.
string
required
string
required
string
required
e.g. LEAD, PURCHASE, SIGN_UP, ADD_TO_CART, DOWNLOAD, KEY_PAGE_VIEW.
string
default:"LAST_TOUCH_BY_CAMPAIGN"
LAST_TOUCH_BY_CAMPAIGN | LAST_TOUCH_BY_CONVERSION.
integer
default:"30"
Post-click attribution window (days).
integer
default:"7"
View-through attribution window (days).
string
Optional fixed conversion value (decimal string, major units).
string
Required when valueAmount is provided.
boolean

update_conversion_rule

Edit a conversion rule’s name, enabled state, or value. Editing the value does not retroactively re-attribute past events. Applies without confirm: true, also when it disables a rule (enabled: false). Pass at least one field.
string
required
string
required
string
boolean
string
string
boolean

associate_campaign_conversion

Attach a conversion rule to a campaign so that campaign attributes that conversion. Use the urn:lla conversion URN form (e.g. urn:lla:llaPartnerConversion:123). Applies without confirm: true.
string
required
string
required
urn:lla:llaPartnerConversion:123 (note the urn:lla namespace).
boolean

remove_campaign_conversion

Detach a conversion rule from a campaign (stops conversion attribution for that campaign). Destructive to reporting and optimization. Requires confirm: true.
string
required
string
required
urn:lla:llaPartnerConversion:123.
boolean

Organic-social write tools (8): not available yet

These 8 tools are listed but not available yet. See Tools that are not available yet.
They follow the same guardrail: new posts default to DRAFT lifecycle (not publicly visible), and publishing public content (a published post, a comment, or a reaction), editing a post’s text and deleting a post or comment require confirm: true. Removing a reaction applies without confirmation.

Posts

create_organization_post

Publish an organic post authored by an organization (Company Page). Defaults to DRAFT lifecycle (not publicly visible); lifecycleState: "PUBLISHED" publishes public content under the brand and requires confirm: true.
string
required
string
required
Post text (supports #hashtags).
string
default:"PUBLIC"
PUBLIC | CONNECTIONS | LOGGED_IN.
string
default:"DRAFT"
DRAFT | PUBLISHED. PUBLISHED requires confirm: true.
boolean

create_member_post

Publish an organic post authored by the connected member (person). Defaults to DRAFT; PUBLISHED posts public content under the member’s name and requires confirm: true. The author is always the connected member.
string
required
Post text.
string
default:"PUBLIC"
PUBLIC | CONNECTIONS | LOGGED_IN.
string
default:"DRAFT"
DRAFT | PUBLISHED. PUBLISHED requires confirm: true.
boolean

update_post

Edit a post’s commentary or lifecycleState. Editing the text of a (possibly public) post, or publishing a DRAFT (lifecycleState: "PUBLISHED"), mutates public content and requires confirm: true. Setting only lifecycleState: "DRAFT" applies without confirmation.
string
required
urn:li:share:123 or urn:li:ugcPost:123.
string
string
DRAFT | PUBLISHED.
boolean

delete_post

Permanently delete a post. Irreversible removal of (possibly public) content. Requires confirm: true.
string
required
urn:li:share:123 or urn:li:ugcPost:123.
boolean

Comments & reactions

create_comment

Post a public comment on a post, as the organization (pass organizationId) or the connected member. Public content under the brand or member identity. Requires confirm: true.
string
required
The post/share/ugcPost URN to comment on.
string
required
The comment text.
string
Comment AS this organization; omit to comment as the connected member.
boolean

delete_comment

Delete a comment on a post (your own, or moderating others’ comments on your post), as the organization or the connected member. Destructive. Requires confirm: true.
string
required
The post/share/ugcPost URN the comment is on.
string
required
The comment id (numeric id or full comment URN).
string
Acting AS this organization; omit to act as the connected member.
boolean

create_reaction

React (LIKE / PRAISE / EMPATHY / INTEREST / APPRECIATION / ENTERTAINMENT) to a post, as the organization or the connected member. A public brand or member action. Requires confirm: true.
string
required
The post/share/ugcPost URN to react to.
string
default:"LIKE"
LIKE | PRAISE | EMPATHY | INTEREST | APPRECIATION | ENTERTAINMENT.
string
React AS this organization; omit to react as the connected member.
boolean

delete_reaction

Remove a reaction previously made (as the organization or the connected member) from a post. Low-stakes cleanup. Applies without confirm: true.
string
required
The post/share/ugcPost URN the reaction is on.
string
The reaction’s actor was this organization; omit for the connected member.
boolean

Code examples

Request bodies show the params of a tools/call. The tool name must carry the linkedin-ads__ prefix; a bare name returns Unknown tool..
Creating with the default status DRAFT (or PAUSED) is not a dry-run. create_campaign_group and create_campaign with a DRAFT status create the object immediately, including any budget you pass, and return the write result. Only status: "ACTIVE" or "ARCHIVED" on create returns a preview.
LinkedIn errors surface as isError: true with the text Tool invocation failed.. The upstream HTTP status is not exposed. When the access has expired or been revoked, the text instead ends in reconnect required: reconnect LinkedIn Ads in the portal, or call the connect_account tool on this endpoint to get a fresh connect link. See Errors & limits.