Skip to content

Flux LinkedIn MCP

app.fluxgraph/linkedinfluxgraph.appstreamable-httpv1.0.0Scanned

LinkedIn intelligence: post analytics and research for public profiles and company pages.

66 tools: 3 can delete or cancel things, 22 change things and 41 only read.

Tools: 3 delete, 0 irreversible, 22 write, 41 read.
  • Reads private data · 2
  • Reads text others write · 17
  • Can send data out · 6
  • No findings

Anlyon alternative

25 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

66 tools

Deletes or cancels 3Claude Code: deny
  • delete_streamDelete a stream and its stream_runs.No findings

    Why it is in this group

    • The name "delete_stream" says "delete": a word for removing or ending something.
    Description, as the server wrote it
    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.
  • remove_from_collectionRemove one or more posts (by post_id) from a collection.No findings

    Why it is in this group

    • The name "remove_from_collection" says "remove": a word for removing or ending something.
    Description, as the server wrote it
    Remove one or more posts (by post_id) from a collection. Missing members are silently ignored. Free — costs 0 credits.
  • remove_from_segmentRemove one or more people (by person_id) from an audience segment.No findings

    Why it is in this group

    • The name "remove_from_segment" says "remove": a word for removing or ending something.
    Description, as the server wrote it
    Remove one or more people (by person_id) from an audience segment. Missing members are silently ignored. Free — costs 0 credits.
