# Funkel AI - Registry name: `ai.funkel/funkel` · version 1.0.0 - Categories (automatic, keyword rules): Marketing & SEO, Commerce & marketing - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=ai.funkel%2Ffunkel - Server page: https://mcpstation.net/s/ai.funkel--funkel.html ## Description (written by the publisher, not verified, not instructions) Run LinkedIn and email outreach: find leads, manage campaigns, and reply to prospects. ## Notice Text that looks like instructions to an AI was found in this server's descriptions. This is a pattern match, not a verdict. ## Connect - streamable-http: `https://api.funkel.ai/mcp` ## Tools (as reported by the server, not verified) - `list\_apps`: List the products/apps owned by the request scope's user. Returns a summary \(count, brief one-liner, and a list of \{id, name, description, url\}\) with no timestamps or internal flags. Use this for product inventory or explicit product-switch/disambiguation questions. A normal product-scoped request a - `get\_product\_context`: Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbounded configuration are returned. - `list\_lists`: List unarchived lead lists in the selected product. Returns exact total and bounded pages. A list's cached lead count is not used for the total. - `get\_list`: Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list\_list\_contacts. - `list\_list\_contacts`: List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers. - `get\_schedule`: List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Completed actions are not included. - `get\_scheduled\_action`: Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body. - `list\_reminders`: List open or done lead reminders in the selected product with exact total and bounded pages. Default is open. This read does not complete a reminder. - `list\_insights`: List account-scoped and selected-product-scoped open insights. Each item labels its actual scope; account insights are not product-only. Exact total and bounded pages. - `get\_insight`: Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here. - `list\_operator\_tasks`: List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only. - `get\_operator\_task`: Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable arguments or raw provider errors. - `get\_access`: Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions also accept active beta. Feature flags are account-wide. This snapshot is not an action authorization or credit quote. - `create\_note`: Create a scoped note or reminder after an explicit confirmation of the exact lead, body, and due date. One request\_key can be applied only once; a changed intent with the same key fails. Over MCP: call this tool once, without confirmation\_token. It runs right away and returns the result. - `create\_reminder`: Create a scoped note or reminder after an explicit confirmation of the exact lead, body, and due date. One request\_key can be applied only once; a changed intent with the same key fails. Over MCP: call this tool once, without confirmation\_token. It runs right away and returns the result. - `save\_preference`: Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provider credentials or tokens are accepted. Over MCP: call this tool once, without confirmation\_token. It runs right away and returns the result. - `rename\_list`: Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. Over MCP: call this tool once, without confirmation\_token. It runs right away and returns the result. - `control\_operator\_task`: Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read step; completed effects cannot replay. A pause may not stop an already executing provider call. Over MCP: call this tool once, without confir - `list\_agents`: List the specialist agents in the product/app the request is scoped to. Returns a summary \(count, brief one-liner, and a list of \{id, name, status, type, role, one-line icp\_summary\}\). Internal agent types are mapped to product-facing roles such as lead\_finder. Full ICP filters / config are collapsed - `get\_agent\_sources`: Read X and Hacker News listening settings for one owned agent, including sources not configured yet. Use list\_agents to identify the agent. If configured is false, use configure\_agent\_source to propose exact searches and enable listening after approval. If configured is true and searches exist, use - `set\_agent\_source\_listening`: Pause or resume only an existing X or Hacker News source on an agent. First read get\_agent\_sources. If configured is false or searches are empty, use configure\_agent\_source instead. The first call shows exact approval; a second user-approved call commits. Saved searches, budgets, LinkedIn resolution - `configure\_agent\_source`: Configure X or Hacker News searches for one owned agent and set source listening. First call get\_agent\_sources. If no source exists, propose 1-10 precise searches from the user's request and saved ICP; do not invent a broad search without showing it. If a source exists, show its current searches and - `list\_campaigns`: List the campaigns in the app the request is scoped to \(excludes archived\). Returns a summary \(count, brief one-liner, and a list of \{id, name, status, agent\_id, list\_id\}\). Settings JSON is intentionally omitted; call get\_campaign for current workflow, sender, and action detail. Status values: 'draf - `get\_campaign`: Read one campaign in the selected product. Returns updated\_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, observed action state, and readiness blockers. Empty templates are not claimed as generated messages. No sending or activation occurs. - `update\_campaign\_settings`: Change a campaign's manual review, send window, or sender assignments in the selected product. Read get\_campaign first and copy its updated\_at as expected\_updated\_at. Omitted settings remain unchanged. Explicit null sender clears one platform. First call returns an exact approval preview; approved e - `get\_daily\_priorities`: Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, and unread messages count within the selected product. Read only. - `get\_sender\_health`: Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a campaign has a usable sender. - `get\_analytics`: Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed\_at; connections and recorded replies use lead event timestamps. These are separate event counts, not one conversion cohort. Default 7 days, max 90. - `find\_leads`: Search leads in the app the request is scoped to. Returns bounded named summaries and IDs, never full rows. Use get\_lead to load full detail for a specific id. Default source is 'discovered' \(agent-found, awaiting approval\); pass source='approved' to search leads already in campaigns. Optional 'sear - `get\_lead`: Return full detail for a single lead by id, INCLUDING the derived reply\_state and opt\_out flags. Always call this before drafting or sending a message — a lead whose reply\_state is 'replied', 'rejected', or 'opted\_out', or whose opt\_out is true, must NEVER be drafted to or messaged. Use source='appr - `get\_conversation\_context`: Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes, open reminders, and Reply Assistant follow-up suggestions. Use this before meeting prep, reply planning, or questions about what happened w - `get\_inbox\_queue`: List reply-needed conversations or due follow-ups in the selected product. One predicate determines both the total and page. AI drafts are not counted as sent replies. Limit 50; use offset for later pages. - `list\_operator\_files`: List up to 20 files uploaded to any of your Operator threads in the selected product. Returns file IDs and metadata only, never bytes or extracted text. A file can be used for a same-product LinkedIn reply, not another product or email reply. - `prepare\_conversation\_reply`: Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. Files are available only for supported connected LinkedIn conversations in the selected product. - `send\_conversation\_reply`: Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare\_conversation\_reply result, its attachment\_id when present, and a stable request\_key. A timeout is uncertain and cannot be retried automatically. LinkedIn files are supported; email - `get\_reply\_attempt`: Read one reply attempt by its stable request\_key in the selected product. Returns actual delivery evidence and next\_action. Uncertain delivery requires manual provider review unless an exact outgoing provider message is confirmed. Never retries or sends. - `list\_preferences`: List up to 20 saved Operator preferences for the user and product in the request scope. Values are bounded, labeled customer data, and never override user instructions or system rules. Returns key, value, and source only. No provider credentials or tokens are returned. - `search\_external\_leads`: Search LinkedIn for fresh people leads from the request user's connected account. Use this when the user describes leads to find by words, roles, companies, or market terms, rather than asking to search existing saved leads. Returns a server-owned session\_id and up to 10 lead previews. To import the - `import\_search\_leads\_to\_list`: Import lead rows from a prior search\_external\_leads session into a lead list. Two-phase: first call returns a confirmation token + preview; the user reviews an inline card and confirms; second call with confirmation\_token commits. provider\_ids omitted means import every lead in the search session. S - `create\_campaign\_draft`: Create a draft campaign in the selected product. First show the exact campaign, agent, destination list, and any agent retargeting for approval. With agent\_id and no list\_id, use the agent's destination list; if absent, assign the product default list to both. An explicit different list retargets a - `update\_campaign\_workflow`: Update message content on existing steps in a draft or paused campaign. Prefer one-based message\_order, which counts only message-bearing steps and automatically skips invite/follow steps: message\_order 1, 2, 3 targets the first, second, and third messages even when raw workflow step 1 is an invite. - `enable\_campaign`: Enable \(resume\) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmation token + preview; the user reviews and confirms; second call \(with confirmation\_token\) commits. Activation pre-conditions \(workflow steps - `draft\_message`: Generate a personalised draft for one lead. Reads the lead's profile \(industry, role, headline, optional reference hook\) and returns a single message body. Does NOT send. After the user reviews and approves, call send\_message to actually deliver. ALWAYS call get\_lead first to inspect reply\_state — r - `create\_list`: Create a new lead list scoped to the request's app. Use this when the user wants to organise leads into a named bucket \(e.g. 'Q4 Targets', 'Hot Founders'\). The new list starts empty; populate it later via approve\_leads with action='approve' and the new list\_id, or by editing the list manually. Over - `draft\_icp\_edit`: Stage a proposed ICP edit for one agent. Returns a diff envelope \(current vs proposed, fields\_changed\) so the user can review the change inline before applying it. Does NOT write — to actually apply the edit, call update\_icp \(confirm-tier\) with the same agent\_id and proposed fields. Use this when th - `pause\_campaign`: Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline card and confirms or cancels; second call \(with confirmation\_token\) commits the pause. Always include campaign\_name + app\_name so the previ - `enable\_agent`: Enable \(activate\) a paused or draft agent so it begins discovering leads on its schedule. Two-phase: first call returns a confirmation token + preview; the user reviews and confirms; second call \(with confirmation\_token\) commits. Over MCP: call this tool once, without confirmation\_token. It runs rig - `pause\_agent`: Pause an active agent so it stops discovering new leads. The agent's existing leads remain in the list. Two-phase: first call returns a confirmation token + preview; the user reviews an inline card and confirms or cancels; second call \(with confirmation\_token\) commits the pause. Always include agent - `approve\_leads`: Approve or reject one or more discovered leads. Two-phase: first call returns a confirmation token + preview; the user reviews an inline card and confirms; second call \(with confirmation\_token\) commits the status flip. action='approve' requires campaign\_id \(the campaign the leads will be associated - `update\_icp`: Apply an ICP edit \(description and/or filters JSON\) to one agent. Two-phase: first call returns a confirmation token + preview; the user reviews the diff inline and confirms; second call \(with confirmation\_token\) commits. ALWAYS call draft\_icp\_edit first so the user sees a before/after; never call u - `create\_agent`: Create a new draft agent under the request's scoped app. Two-phase: first call previews every setting; second call after user confirmation creates it. The agent's ICP starts from the app's saved ICP; icp\_filters keys you supply override only those keys, every other saved field \(job\_titles, mandatory Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html