Google Search Console integration for Model Context Protocol (MCP)
Flux LinkedIn is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
LinkedIn intelligence: post analytics and research for public profiles and company pages.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http flux-linkedin-mcp https://www.fluxgraph.app/mcp
# 2 — ask your agent for something these tools do
# list_profiles, preview_profile, preview_posting_insights and 63 more
Flux LinkedIn costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http flux-linkedin-mcp https://www.fluxgraph.app/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
66 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List all tracked LinkedIn profiles for the authenticated user. Returns profile IDs needed by other tools.
No parameter schema on file.
Analyze a public LinkedIn profile or company page without a Flux account: pulls the latest ~50 posts (once per profile) and returns a preview id, post count and a one-line posting summary. Use preview_posting_insights with the preview_id for the full breakdown, and claim_preview after the person signs in to make it their own dashboard.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | Public LinkedIn profile or company URL, e.g. https://www.linkedin.com/in/janedoe |
Best day, hour, format and length for a previewed profile (from preview_profile). No account needed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| preview_id | string | yes | preview_id returned by preview_profile |
Make a profile from preview_profile your own Flux dashboard. Requires sign-in; creates your own_profile stream on the free plan pointing at the same posts. Refuses if you already track that profile.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| preview_id | string | yes | preview_id returned by preview_profile |
List a tracked profile's persisted posts with full metrics and text — query against the local post library, no LinkedIn pull, free. Use this when the caller already has a profile_id and wants to read its posts. Filter by date range, post type, minimum engagement, or text. Pass scope (a post_collections.id) to restrict to a specific collection (e.g. an external profile, topic stream, or hand-cura
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
| scope | string | no | Optional post_collections.id to filter posts to a specific collection |
| date_from | string | no | Start date (ISO 8601, e.g. 2025-01-01) |
| date_to | string | no | End date (ISO 8601) |
| post_type | string | no | Filter by post type |
| min_engagement | number | no | Minimum total engagement |
| search | string | no | Text search across post content (case-insensitive) |
| sort_by | string | no | Sort field |
| sort_dir | string | no | Sort direction |
| page | number | no | Page number (1-based) |
| page_size | number | no | Results per page (max 50) |
Get KPI summary for a tracked profile: total posts, average engagement (broken down by likes/comments/shares/conversation rate), posts per week, engagement trend, top format, and posting goal status.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
Get optimal posting patterns for a profile: best day of week, best hour, format performance breakdown, and character length sweet spot. Includes full metric breakdown (likes, comments, shares, conversation rate) for every bucket. All metrics relative to the user's own baseline. Pass scope (a post_collections.id) to recompute the patterns against a specific collection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
| scope | string | no | Optional post_collections.id to scope the analysis |
| date_from | string | no | Start date (ISO 8601) |
| date_to | string | no | End date (ISO 8601) |
Surface the most-frequent topics in a profile's posts, with engagement context. Returns top N unigrams and (optionally) top N bigrams ranked by post count, each with avg_engagement, vs_baseline, and a sample_post_url. Mirrors the dashboard topics chart, server-side. Pass scope (a post_collections.id) to scope the analysis to a collection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
| n | integer | no | Max terms per list (default 15) |
| bigrams | boolean | no | Also compute and return top bigrams (default true) |
| scope | string | no | Optional post_collections.id to scope the analysis |
| date_from | string | no | Start date (ISO 8601) |
| date_to | string | no | End date (ISO 8601) |
Get engagement time series for a profile with gap-filled buckets, rolling averages, and trend direction. Each bucket includes avg engagement, likes, comments, shares, and conversation rate. Useful for understanding whether engagement is growing or declining. Pass scope (a post_collections.id) to plot trends for a specific collection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
| scope | string | no | Optional post_collections.id to scope the time series |
| granularity | string | no | Time bucket granularity |
| date_from | string | no | Start date (ISO 8601) |
| date_to | string | no | End date (ISO 8601) |
| rolling_window | number | no | Rolling average window size in buckets (default: 4 for weekly, 7 for daily, 3 for monthly) |
Keyword + semantic search over persisted posts in the local library — full-text + pgvector cosine, no LinkedIn pull, free. Use this when the caller has a query string and wants ranked persisted-post results. Pass scope (a post_collections.id) to limit to a specific collection. For fresh LinkedIn keyword pulls, use linkedin_post_search instead (5 credits).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | yes | Tracked profile ID from list_profiles |
| query | string | yes | Search query (e.g. 'cybersecurity tips', 'leadership') |
| scope | string | no | Optional post_collections.id to restrict results to a collection |
| mode | string | no | Search mode: hybrid (keyword + semantic), keyword (FTS only), or semantic (embedding similarity only) |
| limit | number | no | Max results to return |
Return the authenticated user's current credit balance, this period's monthly allocation, and credits used since the period started. Free.
No parameter schema on file.
Return recent credit_ledger transactions for the authenticated user. Filter by tool name, reason, or date range. Paginated. Free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tool_name | string | no | Filter to a specific MCP tool |
| reason | string | no | Filter by ledger reason |
| date_from | string | no | Start date (ISO 8601) |
| date_to | string | no | End date (ISO 8601) |
| limit | number | no | Max rows to return |
Given an MCP tool name, return its credit cost so you can preview an action before running it. Also accepts a stream type (external_profile, company, topic, person_interests, hiring_signals, ad_watch) to preview the per-page cost create_stream / run_stream_now will charge. Returns { tool_name, cost, balance, sufficient, stream_cost? }. Tools not in the registry are assumed to cost 0. Free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tool_name | string | yes | MCP tool name (e.g. 'get_posts') or stream type (e.g. 'external_profile') |
| params | object | no | Reserved for future per-call estimation |
Create a new research stream (external profile, company, topic, person interests, hiring signals, or ad watch). Running the stream on its schedule costs credits (see get_cost_estimate for the per-type cost). own_profile streams are not created here — they come from subscription checkout.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | yes | Stream type |
| name | string | yes | User-facing label for this stream |
| source_url | string | no | LinkedIn URL for external_profile / company / person_interests streams |
| params | object | no | Type-specific config: topic uses {query, authorsIndustryId?, contentType?, postedLimit?, sortBy?}; hiring_signals/ad_watch use {company?, keywords?, ...} |
| schedule | string | no | Run schedule. Defaults to 'weekly'. 'monthly' runs every 30 days — the cheapest recurring cadence, and the usual choice for client profiles reported on monthly. |
| initial_max_pages | integer | no | Opt-in deep first-run for external_profile, company and person_interests streams (1-5, default 1). A budget, not a price — you are billed for pages actually walked. A page is ~50 posts for profile/com |
| history_days | integer | no | How far back the first run should reach, in days. Bounds the walk by TIME where initial_max_pages bounds it by COST — the run stops at whichever limit it hits first, so pair a window with enough pages |
List all research streams for the authenticated user (external profiles, companies, topics, person interests, hiring signals, ad watches, and own_profile). Pass type to filter. Replaces list_profiles for the streams-first world, but list_profiles continues to work for V1-compatible callers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | no | Filter by stream type |
| include_inactive | boolean | no | Include paused streams (active = false) |
Return the most recent posts a stream has collected into the library, newest first by published_at. Use this to browse what a topic / external profile / person_interests / company stream has surfaced on its schedule.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stream_id | string | yes | Stream ID from list_streams |
| limit | number | no | Max posts to return |
Pause a stream so it stops running on its cron schedule. Existing posts remain in the library. Use resume_stream to re-enable it. own_profile streams are billing-managed and cannot be paused here.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stream_id | string | yes | Stream ID from list_streams |
Resume a paused stream. Sets active=true and queues it to run on the next cron tick by clearing next_run_at. own_profile streams are billing-managed and cannot be resumed here.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stream_id | string | yes | Stream ID from list_streams |
Delete a stream and its stream_runs. Posts collected by the stream stay in your library (stream_id is set to NULL via ON DELETE SET NULL) so historical data isn't lost. Auto-collection is deleted with the stream. own_profile streams cannot be deleted through this tool; the own profile is managed from Settings and billing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stream_id | string | yes | Stream ID from list_streams |
Trigger an immediate run of an active stream, bypassing its schedule. The run is fire-and-forget — the response confirms the dispatch but post collection happens asynchronously. Credits are charged for pages actually walked, not pages requested: one page is taken upfront and the rest settled when the run finishes, so a run that stops early (or fails) costs less than max_pages implies. Paused strea
| Parameter | Type | Required | Notes |
|---|---|---|---|
| stream_id | string | yes | Stream ID from list_streams |
| max_pages | integer | no | Upper bound on pages for this run (1-5, default 1) — a budget, not a price. Honoured for external_profile, company and person_interests. You are billed only for pages actually walked; a person_interes |
| resume | boolean | no | Continue a person_interests backfill from where the deepest previous run stopped, instead of re-walking the newest pages. Use this for 'pull more history' — without it you re-fetch and re-pay for cont |
| history_days | integer | no | How far back this run should reach, in days. Bounds the walk by TIME where max_pages bounds it by COST — it stops at whichever limit it hits first, so pair a deep window with enough pages to reach it. |
Fetch a LinkedIn person profile (headline, current role, work history, education, location). Costs 5 credits per call. Results are upserted into people (structured fields) and linkedin_profiles (so profile-brief renders) — same enrichment side-effect as the other linkedin_profile_* tools.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | LinkedIn profile URL (e.g. https://www.linkedin.com/in/username) |
| refresh | boolean | no | Bypass the cache and fetch a fresh copy from LinkedIn (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Fetch recent posts from a LinkedIn person profile. 5 credits per page of 50, up to 250 posts, charged only for pages actually fetched. Results are stored in the post library (source_type='external') and linked to a linkedin_profiles row so profile-brief can render research-only prospects.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | LinkedIn profile URL (e.g. https://www.linkedin.com/in/username) |
| max_posts | number | no | Maximum posts to return (1-250). 5 credits per page of 50, charged only for pages actually fetched. |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (5 credits per page of 50, charged only for pages actually fetched). Default false: a previously-fetched result is returned free, with how long ago it was r |
Fetch recent posts from a LinkedIn company page. 5 credits per page of 50, up to 250 posts, charged only for pages actually fetched. Results are stored in the post library (source_type='external') and linked to a linkedin_profiles row (profile_type='company').
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | LinkedIn company URL (e.g. https://www.linkedin.com/company/acme) |
| max_posts | number | no | Maximum posts to return (1-250). 5 credits per page of 50, charged only for pages actually fetched. |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (5 credits per page of 50, charged only for pages actually fetched). Default false: a previously-fetched result is returned free, with how long ago it was r |
Search LinkedIn posts by keyword. Costs 5 credits per call. Returns a single page of matching posts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Search query / keywords |
| filters | object | no | Optional filters |
| refresh | boolean | no | Bypass the cache and re-run the search live (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Fetch the recent posts a LinkedIn person has reacted to. Useful for inferring interests. Costs 5 credits per call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | LinkedIn profile URL of the person whose reactions you want |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Fetch the recent posts a LinkedIn person has commented on. Useful for inferring interests and conversation partners. Costs 5 credits per call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linkedin_url | string | yes | LinkedIn profile URL of the person whose comments you want |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Search LinkedIn job postings. Useful for tracking hiring signals at target companies. Costs 5 credits per call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keywords | string | yes | Job title keywords (e.g. 'staff engineer python') |
| companyId | string | no | Restrict to a LinkedIn company ID (numeric, e.g. '1441'). Not a name or slug — resolve one first with linkedin_company_search, which returns each company's id. |
| location | string | no | Location filter (e.g. 'San Francisco, CA') |
| sortBy | string | no | Sort order. 'date' is the useful one for hiring signal. Default: relevance. |
| postedLimit | string | no | Only jobs posted within this window. |
| refresh | boolean | no | Bypass the cache and re-run the search live (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Search the LinkedIn ad library. Useful for tracking competitor ad creative and messaging. Costs 10 credits per call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company | string | no | Company name or LinkedIn slug to filter ads |
| keywords | string | no | Keyword filter applied to ad creative |
| refresh | boolean | no | Bypass the cache and re-run the search live (costs 10 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Search LinkedIn people. Filter by company, title, location, or free-text keywords. Costs 5 credits per call. Returns a single page of matching profiles.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keywords | string | no | Free-text search (e.g. 'data engineer fintech') |
| company | string | no | Current company name or LinkedIn slug |
| title | string | no | Current title filter (e.g. 'Director') |
| location | string | no | Location filter (e.g. 'New York') |
| refresh | boolean | no | Bypass the cache and re-run the search live (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Search LinkedIn companies. Filter by keywords, industryId, or location. Costs 5 credits per call. Returns a single page of matching companies.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keywords | string | no | Free-text search (e.g. 'b2b saas analytics') |
| industryId | string | no | LinkedIn industry ID (numeric, comma-separated for several). Not an industry name — IDs are LinkedIn's industry codes (V2), listed at https://learn.microsoft.com/en-us/linkedin/shared/references/refer |
| location | string | no | Location filter (e.g. 'San Francisco Bay Area') |
| refresh | boolean | no | Bypass the cache and re-run the search live (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Fetch the people who reacted to a single LinkedIn post. Costs 5 credits per call. Engagers (with reaction kind) are persisted to the post_engagements graph so subsequent queries about who-engages-with-whom are SQL, not API calls.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_url | string | yes | Public LinkedIn post URL (e.g. https://www.linkedin.com/feed/update/urn:li:activity:1234) |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Fetch the people who commented on a single LinkedIn post (and their comment text). Costs 5 credits per call. Each comment is persisted to post_engagements with the commenter and full comment text.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_url | string | yes | Public LinkedIn post URL (e.g. https://www.linkedin.com/feed/update/urn:li:activity:1234) |
| refresh | boolean | no | Bypass the cache and re-fetch from LinkedIn (costs 5 credits). Default false: a previously-fetched result is returned free, with how long ago it was retrieved. |
Find persisted posts whose embeddings are nearest to a free-text query — pgvector cosine over the local post library, no LinkedIn pull, free. Use when you have a *block of text* (a draft, a paragraph, a competitor's post) and want similar posts you've already collected. For keyword search prefer search_posts; for fresh LinkedIn keyword pulls use linkedin_post_search. Pass profile_id to scope
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | yes | Text to find similar posts for |
| profile_id | string | no | Optional tracked profile ID from list_profiles (scopes search to this profile's posts) |
| collection_id | string | no | Optional post_collections.id (scopes search to this collection's members) |
| limit | number | no | Max results to return (1-50, default 5) |
Predict how a draft post will perform against the user's historical data. Uses an OLS regression model with detrending, ridge regularization, and recency weighting — the same model used on the /score page. Returns a predicted engagement percentile, projected engagement range, factor breakdown, similar past posts, and improvement suggestions. Free. Pass profile_id to scope to a tracked profile, `
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | yes | Draft post text |
| format | string | no | Post format: text, image, video, document, article, or poll |
| day_of_week | number | yes | Planned day of week (0=Sunday, 6=Saturday, UTC) |
| hour | number | yes | Planned hour (0-23, UTC) |
| profile_id | string | no | Optional tracked profile ID (scopes the model to this profile's posts) |
| collection_id | string | no | Optional post_collections.id (scopes the model to this collection) |
Given a topic, suggest distinct content angles informed by what performs well in the user's scoped data. Pulls top-performing historical posts as context and calls OpenAI to generate 5 concrete angles. Costs 5 credits per call. Pass profile_id to scope to a tracked profile, collection_id to scope to a collection, or neither to use the user's full library.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | yes | Topic or theme to generate angles for (e.g. 'onboarding new hires', 'pricing strategy') |
| profile_id | string | no | Optional tracked profile ID (scopes to this profile's posts) |
| collection_id | string | no | Optional post_collections.id (scopes to this collection's members) |
List all audience segments for the authenticated user, with member counts. Audience segments are named groups of people (e.g. 'ICP — VPs of Marketing', 'Champions'). Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | no | Optional filter by segment type ('manual', 'smart', or 'auto_stream') |
Create a new audience segment (named group of people) for the authenticated user. Set type='manual' for a hand-curated list (use add_to_segment to populate it), type='smart' with a config predicate (e.g. {title_contains:'VP'}) to define a dynamic segment resolved on-demand by resolve_segment, or pass template to pre-fill config from a built-in template (type defaults to 'smart'). Free — cost
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | User-facing segment name. Optional when template is supplied — the template's default name is used. |
| description | string | no | Optional longer description |
| type | string | no | Segment type. 'manual' = hand-curated person list. 'smart' = dynamic predicate (requires config). 'auto_stream' = system-managed from a stream. Defaults to 'smart' when template is provided. |
| template | string | no | Optional pre-built template id. Available: 'vp_plus' (VP+ decision-makers), 'c_suite' (C-suite executives), 'heads_of' ('Head of' leaders), 'founders' (Founders & co-founders), 'fintech_leaders' (Fint |
| config | object | no | Predicate object for smart segments. Supported keys: title_contains, company_contains, company_industry, engaged_with_topics. Required when type='smart' and no template is supplied. |
| source_stream_id | string | no | Optional stream that produced this segment (for traceability) |
Add one or more people (by person_id) to an audience segment. Existing members are silently ignored. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| segment_id | string | yes | Target segment id from list_segments |
| person_ids | array | yes | person_ids to add (1-1000 per call) |
Remove one or more people (by person_id) from an audience segment. Missing members are silently ignored. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| segment_id | string | yes | Target segment id from list_segments |
| person_ids | array | yes | person_ids to remove (1-1000 per call) |
Resolve an audience segment into a concrete list of person_ids. For manual / auto_stream segments, returns stored members. For smart segments, evaluates the segment's config predicate against the people table and returns matches. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| segment_id | string | yes | Segment id (from list_segments / create_segment) |
| limit | integer | no | Max person_ids to return (default 1000) |
List available smart-segment templates. Pass a template id to create_segment to pre-fill its config predicate without crafting one from scratch. Free — costs 0 credits.
No parameter schema on file.
Return recent alerts for the authenticated user's streams. An alert is emitted whenever a scheduled stream run surfaces new items. Pass unread_only=true to skip alerts the user has already marked read. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| unread_only | boolean | no | Return only alerts that have not been marked read |
| limit | integer | no | Max alerts to return (default 50) |
Create a new post collection for the authenticated user. Set type='manual' to hand-curate posts with add_to_collection, or type='smart' with a config predicate (e.g. {format:'video',min_likes:50}) to define a dynamic collection resolved on-demand by resolve_collection. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | User-facing collection name |
| description | string | no | Optional longer description |
| type | string | yes | 'manual' = hand-curated post list. 'smart' = dynamic predicate (requires config). |
| config | object | no | Predicate for smart collections. Supported keys: format, min_likes, min_comments, date_after, date_before, topic_contains, author_profile_id, profile_ids (array — posts whose profile_id is in the set; |
Pin one or more posts (by post_id) into a collection you own — works on any collection type. On a 'manual' collection this is the only membership mechanism; on a 'smart' collection it adds the posts as extras alongside whatever the rule already matches (resolve_collection returns the union). Existing members are silently ignored. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_id | string | yes | Target collection id from list_collections |
| post_ids | array | yes | post_ids to add (1-1000 per call) |
Remove one or more posts (by post_id) from a collection. Missing members are silently ignored. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_id | string | yes | Target collection id from list_collections |
| post_ids | array | yes | post_ids to remove (1-1000 per call) |
List all post collections for the authenticated user, with member counts. Includes manual collections, smart collections (predicate-based), and auto_stream collections (system-managed). Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | no | Optional filter by collection type |
Resolve a post collection into a concrete list of post_ids. For manual / auto_stream collections, returns stored members. For smart collections, evaluates the collection's config predicate against the user's posts and returns matches. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_id | string | yes | Collection id (from list_collections / create_collection) |
| limit | integer | no | Max post_ids to return (default 1000) |
Create a Constellation outreach campaign. A campaign groups target accounts, the people you care about at those accounts, and the warm connections you could approach to reach them. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | User-facing campaign name |
| description | string | no | Optional longer description |
Add one or more target companies to a Constellation campaign. Each account is a company you want to reach; map_constellation is then run per-account. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_id | string | yes | Target campaign id |
| accounts | array | yes | Array of companies to add (1-500 per call) |
Map the professional graph around a target company. Finds senior decision-makers at the account, pulls each target's recent posts/reactions/comments to identify engagers, then scores every connection and produces a prioritized outreach queue. Credit cost scales with targets — bounded by max_targets. Max spend per call is ~175 credits; actual cost is reported in the response.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_account_id | string | yes | campaign_accounts.id — the company to map |
| title_keywords | array | no | Title keywords to filter targets. Default: ['VP','Director','Head of','Chief'] |
| max_targets | integer | no | Max targets to deep-map per account (1-20, default 5). Each target adds ~3 credits. |
Re-score all constellation entries in a campaign and rewrite queue positions from highest to lowest composite score. Use after new engagers or targets are added. Free — costs 0 credits. Note: this tool requires a campaign_id because it writes back to the constellation_entries table. Segment- and url-list-scoped scoring is not yet supported — use get_outreach_queue({segment_id}) or `get_outr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_id | string | yes | Campaign id to re-score |
Return a prioritized outreach queue. Provide *exactly one* of three scopes: • campaign_id — full Constellation queue with composite_score, pool, recommended_action, and prior outreach_log entries (the original campaign-scoped behavior). • segment_id — people in a saved audience segment, ranked by their engagement count against your tracked profiles' posts. No composite_score. • linkedin_urls
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_id | string | no | Campaign id (full Constellation scoring) |
| segment_id | string | no | Audience segment id (engagement-count scoring) |
| linkedin_urls | array | no | Ad-hoc LinkedIn URL list (engagement-count scoring); max 200 |
| limit | integer | no | Max entries to return (1-200, default 50) |
| pool | string | no | Optional filter: only return entries in this pool. Only meaningful for campaign_id scope; ignored for segment / urls. |
For one person, return their recent posts most relevant to what you post about — plus suggested talking points. Use before a warm comment or DM. Free — costs 0 credits. Identify the person via *exactly one* of: target_id (a Constellation target — original input), person_id (a row in people), or linkedin_url (any form). The non-campaign forms work even when no Constellation campaign exists
| Parameter | Type | Required | Notes |
|---|---|---|---|
| target_id | string | no | Constellation targets.id — for the original campaign-scoped flow |
| person_id | string | no | people.id — when you already have the canonical person row |
| linkedin_url | string | no | LinkedIn profile URL (vanity or encoded form) — auto-resolved to a people row |
Append an entry to the outreach log for a Constellation campaign. Use to record connection requests, acceptances, replies, or no-responses so get_campaign_stats can compute acceptance / reply rates over time. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_id | string | yes | Campaign id |
| person_id | string | yes | people.id — the person you outreached to |
| action | string | yes | Outreach event: sent_request | accepted | replied | no_response |
| note | string | no | Optional free-text note |
Summary stats for a Constellation campaign: target count, entry count, outreach volume, and acceptance / reply rates broken down by pool (coworker / engager / mutual) and composite-score tier. Free — costs 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| campaign_id | string | yes | Campaign id |
Save a LinkedIn post to your library by its URL. Resolves the post and stores it with source_type='saved'. Optionally pins the post into any collection you own (manual or smart — pinning into a smart collection adds it as an extra alongside the rule's matches). Costs 1 credit per call. Failed lookups don't charge.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | Public LinkedIn post URL. Accepts linkedin.com/posts/... permalinks and linkedin.com/feed/update/urn:li:activity:... feed URLs. |
| collection_id | string | no | Optional collection UUID to pin the post into. Must be a collection you own — any type. |
Given a LinkedIn post URL or id, return the companies whose people engaged (reacted/commented), ranked by engager count. Joins through person_positions(is_current=true). Pure DB read — no LinkedIn pull, no credits charged. Engagers without a known current company are bucketed as _unknown_company. Optional industry_urn filter narrows to one industry.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_url | string | no | Public LinkedIn post URL (e.g. https://www.linkedin.com/feed/update/urn:li:activity:1234) |
| post_id | string | no | posts.id UUID (use when you already know the local id) |
| industry_urn | string | no | Optional urn:li:fsd_industry:<id> filter (from companies.industry_urn) |
| limit | integer | no | Max companies to return (1-100, default 20) |
| top_engagers_per_company | integer | no | How many sample engager names to attach per company row (0-10, default 3) |
Histogram of engagers' companies grouped by industry. Pivots on companies.industry_hierarchy (e.g. 'Tech > Software Development'). Depth=1 buckets by top-level, =2 by top+mid, =3 by full hierarchy. Engagers with no current company / no industry hierarchy bucket as _unknown. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| post_url | string | no | Public LinkedIn post URL |
| post_id | string | no | posts.id UUID |
| depth | integer | no | 1=top-level industry, 2=mid, 3=leaf (full hierarchy) |
| sample_companies_per_bucket | integer | no | How many sample company names to attach per industry row (0-10, default 3) |
Given a company URL or id, return engagers (across your collected posts) who have a position at that company. Relation filter: 'coworker' = current employees, 'alumni' = any past or current position (most useful for page_type='SCHOOL' companies), 'any' = both. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_url | string | no | Public LinkedIn company URL |
| company_id | string | no | companies.id UUID |
| relation | string | no | coworker = current employees only; alumni = any position (past or current); any = both |
| limit | integer | no | Max engagers to return (1-100, default 20) |
Return a person's full employment timeline from the position graph. Person must have engaged on at least one of your collected posts (engagement gate). Sorted current-first, then most-recent past by started_at desc. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | string | no | people.id UUID |
| linkedin_url | string | no | Person's LinkedIn profile URL |
For a target person, summarize all engagement evidence between them and your collected posts: posts they reacted to, posts they commented on, frequency, recency, reaction kinds, comment text snippets. Computes a v0 warmth score from engagement count, comment signal, and recency. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | string | no | people.id UUID |
| linkedin_url | string | no | Target's LinkedIn profile URL |
| days_back | integer | no | How far back to look at engagements (default 90) |
Returns the schema, FK edges, and 5 canonical SQL examples needed to write your own SELECT against the engagement graph via traverse_graph. Also returns YOUR resolvable identities (caller_user_ids, caller_tracked_lp_ids) — substitute these into example SQL when you write your query. Pure DB read — 0 credits. Free.
No parameter schema on file.
Executes a TS-validated SELECT-only SQL query against the engagement graph and returns rows. CALL traverse_graph_help FIRST to get schema + caller_user_ids + canonical examples. Required: SQL must start with SELECT or WITH, contain no DML/DDL keywords, and reference one of your caller_user_ids or caller_tracked_lp_ids verbatim. Cap: 1000 rows, 5s statement timeout. Pure DB read — 0 credits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sql | string | yes | The SELECT/WITH SQL to execute |
Given two companies, return engagers across your collected posts who engaged with BOTH companies' posts. Cross-account intelligence — finds people interested in multiple targets simultaneously. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_a_id | string | no | Company A — companies.id UUID |
| company_a_url | string | no | Company A — LinkedIn URL |
| company_b_id | string | no | Company B — companies.id UUID |
| company_b_url | string | no | Company B — LinkedIn URL |
| limit | integer | no | Max overlapping engagers to return (1-100, default 20) |
Given a target person, find the shortest warm-intro path through your engager network. Walks coworker (shared current company) + alumni (shared past company / school) edges. Up to 3 hops. Pure DB read — no LinkedIn pull, no credits charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| target_person_id | string | no | Target — people.id UUID |
| target_linkedin_url | string | no | Target — LinkedIn URL |
| max_hops | integer | no | Max path length (1=direct, 2=one intermediate, 3=two intermediates). Default 2. |
| limit | integer | no | Max paths to return (default 10) |
Return the consolidated, deduped people who reacted to or commented on a SET of posts — one tracked profile's posts (profile_id) or a post collection (collection_id). Fetches only posts not synced within freshness_days, and enriches (title/company via a profile lookup) only never-seen people, up to max_enrich. Costs 2 credits per post synced + 3 per person enriched; cached posts are free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profile_id | string | no | Tracked profile id — engagers across this profile's stored posts |
| collection_id | string | no | post_collections.id — engagers across this collection's posts |
| max_posts | integer | no | Max posts to sync this call (1-100) |
| max_enrich | integer | no | Max never-seen engagers to enrich via /linkedin/profile (0-100, default 0) |
| freshness_days | integer | no | Skip posts whose engagers were synced within this many days |
| force | boolean | no | Re-sync posts even if within the freshness window |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Flux LinkedIn or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_profiles | no tags | |
| preview_profile | no tags | |
| preview_posting_insights | no tags | |
| claim_preview | no tags | |
| get_posts | no tags | |
| get_profile_summary | no tags | |
| get_posting_insights | no tags | |
| get_topic_insights | no tags | |
| get_engagement_trends | no tags | |
| search_posts | no tags | |
| get_credit_balance | no tags | |
| get_usage_history | no tags | |
| get_cost_estimate | no tags | |
| create_stream | no tags | |
| list_streams | no tags | |
| get_stream_feed | untrusted-input | untrusted-input: keyword "browse" |
| pause_stream | no tags | |
| resume_stream | no tags | |
| delete_stream | no tags | |
| run_stream_now | no tags | |
| linkedin_profile_info | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_profile_posts | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_company_posts | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_post_search | no tags | |
| linkedin_profile_reactions | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_profile_comments | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_job_search | no tags | |
| linkedin_ad_search | no tags | |
| linkedin_people_search | no tags | |
| linkedin_company_search | no tags | |
| linkedin_post_reactions | untrusted-input | untrusted-input: keyword "fetch" |
| linkedin_post_comments | untrusted-input | untrusted-input: keyword "fetch" |
| find_similar_posts | no tags | |
| score_draft | no tags | |
| suggest_angles | no tags | |
| list_segments | no tags | |
| create_segment | no tags | |
| add_to_segment | no tags | |
| remove_from_segment | no tags | |
| resolve_segment | no tags | |
| list_segment_templates | no tags | |
| get_alerts | no tags | |
| create_collection | no tags | |
| add_to_collection | no tags | |
| remove_from_collection | no tags | |
| list_collections | no tags | |
| resolve_collection | no tags | |
| create_campaign | no tags | |
| add_campaign_accounts | no tags | |
| map_constellation | no tags | |
| score_connections | no tags | |
| get_outreach_queue | no tags | |
| get_engagement_brief | no tags | |
| log_outcome | no tags | |
| get_campaign_stats | no tags | |
| save_post | no tags | |
| get_post_engagers_by_company | no tags | |
| get_engagement_industry_breakdown | no tags | |
| get_alumni_engagers | no tags | |
| get_engager_position_history | no tags | |
| get_target_warmth_brief | no tags | |
| traverse_graph_help | no tags | |
| traverse_graph | sensitive-source | sensitive-source: keyword "sql_query", parameter "sql" |
| get_company_engagement_overlap | no tags | |
| get_outreach_path | no tags | |
| get_post_set_engagers | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Flux LinkedIn can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.