Connect the server
Add this hosted endpoint to a remote MCP-capable client:Choose the right tool
Shared inputs and safety defaults
validate_only=true checks the request shape and supported rules, but it cannot prove that LinkedIn will accept a later write. Permissions, lifecycle rules, account warnings, budgets, dates, Page access, and platform-side validation are still checked when the real request runs.
Authentication and account access
authenticate_linkedin_ads
Starts LinkedIn OAuth and returns an authorization URL.
Connect my LinkedIn Ads account using the default profile. Return the authorization link and, after I complete LinkedIn approval, verify the connection. Do not create or change any ads.
verify_linkedin_ads_connection
Checks the saved member token, Advertising API account access, and token-expiry state without changing LinkedIn Ads.
list_linkedin_ad_accounts
Lists accessible ad accounts and returns the connection state, account ID, name, status, currency when available, the authenticated member’s role, and whether the connection can write.
List the LinkedIn Ads accounts available to my default profile. Refresh access from LinkedIn and include each account name, account ID, status, currency, my role, and whether the connection can write. Do not change anything.
Read account and campaign structure
list_linkedin_ads_entities
Use this for a focused account or hierarchy read.
For LinkedIn Ads account ACCOUNT_ID, list campaign groups, then list the ad sets in each group and the creatives in each ad set. Include names, IDs, statuses, parent IDs, schedules, budgets, and ad formats where returned. Read only.
get_linkedin_ads_hierarchy
Returns the account, campaign groups, ad sets, and creatives as one tree. Use it for orientation or reconciliation; use the focused entity tool when you need one object or a paged list.
Discover targeting and estimate audience size
discover_linkedin_targeting
This tool turns marketer-friendly audience ideas into valid LinkedIn targeting values before campaign creation.
locations, companies or employers, industries, job_titles, job_functions, seniorities, skills, company_sizes, schools, groups, and languages.
build_criteria only converts a friendly map into targeting criteria; it does not validate entities with LinkedIn. audience_count validates every included and excluded facet and URN before requesting an estimate. Audience size is a delivery guardrail, not a quality score or reach forecast. LinkedIn requires a minimum eligible audience, while actual reach can be lower.
The tool uses 2 credits after a successful action.
Resolve valid LinkedIn targeting entities for the United States, the software industry, marketing and demand-generation functions, and director-or-higher seniorities. Show every match and URN, build the inclusion criteria, estimate audience size, and explain any ambiguous matches. Do not create or update a campaign.
languages or interfaceLocales. An explicit interface locale must contain exactly one value and match the normalized ad-set locale. Use locations or profileLocations for geography.
Run LinkedIn Ads reports
get_linkedin_ads_report
Runs performance or professional-demographic reporting across the account, campaign-group, ad-set, or creative level.
impressions, clicks, landingPageClicks, costInLocalCurrency, externalWebsiteConversions, likes, shares, and totalEngagements, plus dateRange and pivotValues for interpretation.
Common pivots include ACCOUNT, CAMPAIGN_GROUP, CAMPAIGN, CREATIVE, OBJECTIVE_TYPE, SERVING_LOCATION, IMPRESSION_DEVICE_TYPE, and professional-demographic pivots such as MEMBER_COMPANY, MEMBER_INDUSTRY, MEMBER_JOB_TITLE, MEMBER_JOB_FUNCTION, MEMBER_SENIORITY, MEMBER_COUNTRY_V2, and MEMBER_REGION_V2.
The report uses 5 credits after a successful call. LinkedIn Ad Analytics does not provide pagination for this workflow. The export and inline limits cap the rows HireOtto returns; they do not create additional rows when LinkedIn returns less data.
For LinkedIn Ads account ACCOUNT_ID, compare ad-set performance for the previous 30 complete days with the preceding 30 complete days. Include impressions, clicks, landing-page clicks, spend, website conversions, likes, shares, and total engagements. Keep raw values beside calculated CTR, cost per landing-page click, and CPA. Flag small samples and return both an inline decision summary and CSV. Read only.
MEMBER_* pivots; reduce the metric set or run one demographic pivot at a time when LinkedIn rejects a combination.
For LinkedIn Ads account ACCOUNT_ID and ad set AD_SET_ID, break down eligible performance by member seniority for the previous 90 complete days. Include impressions, clicks, and spend only if compatible. Explain privacy suppression, reporting delay, and insufficient-data cases. Do not infer individual identities and do not change targeting.
Manage image assets
upload_linkedin_image
Opens an interactive file picker in an MCP Apps-capable client and uploads a JPG, PNG, or GIF to LinkedIn. It returns a reusable urn:li:image:... value.
Upload the attached LinkedIn ad image to account ACCOUNT_ID, register it in the Media Library, and name it ASSET_NAME. Use the account's advertiser identity automatically. Return the image URN and processing status. Do not create a creative or campaign.
upload_linkedin_image_bytes
Uploads image bytes without opening a UI. Use it only when the client can read, encode, and pass the original file programmatically.
list_linkedin_image_assets and get_linkedin_image_asset
Use listing when the user refers to a recent upload or when an upload result is no longer in context.
update_linkedin_image_asset
Sets media_library_status to ARCHIVED or ACTIVE. Archiving removes the item from the default active listing but does not permanently delete the binary, delete creatives, or pause ads. Only Media Library-registered images are manageable through this tool.
Create campaign entities
create_linkedin_ads_entities
Creates one campaign group, ad set, or creative.
Campaign-group fields
name is required. Common fields include status, start, end, daily or total budget, currency_code, objective_type, budget-optimization strategy, and bid strategy. New workflows should normally use DRAFT until review is complete.
Ad-set fields
An ad set requires a parent campaign group,name, targeting, and a budget. Common fields include campaign type, ad format, objective, cost type, bid strategy, optimization goal, daily or total budget, currency, bid amount, dates, locale, audience expansion, offsite delivery, pacing, and political intent.
Important constraints:
- Choose the ad format carefully. LinkedIn fixes formats such as standard update, single video, and carousel when the ad set is created; use a new ad set to change format.
- Sponsored Content, Dynamic Ads, and Lead Gen require an associated advertiser entity. HireOtto normally resolves it from the account.
- Dynamic Ads require both daily and total budgets plus an ad format.
- A total-budget-only ad set requires an end date.
- Connected TV requires offsite delivery.
- Lead Generation cannot enable offsite delivery.
- Use targeting discovery before creation so every included and excluded value is a valid LinkedIn URN.
Creative fields
The supported first-class path is a normal single-image Direct Sponsored Content ad. Supply an availableimage_urn plus commentary; optionally add headline, landing_page, cta_label, image_alt_text, internal name, and intended_status.
When a landing page is present, the CTA defaults to LEARN_MORE. Creation should normally use DRAFT. HireOtto builds the advertiser and Direct Sponsored Content context, so do not manually construct advanced inline content for a standard single-image ad.
Validate one draft LinkedIn single-image ad for account ACCOUNT_ID and ad set AD_SET_ID using image IMAGE_URN, primary text PRIMARY_TEXT, headline HEADLINE, landing page LANDING_PAGE, call to action LEARN_MORE, and alt text ALT_TEXT. Confirm the image is available and return the exact payload and review checklist. Validate only; create nothing.
validate_only=true still performs read-only targeting-URN validation for ad sets and availability checks for first-class image creatives. It does not reserve IDs or guarantee that a later write will pass LinkedIn’s permission and lifecycle checks.
create_linkedin_campaign
Creates or reuses a campaign group, then creates an ad set and optional creatives in order.
partial_result, and resume from the failed step with the single-entity tool. Do not rerun the entire hierarchy blindly.
Validate a new LinkedIn campaign hierarchy for account ACCOUNT_ID using the approved objective, campaign-group settings, ad-set budget and dates, resolved targeting URNs, landing page, image, copy, call to action, and alt text below. Create nothing. Return the normalized configuration, every warning, and a preflight checklist covering account, Page, audience size, budget, schedule, destination, creative, and tracking.
Update campaign entities
update_linkedin_ads_entities
Updates campaign groups, ad sets, or creatives; applies batch updates; updates a full campaign; adds targeting exclusions safely; or deletes eligible draft ad sets and creatives.
update_campaign_groupupdate_ad_setadd_targeting_exclusionsupdate_creativebatch_update_ad_setsbatch_update_creativesupdate_full_campaigndelete_draft_ad_setdelete_draft_creative
add_targeting_exclusions when only adding exclusions. A partial friendly include or exclude map sent through update_ad_set can replace the existing targeting configuration. For any broader targeting edit, read the full current targeting, resolve every new entity, estimate the revised audience, and review the complete diff before writing.
For LinkedIn Ads account ACCOUNT_ID and ad set AD_SET_ID, read the full current targeting. Resolve the exact LinkedIn company entities in EXCLUSION_LIST, estimate the revised audience, and show a diff that preserves every existing inclusion and exclusion. Validate an additive exclusion update only. Do not write until I approve the exact company URNs and revised audience.
Check plan and credits
get_billing_status
Returns the current HireOtto plan, billing or trial period, included and used credits, remaining credits when limited, and feature entitlements. It is read-only and does not consume credits.
The current plan model is:
- Free trial: 200 credits or 14 days, whichever comes first
- Starter: 2,000 credits per month
- Pro: 5,000 credits per month
- Agency: unlimited credits, two included seats, and multiple connected profiles
Credit costs
Common failures and recovery
Current boundaries
- Campaign Manager remains the final place to preview rendering, Page identity, billing, review status, and account warnings.
- HireOtto does not currently create LinkedIn Lead Gen Forms.
- The image-upload workflow does not imply support for video or document-ad uploads.
- Creating a creative does not install or validate the LinkedIn Insight Tag, Google Tag Manager, or the destination page.
- Reporting and demographic data can be delayed, incomplete, or privacy-suppressed.
validate_onlyreduces avoidable payload errors but does not guarantee a later write.- Create and update workflows are not substitutes for practitioner approval of objective, budget, targeting, copy, destination, measurement, or activation.
Recommended operating sequence
- Connect the server and authorize LinkedIn.
- List accounts with
refresh=true; confirm account ID, currency, role, andcan_write. - Read the hierarchy and preserve exact parent and child IDs.
- Run the smallest report or targeting request that answers the current question.
- Resolve targeting URNs and estimate audience size before campaign creation or targeting updates.
- Reuse or upload an image and confirm that LinkedIn reports it as available.
- Validate the complete proposed configuration.
- Create new objects as drafts and keep every returned ID.
- Read the live objects back and preview the creative in Campaign Manager.
- Verify tracking and activate only after named human approval.