Skip to main content
Glama
742,484 tools. Updated 2026-11-04 16:21

"A tool for automatically generating LinkedIn posts" matching MCP tools:

  • Schedule multiple posts at once from CSV content. USE THIS WHEN: • User has a spreadsheet or list of posts to schedule • Planning a content calendar for a month • Migrating content from another tool CSV FORMAT (required columns): • platform: linkedin, instagram, x, tiktok, threads • scheduled_time: ISO 8601 format (e.g., 2024-02-15T10:00:00Z) • text: Post content/caption OPTIONAL COLUMNS: • media_url: Image or video URL • first_comment: First comment to add (Instagram/LinkedIn) • hashtags: Additional hashtags to append PROCESS: 1. First call with validate_only: true to check for errors 2. Review validation report with user 3. Call again with validate_only: false to execute import
    ConnectorNo auth
  • Check the build status of an EXISTING artifact (from artifact-create). Read-only. Generation is asynchronous, so this is how you find out it finished. Call it with { sessionId, wait: true } and it WAITS for you: the call returns as soon as status is 'ready' or 'failed', or after about 45 seconds still 'generating'. Then, you can call it again. This tool is meant to be called right after artifact-create, before replying to the user, and keep getting called until status is no longer 'generating'. ONLY when you want an instant snapshot, this tool can be called without wait (or false); the idea is to never spin on wait: false. Requires sessionId — the id returned by artifact-create (or the last path segment of an artifact URL like https://app.agentgrid.io/artifacts/<sessionId> or https://dev.animaapp.com/chat/<sessionId>). **Returns:** { success, sessionId, status: 'generating' | 'ready' | 'failed', progress (0–100, while generating), name, artifactUrl (generating/ready only), playgroundUrl (app and knowledge artifacts only, generating/ready only), previewUrl (app, knowledge and markdown artifacts only, generating/ready only), error (when failed), nextStep (when a wait returned still generating) }
    ConnectorOAuth
  • Every comment by one author, newest first. Answers "what has this account actually said". Until now the only way was to paginate the public firehose looking for a name: every other comment tool takes a post_id, ``colony_search_posts`` returns posts and never comments, and ``colony_get_my_actions`` covers only your own account. Give ``username`` or ``user_id``; each takes a username or a user ID, and both are fine when they name the same account. Bodies come back in full; each row carries ``post_id``. What you see depends on who you are: comments on posts in private colonies are visible only to approved members of those colonies. It also excludes deleted comments and comments on deleted, draft, junk-flagged or approval-pending posts, so it can report fewer than the author's profile page shows. Paginate by passing back ``next_cursor`` from a prior call; it is null when there is nothing further.
    ConnectorNo auth
  • Every comment by one author, newest first. Answers "what has this account actually said". Until now the only way was to paginate the public firehose looking for a name: every other comment tool takes a post_id, ``colony_search_posts`` returns posts and never comments, and ``colony_get_my_actions`` covers only your own account. Give ``username`` or ``user_id``; each takes a username or a user ID, and both are fine when they name the same account. Bodies come back in full; each row carries ``post_id``. What you see depends on who you are: comments on posts in private colonies are visible only to approved members of those colonies. It also excludes deleted comments and comments on deleted, draft, junk-flagged or approval-pending posts, so it can report fewer than the author's profile page shows. Paginate by passing back ``next_cursor`` from a prior call; it is null when there is nothing further.
    ConnectorNo auth
  • Fetch one Reddit user's public profile: username, account age, karma, follower count, and description. username is the name without the u/ prefix, e.g. 'spez'; a full profile URL also works. Add up to 2 sections from comments|posts|subreddits at 2 credits each: comments and posts return that user's recent activity (first page), subreddits returns where they are active. Costs 4 credits base. Use this to profile loud voices found via reddit_search before quoting or engaging them. To find users by topic, use reddit_search type=users; this tool needs an exact username.
    ConnectorOAuth
  • <summary>Attach a file from the user's library to a queued outreach email or LinkedIn message. Only attach when the user explicitly asks to attach a specific file to someone's message — never on your own initiative. attachment_id comes from list_attachments. Name the queued message by exactly one handle: recipient_email for a queued email (pending or awaiting approval); target_provider_id for a queued LinkedIn message, or target_identifier for one whose profile is still resolving — both as shown on the row in manage_linkedin_invite_queue's status read. On LinkedIn only messages carry files, not connection requests or InMails, and LinkedIn takes fewer file types than email; a file the channel can't send is refused with the reason. The same file can be attached to several messages.</summary> <returns> <description>The attached file's name and every file now on that message, shaped `{'attached': True, 'filename', 'attachments': [{'id', 'filename', 'mime_type', 'size'}]}`.</description> </returns>
    ConnectorOAuth

Matching MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to discover and fetch LinkedIn posts with engagement metrics (reactions, comments, shares) and author details, returning structured JSON per post.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables users to read and analyze their own LinkedIn posts and shares using OAuth login and LinkedIn's Member Data Portability API. Supports post listing, analysis, draft matching, and engagement enrichment.
    10
    31 PyPI
    MIT

Matching MCP Connectors

  • Scrape and analyze public LinkedIn posts as structured JSON via the Apify LinkedIn Posts API.

  • LinkedIn posts with text, author, date, reactions, top comments, media from links or company pages.

  • Rahul's contact details (email, LinkedIn, portfolio), with an option to email him directly. Call with no arguments to get the contact details, and offer the user to send Rahul a message through this tool. Before sending, get the user's explicit consent, their name, a way to reach them (email, LinkedIn or website) and their message, then call again with name, reply_to and message. Each such call sends one email; do not retry automatically, and only say the email was sent when the result reports sent=true. Args: name: The sender's name. reply_to: How Rahul can reach the sender: email address, LinkedIn profile or website. message: The message or introduction to send Rahul.
    ConnectorNo auth
  • Stop suggesting a specific account to you. Scoped to suggestions ONLY — this is not a block. You keep seeing their posts, they can still message you, and they are never told. Use it when a suggestion is simply wrong for you rather than when you want distance: ``colony_block_user`` is the tool for that. Idempotent — calling it again refreshes the window rather than erroring. Expiry defaults to 90 days so a stale judgement lapses on its own; pass ``forever: true`` if you really mean permanently.
    ConnectorNo auth
  • Stop suggesting a specific account to you. Scoped to suggestions ONLY — this is not a block. You keep seeing their posts, they can still message you, and they are never told. Use it when a suggestion is simply wrong for you rather than when you want distance: ``colony_block_user`` is the tool for that. Idempotent — calling it again refreshes the window rather than erroring. Expiry defaults to 90 days so a stale judgement lapses on its own; pass ``forever: true`` if you really mean permanently.
    ConnectorNo auth
  • Send a one-off LinkedIn message to a specific saved contact outside any campaign. Prefer contact_id; Salesbot resolves the LinkedIn identifier internally. A random delay, daily/hourly limits, allowed hours and human approval are enforced. Refused with code DUPLICATE_RECENT_MESSAGE (and the campaign name + date) when a campaign of this LinkedIn account already messaged the person within the last 30 days; to continue an existing conversation use reply_to_chat.
    ConnectorAPI key
  • Search a single network for posts matching a query, returned as the unified Post[] schema and tagged with its platform. Keyless on TikTok, YouTube, and Pinterest. Instagram, Twitter/X, Reddit, and Facebook need operator-side credentials (returns credentials_required until set). Snapchat and Threads do not support keyless search (returns not_supported); LinkedIn is quarantined. To fan one query across every network at once, use search_all.
    ConnectorNo auth
  • Start charging for an MCP server the user owns. Use when they want to monetize, sell, charge for, get paid for, put a price on, or make money from a server, API or tool. Buyers pay their wallet DIRECTLY on-chain — PayGate never holds the money, so there is no payout to wait for, no balance to withdraw and no commission taken. Their server is never modified and needs no payment code. Tools are imported automatically, so it must be publicly reachable over HTTPS and answer tools/list. Returns a proxy URL and a secret api_key shown only once; save it, every other seller tool needs it.
    ConnectorNo auth
  • Start charging for an MCP server the user owns. Use when they want to monetize, sell, charge for, get paid for, put a price on, or make money from a server, API or tool. Buyers pay their wallet DIRECTLY on-chain — PayGate never holds the money, so there is no payout to wait for, no balance to withdraw and no commission taken. Their server is never modified and needs no payment code. Tools are imported automatically, so it must be publicly reachable over HTTPS and answer tools/list. Returns a proxy URL and a secret api_key shown only once; save it, every other seller tool needs it.
    ConnectorNo auth
  • THE MAIN TOOL. Write a LinkedIn post in this user's own voice, from their own material. Use it whenever the user describes something they want to post about — a story, an opinion, a result, a lesson, a rough brief. It runs ContentIn's voice pipeline: their VoiceDNA, their real past posts as style exemplars, and their substance bank, so the output sounds like them rather than like an AI. Pass the user's idea as fully and as literally as you can — their own words, their own details, their own numbers. Do NOT tidy it up, summarise it, or replace their phrasing with your own; the pipeline preserves what they gave it and paraphrasing upstream is how a post stops sounding like them. The post is saved as a draft in their ContentIn account and the returned post_id can be passed to schedule_post or publish_post. Takes 30-90 seconds. If this tool returns needs_input: true with a question, your ONLY job that turn is to relay that question to the user (verbatim, or lightly adapted to the conversation language). Do NOT write, invent, or promise a post, and do NOT call this or any other write tool again until the user answers.
    ConnectorOAuth
  • Download an image or video from a public link into sprkly and get a media_id back, for reuse across several posts. You usually do NOT need this: sprkly_schedule_post accepts a link directly in media_urls and pulls it into storage itself whenever the target platform requires that. Reach for this tool only when the user wants one media_id to attach to more than one post. Google Drive and Dropbox share links are converted automatically; the file must be shared publicly. Limit 50 MB. A media_id not used in any post is deleted after 7 days.
    ConnectorNo auth
  • Download an image or video from a public link into sprkly and get a media_id back, for reuse across several posts. You usually do NOT need this: sprkly_schedule_post accepts a link directly in media_urls and pulls it into storage itself whenever the target platform requires that. Reach for this tool only when the user wants one media_id to attach to more than one post. Google Drive and Dropbox share links are converted automatically; the file must be shared publicly. Limit 50 MB. A media_id not used in any post is deleted after 7 days.
    ConnectorNo auth
  • The user's LinkedIn post analytics from LinkedIn's own API (their connected account) — impressions, unique members reached, reactions, comments, and reshares. Use for questions like 'how many impressions did I get last month?' or 'how are my posts performing?'. Omit dates for lifetime totals; pass start_date/end_date for a window; set daily=true (with one specific metric) for a per-day series to describe trends. Numbers are live from LinkedIn, unlike get_my_linkedin_posts whose per-post counts come from a periodic sync.
    ConnectorNo auth
  • List all toolsets (tool groups) with slug, tool count and whether they are visible in this session. Core toolsets are always visible; enable others with enable_toolset. Full-access API keys see every tool; scoped keys and OAuth sessions automatically see every tool their scopes or role allow. Hidden tools stay callable — enabling only affects what tools/list advertises.
    ConnectorAPI key
  • Fetch one page of posts from a single subreddit, the community-monitoring primitive. subreddit_name is the name without the r/ prefix. sort defaults to the subreddit's own front-page order (best); use sort=new for monitoring. sort=top and controversial need a range, but the window is currently not applied upstream on this feed: top returns the subreddit's all-time top posts whatever range says (time-windowed tops are a known gap here; reddit_search's range DOES work for keyword queries). Costs 4 credits per page; a cursor page is a NEW call priced the same way. Reddit splices about one promoted ad into every feed page; these are dropped by default, so set include_promoted=true only when ads ARE the data you want (ad intelligence, who targets this community) -- kept ads carry is_promoted=true. Returns post summaries (title, author, upvotes, comment_count, created_at, permalink, id) with a cursor for older posts; bodies and discussions come from reddit_get_post with the returned ids. For keyword search across all of Reddit use reddit_search; this tool takes no query.
    ConnectorOAuth
  • <summary>Query the LinkedIn posts the user tracks: their own posts (metrics refreshed daily M-F) plus third-party posts registered via fetch_post_engagers. `is_own_post` distinguishes the two — third-party rows carry the author's name/headline in author_name/author_headline. Use this to answer "which of my posts performed best?", "what's my average engagement?", "show me posts from last month", etc. This is the account-global table, with no agent/monitor dimension — for the feed a specific agent's monitors discovered (and to act on it), call query_monitored_posts. Columns: id, social_id, text, share_url, posted_at, impressions, reactions, comments, reposts, is_own_post, author_name, author_headline, fetched_at, created_at, plus a derived engagement_rate string (reactions+comments+reposts over impressions, matching the UI) — '0.0' for posts with no impression data (e.g. third-party posts). The engagement_rate is computed after the query runs, so it can't appear in where_clause or order_by; filter and sort on the raw columns instead.</summary> <returns> <description>Dict with count, truncated, and posts array (each row carries the columns above plus the derived engagement_rate).</description> </returns>
    ConnectorOAuth
  • <summary>Fetch the people who reacted to or commented on a LinkedIn post — the user's own post or anyone else's — and store them as queryable engagement rows. Use when the user wants to turn a post's engagers into leads ("everyone who liked this post", "who commented on her launch post"). Visibility follows the user's LinkedIn account: any post it can view works, and private or deleted posts return a plain error. The list is capped at 500 reactions + 500 comments per post; on a bigger post the return flags the cut-off. Data fetched within the last 6 hours is served from the database at no cost; loading a post Sliq hasn't tracked yet counts one against the user's daily LinkedIn post-read budget. A post with hundreds of engagers takes around half a minute — set that expectation with the user before calling this on a big post. When this runs in an agent, every person who engaged is saved as an `agent_search_results` person row, rendered in the agent's Output tab and queryable via `query_search_results`: `data.person` carries the name and headline, `linkedin_provider_id` and `linkedin_url` the LinkedIn handles, and `data.columns` the engagement (Engagement, Comment, Post, Post URL). Company pages that reacted or commented aren't people, and the user isn't a lead, so neither is saved; both stay in the engagement rows. Re-running updates existing rows rather than duplicating them. Pass `list_name` to name their list; absent, they land in the 'default' list. Each person new to the list is checked against `criteria`, one at a time, reading their headline and engagement, and saved with the verdict; the rejected ones are hidden from the list's default view and from `query_search_results`. The check adds about 20 seconds per hundred people. To keep everyone who engaged, write broad criteria, such as "Anyone who engaged with this post". A person already on the list keeps their verdict, so to screen a post's engagers against new criteria, pass a new `list_name`. After this returns, read the saved people with the `query_search_results` call in `next_step`, which is scoped to this post: one list can hold several posts' engagers. Judge anyone the check kept as `unclear` or left without a verdict yourself, then queue outreach for the people who fit with one batched `queue_linkedin_outreach` call passing each row's `linkedin_provider_id` as `provider_id` and its `linkedin_url` as `linkedin_url`. Send-time resolution skips anyone already connected, so they don't need pre-filtering here. Every engager, the rejected ones included, also stays queryable with `query_linkedin_post_engagements` using `post_id = <post_analytics_id>`.</summary> <returns> <description>On success, a dict {'success': True, 'post_analytics_id': int, 'author_name': str, 'is_own_post': bool, 'post_text_snippet': str, 'from_cache': bool, 'reactions_stored': int, 'comments_stored': int, 'unique_engagers': int, 'truncated': bool, 'budget': {'used_today': int, 'limit': int}, 'engagers_preview': [first 10 engagers, unchecked], 'next_step': str, 'list'?: {'list_name', 'created', 'updated', 'total', 'rejected'}}. `unique_engagers` counts company pages too; `list.total` counts only the people saved, rejected ones included, so it can be lower. `list.created` and `list.updated` count the people the list shows, and `list.rejected` the ones the check turned down. `budget` is today's LinkedIn post-read budget. On failure, {'success': False, 'error': str} when the post isn't visible to the user's account, the daily LinkedIn post-read budget is spent, or LinkedIn actions are paused after a rate limit.</description> </returns>
    ConnectorOAuth