Iridium - LinkedIn for AI Agents
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение
Что умеет
- List Tools: List Tools The Iridium tools available to this account, filtered by what the user has enabled. Useful for answering "what can you do?" without guessing. A tool absent from this list is swi
- Search Prospects: Search Prospects Search LinkedIn for people and return the matching profiles. Reads only, drafts nothing. USE THIS when the user wants to see who is out there before committing to an
- Discover Prospects: Discover Prospects Instantly search for people, read their profiles, and generate connection note drafts, all in about 10 to 15 seconds. Returns draft handles ready to approve or s
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
Список инструментов сервера (53)
Технические названия из tools/list. Нужны только разработчикам.
| list_tools | List Tools The Iridium tools available to this account, filtered by what the user has enabled. Useful for answering "what can you do?" without guessing. A tool absent from this list is switched off for this account, so do not offer it. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| search_prospects | Search Prospects Search LinkedIn for people and return the matching profiles. Reads only, drafts nothing. USE THIS when the user wants to see who is out there before committing to anything, or wants a longer list than discover_prospects returns. DO NOT USE when the user wants messages written. discover_prospects searches and drafts a connection note for each person in one call. Results are read live from LinkedIn at the time of the call. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| discover_prospects | Discover Prospects Instantly search for people, read their profiles, and generate connection note drafts, all in about 10 to 15 seconds. Returns draft handles ready to approve or skip. Complement to run_outreach_pipeline, which works from the user's saved targets. Data accuracy: profile names, companies, and headlines are fetched live from LinkedIn and reflect real, current information. Notes reference actual post content when available; when no posts are found, notes are conservative and based only on verifiable headline/company data. suggested_send_at is a suggestion only. Nothing sends until approve_draft is explicitly called. Drafts remain in pending_review indefinitely. Each draft includes a `profile` field with: about, current_role, past_companies, education, certifications, skills, follower_count, recent_posts. Display this alongside the note so the user understands who was found. Args: query: Search query e.g. "ML engineer at Series B startup" location: Location filter e.g. "San Francisco Bay Area" limit: Max prospects to process (1-10, default 5) ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_linkedin_profile | Get Linkedin Profile Look up LinkedIn profile(s) for a person. At least one of name, linkedin_id, or iridium_handle must be provided. company, education, location, headline_keywords are optional hints that narrow a name-based search. Returns {"results": [...], "total": N, "query_used": str | None}. Results are fully read: about, current_role, past_companies, education, certifications, skills, recent_posts, and prof_handle. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| create_sequence | Create Sequence CURRENTLY DISABLED. This tool returns 501 and creates nothing. Multi-step sequences are switched off while the per-recipient safety checks are rebuilt. Do not call this. To do multi-step follow-up today, approve one message now and schedule the next with schedule_manual_dm or schedule_chat_reply at a later send_at. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| enroll_prospect | Enroll Prospect CURRENTLY DISABLED. This tool returns 501 and enrolls nobody. See create_sequence. Schedule follow-ups explicitly instead. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_drafts | List Drafts Connection-note drafts waiting for review. Nothing here has been sent. Each entry has a draft_ handle, who it is addressed to, a preview of the note, and the time Iridium suggests sending it. Show the notes to the user and let them decide. Approving is a separate step: call approve_draft only when the user explicitly asks. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| approve_draft | Approve Draft Approve one connection-note draft and schedule it. THIS SENDS. Call it only when the user has explicitly asked for this specific draft to go out. Finding or drafting something is not permission to approve it. The connection request counts against the user's daily limit. Returns a draft_ handle for the scheduled send, usable with reschedule_send and cancel_scheduled, so there is no need to call list_scheduled afterwards. Args: handle: draft_ handle from list_drafts, discover_prospects, or run_outreach_pipeline. override_text: replacement note text. Omit to send the drafted text as written. send_at: "now" to send immediately, or ISO-8601 with an offset, for example "2026-06-11T09:00:00+00:00". Omit and Iridium picks a sensible time. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| skip_draft | Skip Draft Discard a connection-note draft without sending it. Nothing goes to LinkedIn. Args: handle: draft_ handle from list_drafts. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| rewrite_draft | Rewrite Draft Rewrite a connection-note draft with an instruction. Does not send. The rewrite runs in the background, so the new text is not in the response. Call get_draft_detail or list_drafts afterwards to read the result. Args: handle: draft_ handle from list_drafts. instruction: what to change, for example "shorter", "lead with the mutual connection", "drop the compliment". ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_draft_detail | Get Draft Detail Everything Iridium knows about one connection-note draft: the full note text, the angle it was written from, and the profile it is addressed to. Read-only. Use this when the user asks why a draft says what it says, or wants the full text that list_drafts only previews. Args: handle: draft_ handle from list_drafts. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_scheduled | List Scheduled Everything approved and queued to send, with the time each one goes out. These have been approved and WILL send unless cancelled. Use reschedule_send to move one and cancel_scheduled to stop it. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| cancel_scheduled | Cancel Scheduled Cancel a scheduled send so it never goes out. Nothing reaches LinkedIn. Args: handle: draft_ handle from list_scheduled or approve_draft. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| reschedule_send | Reschedule Send Move a pending send to a different time. It has already been approved, so it will send. Args: handle: draft_ handle from list_scheduled or approve_draft send_at: "now" to send immediately, else ISO-8601 e.g. "2026-06-11T09:00:00+00:00" ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| schedule_manual_dm | Schedule Manual Dm Schedule a direct message to someone you're already connected with. Use list_chats to find the chat_handle for a conversation. Args: chat_handle: chat_ handle from list_chats or list_replies text: Message text to send send_at: "now" to send immediately, else ISO-8601 e.g. "2026-06-11T09:00:00+00:00" message_type: "direct_message" (default) or "inmail" ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| search_chats | Search Chats Search your LinkedIn inbox by message content and by structured filters, all local (no LinkedIn quota). Free text matches participant names and message bodies (e.g. "who mentioned CMU"). Operators can be passed in `q` or as discrete args: is:unread/read · from:<name> · company:<name> · after:/before:<YYYY-MM-DD> · newer:<N>d · older:<N>d Returns chat handles ready for get_thread / schedule_chat_reply. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| find_stale_threads | Find Stale Threads Surface dropped balls, meaning threads with no activity in `days`: ghosted → you sent the last message and got no reply owed_reply → they replied and you haven't responded Threads with a pending scheduled reply are excluded. Oldest first. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| summarize_thread | Summarize Thread Structured summary of one conversation so you don't re-read it: participants, company, the core ask, current state, and the suggested next step. Cached until a new message arrives (pass force=true to recompute). Args: chat_handle: chat_ handle from list_chats / search_chats force: recompute even if a fresh cached summary exists ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| classify_inbox | Classify Inbox Triage the inbox into buckets (default: recruiter_inbound, candidate_reply, cold_outreach_reply, spam) with a confidence per thread. Cache-first and bounded to `limit` classifications per call, so repeat it to finish a large backlog (`remaining`). Args: taxonomy: optional custom list of labels to bucket into limit: max threads to (re)classify this call (default 25) ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| schedule_dm_to_person | Schedule Dm To Person Send or schedule a direct message to a person named in plain English. THIS SENDS. Resolves the name itself: it checks existing conversations, then saved profiles, then LinkedIn search. The response carries a `confidence` field. When it is low, confirm the match with the user before the message goes out rather than trusting the resolution. USE THIS when the user names someone and no chat_ handle is at hand. DO NOT USE when you already have a chat_ handle. Use schedule_manual_dm instead. Args: name: the person's name as the user said it. text: the exact message to send. send_at: "now" to send immediately, or ISO-8601 with an offset. profile_handle: prof_ handle, to skip resolution when it is already known. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_replies | List Replies Inbound threads awaiting a reply (they messaged last, not yet actioned). Returns chat handles ready for draft_reply / get_thread / schedule_chat_reply. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| backfill_chats | Backfill Chats Pull all existing LinkedIn conversations from Unipile into Iridium. Run this once after connecting LinkedIn to populate your inbox. Also repairs any blank participant names from a previous backfill. Takes 10-30 seconds depending on conversation count. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_chats | List Chats The user's LinkedIn conversations, most recent first. Reads from Iridium's synced copy, so it uses no LinkedIn quota. Returns chat_ handles for get_thread, summarize_thread, draft_reply, and schedule_manual_dm. If the inbox looks empty on a new account, run backfill_chats once. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_thread | Get Thread Read a full LinkedIn conversation with one person, local-first, using no Unipile quota once synced. Returns the most recent messages oldest-first; pass `before` (the returned next_cursor) to scroll up into older history. Args: chat_handle: chat_ handle from list_chats / search_chats before: next_cursor from a prior call, to load older messages limit: messages per page (default 10, max 50) ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| schedule_chat_reply | Schedule Chat Reply Send or schedule a message into an existing conversation. THIS SENDS. It goes into a thread that already exists, so it creates no new connection and does not count against the daily connection limit. Call it only when the user has approved this specific message. Args: chat_handle: chat_ handle from list_chats or search_chats. text: the exact message to send. send_at: "now" to send immediately, or ISO-8601 with an offset. Omit for immediate. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| draft_reply | Draft Reply Generate a reply to a conversation, using the full thread + your voice, for review. Creates a pending reply draft, one per thread. Approve, rewrite, or skip it next. Args: chat_handle: chat_ handle from list_chats / search_chats / list_replies intent: optional steer for the reply (a goal or tone) ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_reply_drafts | List Reply Drafts Pending inbound-reply drafts awaiting your review. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| approve_reply_draft | Approve Reply Draft Approve a reply draft and schedule it into the existing thread. THIS SENDS. It adds no new connection and does not count against the daily limit. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| rewrite_reply_draft | Rewrite Reply Draft Rewrite a reply draft with an instruction, for example 'shorter' or 'propose Tuesday'. Does not send. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| skip_reply_draft | Skip Reply Draft Discard a reply draft without sending. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_user_profile | Get User Profile The user's Iridium account state: daily limits and how much of each is used today, counts of pending drafts and queued sends, unread replies, and whether LinkedIn is connected. Read-only. Check this before any bulk action to see what capacity is left. It does not return the user's saved topics or keywords, so do not claim to read or confirm those. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| update_settings | Update Settings Change the user's targeting and limits. Persists immediately, sends nothing. Every field is optional and only the ones passed are changed. Pipelines read these settings, so this is how "only comment on AI posts" or "cap me at 5 a day" gets applied. Args: daily_connection_cap: connection requests per day. daily_comment_cap: comments per day, capped at 25. target_keywords: keywords searched when finding people. target_locations: cities or countries to search in. comment_topics: subjects searched when finding posts to comment on. content_topics: subjects the user's own posts are drafted about. goals: which pipelines are active. Any of "outreach", "commenting", "content". voice_dna: writing rules applied to every draft. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| run_outreach_pipeline | Run Outreach Pipeline Draft 3 connection notes against the user's saved targets and return them inline in about 5 seconds. Produces drafts only and sends nothing. After calling this tool, ALWAYS display every draft to the user in full: **[Name], [Headline] at [Company]** [note_text, displayed in full] Suggested send: [suggested_send_at] Do NOT call approve_draft or schedule anything unless the user explicitly asks. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| run_commenting_pipeline | Run Commenting Pipeline Generate up to 3 LinkedIn comment drafts on relevant posts, found by searching all of LinkedIn for the user's saved comment_topics. USE THIS when the user wants to comment by TOPIC, or names no target in particular: "find me some posts to comment on" "comment on posts about RAG" "who's worth engaging with this week?" DO NOT USE when the user names specific companies ("comment on posts from people at Stripe"). Use run_company_commenting_pipeline instead. After calling this tool, ALWAYS display every draft to the user in full: **Post by [author_name]:** [post_text, the complete text, never truncated] **Drafted comment:** [comment_text, displayed in full] Do NOT call approve_comment_draft or schedule anything unless the user explicitly asks. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| run_company_commenting_pipeline | Run Company Commenting Pipeline Generate LinkedIn comment drafts on recent posts by people who work at specific companies. USE THIS when the user names one or more companies: "comment on posts from people at Stripe" "I want to be visible to Anthropic and OpenAI engineers" "engage with anything Ramp employees posted this week" DO NOT USE for topic- or keyword-based commenting ("find me AI posts to comment on", "comment on posts about RAG"). Use run_commenting_pipeline instead, which searches the whole of LinkedIn by the user's saved comment_topics. How it differs: this tool searches by AUTHOR COMPANY and recency only, with no keyword filter, because ANDing a keyword against a single employer usually returns nothing. Topical relevance is then judged by the model over whatever those employees actually posted. As a result it may legitimately return zero drafts if nobody at those companies posted anything worth engaging with; that is a valid outcome, not an error, and you should say so plainly rather than retrying. Takes up to 5 companies per call. Companies with no matching LinkedIn page come back in unresolved_companies, so tell the user which ones failed. After calling this tool, ALWAYS display every draft to the user in full: **Post by [author_name] ([company]):** [post_text, the complete text, never truncated] **Drafted comment:** [comment_text, displayed in full] Do NOT call approve_comment_draft or schedule anything unless the user explicitly asks. Args: companies: Company names, e.g. ["Stripe", "Ramp"]. Max 5. n: How many drafts to generate (default 3, capped by the user's remaining daily cap). date_posted: "past_24h" | "past_week" | "past_month". Default "past_week". ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| run_content_pipeline | Run Content Pipeline Draft LinkedIn posts for the user to publish, from their saved content topics and voice. Produces drafts only and publishes nothing. Runs in the background and returns immediately. Call list_content_drafts to read the results. Requires content topics to be set, otherwise it returns an error saying so. Runs at most once a day, and returns status "skipped" with reason "already ran today" on a second call. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_comment_drafts | List Comment Drafts List pending comment drafts awaiting review. ALWAYS display every draft to the user in full: **Post by [author_name]:** [post_text, the complete text, never truncated] **Drafted comment:** [comment_text, displayed in full] Do NOT call approve_comment_draft or schedule anything unless the user explicitly asks. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| approve_comment_draft | Approve Comment Draft Approve one comment draft and schedule it to post. THIS PUBLISHES A PUBLIC COMMENT. The comment appears on someone else's post under the user's name, so call this only when the user has explicitly approved this specific comment. It counts against their daily comment limit. Args: handle: cdft_ handle from list_comment_drafts. comment_text: replacement text. Omit to post the drafted text as written. comment_at: "now" to post immediately, or ISO-8601 with an offset. Omit to let Iridium pick a time. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| skip_comment_draft | Skip Comment Draft Discard a comment draft without posting it. Nothing reaches LinkedIn. Args: handle: cdft_ handle from list_comment_drafts. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| rewrite_comment_draft | Rewrite Comment Draft Rewrite a comment draft with an instruction. Does not post. The rewrite runs in the background, so call list_comment_drafts afterwards to read the new text. Args: handle: cdft_ handle from list_comment_drafts. instruction: what to change, for example "shorter", "ask a question at the end", "drop the praise". Omit for a general retry. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| edit_comment_draft | Edit Comment Draft Replace a comment draft's text with text the user wrote. Saves only, does not post. Use this when the user dictates their own wording. Approving is still a separate step. Args: handle: cdft_ handle from list_comment_drafts. comment_text: the exact text to store on the draft. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| list_content_drafts | List Content Drafts The user's own LinkedIn post drafts, waiting for review. Nothing here has been published. These are posts the user would publish under their own name, distinct from comment drafts (which go on other people's posts) and outreach drafts (which are connection notes). Show each draft in full and let the user decide. Publishing is a separate step. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| approve_content_draft | Approve Content Draft Publish or schedule one of the user's own LinkedIn posts. THIS POSTS PUBLICLY. The post appears on the user's profile. Call this only when they have explicitly approved this specific post. Args: handle: ctnt_ handle from list_content_drafts. post_text: the final text to publish. Required, because the user is expected to edit before publishing. scheduled_at: ISO-8601 with an offset to schedule it. Omit to publish immediately. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| skip_content_draft | Skip Content Draft Discard a post draft without publishing it. Nothing reaches LinkedIn. Args: handle: ctnt_ handle from list_content_drafts. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| rewrite_content_draft | Rewrite Content Draft Rewrite a post draft with an instruction. Does not publish. The rewrite runs in the background, so call list_content_drafts afterwards to read the new text. Args: handle: ctnt_ handle from list_content_drafts. instruction: what to change, for example "punchier hook", "cut it in half", "end on a question". ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| connect_linkedin_credentials | Connect Linkedin Credentials Connect LinkedIn via username and password. Creates a fresh Unipile-managed session. It does NOT touch your existing browser session, so your LinkedIn tab stays logged in. If LinkedIn requires 2FA, returns checkpoint=True with an account_id. Follow up with connect_linkedin_checkpoint to complete the flow. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| connect_linkedin_checkpoint_mcp | Connect Linkedin Checkpoint Mcp Submit a LinkedIn 2FA verification code to complete the connection. Use this after connect_linkedin_credentials returns checkpoint=True. Args: account_id: The account_id returned by connect_linkedin_credentials code: The verification code LinkedIn sent to your email or phone ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| connect_linkedin_url | Connect Linkedin Url Get a Unipile hosted-auth URL to connect LinkedIn. The user opens this URL in their browser to complete the OAuth flow. No password or cookie is needed. Connection is confirmed automatically via webhook once the user completes the flow. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| connect_linkedin_li_at | Connect Linkedin Li At Connect LinkedIn by pasting your li_at session cookie. Lower friction than OAuth, with no redirect needed. To get your li_at cookie: 1. Log in to linkedin.com in Chrome 2. Open DevTools → Application → Cookies → linkedin.com 3. Copy the value of the 'li_at' cookie ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| disconnect_linkedin | Disconnect Linkedin Disconnect your LinkedIn account from Iridium. Removes the connection from Unipile and clears it from your profile. Everything that needs LinkedIn stops until it is reconnected. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_activity_log | Get Activity Log Read the user's activity log. Every action Iridium has taken, newest first. Iridium records every attempted action in an append-only ledger: what ran, when, whether it succeeded, and the text that was actually sent. This tool reads it. Nothing is sent or changed by calling it. USE THIS when the user asks what happened, in any form: "what did you do today?" "did that comment actually post?" "show me everything from yesterday" "what failed?" Answer from this log rather than from memory of earlier turns in the conversation. The log is the record; the conversation is not. Each entry has: at, action (readable label), surface, status, target (who or what it touched), summary (one sentence), detail (the text that was sent), and error when it failed. Entries older than the user's data-retention window may have no target name, because the profile behind it has been erased. That is expected and is not a failure. Args: limit: Entries per page, 1-100 (default 20). cursor: next_cursor from a previous call, to fetch the following page. surface: "linkedin" for actions taken on LinkedIn, "iridium" for actions inside Iridium such as sign-ins and draft decisions. Omit for both. status: "success", "failed", or "skipped". Omit for all. action_type: exact slug filter, e.g. "comment_send". Omit for all. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| get_last_action | Get Last Action Read back the single most recent action Iridium took, with its full text. Use this to confirm something just happened, after approving or scheduling anything, or when the user asks "did that work?". Cheaper than get_activity_log when only the last action matters. Nothing is sent or changed by calling it. Returns {"item": null} if the account has no recorded actions yet. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |
| delete_account | Delete Account Delete your Iridium account. Deactivates your account immediately, destroys the LinkedIn session at Unipile, and cancels your subscription. All scheduled work stops at once. Your personal data (profiles, drafts, chats, settings) is retained for 30 days and then permanently erased; your action history is retained for audit. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json |