Changes things 22Claude Code: ask
  • add_campaign_accountsAdd one or more target companies to a Constellation campaign.No findings

    Why it is in this group

    • The name "add_campaign_accounts" says "add": a word for a change.
    Description, as the server wrote it
    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.
  • add_to_collectionPin one or more posts (by post_id) into a collection you own — works on any collection type.No findings

    Why it is in this group

    • The name "add_to_collection" says "add": a word for a change.
    Description, as the server wrote it
    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.
  • add_to_segmentAdd one or more people (by person_id) to an audience segment.No findings

    Why it is in this group

    • The name "add_to_segment" says "add": a word for a change.
    Description, as the server wrote it
    Add one or more people (by person_id) to an audience segment. Existing members are silently ignored. Free — costs 0 credits.
  • create_campaignCreate a Constellation outreach campaign.No findings

    Why it is in this group

    • The name "create_campaign" says "create": a word for a change.
    Description, as the server wrote it
    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.
  • create_collectionCreate a new post collection for the authenticated user.No findings

    Why it is in this group

    • The name "create_collection" says "create": a word for a change.
    Description, as the server wrote it
    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.
  • create_segmentCreate a new audience segment (named group of people) for the authenticated user.No findings

    Why it is in this group

    • The name "create_segment" says "create": a word for a change.
    Description, as the server wrote it
    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 — costs 0 credits.
  • create_streamCreate a new research stream (external profile, company, topic, person interests, hiring signals, or ad watch).No findings

    Why it is in this group

    • The name "create_stream" says "create": a word for a change.
    Description, as the server wrote it
    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.
  • linkedin_company_postsFetch recent posts from a LinkedIn company page.Can send data outNo findings

    Why it is in this group

    • The name "linkedin_company_posts" says "post": a word for a change.

    What it can reach

    • outboundThe name "linkedin_company_posts" says "post": it sends or publishes something to other people.
    Description, as the server wrote it
    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').
  • linkedin_post_commentsFetch the people who commented on a single LinkedIn post (and their comment text).Can send data outNo findings

    Why it is in this group

    • The name "linkedin_post_comments" says "post": a word for a change.

    What it can reach

    • outboundThe name "linkedin_post_comments" says "post": it sends or publishes something to other people.
    Description, as the server wrote it
    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.
  • linkedin_post_reactionsFetch the people who reacted to a single LinkedIn post.Can send data outNo findings

    Why it is in this group

    • The name "linkedin_post_reactions" says "post": a word for a change.

    What it can reach

    • outboundThe name "linkedin_post_reactions" says "post": it sends or publishes something to other people.
    Description, as the server wrote it
    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.
  • linkedin_post_searchSearch LinkedIn posts by keyword.Can send data outNo findings

    Why it is in this group

    • The name "linkedin_post_search" says "post": a word for a change.

    What it can reach

    • outboundThe name "linkedin_post_search" says "post": it sends or publishes something to other people.
    Description, as the server wrote it
    Search LinkedIn posts by keyword. Costs 5 credits per call. Returns a single page of matching posts.
  • linkedin_profile_commentsFetch the recent posts a LinkedIn person has commented on.No findings

    Why it is in this group

    • The name "linkedin_profile_comments" says "comment": a word for a change.
    Description, as the server wrote it
    Fetch the recent posts a LinkedIn person has commented on. Useful for inferring interests and conversation partners. Costs 5 credits per call.
  • linkedin_profile_postsFetch recent posts from a LinkedIn person profile.Can send data outNo findings

    Why it is in this group

    • The name "linkedin_profile_posts" says "post": a word for a change.

    What it can reach

    • outboundThe name "linkedin_profile_posts" says "post": it sends or publishes something to other people.
    Description, as the server wrote it
    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.
  • map_constellationMap the professional graph around a target company.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • pause_streamPause a stream so it stops running on its cron schedule.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • resume_streamResume a paused stream.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • run_stream_nowTrigger an immediate run of an active stream, bypassing its schedule.No findings

    Why it is in this group

    • The name "run_stream_now" says "run": a word for a change.
    Description, as the server wrote it
    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 streams must be resumed first. Use list_streams or get_stream_feed to see results once the run completes.
  • save_postSave a LinkedIn post to your library by its URL.Can send data outNo findings

    Why it is in this group

    • The name "save_post" says "save": a word for a change.

    What it can reach

    • outboundThe name "save_post" says "save" and "post": it writes something other people read.
    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    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.
  • score_connectionsRe-score all constellation entries in a campaign and rewrite queue positions from highest to lowest composite score.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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_outreach_queue({linkedin_urls})` for engagement-count ordering on those scopes; full composite scoring will land alongside the unified person-positions schema in a later phase.
  • score_draftPredict how a draft post will perform against the user's historical data.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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, `collection_id` to scope to a collection, or neither to score against the user's full library.
  • suggest_anglesGiven a topic, suggest distinct content angles informed by what performs well in the user's scoped data.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • traverse_graphExecutes a TS-validated SELECT-only SQL query against the engagement graph and returns rows.No findings

    Why it is in this group

    • The description's first verb is "execute": a word for a change.
    • The input takes a statement or command to run (input.sql), which can change anything it can reach.
    Description, as the server wrote it
    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.
Only reads 41Show 41 read-only tools
  • claim_previewMake a profile from preview_profile your own Flux dashboard.No findings

    Why it is in this group

    • The name "claim_preview" says "preview": a word for reading.
    Description, as the server wrote it
    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.
  • find_similar_postsFind persisted posts whose embeddings are nearest to a free-text query — pgvector cosine over the local post library, no LinkedIn pull, free.Reads text others writeNo findings

    Why it is in this group

    • The name "find_similar_posts" says "find": a word for reading.

    What it can reach

    • untrusted-inputThe name "find_similar_posts" says "find" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "find" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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 to a tracked profile, `collection_id` to scope to a collection, or neither to search the entire library.
  • get_alertsReturn recent alerts for the authenticated user's streams.No findings

    Why it is in this group

    • The name "get_alerts" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_alumni_engagersGiven a company URL or id, return engagers (across your collected posts) who have a position at that company.Reads text others writeNo findings

    Why it is in this group

    • The name "get_alumni_engagers" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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.
  • get_campaign_statsSummary stats for a Constellation campaign: target count, entry count, outreach volume, and acceptance / reply rates broken down by pool (coworker / engager / mutual) and composite…Reads text others writeNo findings

    Why it is in this group

    • The name "get_campaign_stats" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "reply": it reads comments, which other people can write.
    Description, as the server wrote it
    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.
  • get_company_engagement_overlapGiven two companies, return engagers across your collected posts who engaged with BOTH companies' posts.Reads text others writeNo findings

    Why it is in this group

    • The name "get_company_engagement_overlap" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_cost_estimateGiven an MCP tool name, return its credit cost so you can preview an action before running it.No findings

    Why it is in this group

    • The name "get_cost_estimate" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_credit_balanceReturn the authenticated user's current credit balance, this period's monthly allocation, and credits used since the period started.No findings

    Why it is in this group

    • The name "get_credit_balance" says "get": a word for reading.
    Description, as the server wrote it
    Return the authenticated user's current credit balance, this period's monthly allocation, and credits used since the period started. Free.
  • get_engagement_briefFor one person, return their recent posts most relevant to what you post about — plus suggested talking points.Reads text others writeNo findings

    Why it is in this group

    • The name "get_engagement_brief" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_engagement_industry_breakdownHistogram of engagers' companies grouped by industry.No findings

    Why it is in this group

    • The name "get_engagement_industry_breakdown" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_engager_position_historyReturn a person's full employment timeline from the position graph.No findings

    Why it is in this group

    • The name "get_engager_position_history" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_outreach_pathGiven a target person, find the shortest warm-intro path through your engager network.No findings

    Why it is in this group

    • The name "get_outreach_path" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_outreach_queueReturn a prioritized outreach queue.No findings

    Why it is in this group

    • The name "get_outreach_queue" says "get": a word for reading.
    Description, as the server wrote it
    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` — an ad-hoc list of LinkedIn URLs, same engagement-count ranking as segments. Free — costs 0 credits.
  • get_post_engagers_by_companyGiven a LinkedIn post URL or id, return the companies whose people engaged (reacted/commented), ranked by engager count.Reads text others writeNo findings

    Why it is in this group

    • The name "get_post_engagers_by_company" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe name "get_post_engagers_by_company" says "get" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_post_set_engagersReturn 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).Reads text others writeNo findings

    Why it is in this group

    • The name "get_post_set_engagers" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe name "get_post_set_engagers" says "get" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "return" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_posting_insightsGet optimal posting patterns for a profile: best day of week, best hour, format performance breakdown, and character length sweet spot.No findings

    Why it is in this group

    • The name "get_posting_insights" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_postsList a tracked profile's persisted posts with full metrics and text — query against the local post library, no LinkedIn pull, free.Reads text others writeNo findings

    Why it is in this group

    • The name "get_posts" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe name "get_posts" says "get" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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-curated set). Paginated. For keyword/semantic search across posts, use `search_posts`. For fresh LinkedIn pulls, use `linkedin_profile_posts`.
  • get_profile_summaryGet 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 p…Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_profile_summary" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "conversation": it reads messages.
    • untrusted-inputThe description's first sentence says "get" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_stream_feedReturn the most recent posts a stream has collected into the library, newest first by published_at.Reads text others writeNo findings

    Why it is in this group

    • The name "get_stream_feed" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "return" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_target_warmth_briefFor 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, co…Reads text others writeNo findings

    Why it is in this group

    • The name "get_target_warmth_brief" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_topic_insightsSurface the most-frequent topics in a profile's posts, with engagement context.Reads text others writeNo findings

    Why it is in this group

    • The name "get_topic_insights" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • get_usage_historyReturn recent credit_ledger transactions for the authenticated user.No findings

    Why it is in this group

    • The name "get_usage_history" says "get": a word for reading.
    Description, as the server wrote it
    Return recent credit_ledger transactions for the authenticated user. Filter by tool name, reason, or date range. Paginated. Free.
  • linkedin_profile_infoFetch a LinkedIn person profile (headline, current role, work history, education, location).No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote 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.
  • linkedin_profile_reactionsFetch the recent posts a LinkedIn person has reacted to.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "fetch" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    Fetch the recent posts a LinkedIn person has reacted to. Useful for inferring interests. Costs 5 credits per call.
  • list_collectionsList all post collections for the authenticated user, with member counts.Reads text others writeNo findings

    Why it is in this group

    • The name "list_collections" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • list_profilesList all tracked LinkedIn profiles for the authenticated user.No findings

    Why it is in this group

    • The name "list_profiles" says "list": a word for reading.
    Description, as the server wrote it
    List all tracked LinkedIn profiles for the authenticated user. Returns profile IDs needed by other tools.
  • list_segment_templatesList available smart-segment templates.No findings

    Why it is in this group

    • The name "list_segment_templates" says "list": a word for reading.
    Description, as the server wrote it
    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.
  • list_segmentsList all audience segments for the authenticated user, with member counts.No findings

    Why it is in this group

    • The name "list_segments" says "list": a word for reading.
    Description, as the server wrote it
    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.
  • list_streamsList all research streams for the authenticated user (external profiles, companies, topics, person interests, hiring signals, ad watches, and own_profile).No findings

    Why it is in this group

    • The name "list_streams" says "list": a word for reading.
    Description, as the server wrote it
    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.
  • log_outcomeAppend an entry to the outreach log for a Constellation campaign.No findings

    Why it is in this group

    • The name "log_outcome" says "log": a word for reading.
    Description, as the server wrote it
    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.
  • preview_posting_insightsBest day, hour, format and length for a previewed profile (from preview_profile).No findings

    Why it is in this group

    • The name "preview_posting_insights" says "preview": a word for reading.
    Description, as the server wrote it
    Best day, hour, format and length for a previewed profile (from preview_profile). No account needed.
  • preview_profileAnalyze 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 …Reads text others writeNo findings

    Why it is in this group

    • The name "preview_profile" says "preview": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "analyze" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • resolve_collectionResolve a post collection into a concrete list of post_ids.Reads text others writeNo findings

    Why it is in this group

    • The name "resolve_collection" says "resolve": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "resolve" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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.
  • resolve_segmentResolve an audience segment into a concrete list of person_ids.No findings

    Why it is in this group

    • The name "resolve_segment" says "resolve": a word for reading.
    Description, as the server wrote it
    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.
  • search_postsKeyword + semantic search over persisted posts in the local library — full-text + pgvector cosine, no LinkedIn pull, free.Reads text others writeNo findings

    Why it is in this group

    • The name "search_posts" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe name "search_posts" says "search" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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).
  • traverse_graph_helpReturns the schema, FK edges, and 5 canonical SQL examples needed to write your own SELECT against the engagement graph via traverse_graph.Reads private dataNo findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "return" and "sql": it reads databases.
    Description, as the server wrote it
    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.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

