Flux LinkedIn MCP
app.fluxgraph/linkedinVersion 1.0.1LinkedIn intelligence: post analytics and research for public profiles and company pages.
Status
Responds190 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 13:36 UTC
- Latency
- 190 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 21:12 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://www.fluxgraph.app/mcpResponds190 msNo sign-in
Claude Code
claude mcp add --transport http linkedin https://www.fluxgraph.app/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: linkedin
Remote MCP server URL: https://www.fluxgraph.app/mcpCursor
{
"mcpServers": {
"linkedin": {
"url": "https://www.fluxgraph.app/mcp"
}
}
}VS Code
code --add-mcp '{"name":"linkedin","type":"http","url":"https://www.fluxgraph.app/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
69 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
add_campaign_accountsAdd 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. Accounts already in the campaign (same linkedin_company_id, or same case-insensitive trimmed company_name) and repeats within the same call are not re-added; they are returned under `skipped`. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
add_to_collectionPin 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. | Not declared | Not declared | Not declared | Not declared |
add_to_segmentAdd one or more people (by person_id) to a manual audience segment. Existing members are silently ignored. Smart segments are rejected: their membership is computed from `config` by resolve_segment. Unknown person_ids are rejected as a whole (nothing is added). Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
claim_previewMake a profile from preview_profile your own Flux dashboard. Call this only when the person says the profile is theirs: the person cannot undo a claim. Requires sign-in; creates a free dashboard showing the latest 50 posts, one per account. Refuses if the account already has a dashboard; the breakdown tools still work then. | Not declared | Not declared | Not declared | Not declared |
create_campaignCreate 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. | Not declared | Not declared | Not declared | Not declared |
create_collectionCreate 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. | Not declared | Not declared | Not declared | Not declared |
create_segmentCreate 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','Chief']}) 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'). Smart segments only match people connected to you: people who engaged with posts you can see in Flux (your own profile, tracked/monitored profiles, and posts you collected) and people in your campaigns' constellations. Smart segment membership is computed, so add_to_segment / remove_from_segment do not apply to it. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
create_streamCreate 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. | Not declared | Not declared | Not declared | Not declared |
delete_streamDelete 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. | Not declared | Not declared | Not declared | Not declared |
enrich_peopleLook up full LinkedIn profiles for up to 100 people and store their current title, company, headline and job history (every position). Job history is what get_outreach_path (coworker / alumni paths) and get_alumni_engagers search, and engagers collected from reactions/comments have none until enriched — when those tools report missing coverage they return a _meta.next_step with the exact person_ids to pass here. Pass person_ids (people.id from any engager / path tool) and/or linkedin_urls. Costs 3 credits per person successfully enriched. People enriched in the last 90 days are skipped for free unless refresh=true; failed or not-found lookups are free. The balance must cover 3 × the people to be looked up (after skips and max_credits) before anything runs; you are charged only for successes. | Not declared | Not declared | Not declared | Not declared |
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. 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. | Not declared | Not declared | Not declared | Not declared |
get_alertsReturn 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. | Not declared | Not declared | Not declared | Not declared |
get_alumni_engagersGiven a company (company_url, LinkedIn's numeric linkedin_company_id as linkedin_company_info returns it, an exact company_name, or a companies.id UUID), 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. Matches need job history on file, and engagers collected from reactions/comments usually have none: `coverage` counts candidates (engagers whose headline or current company names the company) with and without job history, and when missing data may hide matches `_meta.next_step` names enrich_people with the exact person_ids to pass and its credit cost. The company must be saved in Flux: if it is not, the error's `_meta.next_step` names linkedin_company_info (1 credit) with the arguments that save it; a company_name that matches several saved companies returns `candidates` to pick from instead of guessing. Pure DB read — no LinkedIn pull, no credits charged. | Not declared | Not declared | Not declared | Not declared |
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-score tier. Outcomes logged for people who are not campaign entries are counted under an `unattributed` bucket in both by_pool and by_tier, so breakdowns always sum to the totals. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
get_company_engagement_overlapGiven two companies, return the people who engaged (reacted or commented) with posts published by BOTH companies' own LinkedIn pages, counting only company-page posts and engagers already collected in your library. Use it to find people interested in two target accounts at once. It does NOT compare which employees of each company engage with you (for that, use get_post_engagers_by_company). It needs data collected first: each company's page posts (a company stream, or linkedin_company_posts) and their engagers (get_post_set_engagers on those posts, or linkedin_post_reactions / linkedin_post_comments); when a company has no page posts in your library the response says so. Identify each company by company_x_url, company_x_linkedin_id (LinkedIn's numeric id, as linkedin_company_info returns it), company_x_name (exact, case-insensitive; several matches return candidates instead of a guess) or company_x_id (companies.id UUID). A company not saved in Flux returns `_meta.next_step` naming linkedin_company_info (1 credit). Pure DB read — no LinkedIn pull, no credits charged. | Not declared | Not declared | Not declared | Not declared |
get_cost_estimatePreview what a tool call will cost before running it. Pass tool_name plus the params you intend to call it with: variable-cost tools (get_post_set_engagers, map_constellation, enrich_people, linkedin_profile_posts, linkedin_company_posts, linkedin_post_reactions, linkedin_post_comments, run_stream_now) are priced from those params with the same formula the tool's balance pre-check uses. Returns { tool_name, cost_max, cost_typical?, unit, explanation, cost (= cost_max), balance, sufficient, known_tool }. cost_max is the worst case the balance must cover; cost_typical is what such a call usually costs (you are charged only for what is actually fetched). Also accepts a stream type (external_profile, company, topic, person_interests, hiring_signals, ad_watch) to preview its per-page run price (stream_cost). Free. | Not declared | Not declared | Not declared | Not declared |
get_credit_balanceReturn the authenticated user's current credit balance, the current calendar month's credit period (UTC), that month's allocation if one was granted (null otherwise), credits used since the period started, and the most recent allocation. Free. | Not declared | Not declared | Not declared | Not declared |
get_engagement_briefFor 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. | Not declared | Not declared | Not declared | Not declared |
get_engagement_industry_breakdownHistogram 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. Needs engagers synced first: if the post(s) have no recorded engagements, run `get_post_set_engagers` (1 credit per page, works on a collection or profile) as the usual first step; `linkedin_post_reactions` / `linkedin_post_comments` (1 credit per page of up to 100 people, so usually 1 credit each) pull a single post. | Not declared | Not declared | Not declared | Not declared |
get_engagement_trendsGet 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. | Not declared | Not declared | Not declared | Not declared |
get_engager_position_historyReturn 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. | Not declared | Not declared | Not declared | Not declared |
get_outreach_pathGiven 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. Paths only exist where job history is on file, and engagers collected from reactions/comments usually have none: the response's `coverage` says how many candidates (the target, and engagers tied to the target's companies) have job history, and when missing data may hide paths `_meta.next_step` names enrich_people with the exact person_ids to pass and its credit cost. Pure DB read — no LinkedIn pull, no credits charged. | Not declared | Not declared | Not declared | Not declared |
get_outreach_queueReturn a prioritized outreach queue. Provide *exactly one* of three scopes:
• `campaign_id` — full Constellation queue, one row per person (their best entry's composite_score, pool, recommended_action), with `targets[]` listing every target they connect to ({target_id, entry_id, composite_score, pool, recommended_action, target_person: {person_id, full_name, current_title}}) and prior outreach_log entries. Pools: coworker = same company as the target (no relationship implied), engager = someone the target engages with, mutual = someone several targets engage with. Pass a target_person.person_id to get_outreach_path to check warm paths.
• `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. | Not declared | Not declared | Not declared | Not declared |
get_post_engagers_by_companyGiven 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. | Not declared | Not declared | Not declared | Not declared |
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). Fetches only posts not synced within freshness_days, walks up to max_pages_per_post pages (100 people/page) of reactions and of comments per post, includes comment replies, and enriches (title/company via a profile lookup) only never-seen people, up to max_enrich. Costs 1 credit per page fetched (a page is up to 100 people; a post with under 100 reactions and under 100 comments = 2 credits; the most a post can cost is 2 × max_pages_per_post) + 3 per person enriched; cached posts and cached pages are free. The balance must cover the worst case (posts × 2 × max_pages_per_post + max_enrich × 3) before anything runs (get_cost_estimate with these params returns the same number); you are charged only for pages actually fetched. When the balance is short, the insufficient_credits error spells out what the worst case assumed and lists `suggestions` (smaller max_pages_per_post / max_posts / max_enrich, each with its resulting max) that fit the balance. Per-post reactions_fetched / reactions_total / comments_total / truncated tell you when a post had more engagers than were fetched. | Not declared | Not declared | Not declared | Not declared |
get_posting_insightsGet 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. | Not declared | Not declared | Not declared | Not declared |
get_postsList 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`. | Not declared | Not declared | Not declared | Not declared |
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 posting goal status. | Not declared | Not declared | Not declared | Not declared |
get_stream_feedReturn 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. | Not declared | Not declared | Not declared | Not declared |
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, comment text snippets. Computes a v0 warmth score from engagement count, comment signal, and recency. Pure DB read — no LinkedIn pull, no credits charged. | Not declared | Not declared | Not declared | Not declared |
get_topic_insightsSurface 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. | Not declared | Not declared | Not declared | Not declared |
get_usage_historyReturn recent credit_ledger transactions for the authenticated user. Filter by tool name, reason, or date range. Paginated. Free. | Not declared | Not declared | Not declared | Not declared |
linkedin_ad_searchSearch the LinkedIn ad library. Useful for tracking competitor ad creative and messaging. Costs 10 credits per call. | Not declared | Not declared | Not declared | Not declared |
linkedin_company_infoFetch one LinkedIn company (numeric id, name, industry, size, location, website, description). Costs 1 credit per call. Use it to resolve a company to its numeric LinkedIn `id`, which linkedin_people_search (`company`) and linkedin_job_search (`companyId`) take for an exact company match. Look up by `linkedin_url` when you have it: a lookup by `name` returns the best match, which can be a different company with a similar name. The company is saved to `companies`. | Not declared | Not declared | Not declared | Not declared |
linkedin_company_postsFetch 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'). | Not declared | Not declared | Not declared | Not declared |
linkedin_company_searchSearch LinkedIn companies. Filter by keywords, industryId, or location. Costs 5 credits per page of 50. Each company comes back with its numeric LinkedIn `id`, which is what linkedin_people_search (`company`) and linkedin_job_search (`companyId`) take for an exact company match. | Not declared | Not declared | Not declared | Not declared |
linkedin_job_searchSearch LinkedIn job postings. Useful for tracking hiring signals at target companies. Costs 5 credits per call. | Not declared | Not declared | Not declared | Not declared |
linkedin_people_searchSearch LinkedIn people. Filter by company, title, location, or free-text keywords. Costs 5 credits per page of 25. Each person comes back with current title, company, company id, start date and location. To list the people at one company, pass its LinkedIn company URL or numeric id as `company` and walk `page` while `truncated` is true. Results are saved to `people` with their current position, so get_outreach_path can route to them (pass a result's `person_id` as `target_person_id`). | Not declared | Not declared | Not declared | Not declared |
linkedin_post_commentsFetch the people who commented on a single LinkedIn post (and their comment text), including replies to comments. Costs 1 credit per page of up to 100 comments, walking up to max_pages pages (default 10), so at most max_pages credits; cached pages are free. The output's fetched / total_available / truncated fields say when the post had more comments than were fetched. Each comment and reply is persisted to post_engagements with the commenter and full comment text. | Not declared | Not declared | Not declared | Not declared |
linkedin_post_reactionsFetch the people who reacted to a single LinkedIn post. Costs 1 credit per page of up to 100 reactions, walking up to max_pages pages (default 10), so at most max_pages credits; cached pages are free. The output's fetched / total_available / truncated fields say when the post had more reactions than were fetched. Engagers (with reaction kind) are persisted to the post_engagements graph so subsequent queries about who-engages-with-whom are SQL, not API calls. | Not declared | Not declared | Not declared | Not declared |
linkedin_post_searchSearch LinkedIn posts by keyword. Costs 5 credits per call. Returns a single page of matching posts. | Not declared | Not declared | Not declared | Not declared |
linkedin_profile_commentsFetch the recent posts a LinkedIn person has commented on. Useful for inferring interests and conversation partners. Costs 5 credits per call. | Not declared | Not declared | Not declared | Not declared |
linkedin_profile_infoFetch 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. | Not declared | Not declared | Not declared | Not declared |
linkedin_profile_postsFetch 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. | Not declared | Not declared | Not declared | Not declared |
linkedin_profile_reactionsFetch the recent posts a LinkedIn person has reacted to. Useful for inferring interests. Costs 5 credits per call. | Not declared | Not declared | Not declared | Not declared |
list_collectionsList 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. | Not declared | Not declared | Not declared | Not declared |
list_profilesList all tracked LinkedIn profiles for the authenticated user. Returns profile IDs needed by other tools. | Not declared | Not declared | Not declared | Not declared |
list_segment_templatesList available smart-segment templates. Pass a template id to create_segment to pre-fill its `config` predicate without crafting one from scratch. Each template's description states exactly what its config matches; like every smart segment, it only matches people connected to you (engagers on your visible posts and people in your campaigns). Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
list_segmentsList 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. | Not declared | Not declared | Not declared | Not declared |
list_streamsList 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. | Not declared | Not declared | Not declared | Not declared |
log_outcomeAppend 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. The person may be outside the campaign's mapped constellation; such outcomes are still logged (with a `warning`) and get_campaign_stats reports them under the `unattributed` pool/tier bucket. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
map_constellationMap 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. The response lists the selected `targets` (target_id, person_id, full_name, current_title, linkedin_url) and `_meta.next_step(s)`: get_outreach_queue for the scored queue, then get_outreach_path (free) to check warm paths to the top targets. Pools: coworker = other senior people at the same account from the lead search (no relationship with you is implied); engager = someone a target engages with; mutual = someone several targets engage with. Costs at most 1 + 3 × max_targets credits (7 at max_targets=2, 16 at the default 5, 61 at 20); the balance must cover that worst case, and only what is actually spent is charged and reported in the response. | Not declared | Not declared | Not declared | Not declared |
pause_streamPause 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. | Not declared | Not declared | Not declared | Not declared |
preview_posting_insightsFull breakdown for a previewed profile (from preview_profile): best day, hour, format and length, the top and bottom 5 posts with measured reasons, and engagement trend by format. Requires a free Flux account; calling it asks the person to sign in where the client supports it, otherwise use continue_url from preview_profile. | Not declared | Not declared | Not declared | Not declared |
preview_profileAnalyze a public LinkedIn profile or company page without a Flux account: pulls the latest ~50 posts (once per profile) and returns a teaser: post count, average engagement, the format that beats the baseline, the top post and the recent trend, plus a preview_id. The full breakdown (best day and hour, top and bottom posts with reasons, trends by format) and keyword search need a free Flux account: call preview_posting_insights or preview_search_posts with the preview_id, which asks the person to sign in where the client supports it, or give the person the continue_url if that call fails. Call claim_preview after sign-in only when the person says the profile is theirs. | Not declared | Not declared | Not declared | Not declared |
preview_search_postsKeyword search over the latest 50 posts of a previewed profile (from preview_profile). Case-insensitive substring match; returns matching posts ordered by engagement. Requires a free Flux account; calling it asks the person to sign in where the client supports it, otherwise use continue_url from preview_profile. | Not declared | Not declared | Not declared | Not declared |
remove_from_collectionRemove one or more posts (by post_id) from a collection. Missing members are silently ignored. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
remove_from_segmentRemove one or more people (by person_id) from a manual audience segment. Missing members are silently ignored. Smart segments are rejected: their membership is computed from `config` by resolve_segment. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
resolve_collectionResolve 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. | Not declared | Not declared | Not declared | Not declared |
resolve_segmentResolve 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 (title_contains / company_contains) and returns matches ordered by engagement with your posts. Smart segments only match people connected to you: people who engaged with posts you can see in Flux (your own profile, tracked/monitored profiles, and posts you collected) and people in your campaigns' constellations. Free — costs 0 credits. | Not declared | Not declared | Not declared | Not declared |
resume_streamResume 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. | Not declared | Not declared | Not declared | Not declared |
run_stream_nowTrigger 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. | Not declared | Not declared | Not declared | Not declared |
save_postSave 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. | Not declared | Not declared | Not declared | Not declared |
score_connectionsRe-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. | Not declared | Not declared | Not declared | Not declared |
score_draftPredict 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. | Not declared | Not declared | Not declared | Not declared |
search_postsKeyword + 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). | Not declared | Not declared | Not declared | Not declared |
suggest_anglesGiven 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. | Not declared | Not declared | Not declared | Not declared |
traverse_graphExecutes 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. | Not declared | Not declared | Not declared | Not declared |
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. 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. | Not declared | Not declared | Not declared | Not declared |
Details
- Registry status
- Active
- Published
- Nov 7, 2026
- Updated
- Nov 7, 2026
- Categories (suggested)
- Marketing and SEOSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared