{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_gx4hwpsdxr87","handle":"funkel-ai","url":"https://wellknown.network/agents/funkel-ai","links":{"self":"https://wellknown.network/agents/funkel-ai/record.json","html":"https://wellknown.network/agents/funkel-ai","markdown":"https://wellknown.network/agents/funkel-ai/record.md","api":"https://wellknown.network/api/v1/agents/funkel-ai","status":"https://wellknown.network/api/v1/agents/funkel-ai/status","claim":"https://wellknown.network/agents/funkel-ai/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/funkel-ai/claim.json","badge":"https://wellknown.network/agents/funkel-ai/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/funkel-ai/history","tools":"https://wellknown.network/api/v1/agents/funkel-ai/tools"},"ard":{"identifier":"urn:air:api.funkel.ai:server:funkel-ai","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Funkel AI","summary":"Run LinkedIn and email outreach: find leads, manage campaigns, and reply to prospects.","description":"Run LinkedIn and email outreach: find leads, manage campaigns, and reply to prospects.","publisher":{"name":"ai.funkel","url":null},"homepage":"https://funkel.ai","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.funkel.ai/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-16T15:27:29.231933Z","publishedAt":"2026-10-16T15:27:29.231933Z","registryName":"ai.funkel/funkel"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.email","name":"Email","confidence":1,"provenance":"derived"},{"slug":"productivity.tasks","name":"Tasks & To-do","confidence":1,"provenance":"derived"},{"slug":"content.social","name":"Social Media","confidence":0.938,"provenance":"derived"},{"slug":"content.marketing","name":"Marketing","confidence":0.938,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":0.859,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.554,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"}],"categories":["content","dev","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-10-25T20:29:24.420Z","lastProbedAt":"2026-10-25T20:29:24.420Z","statusComputedAt":"2026-10-25T20:31:15.885Z","reliability30d":{"probes":29,"successRate":1,"p50Ms":155,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":29,"ok":29,"authBoundaryOk":0,"serviceOk":29,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-25T20:29:24.420Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":235,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T13:33:15.271Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":180,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T06:26:36.928Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":155,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T23:28:22.668Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":150,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T16:23:40.369Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":199,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T09:25:31.236Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":123,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T02:23:06.422Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":156,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T20:26:06.094Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":192,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T14:29:52.110Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":161,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T08:30:19.070Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":213,"error":null,"detail":{"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"toolCount":51,"toolsHash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","serverName":"funkel","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_apps","description":"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 timesta"},{"name":"get_product_context","description":"Read the selected product's name, site, description, ICP summary, language, Product Brain availability, and dashboard link. No provider credentials or raw unbou"},{"name":"list_lists","description":"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."},{"name":"get_list","description":"Read one unarchived list in the selected product and its exact member count. Does not return contacts; use list_list_contacts."},{"name":"list_list_contacts","description":"List contacts in one unarchived list in the selected product. Returns exact total and bounded pages. Does not expose email or provider identifiers."},{"name":"get_schedule","description":"List pending, approved, or failed scheduled actions in the selected product, optionally for one campaign. Returns one bounded page and its exact total. Complete"},{"name":"get_scheduled_action","description":"Read one action in the selected product: campaign, lead, type, state, scheduled and executed timestamps. Does not return provider metadata or a message body."},{"name":"list_reminders","description":"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."},{"name":"list_insights","description":"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"},{"name":"get_insight","description":"Read one insight and its evidence for the selected product, or an explicitly account-scoped insight. Read-only; proposed changes never run here."},{"name":"list_operator_tasks","description":"List durable Operator tasks in the selected product. Returns bounded pages, exact total, task status, version, and links. Read-only."},{"name":"get_operator_task","description":"Read one durable Operator task in the selected product with its step states, action states, safe summaries, version, and progress. Does not return executable ar"},{"name":"get_access","description":"Read current account access for Operator and campaign actions in the selected product. Operator requires active paid or lifetime entitlement; campaign actions a"},{"name":"create_note","description":"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 inten"},{"name":"create_reminder","description":"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 inten"},{"name":"save_preference","description":"Save one selected-product Operator preference after explicit approval. The value is bounded JSON data, not a system instruction. Existing keys update. No provid"},{"name":"rename_list","description":"Rename one unarchived list in the selected product after explicit approval. Supply its current name to reject stale changes; include the full new description. O"},{"name":"control_operator_task","description":"Pause, resume, cancel, or retry a durable Operator task after exact approval. Supply its current version. Retry also requires one failed idempotent local-read s"},{"name":"list_agents","description":"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, "},{"name":"get_agent_sources","description":"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 fal"},{"name":"set_agent_source_listening","description":"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_"},{"name":"configure_agent_source","description":"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 search"},{"name":"list_campaigns","description":"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"},{"name":"get_campaign","description":"Read one campaign in the selected product. Returns updated_at for exact approved settings changes, plus workflow, sender assignments, schedule, review mode, obs"},{"name":"update_campaign_settings","description":"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_updat"},{"name":"get_daily_priorities","description":"Rank up to four live operational starting points with source IDs and links. Connected senders and insights count across the account; leads, actions, campaigns, "},{"name":"get_sender_health","description":"Show account-wide connected sender health and separate readiness for campaign assignments in the selected product. An account-wide connection does not prove a c"},{"name":"get_analytics","description":"Return product- or campaign-scoped activity in a UTC lookback interval. Completed actions and invitations use executed_at; connections and recorded replies use "},{"name":"find_leads","description":"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. "},{"name":"get_lead","description":"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 "},{"name":"get_conversation_context","description":"Return bounded conversation context for one lead or conversation in the request scope: lead profile, product/campaign context, last real messages, recent notes,"},{"name":"get_inbox_queue","description":"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 r"},{"name":"list_operator_files","description":"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 "},{"name":"prepare_conversation_reply","description":"Prepare one exact local inbound reply. Returns recipient, sender, channel, inbound revision, final signed body, and optional owned file identity. Never sends. F"},{"name":"send_conversation_reply","description":"Send one exact prepared reply to the latest inbound message after explicit human approval. Provide the complete prepare_conversation_reply result, its attachmen"},{"name":"get_reply_attempt","description":"Read one reply attempt by its stable request_key in the selected product. Returns actual delivery evidence and next_action. Uncertain delivery requires manual p"},{"name":"list_preferences","description":"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 instr"},{"name":"search_external_leads","description":"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 "},{"name":"import_search_leads_to_list","description":"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 "},{"name":"create_campaign_draft","description":"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 a"},{"name":"update_campaign_workflow","description":"Update message content on existing steps in a draft or paused campaign. Prefer one-based message_order, which counts only message-bearing steps and automaticall"},{"name":"enable_campaign","description":"Enable (resume) a paused or draft campaign. The campaign engine starts scheduling actions per the campaign's workflow. Two-phase: first call returns a confirmat"},{"name":"draft_message","description":"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"},{"name":"create_list","description":"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 "},{"name":"draft_icp_edit","description":"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 "},{"name":"pause_campaign","description":"Pause an active campaign. The campaign engine stops scheduling actions. Two-phase: first call returns a confirmation token + preview; the user reviews an inline"},{"name":"enable_agent","description":"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"},{"name":"pause_agent","description":"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 + pre"},{"name":"approve_leads","description":"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; seco"},{"name":"update_icp","description":"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"},{"name":"create_agent","description":"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"}],"package":null,"toolSurface":{"id":"ts_2qb45zr736bz","endpointId":"ep_tnq8t5us6d8q","hash":"e09018e6201c713acbd516ca4037d7f8b5c2032039c4b063483b4efe38092cd3","toolCount":51,"serverName":"funkel","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-17T19:28:44.238Z","lastSeenAt":"2026-10-25T20:29:24.428Z","observations":29,"toolNames":["list_apps","get_product_context","list_lists","get_list","list_list_contacts","get_schedule","get_scheduled_action","list_reminders","list_insights","get_insight","list_operator_tasks","get_operator_task","get_access","create_note","create_reminder","save_preference","rename_list","control_operator_task","list_agents","get_agent_sources","set_agent_source_listening","configure_agent_source","list_campaigns","get_campaign","update_campaign_settings","get_daily_priorities","get_sender_health","get_analytics","find_leads","get_lead","get_conversation_context","get_inbox_queue","list_operator_files","prepare_conversation_reply","send_conversation_reply","get_reply_attempt","list_preferences","search_external_leads","import_search_leads_to_list","create_campaign_draft","update_campaign_workflow","enable_campaign","draft_message","create_list","draft_icp_edit","pause_campaign","enable_agent","pause_agent","approve_leads","update_icp","create_agent"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"ai.funkel/funkel","url":"https://registry.modelcontextprotocol.io/v0/servers/ai.funkel%2Ffunkel","firstSeenAt":"2026-10-17T19:22:08.062Z","fetchedAt":"2026-10-24T18:22:31.170Z","normalizedAt":"2026-10-24T18:22:31.170Z"}]},"firstSeenAt":"2026-10-17T19:22:08.062Z","updatedAt":"2026-10-25T20:32:29.939Z"}