204 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 private-data tools breaks every one.

Reads private data2
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out6
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__linkedin__get_profile_summary",
      "mcp__linkedin__traverse_graph_help"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http linkedin https://www.fluxgraph.app/mcp
claude mcp add --transport http linkedin https://www.fluxgraph.app/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__linkedin__list_profiles",
      "mcp__linkedin__preview_profile",
      "mcp__linkedin__preview_posting_insights",
      "mcp__linkedin__claim_preview",
      "mcp__linkedin__get_posts",
      "mcp__linkedin__get_profile_summary",
      "mcp__linkedin__get_posting_insights",
      "mcp__linkedin__get_topic_insights",
      "mcp__linkedin__get_engagement_trends",
      "mcp__linkedin__search_posts",
      "mcp__linkedin__get_credit_balance",
      "mcp__linkedin__get_usage_history",
      "mcp__linkedin__get_cost_estimate",
      "mcp__linkedin__list_streams",
      "mcp__linkedin__get_stream_feed",
      "mcp__linkedin__linkedin_profile_info",
      "mcp__linkedin__linkedin_profile_reactions",
      "mcp__linkedin__linkedin_job_search",
      "mcp__linkedin__linkedin_ad_search",
      "mcp__linkedin__linkedin_people_search",
      "mcp__linkedin__linkedin_company_search",
      "mcp__linkedin__find_similar_posts",
      "mcp__linkedin__list_segments",
      "mcp__linkedin__resolve_segment",
      "mcp__linkedin__list_segment_templates",
      "mcp__linkedin__get_alerts",
      "mcp__linkedin__list_collections",
      "mcp__linkedin__resolve_collection",
      "mcp__linkedin__get_outreach_queue",
      "mcp__linkedin__get_engagement_brief",
      "mcp__linkedin__log_outcome",
      "mcp__linkedin__get_campaign_stats",
      "mcp__linkedin__get_post_engagers_by_company",
      "mcp__linkedin__get_engagement_industry_breakdown",
      "mcp__linkedin__get_alumni_engagers",
      "mcp__linkedin__get_engager_position_history",
      "mcp__linkedin__get_target_warmth_brief",
      "mcp__linkedin__traverse_graph_help",
      "mcp__linkedin__get_company_engagement_overlap",
      "mcp__linkedin__get_outreach_path",
      "mcp__linkedin__get_post_set_engagers"
    ],
    "ask": [
      "mcp__linkedin__create_stream",
      "mcp__linkedin__pause_stream",
      "mcp__linkedin__resume_stream",
      "mcp__linkedin__run_stream_now",
      "mcp__linkedin__linkedin_profile_posts",
      "mcp__linkedin__linkedin_company_posts",
      "mcp__linkedin__linkedin_post_search",
      "mcp__linkedin__linkedin_profile_comments",
      "mcp__linkedin__linkedin_post_reactions",
      "mcp__linkedin__linkedin_post_comments",
      "mcp__linkedin__score_draft",
      "mcp__linkedin__suggest_angles",
      "mcp__linkedin__create_segment",
      "mcp__linkedin__add_to_segment",
      "mcp__linkedin__create_collection",
      "mcp__linkedin__add_to_collection",
      "mcp__linkedin__create_campaign",
      "mcp__linkedin__add_campaign_accounts",
      "mcp__linkedin__map_constellation",
      "mcp__linkedin__score_connections",
      "mcp__linkedin__save_post",
      "mcp__linkedin__traverse_graph"
    ],
    "deny": [
      "mcp__linkedin__delete_stream",
      "mcp__linkedin__remove_from_segment",
      "mcp__linkedin__remove_from_collection"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as linkedin. Review it before you use it.

Capability tags behind 24 rules
  • mcp__linkedin__preview_profile untrusted-input
  • mcp__linkedin__get_posts untrusted-input
  • mcp__linkedin__get_profile_summary private-data, untrusted-input
  • mcp__linkedin__get_topic_insights untrusted-input
  • mcp__linkedin__search_posts untrusted-input
  • mcp__linkedin__get_stream_feed untrusted-input
  • mcp__linkedin__linkedin_profile_posts outbound
  • mcp__linkedin__linkedin_company_posts outbound
  • mcp__linkedin__linkedin_post_search outbound
  • mcp__linkedin__linkedin_profile_reactions untrusted-input
  • mcp__linkedin__linkedin_post_reactions outbound
  • mcp__linkedin__linkedin_post_comments outbound
  • mcp__linkedin__find_similar_posts untrusted-input
  • mcp__linkedin__list_collections untrusted-input
  • mcp__linkedin__resolve_collection untrusted-input
  • mcp__linkedin__get_engagement_brief untrusted-input
  • mcp__linkedin__get_campaign_stats untrusted-input
  • mcp__linkedin__save_post outbound
  • mcp__linkedin__get_post_engagers_by_company untrusted-input
  • mcp__linkedin__get_alumni_engagers untrusted-input
  • mcp__linkedin__get_target_warmth_brief untrusted-input
  • mcp__linkedin__traverse_graph_help private-data
  • mcp__linkedin__get_company_engagement_overlap untrusted-input
  • mcp__linkedin__get_post_set_engagers untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/app.fluxgraph/linkedin/verify?hash=282c8c1afd755a9de9b0cb8114e1d8d62ae5c9a0dabfe7b9f6cc18b499fdb500" | jq -e '.changed == false'

Pinned hash 282c8c1afd75, from Nov 2, 2026, 04:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/app.fluxgraph/linkedin/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for app.fluxgraph/linkedin
[![anlyon.dev](https://anlyon.dev/badge/app.fluxgraph/linkedin.svg)](https://anlyon.dev/servers/app.fluxgraph/linkedin)

Source: MCP Registry. Synced Nov 2, 2026, 04:17 UTC.