{"version":"v1","generated_at":"2026-06-02T07:50:21.753Z","docs_url":"https://docs.zevari.ai/mcp/reference","api_reference_url":"https://docs.zevari.ai/api/reference","summary":{"tool_count":123,"public_api_equivalent_count":93,"mcp_only_count":30,"sensitive_tool_count":34,"families":[{"name":"agents.generation","count":10},{"name":"agents.scoring","count":3},{"name":"campaigns","count":10},{"name":"campaigns.activation","count":1},{"name":"confirmations","count":4},{"name":"content","count":20},{"name":"context","count":3},{"name":"destructive_cleanup","count":8},{"name":"entities","count":20},{"name":"leads_inbox","count":18},{"name":"linkedin.content","count":6},{"name":"linkedin.messaging","count":3},{"name":"linkedin.profile_read","count":5},{"name":"linkedin.safety","count":5},{"name":"linkedin.search","count":3},{"name":"pipeline","count":4}]},"tools":[{"tool_name":"actions_chat_reject_confirmation","display_name":"Reject confirmation in chat","family":"confirmations","description":"Reject a pending confirmation from chat after the user replies with the exact reject phrase returned by actions_get_confirmation_preview.","input_schema":{"type":"object","properties":{"confirmation_id":{"type":"string","description":"The pac_* confirmation id to reject."},"rejection_phrase":{"type":"string","description":"The exact reject_phrase the user replied with, e.g. 'Reject Zevari action pac_...'."},"user_rejection_text":{"type":"string","description":"Short transcript excerpt showing the user's rejection reply."}},"required":["confirmation_id","rejection_phrase"],"additionalProperties":false},"example_args":{"confirmation_id":"example_id","rejection_phrase":"string"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"confirmations","requires":["zevari_context_get"],"can":["Stage, preview, revise, approve, or reject Zevari pending action confirmations."],"cannot":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat."],"must_not_infer":["Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary."],"clarify_when":["The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"user_guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback."],"recovery":["If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#approval-confirmation-contracts"},"gotchas":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat.","Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary.","The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback.","If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."]},{"tool_name":"actions_chat_update_confirmation","display_name":"Update confirmation in chat","family":"confirmations","description":"Revise a pending single-action confirmation before approval. Provide a complete replacement_payload using the same executing tool schema. The server re-normalizes the payload, recomputes hashes/risk/approval channels, increments revision, rotates any chat approval phrase, and invalidates prior approval phrases. Bulk confirmations are not editable through this tool.","input_schema":{"type":"object","properties":{"confirmation_id":{"type":"string","description":"The pac_* confirmation id to revise."},"replacement_payload":{"type":"object","additionalProperties":{},"description":"The COMPLETE replacement payload for the original action_type. Start from actions_get_confirmation_preview.preview_payload, apply the user's requested edits, and include every required field."},"expected_revision":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Optional optimistic lock. Pass the current revision from actions_get_confirmation_preview when available."},"user_edit_summary":{"type":"string","maxLength":500,"description":"Short transcript excerpt describing the user's requested edit."}},"required":["confirmation_id","replacement_payload"],"additionalProperties":false},"example_args":{"confirmation_id":"example_id","replacement_payload":{}},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"confirmations","requires":["zevari_context_get"],"can":["Stage, preview, revise, approve, or reject Zevari pending action confirmations."],"cannot":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat."],"must_not_infer":["Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary."],"clarify_when":["The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"user_guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback."],"recovery":["If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#approval-confirmation-contracts"},"gotchas":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat.","Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary.","The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback.","If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."]},{"tool_name":"actions_get_confirmation_preview","display_name":"Get confirmation preview","family":"confirmations","description":"Fetch the canonical server-staged preview for a pending confirmation, including risk_class, operating context, approval channels, browser approval URL, and any chat approval phrase. Show this preview to the user before asking them to approve or reject.","input_schema":{"type":"object","properties":{"confirmation_id":{"type":"string","description":"The pac_* confirmation id returned by actions_request_confirmation or actions_request_bulk_confirmation."}},"required":["confirmation_id"],"additionalProperties":false},"example_args":{"confirmation_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"confirmations","requires":["zevari_context_get"],"can":["Stage, preview, revise, approve, or reject Zevari pending action confirmations."],"cannot":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat."],"must_not_infer":["Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary."],"clarify_when":["The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"user_guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback."],"recovery":["If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#approval-confirmation-contracts"},"gotchas":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat.","Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary.","The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback.","If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."]},{"tool_name":"actions_request_confirmation","display_name":"Request action approval","family":"confirmations","description":"Stage an approval-gated destructive or sensitive action intent for user approval. MUST be called before single outbound LinkedIn/email writes, campaign activation, and the allowlisted campaign/bulk actions named in action_type. Do NOT use this for entity persistence tools such as targets_save, targets_create_list, profile_update, voice_dna_save, brand_positioning_upsert, brand_stories_upsert, content_save, or signals_save; call those tools directly. For eligible low/medium-risk actions, returns chat_approval.approval_phrase and instruction_for_user; show that exact phrase to the user and call actions_chat_approve_confirmation after they reply with it. Also returns approval_url as browser fallback. For ≥2 outbound LinkedIn actions in the same turn, use actions_request_bulk_confirmation instead — one URL covers every item.","input_schema":{"type":"object","properties":{"action_type":{"type":"string","enum":["linkedin_send_message","linkedin_send_inmail","linkedin_send_connection_request","linkedin_create_post","linkedin_comment_on_post","linkedin_react_to_post","email_send_message","campaign_activate","campaign_update_target_set","campaign_update_step_config","bulk_delete","bulk_export","agents_enrich_email_batch"],"description":"The exact allowlisted action family this confirmation gates. Valid values are LinkedIn/email sends/InMails/posts/comments/reactions, campaign_activate, campaign_update_target_set, campaign_update_step_config, bulk_delete, bulk_export, and agents_enrich_email_batch. For campaign activation, use 'campaign_activate' with payload={campaign_id: <id>}. Entity saves such as targets_save are not valid action_types and do not need confirmation."},"payload":{"type":"object","additionalProperties":{},"description":"The COMPLETE action payload using the executing tool's exact field names. LinkedIn writes are validated at stage time; linkedin_comment_on_post/linkedin_react_to_post postId values are resolved to Unipile social_id before approval. After approval, execution uses this stored approved payload as the source of truth."},"cost_estimate_cents":{"type":"integer","minimum":0,"description":"Estimated external cost in cents (e.g. Wiza reveals). Shown to the user on the approval page."}},"required":["action_type","payload"],"additionalProperties":false},"example_args":{"action_type":"linkedin_send_message","payload":{}},"sensitive":true,"api_equivalent":{"method":"confirmations.requestAction","path":"/v1/confirmations/requestAction","docs_url":"https://docs.zevari.ai/api/reference#confirmations-requestAction","summary":"Request action approval"},"capability_contract":{"version":"2026-05-22.1","family":"confirmations","requires":["zevari_context_get"],"can":["Stage, preview, revise, approve, or reject Zevari pending action confirmations."],"cannot":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat."],"must_not_infer":["Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary."],"clarify_when":["The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"user_guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback."],"recovery":["If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#approval-confirmation-contracts"},"gotchas":["Execute the sensitive action by itself or approve high-risk/browser-only confirmations from chat.","Do not treat a pac_* id as approved, reusable, or unexpired without previewing or executing against the confirmation boundary.","The user references an old pac_* id, asks to edit staged payloads, or approval channel availability is unclear."],"guidance":["Show exact chat approval phrases when provided; otherwise use the approval_url as browser fallback.","If confirmation is expired, consumed, rejected, or drifted, stage a fresh confirmation with the current payload."]},{"tool_name":"agents_behavioral_profile","display_name":"Generate behavioral profile","family":"agents.generation","description":"Analyze a person's LinkedIn posts and comments to generate a DISC behavioral profile, decision style, and communication playbook for outreach.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.behavioralProfile","path":"/v1/agents/behavioralProfile","docs_url":"https://docs.zevari.ai/api/reference#agents-behavioralProfile","summary":"Generate behavioral profile"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_classify_signals","display_name":"Classify signals","family":"agents.scoring","description":"Classify a batch of LinkedIn posts into signal types: hiring, funding, expansion, pain point, product launch, or not a signal.","input_schema":{"type":"object","properties":{"keyword":{"type":"string","description":"Single keyword to search LinkedIn posts for"},"date_posted":{"type":"string","enum":["past_day","past_week","past_month"],"default":"past_day","description":"How recent the posts should be"},"language":{"type":"string","default":"en","description":"Language filter (ISO code)"},"max_posts":{"type":"number","minimum":1,"maximum":100,"default":50,"description":"Max posts to return (default 50, max 100)"}},"required":["keyword"],"additionalProperties":false},"example_args":{"keyword":"string"},"sensitive":false,"api_equivalent":{"method":"agents.classifySignals","path":"/v1/agents/classifySignals","docs_url":"https://docs.zevari.ai/api/reference#agents-classifySignals","summary":"Classify signals"},"capability_contract":{"version":"2026-05-22.1","family":"agents.scoring","requires":["zevari_context_get"],"can":[],"cannot":[],"must_not_infer":[],"clarify_when":["Required ICP inputs, target identity, or saved profile fallback fields are missing."],"user_guidance":["Use 3+ signal scores for outbound prioritization; label any manual score as agent-derived."],"recovery":["If a scoring tool returns a rubric or invalid output, treat it as stale/regressed and retry after reconnecting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#scoring-contracts"},"gotchas":["Required ICP inputs, target identity, or saved profile fallback fields are missing."],"guidance":["Use 3+ signal scores for outbound prioritization; label any manual score as agent-derived.","If a scoring tool returns a rubric or invalid output, treat it as stale/regressed and retry after reconnecting."]},{"tool_name":"agents_communication_blueprint","display_name":"Generate communication blueprint","family":"agents.generation","description":"Synthesize all available research on a prospect into a unified outreach strategy with recommended channel, tone, hooks, and CTA.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"sender_company":{"type":"string","description":"Your company name (falls back to stored profile)"},"sender_description":{"type":"string","description":"What your company does (falls back to stored profile)"},"product_offering":{"type":"string","description":"What you sell (falls back to stored profile)"},"campaign_goal":{"type":"string","description":"Campaign goal (e.g., book_meeting, start_conversation)"},"resource_url":{"type":"string","description":"Resource URL for CTA (e.g., calendar link, landing page)"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.communicationBlueprint","path":"/v1/agents/communicationBlueprint","docs_url":"https://docs.zevari.ai/api/reference#agents-communicationBlueprint","summary":"Generate communication blueprint"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_company_intelligence","display_name":"Research company intelligence","family":"agents.generation","description":"Research a company's LinkedIn profile, recent activity, and employee context to produce firmographic intelligence for ICP scoring and personalization.","input_schema":{"type":"object","properties":{"company_identifier":{"type":"string","description":"Company public identifier (LinkedIn URL slug)"},"employee_identifier":{"type":"string","description":"An employee's LinkedIn identifier for additional context"}},"required":["company_identifier"],"additionalProperties":false},"example_args":{"company_identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.companyIntelligence","path":"/v1/agents/companyIntelligence","docs_url":"https://docs.zevari.ai/api/reference#agents-companyIntelligence","summary":"Research company intelligence"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_enrich_email","display_name":"Enrich email address","family":"agents.generation","description":"Find verified work and personal email addresses for a target using Wiza. Requires the target's LinkedIn URL.","input_schema":{"type":"object","properties":{"linkedin_profile_url":{"type":"string","description":"LinkedIn profile URL to enrich (e.g. https://linkedin.com/in/johndoe)"},"linkedin_url":{"type":"string","description":"Alias for linkedin_profile_url."},"url":{"type":"string","description":"Alias for linkedin_profile_url."},"lead_id":{"type":"string","description":"Target ID in the database — if provided, updates the record directly"}},"additionalProperties":false},"example_args":{"linkedin_profile_url":"https://www.linkedin.com/in/example/","linkedin_url":"https://www.linkedin.com/in/example/"},"sensitive":true,"api_equivalent":{"method":"agents.enrichEmail","path":"/v1/agents/enrichEmail","docs_url":"https://docs.zevari.ai/api/reference#agents-enrichEmail","summary":"Enrich email address"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Enrich a single lead's email through the configured enrichment path."],"cannot":["Authorize large paid batch enrichment through the single-lead tool."],"must_not_infer":["Do not loop paid enrichment at scale without explicit user intent and applicable confirmation path."],"clarify_when":["The user asks for many reveals, paid enrichment, or unclear lead identity."],"user_guidance":["For batch paid enrichment, use the approved batch confirmation path when available."],"recovery":["If enrichment cannot identify a lead, ask for lead ID, profile URL, company, or email clues."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#approval-confirmation-contracts"},"gotchas":["Authorize large paid batch enrichment through the single-lead tool.","Do not loop paid enrichment at scale without explicit user intent and applicable confirmation path.","The user asks for many reveals, paid enrichment, or unclear lead identity."],"guidance":["For batch paid enrichment, use the approved batch confirmation path when available.","If enrichment cannot identify a lead, ask for lead ID, profile URL, company, or email clues."]},{"tool_name":"agents_extract_search_params","display_name":"Extract search parameters","family":"agents.generation","description":"Convert a natural language target description into structured LinkedIn Sales Navigator search parameters (job titles, industries, locations, seniority).","input_schema":{"type":"object","properties":{"search_prompt":{"type":"string","description":"Natural language search query (e.g., 'Find CEOs in real estate in California')"}},"required":["search_prompt"],"additionalProperties":false},"example_args":{"search_prompt":"string"},"sensitive":false,"api_equivalent":{"method":"agents.extractSearchParams","path":"/v1/agents/extractSearchParams","docs_url":"https://docs.zevari.ai/api/reference#agents-extractSearchParams","summary":"Extract search parameters"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_generate_connection_note","display_name":"Generate connection note","family":"agents.generation","description":"Generate a personalized LinkedIn connection request note (max 300 chars) based on the prospect's profile and your business context. Before using this for real outreach, call library_context_get(skill_slug='craft-outreach', include_examples=true) and apply the returned Outreach template plus Brand context.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"sender_name":{"type":"string","description":"Your name (falls back to stored profile)"},"sender_company":{"type":"string","description":"Your company (falls back to stored profile)"},"product_offering":{"type":"string","description":"What you sell (falls back to stored profile)"},"language":{"type":"string","default":"English","description":"Language for the note"},"template_slug":{"type":"string","description":"Outreach template slug (e.g. 'hook-starter-active'). Prefer the primary_outreach_templates value returned by library_context_get. Falls back to the built-in connection-note instructions when omitted."},"template_variant":{"type":"string","description":"Variant within the template's framework (e.g. 'active' or 'inactive' for hook-starter). Ignored when the slug already encodes the variant."},"custom_prompt":{"type":"string","description":"One-shot prompt override. Replaces the template prompt for this call only."}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.generateConnectionNote","path":"/v1/agents/generateConnectionNote","docs_url":"https://docs.zevari.ai/api/reference#agents-generateConnectionNote","summary":"Generate connection note"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_generate_messages","display_name":"Generate outreach messages","family":"agents.generation","description":"Generate a 3-message LinkedIn outreach sequence (initial + 2 follow-ups) personalized to the prospect's profile and your business context. Before using this for real outreach, call library_context_get(skill_slug='craft-outreach', include_examples=true) and apply the returned Outreach template plus Brand context.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"sender_name":{"type":"string","description":"Your name (falls back to stored profile)"},"sender_company":{"type":"string","description":"Your company name (falls back to stored profile)"},"product_offering":{"type":"string","description":"What you sell (falls back to stored profile)"},"message_type":{"type":"string","enum":["cold_outreach","warm_followup","connection_accepted","content_engagement"],"default":"cold_outreach","description":"Type of message sequence"},"campaign_goal":{"type":"string","enum":["book_meeting","start_conversation","podcast_guest_invite","webinar_event_invite","free_audit_resource","get_published_pr","partnership_inquiry","feedback_review_request","other"],"description":"Campaign goal for CTA alignment (falls back to profile default)"},"resource_url":{"type":"string","description":"Resource URL for CTA (e.g., calendar link, landing page)"},"language":{"type":"string","default":"English","description":"Language for messages"},"template_slug":{"type":"string","description":"Outreach template slug (e.g. 'pain-led', 'hook-starter-active'). Prefer the primary_outreach_templates value returned by library_context_get. Falls back to the built-in 3-message instructions when omitted."},"template_variant":{"type":"string","description":"Variant within the template's framework. For hook-starter pass 'active' or 'inactive'. Ignored when the slug already encodes the variant."},"custom_prompt":{"type":"string","description":"One-shot prompt override. Replaces the template prompt for this call only."}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.generateMessages","path":"/v1/agents/generateMessages","docs_url":"https://docs.zevari.ai/api/reference#agents-generateMessages","summary":"Generate outreach messages"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_generate_warming_comment","display_name":"Generate warming comment","family":"agents.generation","description":"Generate a natural, on-brand LinkedIn comment for a warming sequence — complimentary but not salesy, designed to get on the prospect's radar. Before using this for real outreach, call library_context_get(skill_slug='thought-leader-engagement', content_type='comment', include_examples=true) and apply the returned Content template plus Brand context.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"persona_type":{"type":"string","enum":["vc","saas_founder","recruiter","consultant"],"description":"Your persona type for tone matching (falls back to stored profile, then saas_founder)"},"max_chars":{"type":"number","default":200,"description":"Max comment length"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.generateWarmingComment","path":"/v1/agents/generateWarmingComment","docs_url":"https://docs.zevari.ai/api/reference#agents-generateWarmingComment","summary":"Generate warming comment"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_icp_score","display_name":"Score ICP fit","family":"agents.scoring","description":"Score a prospect 1-5 on ideal customer profile fit based on industry, role, company size, location, and your stored ICP criteria.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID to score"},"target_industry":{"type":"string","description":"Target industry for ICP (falls back to stored profile)"},"target_role":{"type":"string","description":"Target role/title (falls back to stored profile)"},"target_company_size":{"type":"string","description":"Target company size (falls back to stored profile)"},"target_location":{"type":"string","description":"Target location (falls back to stored profile)"},"product_offering":{"type":"string","description":"What you sell (falls back to stored profile)"},"company_description":{"type":"string","description":"Your company description (falls back to stored profile)"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.icpScore","path":"/v1/agents/icpScore","docs_url":"https://docs.zevari.ai/api/reference#agents-icpScore","summary":"Score ICP fit"},"capability_contract":{"version":"2026-05-22.1","family":"agents.scoring","requires":["zevari_context_get"],"can":[],"cannot":[],"must_not_infer":[],"clarify_when":["Required business-side criteria are missing and saved profile fallback is insufficient."],"user_guidance":[],"recovery":["If server-side AI returns invalid output, treat the tool result as an error and retry later."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#icp-scoring"},"gotchas":["Required business-side criteria are missing and saved profile fallback is insufficient."],"guidance":["If server-side AI returns invalid output, treat the tool result as an error and retry later."]},{"tool_name":"agents_inbox_radar","display_name":"Scan inbox radar","family":"leads_inbox","description":"Scan the LinkedIn inbox for high-intent signals — lead magnet requests, meeting inquiries, warm replies — and return prioritized alerts.","input_schema":{"type":"object","properties":{"limit":{"type":"number","default":10,"description":"Number of recent chats to analyze"},"keywords":{"type":"array","items":{"type":"string"},"description":"Lead magnet keywords to match (e.g., ['LEADS', 'PLAYBOOK'])"},"unread_only":{"type":"boolean","default":true,"description":"Only analyze unread messages"}},"additionalProperties":false},"example_args":{"limit":10,"keywords":["string"]},"sensitive":false,"api_equivalent":{"method":"inbox.radar","path":"/v1/inbox/radar","docs_url":"https://docs.zevari.ai/api/reference#inbox-radar","summary":"Scan inbox radar"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"agents_personalize","display_name":"Extract personalization hooks","family":"agents.generation","description":"Extract the most relevant and interesting content from a prospect's recent posts for use as personalization hooks in outreach.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"product_offering":{"type":"string","description":"What you sell (falls back to stored profile)"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.personalize","path":"/v1/agents/personalize","docs_url":"https://docs.zevari.ai/api/reference#agents-personalize","summary":"Extract personalization hooks"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_research_person","display_name":"Research prospect","family":"agents.generation","description":"Gather comprehensive research on a prospect: profile, recent posts, comments, education, skills, and company. Prerequisite for personalization and ICP scoring.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier or provider ID"},"include_posts":{"type":"boolean","default":true,"description":"Fetch recent posts"},"include_comments":{"type":"boolean","default":true,"description":"Fetch recent comments"},"include_sections":{"type":"boolean","default":true,"description":"Fetch education, skills, certifications"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"agents.researchPerson","path":"/v1/agents/researchPerson","docs_url":"https://docs.zevari.ai/api/reference#agents-researchPerson","summary":"Research prospect"},"capability_contract":{"version":"2026-05-22.1","family":"agents.generation","requires":["zevari_context_get"],"can":["Generate research, personalization, copy, comments, connection notes, and enrichment-oriented analysis from available context."],"cannot":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals."],"must_not_infer":["Do not invent missing profile facts, company facts, or prior conversation state."],"clarify_when":["The target, audience, tone, source context, or intended channel is unclear."],"user_guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Guarantee truth beyond retrieved context or execute outbound sends without separate write tools and approvals.","Do not invent missing profile facts, company facts, or prior conversation state.","The target, audience, tone, source context, or intended channel is unclear."],"guidance":["Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If context is thin, read profile/lead/library context or ask the user for the missing facts before drafting."]},{"tool_name":"agents_score_signals","display_name":"Score signals","family":"agents.scoring","description":"Score classified signals 1-5 on intent strength and produce persona-aware insights and recommended next actions.","input_schema":{"type":"object","properties":{"signals":{"type":"array","items":{"type":"object","properties":{"post_id":{"type":"string"},"text":{"type":"string"},"author_name":{"type":"string"},"author_headline":{"type":"string"},"signal_type":{"type":"string"},"confidence":{"type":"number"},"keyword_matched":{"type":"string"}},"required":["post_id","text","signal_type","confidence","keyword_matched"],"additionalProperties":false},"description":"Classified signals to score"},"persona_type":{"type":"string","enum":["vc","saas_founder","recruiter","consultant","pe"],"description":"Your sales persona type (falls back to stored profile, then saas_founder)"},"negative_keywords":{"type":"array","items":{"type":"string"},"description":"Keywords that disqualify signals"}},"required":["signals"],"additionalProperties":false},"example_args":{"signals":[{"post_id":"example_id","text":"string","signal_type":"string","confidence":1,"keyword_matched":"string"}]},"sensitive":false,"api_equivalent":{"method":"agents.scoreSignals","path":"/v1/agents/scoreSignals","docs_url":"https://docs.zevari.ai/api/reference#agents-scoreSignals","summary":"Score signals"},"capability_contract":{"version":"2026-05-22.1","family":"agents.scoring","requires":["agents_classify_signals"],"can":[],"cannot":["Treat _instructions or rubric-only output as scored signal results."],"must_not_infer":[],"clarify_when":["Candidate posts, lead identity, or signal source is unclear."],"user_guidance":[],"recovery":["If a rubric appears, classify it as stale/tool-unavailable and retry after reconnecting."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#signal-scoring"},"gotchas":["Treat _instructions or rubric-only output as scored signal results.","Candidate posts, lead identity, or signal source is unclear."],"guidance":["If a rubric appears, classify it as stale/tool-unavailable and retry after reconnecting."]},{"tool_name":"brand_context_get","display_name":"Get brand context","family":"entities","description":"Retrieve the user's active-workspace brand context (Voice DNA, positioning, stories) to ground generated outreach and content. Use before writing customer-facing text when you only need brand context.","input_schema":{"type":"object","properties":{"sections":{"type":"array","items":{"type":"string","enum":["voice","positioning","stories"]},"description":"Optional subset of Brand sections to load"}},"additionalProperties":false},"example_args":{"sections":["voice"]},"sensitive":false,"api_equivalent":{"method":"brandContext.get","path":"/v1/brandContext/get","docs_url":"https://docs.zevari.ai/api/reference#brandContext-get","summary":"Get brand context"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"brand_positioning_upsert","display_name":"Upsert brand positioning","family":"entities","description":"Create or update the active workspace's Brand Positioning asset in Library.","input_schema":{"type":"object","properties":{"brand_profile":{"type":"object","additionalProperties":{},"description":"Structured brand profile: company, offer, audience, positioningSummary"},"differentiators":{"type":"array","items":{"type":"string"},"description":"Meaningful differences AI should reinforce"},"content_pillars":{"type":"array","items":{"type":"string"},"description":"3-5 recurring topics or angles AI should reinforce"},"cta_strategy":{"type":"object","additionalProperties":{},"description":"CTA defaults: goal, resourceUrl, notes"},"key_phrases":{"type":"array","items":{"type":"string"},"description":"Preferred phrases, claims, and wording patterns"},"testimonials":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Proof points, testimonials, or customer quotes"},"status":{"type":"string","enum":["active","draft","disabled"]},"version_bump":{"type":"string","enum":["patch","minor","major"],"default":"patch"},"change_reason":{"type":"string","maxLength":500}},"additionalProperties":false},"example_args":{"brand_profile":{},"differentiators":["string"]},"sensitive":false,"api_equivalent":{"method":"brandPositioning.upsert","path":"/v1/brandPositioning/upsert","docs_url":"https://docs.zevari.ai/api/reference#brandPositioning-upsert","summary":"Upsert brand positioning"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"brand_stories_upsert","display_name":"Upsert brand stories","family":"entities","description":"Create or update the active workspace's Brand Stories asset in Library.","input_schema":{"type":"object","properties":{"origin_story":{"type":"string","maxLength":5000,"description":"The origin story people should understand"},"founder_stories":{"type":"array","items":{"type":"string"},"description":"Founder/operator stories AI can reuse"},"customer_stories":{"type":"array","items":{"type":"string"},"description":"Customer stories, proof moments, or before/after examples"},"reusable_hooks":{"type":"array","items":{"type":"string"},"description":"Reusable hooks or story openings"},"narrative_themes":{"type":"array","items":{"type":"string"},"description":"Narrative themes AI should return to repeatedly"},"status":{"type":"string","enum":["active","draft","disabled"]},"version_bump":{"type":"string","enum":["patch","minor","major"],"default":"patch"},"change_reason":{"type":"string","maxLength":500}},"additionalProperties":false},"example_args":{"origin_story":"string","founder_stories":["string"]},"sensitive":false,"api_equivalent":{"method":"brandStories.upsert","path":"/v1/brandStories/upsert","docs_url":"https://docs.zevari.ai/api/reference#brandStories-upsert","summary":"Upsert brand stories"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"campaigns_add_targets","display_name":"Add campaign targets","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID to enroll targets into"},"targets":{"type":"array","items":{"type":"object","properties":{"lead_id":{"type":"string"},"linkedin_provider_id":{"type":"string"},"name":{"type":"string"},"lead_name":{"type":"string"},"url":{"type":"string"},"lead_url":{"type":"string"},"linkedin_profile_url":{"type":"string"},"profile_url":{"type":"string"},"email":{"type":"string","format":"email"},"lead_email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"template_slug":{"type":"string"},"template_variant":{"type":"string"}},"additionalProperties":false},"description":"Targets to add to the campaign"}},"required":["campaign_id","targets"],"additionalProperties":false},"example_args":{"campaign_id":"example_id","targets":[{"lead_id":"example_id","linkedin_provider_id":"example_id"}]},"sensitive":false,"api_equivalent":{"method":"campaigns.addTargets","path":"/v1/campaigns/addTargets","docs_url":"https://docs.zevari.ai/api/reference#campaigns-addTargets","summary":"Add campaign targets"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_advance_step","display_name":"Advance campaign step","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"target_id":{"type":"string","description":"Campaign target ID to advance"}},"required":["target_id"],"additionalProperties":false},"example_args":{"target_id":"example_id"},"sensitive":true,"api_equivalent":{"method":"campaigns.advanceStep","path":"/v1/campaigns/advanceStep","docs_url":"https://docs.zevari.ai/api/reference#campaigns-advanceStep","summary":"Advance campaign step"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_create","display_name":"Create campaign","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Campaign name"},"campaign_type":{"type":"string","enum":["warm_up","outreach","content","custom"],"description":"Campaign type"},"goal":{"type":"string","description":"Campaign goal (e.g. book_meeting, start_conversation). Falls back to user's default CTA goal."},"goal_custom":{"type":"string","description":"Custom goal text when goal is 'other'"},"resource_url":{"type":"string","description":"Resource URL for campaign CTA (e.g., calendar link)"},"settings":{"type":"object","additionalProperties":{},"description":"Campaign settings (working_hours, timezone, stop_on_reply, etc.)"},"skill_run_id":{"type":"string","description":"Required for MCP-created campaigns. Call skills_get with slug='launch-campaign' first and pass the returned skill_run_id."},"steps":{"type":"array","items":{"type":"object","properties":{"action_type":{"type":"string","enum":["view_profile","like_post","comment","connect","message","react_to_post","email_send"]},"delay_hours":{"type":"number","minimum":0,"default":0},"config":{"type":"object","additionalProperties":{},"description":"Step config. Outbound fields per action_type: connect→message (optional, ≤300 chars) or messages{slug:text}; message→body (required) or messages{slug:text}; comment→comment_text (required) or messages{slug:text}. For new campaigns, LinkedIn per-target maps MUST be keyed by exact linkedin_provider_id (ACoAAA...), and email per-target maps MUST be keyed by exact lead_email. POST DESTINATIONS (canonical): for like_post / react_to_post / comment, set config.post_refs as { \"<linkedin_provider_id>\": { \"id\": \"<numeric_activity_id>\" } }. Use { \"*\": { \"id\": \"...\" } } for one global post across all targets. For connect/message that reference a post, use config.context_post_refs with the same shape. Without post_refs, set config.post_resolution = \"dynamic\" to opt into most-recent-post resolution. For a threaded reply on a specific post, set config.comment_id (requires the post_refs entry to be that post). DO NOT submit config.post_id, config.post_url, config.context_post_id, or config.context_post_url as object maps — the server returns an invalid_post_destination_shape error pointing to post_refs. email_send→subject/subjects + body/messages. Omit from_address unless the user explicitly provided one; Zevari resolves the verified sender. Use config.instruction for internal notes — NEVER config.note (rejected)."}},"required":["action_type"],"additionalProperties":false},"minItems":1,"description":"Ordered list of campaign steps"},"targets":{"type":"array","items":{"type":"object","properties":{"lead_id":{"type":"string"},"linkedin_provider_id":{"type":"string"},"name":{"type":"string"},"lead_name":{"type":"string"},"url":{"type":"string"},"lead_url":{"type":"string"},"linkedin_profile_url":{"type":"string"},"profile_url":{"type":"string"},"email":{"type":"string","format":"email"},"lead_email":{"type":"string","format":"email"},"work_email":{"type":"string","format":"email"},"template_slug":{"type":"string"},"template_variant":{"type":"string"}},"additionalProperties":false},"minItems":1,"description":"Targets to enroll in the campaign"}},"required":["name","campaign_type","steps","targets"],"additionalProperties":false},"example_args":{"name":"string","campaign_type":"warm_up","steps":[{"action_type":"view_profile"}],"targets":[{"lead_id":"example_id","linkedin_provider_id":"example_id"}]},"sensitive":true,"api_equivalent":{"method":"campaigns.create","path":"/v1/campaigns/create","docs_url":"https://docs.zevari.ai/api/reference#campaigns-create","summary":"Create campaign"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_delete","display_name":"Campaigns Delete","family":"destructive_cleanup","description":"Hard-delete one or more campaigns in the active workspace/account. This is valid for any campaign status and removes campaign steps, targets, generated campaign payloads, recovery records, trusted activations, stale activation approvals, and pending execution jobs. Historical action/audit rows are preserved but detached from the deleted campaign ID. Destructive: only call after the user explicitly confirms the exact campaign IDs and sets confirm_delete=true.","input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Single campaign ID to delete"},"campaign_ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100,"description":"Campaign IDs to delete in one request"},"confirm_delete":{"type":"boolean","enum":[true],"description":"Required destructive confirmation. Set to true only after the user explicitly confirms the exact campaign ID(s) to hard-delete."}},"required":["confirm_delete"],"additionalProperties":false},"example_args":{"confirm_delete":true},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get","explicit exact campaign IDs","confirm_delete=true"],"can":["Hard-delete exact campaign IDs in the active workspace/account after the user explicitly confirms those IDs."],"cannot":["Create a Zevari approval URL, delete by broad criteria, delete across unknown scope, or undo the campaign delete."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete campaigns; require exact campaign IDs and explicit confirmation."],"clarify_when":["The user asks to delete all campaigns, old campaigns, failed campaigns, or any set not expressed as exact campaign IDs."],"user_guidance":["Read campaigns first, repeat the exact campaign IDs/names back to the user, then call campaigns_delete only with confirm_delete=true after explicit confirmation."],"recovery":["If the wrong campaign ID or broad scope is supplied, stop and ask for exact IDs before retrying."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Create a Zevari approval URL, delete by broad criteria, delete across unknown scope, or undo the campaign delete.","Do not treat a broad cleanup request as permission to delete campaigns; require exact campaign IDs and explicit confirmation.","The user asks to delete all campaigns, old campaigns, failed campaigns, or any set not expressed as exact campaign IDs."],"guidance":["Read campaigns first, repeat the exact campaign IDs/names back to the user, then call campaigns_delete only with confirm_delete=true after explicit confirmation.","If the wrong campaign ID or broad scope is supplied, stop and ask for exact IDs before retrying."]},{"tool_name":"campaigns_get","display_name":"Get campaign","family":"campaigns","description":"Get campaign steps and targets plus customer-safe execution context. For user-facing answers, rely on presentation_status, safe_customer_summary, connection_acceptance_status, and blockers; keep operator_summary for diagnosis and never expose approval IDs, job IDs, internal_detail, or raw provider errors.","input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID"}},"required":["campaign_id"],"additionalProperties":false},"example_args":{"campaign_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"campaigns.get","path":"/v1/campaigns/get","docs_url":"https://docs.zevari.ai/api/reference#campaigns-get","summary":"Get campaign"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_get_pending","display_name":"Get pending campaigns","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":100,"default":50,"description":"Max targets to return (default 50)"}},"additionalProperties":false},"example_args":{"limit":10},"sensitive":false,"api_equivalent":{"method":"campaigns.getPending","path":"/v1/campaigns/getPending","docs_url":"https://docs.zevari.ai/api/reference#campaigns-getPending","summary":"Get pending campaigns"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_get_progress","display_name":"Get campaign progress","family":"campaigns","description":"Summarize campaign execution progress with customer-safe presentation fields. Use presentation_status, safe_customer_summary, connection_acceptance_status, operator_summary, and blockers to answer what worked, what is blocked, who must act, and what to do next.","input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID"},"status_filter":{"type":"string","enum":["pending","in_progress","completed","replied","failed","failed_config","skipped","paused"],"description":"Filter targets by status"}},"required":["campaign_id"],"additionalProperties":false},"example_args":{"campaign_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"campaigns.getProgress","path":"/v1/campaigns/getProgress","docs_url":"https://docs.zevari.ai/api/reference#campaigns-getProgress","summary":"Get campaign progress"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_list","display_name":"List campaigns","family":"campaigns","description":"List campaigns with execution_presentation. Use presentation_status, safe_customer_summary, operator_summary, and blockers when explaining campaign health; do not turn raw status or last_error into customer-facing copy.","input_schema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","active","paused","completed","failed"]},"campaign_type":{"type":"string","enum":["warm_up","outreach","content","custom"]},"limit":{"type":"number","minimum":1,"maximum":50,"default":20}},"additionalProperties":false},"example_args":{"status":"draft","campaign_type":"warm_up"},"sensitive":false,"api_equivalent":{"method":"campaigns.list","path":"/v1/campaigns/list","docs_url":"https://docs.zevari.ai/api/reference#campaigns-list","summary":"List campaigns"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_update_status","display_name":"Update campaign status","family":"campaigns.activation","description":null,"input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID"},"status":{"type":"string","enum":["active","paused","completed","failed"],"description":"New status"},"fail_reason":{"type":"string","description":"Reason for failure (when status=failed)"},"confirmation_id":{"type":"string","description":"REQUIRED when status='active'. First call actions_request_confirmation with action_type='campaign_activate' and payload={campaign_id: <id>}. If the response includes chat_approval.approval_phrase, show that exact phrase to the user, call actions_chat_approve_confirmation after they reply with it, then retry this tool with the returned confirmation_id. Otherwise return the approval_url to the user, wait for browser approval, then retry this tool. Do NOT give the user a dashboard URL — use only the approval_url from actions_request_confirmation as fallback."}},"required":["campaign_id","status"],"additionalProperties":false},"example_args":{"campaign_id":"example_id","status":"active"},"sensitive":true,"api_equivalent":{"method":"campaigns.updateStatus","path":"/v1/campaigns/updateStatus","docs_url":"https://docs.zevari.ai/api/reference#campaigns-updateStatus","summary":"Update campaign status"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns.activation","requires":["actions_request_confirmation"],"can":["Activate an approved campaign status change after payload, sender, scope, taint, and launch gates pass."],"cannot":["Activate from a stale or drifted approval payload, or override LinkedIn/email launch gates."],"must_not_infer":["Do not treat an old campaign_activate confirmation as valid after campaign steps or targets changed."],"clarify_when":["Campaign state changed after staging approval or the user asks why activation was blocked."],"user_guidance":["Stage campaign_activate with payload={campaign_id}; use chat phrase when offered, otherwise approval_url."],"recovery":["On payload_drift or validation failure, refresh campaign state, fix blockers, and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#payload-boundary"},"gotchas":["Activate from a stale or drifted approval payload, or override LinkedIn/email launch gates.","Do not treat an old campaign_activate confirmation as valid after campaign steps or targets changed.","Campaign state changed after staging approval or the user asks why activation was blocked."],"guidance":["Stage campaign_activate with payload={campaign_id}; use chat phrase when offered, otherwise approval_url.","On payload_drift or validation failure, refresh campaign state, fix blockers, and stage a fresh confirmation."]},{"tool_name":"campaigns_update_step","display_name":"Update campaign step","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"step_id":{"type":"string","description":"Campaign step ID (from campaigns_get)"},"config":{"type":"object","additionalProperties":{},"description":"New step config. Canonical outbound fields per action_type: connect→message (optional, ≤300 chars) or messages{slug:text}; message→body (required) or messages{slug:text}; comment→comment_text (required) or messages{slug:text}. For new LinkedIn campaign maps, use exact linkedin_provider_id (ACoAAA...) keys only; for email maps, use exact lead_email keys only. Omit from_address unless the user explicitly provided one; Zevari resolves the verified sender. POST DESTINATIONS (canonical): set config.post_refs = { \"<target_key>\": { \"id\": \"<numeric_activity_id>\" } } for like_post / react_to_post / comment, or { \"*\": { \"id\": \"...\" } } for a global post. For connect/message contextual references, use config.context_post_refs with the same shape. To allow most-recent dynamic resolution, set config.post_resolution = \"dynamic\". For threaded replies, also set config.comment_id. Submitting config.post_id / post_url / context_post_id / context_post_url as object maps is rejected with invalid_post_destination_shape — use post_refs instead. Use config.instruction for internal notes. config.note is REJECTED."},"delay_hours":{"type":"number","minimum":0,"description":"New delay in hours (optional)"}},"required":["step_id","config"],"additionalProperties":false},"example_args":{"step_id":"example_id","config":{}},"sensitive":true,"api_equivalent":{"method":"campaigns.updateStep","path":"/v1/campaigns/updateStep","docs_url":"https://docs.zevari.ai/api/reference#campaigns-updateStep","summary":"Update campaign step"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_update_target","display_name":"Update campaign target","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"target_id":{"type":"string","description":"Campaign target ID to update"},"linkedin_provider_id":{"type":"string","description":"LinkedIn provider ID (ACoAAA... format)"},"lead_name":{"type":"string","description":"Target's display name"},"lead_url":{"type":"string","description":"LinkedIn profile URL"},"lead_email":{"type":"string","format":"email","description":"Target email address for email_send steps"},"status":{"type":"string","enum":["pending","paused","skipped"],"description":"New target status"}},"required":["target_id"],"additionalProperties":false},"example_args":{"target_id":"example_id"},"sensitive":true,"api_equivalent":{"method":"campaigns.updateTarget","path":"/v1/campaigns/updateTarget","docs_url":"https://docs.zevari.ai/api/reference#campaigns-updateTarget","summary":"Update campaign target"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"campaigns_validate","display_name":"Validate campaign","family":"campaigns","description":null,"input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID to validate before activation"}},"required":["campaign_id"],"additionalProperties":false},"example_args":{"campaign_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"campaigns.validate","path":"/v1/campaigns/validate","docs_url":"https://docs.zevari.ai/api/reference#campaigns-validate","summary":"Validate campaign"},"capability_contract":{"version":"2026-05-22.1","family":"campaigns","requires":["zevari_context_get"],"can":["Create, inspect, validate, update, and monitor Zevari campaigns and campaign targets in the active workspace."],"cannot":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements."],"must_not_infer":["Do not assume campaign creation means campaign activation."],"clarify_when":["The user asks to launch, resume, activate, or materially change outbound steps/targets."],"user_guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps."],"recovery":["If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#campaign-contracts"},"gotchas":["Activate a campaign without campaign_activate confirmation or ignore canonical target/post destination requirements.","Do not assume campaign creation means campaign activation.","The user asks to launch, resume, activate, or materially change outbound steps/targets."],"guidance":["Validate campaign payloads before launch; use exact provider IDs/emails for per-target maps.","If validation fails, fix target keys/post_refs/config fields and re-run validation before activation."]},{"tool_name":"content_calendar_list","display_name":"List content calendar","family":"content","description":"List scheduled / published / failed posts in a date range, ordered by scheduled time.","input_schema":{"type":"object","properties":{"from":{"type":"string","description":"Inclusive start ISO8601"},"to":{"type":"string","description":"Inclusive end ISO8601"},"statuses":{"type":"array","items":{"type":"string","enum":["draft","scheduled","publishing","published","failed","unknown","cancelled","archived"]}},"limit":{"type":"number","minimum":1,"maximum":200,"default":50}},"additionalProperties":false},"example_args":{"from":"string","to":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_cancel","display_name":"Cancel content schedule","family":"content","description":"Cancel a scheduled, failed, or unknown-state post. Note: cancelling 'unknown' rows does not delete the LinkedIn post if it actually went live — verify on LinkedIn.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Content ID to cancel"}},"required":["content_id"],"additionalProperties":false},"example_args":{"content_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_list","display_name":"List content drafts","family":"content","description":"List saved content drafts by type and status.","input_schema":{"type":"object","properties":{"content_type":{"type":"string","enum":["post","comment","connection_note","message_sequence","lead_magnet","article","report"]},"status":{"type":"string","enum":["draft","scheduled","publishing","published","failed","unknown","cancelled","archived"]},"limit":{"type":"number","minimum":1,"maximum":50,"default":20}},"additionalProperties":false},"example_args":{"content_type":"post","status":"draft"},"sensitive":false,"api_equivalent":{"method":"content.list","path":"/v1/content/list","docs_url":"https://docs.zevari.ai/api/reference#content-list","summary":"List content drafts"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_publish_now","display_name":"Publish content now","family":"content","description":"Publish a draft immediately. Resolves within ~1 minute as the scheduler ticks.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Draft content ID (must be content_type='post')"}},"required":["content_id"],"additionalProperties":false},"example_args":{"content_id":"example_id"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_save","display_name":"Save content draft","family":"content","description":"Save a content draft (post, comment, message, sequence). For LinkedIn posts the user wants scheduled, save the draft here, then **stop and tell the user to open https://zevari.ai/dashboard/content/{contentId} to upload any image or PDF and pick a publish time** — image attachments cannot be added through MCP unless the user already has a public HTTPS URL hosting the file. Do NOT call content_schedule yourself unless the user explicitly says they don't want to add media.","input_schema":{"type":"object","properties":{"content_type":{"type":"string","enum":["post","comment","connection_note","message_sequence","lead_magnet","article","report"],"description":"Type of content"},"title":{"type":"string","description":"Content title (for lead magnets, articles)"},"body":{"type":"string","description":"The content text"},"skill_id":{"type":"string","description":"Skill that generated this content"},"campaign_id":{"type":"string","description":"Associated campaign ID"},"voice_dna_used":{"type":"boolean","default":false,"description":"Whether Voice DNA was applied"},"variants":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"body":{"type":"string"}},"required":["label","body"],"additionalProperties":false},"description":"Alternative versions"},"metadata":{"type":"object","additionalProperties":{},"description":"Additional metadata"}},"required":["content_type","body"],"additionalProperties":false},"example_args":{"content_type":"post","body":"string"},"sensitive":false,"api_equivalent":{"method":"content.save","path":"/v1/content/save","docs_url":"https://docs.zevari.ai/api/reference#content-save","summary":"Save content draft"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_schedule","display_name":"Schedule content","family":"content","description":"Schedule a draft post for publication at a future timestamp. Locks editing until cancelled. **Only call this when the user has explicitly said they're done editing the draft and don't want to upload media via the dashboard.** Otherwise, save the draft via content_save and direct the user to /dashboard/content/{contentId} where they can upload images/PDFs and schedule with a calendar picker.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Draft content ID (must be content_type='post')"},"scheduled_for":{"type":"string","description":"ISO8601 timestamp ≥ 5 minutes in the future"}},"required":["content_id","scheduled_for"],"additionalProperties":false},"example_args":{"content_id":"example_id","scheduled_for":"string"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_templates_create","display_name":"Create content template","family":"content","description":"Create a new user-owned content template in the Library.","input_schema":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"description":"Lowercase slug (a-z, 0-9, hyphens). Must be unique within your account."},"name":{"type":"string","minLength":1,"maxLength":120,"description":"Human-readable name shown in Library"},"content_type":{"type":"string","enum":["post","comment"],"description":"Whether this template is for LinkedIn posts or comments"},"framework":{"type":"string","minLength":1,"maxLength":80,"description":"Framework family (e.g. 'thought-leadership', 'story', 'custom')"},"description":{"type":"string","maxLength":500},"purpose":{"type":"string","maxLength":2000},"variant":{"type":"string","maxLength":40},"prompt_components":{"type":"object","additionalProperties":{},"description":"Prompt components used by generation skills"},"structure_outline":{"type":"object","additionalProperties":{},"description":"UI-facing content structure outline"},"metadata":{"type":"object","additionalProperties":{},"description":"Discovery metadata such as audience, tone, CTA behavior, and constraints"}},"required":["slug","name","content_type","framework"],"additionalProperties":false},"example_args":{"slug":"string","name":"string","content_type":"post","framework":"string"},"sensitive":false,"api_equivalent":{"method":"contentTemplates.create","path":"/v1/contentTemplates/create","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-create","summary":"Create content template"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_templates_delete","display_name":"Delete content template","family":"destructive_cleanup","description":"Permanently delete a user-owned content template.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Slug of your user-owned content template to delete"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":true,"api_equivalent":{"method":"contentTemplates.delete","path":"/v1/contentTemplates/delete","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-delete","summary":"Delete content template"},"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"content_templates_fork","display_name":"Fork content template","family":"content","description":"Copy a system or existing content template into a new user-owned template for customization.","input_schema":{"type":"object","properties":{"source_slug":{"type":"string","description":"Slug of the template to fork"},"new_slug":{"type":"string","minLength":2,"maxLength":80,"description":"Slug for the new fork (must be unique within your account)"},"new_name":{"type":"string","minLength":1,"maxLength":120},"new_description":{"type":"string","maxLength":500}},"required":["source_slug","new_slug"],"additionalProperties":false},"example_args":{"source_slug":"string","new_slug":"string"},"sensitive":false,"api_equivalent":{"method":"contentTemplates.fork","path":"/v1/contentTemplates/fork","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-fork","summary":"Fork content template"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_templates_get","display_name":"Get content template","family":"content","description":"Fetch a single content template by slug, including its prompt components and structure.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Content template slug to fetch"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":{"method":"contentTemplates.get","path":"/v1/contentTemplates/get","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-get","summary":"Get content template"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_templates_list","display_name":"List content templates","family":"content","description":"Browse content post/comment templates in the library by framework, scope, and status.","input_schema":{"type":"object","properties":{"content_type":{"type":"string","enum":["post","comment"],"description":"Filter by content type"},"framework":{"type":"string","description":"Filter by framework family"},"scope":{"type":"string","enum":["system","user-owned","all"],"default":"all","description":"Filter by scope"},"status":{"type":"string","enum":["active","draft","disabled"],"default":"active","description":"Content template status filter"},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Max templates to return"}},"additionalProperties":false},"example_args":{"content_type":"post","framework":"string"},"sensitive":false,"api_equivalent":{"method":"contentTemplates.list","path":"/v1/contentTemplates/list","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-list","summary":"List content templates"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_templates_update","display_name":"Update content template","family":"content","description":"Edit a user-owned content template; changes are versioned.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Slug of the content template to update"},"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":500},"purpose":{"type":"string","maxLength":2000},"content_type":{"type":"string","enum":["post","comment"]},"framework":{"type":"string","minLength":1,"maxLength":80},"variant":{"type":"string","maxLength":40},"prompt_components":{"type":"object","additionalProperties":{}},"structure_outline":{"type":"object","additionalProperties":{}},"metadata":{"type":"object","additionalProperties":{}},"status":{"type":"string","enum":["active","draft","disabled"]},"version_bump":{"type":"string","enum":["patch","minor","major"],"default":"patch","description":"Semver bump kind for content changes. Status-only edits do not bump version."},"change_reason":{"type":"string","maxLength":500}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":{"method":"contentTemplates.update","path":"/v1/contentTemplates/update","docs_url":"https://docs.zevari.ai/api/reference#contentTemplates-update","summary":"Update content template"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"content_update","display_name":"Update content draft","family":"content","description":"Update a content draft's status, body, or metadata.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Content ID to update"},"status":{"type":"string","enum":["draft","scheduled","published","archived"]},"body":{"type":"string","description":"Updated content text"},"title":{"type":"string","description":"Updated title"},"linkedin_post_id":{"type":"string","description":"LinkedIn post ID after publishing"},"performance":{"type":"object","additionalProperties":{},"description":"Performance metrics"}},"required":["content_id"],"additionalProperties":false},"example_args":{"content_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"content.update","path":"/v1/content/update","docs_url":"https://docs.zevari.ai/api/reference#content-update","summary":"Update content draft"},"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"inbox_classify_pending","display_name":"Classify pending inbox","family":"leads_inbox","description":"Fetch unclassified inbox messages from the database ready for intent classification.","input_schema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":50,"default":20,"description":"Max messages to return for classification (default 20)"}},"additionalProperties":false},"example_args":{"limit":10},"sensitive":false,"api_equivalent":{"method":"inbox.classifyPending","path":"/v1/inbox/classifyPending","docs_url":"https://docs.zevari.ai/api/reference#inbox-classifyPending","summary":"Classify pending inbox"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"inbox_enrich_sender","display_name":"Enrich inbox sender","family":"leads_inbox","description":"Store enriched profile data for an inbox message sender, linking them to global_leads.","input_schema":{"type":"object","properties":{"enrichments":{"type":"array","items":{"type":"object","properties":{"sender_provider_id":{"type":"string","description":"LinkedIn provider ID"},"name":{"type":"string"},"headline":{"type":"string"},"company":{"type":"string"},"profile_url":{"type":"string"},"location":{"type":"string"},"connections_count":{"type":"number"}},"required":["sender_provider_id"],"additionalProperties":false},"description":"Array of profile data to persist"}},"required":["enrichments"],"additionalProperties":false},"example_args":{"enrichments":[{"sender_provider_id":"example_id"}]},"sensitive":true,"api_equivalent":{"method":"inbox.enrichSender","path":"/v1/inbox/enrichSender","docs_url":"https://docs.zevari.ai/api/reference#inbox-enrichSender","summary":"Enrich inbox sender"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"inbox_save_classifications","display_name":"Save inbox classifications","family":"leads_inbox","description":"Persist intent classifications for inbox messages and trigger Slack/email alerts for high-intent replies.","input_schema":{"type":"object","properties":{"classifications":{"type":"array","items":{"type":"object","properties":{"chat_id":{"type":"string","description":"inbox_messages.chat_id"},"message_id":{"type":"string","description":"inbox_messages.message_id"},"direction":{"type":"string","enum":["sender_evaluating_recipient_offer","sender_selling_to_recipient","sender_giving_resource","sender_requesting_resource","generic_conversation","complaint_or_negative","unknown"]},"classification":{"type":"string","enum":["lead_magnet_request","business_inquiry","warm_engagement","conversation","giving_resource","none"]},"intent_score":{"type":"number","minimum":1,"maximum":5},"confidence":{"type":"string","enum":["high","medium","low"]},"is_giving":{"type":"boolean"},"has_business_intent":{"type":"boolean"},"icp_score":{"type":"number","minimum":1,"maximum":5,"nullable":true},"icp_fit":{"type":"string","enum":["strong","moderate","weak","not_fit","unknown"],"nullable":true},"icp_confidence":{"type":"string","enum":["high","medium","low"],"nullable":true},"icp_reasoning":{"type":"string","nullable":true},"classifier_model":{"type":"string","nullable":true},"classifier_version":{"type":"string","nullable":true},"alert_recommendation":{"type":"string","enum":["alert","review","no_alert"],"nullable":true},"reasoning":{"type":"string"},"signals":{"type":"array","items":{"type":"string"},"default":[]}},"required":["chat_id","message_id","classification","intent_score","confidence","is_giving","has_business_intent","reasoning"],"additionalProperties":false},"description":"Array of classification results"}},"required":["classifications"],"additionalProperties":false},"example_args":{"classifications":[{"chat_id":"example_id","message_id":"example_id","classification":"lead_magnet_request","intent_score":1,"confidence":"high","is_giving":true,"has_business_intent":true,"reasoning":"string"}]},"sensitive":true,"api_equivalent":{"method":"inbox.saveClassifications","path":"/v1/inbox/saveClassifications","docs_url":"https://docs.zevari.ai/api/reference#inbox-saveClassifications","summary":"Save inbox classifications"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"inbox_send_digest","display_name":"Send inbox digest","family":"leads_inbox","description":"Send the daily actions digest to the account owner: high-intent inbox messages, quiet replies, due campaign actions, recent engagements, and open signals.","input_schema":{"type":"object","properties":{"hours":{"type":"number","default":24,"description":"Look back period in hours for inbox, campaign actions, engagements, and signals (default 24)"},"quiet_since_days":{"type":"integer","minimum":0,"maximum":365,"default":7,"description":"Quiet reply threshold in days (default 7)"},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10,"description":"Max rows per digest section (default 10)"},"dry_run":{"type":"boolean","default":false,"description":"Return the digest summary without sending email"}},"additionalProperties":false},"example_args":{"hours":1,"quiet_since_days":1},"sensitive":false,"api_equivalent":{"method":"inbox.sendDigest","path":"/v1/inbox/sendDigest","docs_url":"https://docs.zevari.ai/api/reference#inbox-sendDigest","summary":"Send inbox digest"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_activity_feed","display_name":"List lead activity","family":"leads_inbox","description":"Get recent inbound activity (comments and DMs) with keyword and source filtering.","input_schema":{"type":"object","properties":{"source":{"type":"string","enum":["comments","dms"],"description":"Filter by source"},"status":{"type":"string","description":"Filter by status"},"keyword":{"type":"string","description":"Filter by keyword"},"limit":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Max results"}},"additionalProperties":false},"example_args":{"source":"comments","status":"string"},"sensitive":false,"api_equivalent":{"method":"leads.activityFeed","path":"/v1/leads/activityFeed","docs_url":"https://docs.zevari.ai/api/reference#leads-activityFeed","summary":"List lead activity"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_dashboard_stats","display_name":"Get lead dashboard stats","family":"leads_inbox","description":"Get aggregate stats: total leads, qualified, with email, with intent, active in last 7 days, and campaign counts.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":{"method":"leads.dashboardStats","path":"/v1/leads/dashboardStats","docs_url":"https://docs.zevari.ai/api/reference#leads-dashboardStats","summary":"Get lead dashboard stats"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_get_campaign_detail","display_name":"Get lead campaign detail","family":"leads_inbox","description":"Get full campaign details including all targets and their current step status.","input_schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Campaign ID"}},"required":["campaign_id"],"additionalProperties":false},"example_args":{"campaign_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"leads.getCampaignDetail","path":"/v1/leads/getCampaignDetail","docs_url":"https://docs.zevari.ai/api/reference#leads-getCampaignDetail","summary":"Get lead campaign detail"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_get_detail","display_name":"Get lead detail","family":"leads_inbox","description":"Get the full record for a specific lead including lists, emails, interaction count, and pipeline status. If you will draft or stage outbound copy from this lead, call library_context_get next and apply the returned Outreach template plus Brand context before writing.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Lead ID to get details for"}},"required":["lead_id"],"additionalProperties":false},"example_args":{"lead_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"leads.getDetail","path":"/v1/leads/getDetail","docs_url":"https://docs.zevari.ai/api/reference#leads-getDetail","summary":"Get lead detail"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_get_list_leads","display_name":"List leads in list","family":"leads_inbox","description":"Get the leads inside a specific named list with pagination. If you will draft or stage outbound copy from returned leads, call library_context_get next and apply the returned Outreach template plus Brand context before writing.","input_schema":{"type":"object","properties":{"list_id":{"type":"string","description":"List ID"},"limit":{"type":"number","default":20,"description":"Max results"},"offset":{"type":"number","default":0,"description":"Pagination offset"}},"required":["list_id"],"additionalProperties":false},"example_args":{"list_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"leads.getListLeads","path":"/v1/leads/getListLeads","docs_url":"https://docs.zevari.ai/api/reference#leads-getListLeads","summary":"List leads in list"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_get_qualified","display_name":"List qualified leads","family":"leads_inbox","description":"Return leads already marked as qualified, sorted by interaction count. If you will draft or stage outbound copy from returned leads, call library_context_get next and apply the returned Outreach template plus Brand context before writing.","input_schema":{"type":"object","properties":{"limit":{"type":"number","default":20,"description":"Max results"}},"additionalProperties":false},"example_args":{"limit":10},"sensitive":false,"api_equivalent":{"method":"leads.getQualified","path":"/v1/leads/getQualified","docs_url":"https://docs.zevari.ai/api/reference#leads-getQualified","summary":"List qualified leads"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_get_thread","display_name":"Get lead thread","family":"leads_inbox","description":"Read the locally stored LinkedIn DM thread for a saved lead in the active LinkedIn account.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Saved lead ID"},"limit":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Max messages to return"},"before":{"type":"string","description":"ISO-8601 timestamp cursor for older messages"}},"required":["lead_id"],"additionalProperties":false},"example_args":{"lead_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"leads.getThread","path":"/v1/leads/getThread","docs_url":"https://docs.zevari.ai/api/reference#leads-getThread","summary":"Get lead thread"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_list_campaigns","display_name":"List lead campaigns","family":"leads_inbox","description":"List all campaigns for the current user with optional status filter.","input_schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","completed"],"description":"Filter by campaign status"}},"additionalProperties":false},"example_args":{"status":"active"},"sensitive":false,"api_equivalent":{"method":"leads.listCampaigns","path":"/v1/leads/listCampaigns","docs_url":"https://docs.zevari.ai/api/reference#leads-listCampaigns","summary":"List lead campaigns"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_list_lists","display_name":"List lead lists","family":"leads_inbox","description":"List all saved lead lists.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":{"method":"leads.listLists","path":"/v1/leads/listLists","docs_url":"https://docs.zevari.ai/api/reference#leads-listLists","summary":"List lead lists"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_lookup_by_url","display_name":"Lookup lead by URL","family":"leads_inbox","description":"Resolve a saved lead by LinkedIn profile URL, public identifier, or provider ID within the active LinkedIn account. If you will draft or stage outbound copy from this lead, call library_context_get next and apply the returned Outreach template plus Brand context before writing.","input_schema":{"type":"object","properties":{"url":{"type":"string","description":"LinkedIn profile URL, for example https://www.linkedin.com/in/example/"},"public_identifier":{"type":"string","description":"LinkedIn public profile identifier from /in/{slug}"},"provider_id":{"type":"string","description":"LinkedIn provider ID, for example ACoAAA..."}},"additionalProperties":false},"example_args":{"url":"https://www.linkedin.com/in/example/","public_identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"leads.lookupByUrl","path":"/v1/leads/lookupByUrl","docs_url":"https://docs.zevari.ai/api/reference#leads-lookupByUrl","summary":"Lookup lead by URL"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"leads_query","display_name":"Query leads","family":"leads_inbox","description":"Query the global leads database with filters for keyword, source, qualification status, email, and intent signals. If you will draft or stage outbound copy from returned leads, call library_context_get next and apply the returned Outreach template plus Brand context before writing.","input_schema":{"type":"object","properties":{"keyword":{"type":"string","description":"Filter by keyword"},"headline_filter":{"type":"string","description":"Case-insensitive search on headline"},"source":{"type":"string","enum":["comments","dms","intent","search"],"description":"Filter by lead source"},"has_email":{"type":"boolean","description":"Filter leads that have email"},"has_intent":{"type":"boolean","description":"Filter leads with intent signals"},"has_ever_replied":{"type":"boolean","description":"Filter leads by whether they have ever replied"},"has_active_campaign_target":{"type":"boolean","description":"Filter leads by active pending or in-progress campaign target membership"},"quiet_since_days":{"type":"integer","minimum":0,"maximum":365,"description":"Return open leads that replied before this many days ago, with no newer outbound reply"},"qualification":{"type":"string","enum":["qualified","unqualified"],"description":"Filter by qualification"},"search":{"type":"string","description":"Free text search across name and headline"},"limit":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Max results"},"offset":{"type":"number","minimum":0,"default":0,"description":"Pagination offset"}},"additionalProperties":false},"example_args":{"keyword":"string","headline_filter":"string"},"sensitive":false,"api_equivalent":{"method":"leads.query","path":"/v1/leads/query","docs_url":"https://docs.zevari.ai/api/reference#leads-query","summary":"Query leads"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"library_context_get","display_name":"Get library context","family":"entities","description":"MUST call before drafting outbound/customer-facing text. Loads active-workspace Library context for a skill — Brand Voice, positioning, stories, Outreach templates, and Content templates — resolved from the user's assets and intent.","input_schema":{"type":"object","properties":{"skill_slug":{"type":"string","description":"Skill slug requesting Library context"},"intent":{"type":"string","description":"Short natural-language summary of the user's goal"},"asset_hints":{"type":"object","properties":{"outreach_framework":{"type":"string"},"content_framework":{"type":"string"},"brand_sections":{"type":"array","items":{"type":"string","enum":["voice","positioning","stories"]}},"outreach_template_slug":{"type":"string"},"content_template_slug":{"type":"string"}},"additionalProperties":false,"description":"Optional explicit hints from the user or upstream skill"},"target_channel":{"type":"string","description":"Optional target channel hint such as linkedin or email"},"content_type":{"type":"string","enum":["post","comment"],"description":"Content type hint for content-generating skills"},"include_examples":{"type":"boolean","default":false,"description":"Set true when generating text so returned templates include prompt/structure payloads"},"limit_per_category":{"type":"integer","minimum":1,"maximum":10,"default":5,"description":"Maximum outreach/content candidates to return per category"}},"required":["skill_slug"],"additionalProperties":false},"example_args":{"skill_slug":"string"},"sensitive":false,"api_equivalent":{"method":"libraryContext.get","path":"/v1/libraryContext/get","docs_url":"https://docs.zevari.ai/api/reference#libraryContext-get","summary":"Get library context"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"linkedin_comment_on_post","display_name":"Comment on LinkedIn post","family":"linkedin.content","description":"Post a comment on a LinkedIn post, or reply to an existing comment. REQUIRES actions_request_confirmation first. For postId, use Unipile social_id when available; Zevari resolves URL activity/share/ugcPost ids to social_id before approval.","input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"LinkedIn post reference to comment on. Prefer Unipile's returned social_id (urn:li:activity:...). If you only have a LinkedIn URL, pass the full URL or resolve it first: activity URLs use the numeric id for retrieve-post, share URLs use urn:li:share:<id>, ugcPost URLs use urn:li:ugcPost:<id>. Zevari validates the post and stores social_id before approval."},"text":{"type":"string","description":"Comment text"},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["postId","text"],"additionalProperties":false},"example_args":{"postId":"example_id","text":"string"},"sensitive":true,"api_equivalent":{"method":"linkedin.commentOnPost","path":"/v1/linkedin/commentOnPost","docs_url":"https://docs.zevari.ai/api/reference#linkedin-commentOnPost","summary":"Comment on LinkedIn post"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_create_post","display_name":"Create LinkedIn post","family":"linkedin.content","description":"Publish a post to LinkedIn. REQUIRES actions_request_confirmation first.","input_schema":{"type":"object","properties":{"content":{"type":"string","description":"Post content (text)"},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["content"],"additionalProperties":false},"example_args":{"content":"string"},"sensitive":true,"api_equivalent":{"method":"linkedin.createPost","path":"/v1/linkedin/createPost","docs_url":"https://docs.zevari.ai/api/reference#linkedin-createPost","summary":"Create LinkedIn post"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_get_company","display_name":"Get LinkedIn company","family":"linkedin.profile_read","description":"Fetch a LinkedIn company profile including industry, employee count, and description.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"Company public identifier (LinkedIn URL slug)"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":false,"api_equivalent":{"method":"linkedin.getCompany","path":"/v1/linkedin/getCompany","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getCompany","summary":"Get LinkedIn company"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.profile_read","requires":["zevari_context_get"],"can":["Read LinkedIn profile/company/post detail and lightweight relationship context for the active account."],"cannot":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability."],"must_not_infer":["Do not infer canSendInMail from isPremium or open-profile fields."],"clarify_when":["The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"user_guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits."],"recovery":["If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-reads"},"gotchas":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability.","Do not infer canSendInMail from isPremium or open-profile fields.","The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits.","If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."]},{"tool_name":"linkedin_get_connection_limits","display_name":"Get connection limits","family":"linkedin.safety","description":"Get the remaining connection request quota for today and this week.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":{"method":"linkedin.getConnectionLimits","path":"/v1/linkedin/getConnectionLimits","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getConnectionLimits","summary":"Get connection limits"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.safety","requires":["zevari_context_get"],"can":["Report LinkedIn safety state, connection quota, and pause/resume automation for the active account when explicitly requested."],"cannot":[],"must_not_infer":["Do not use linkedin_get_connection_limits to reason about InMail availability."],"clarify_when":["The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"user_guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool."],"recovery":["If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#safety-tools"},"gotchas":["Do not use linkedin_get_connection_limits to reason about InMail availability.","The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool.","If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."]},{"tool_name":"linkedin_get_inbox","display_name":"Get LinkedIn inbox","family":"leads_inbox","description":"Fetch recent LinkedIn DM threads (chats) with unread counts and pagination. Use this to read the inbox, find conversations, and check for replies.","input_schema":{"type":"object","properties":{"limit":{"type":"number","default":20,"description":"Max chats to return"},"cursor":{"type":"string","description":"Pagination cursor from previous response"}},"additionalProperties":false},"example_args":{"limit":10,"cursor":"string"},"sensitive":false,"api_equivalent":{"method":"linkedin.getInbox","path":"/v1/linkedin/getInbox","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getInbox","summary":"Get LinkedIn inbox"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"linkedin_get_messages","display_name":"Get LinkedIn messages","family":"leads_inbox","description":"Retrieve the full message history for a specific chat thread. Requires a chatId from linkedin_get_inbox.","input_schema":{"type":"object","properties":{"chatId":{"type":"string","description":"Chat ID from get_inbox results"},"limit":{"type":"number","default":50,"description":"Max messages to return"},"before":{"type":"string","description":"Pagination cursor for older messages"}},"required":["chatId"],"additionalProperties":false},"example_args":{"chatId":"example_id"},"sensitive":false,"api_equivalent":{"method":"linkedin.getMessages","path":"/v1/linkedin/getMessages","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getMessages","summary":"Get LinkedIn messages"},"capability_contract":{"version":"2026-05-22.1","family":"leads_inbox","requires":["zevari_context_get"],"can":["Read lead, list, campaign-detail, thread, inbox, and classification state for the active workspace."],"cannot":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools."],"must_not_infer":["Do not assume a lead belongs to the active account without returned IDs or campaign/list membership."],"clarify_when":["The user references a lead by name only or asks for state across multiple workspaces/accounts."],"user_guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions."],"recovery":["If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#leads-inbox-contracts"},"gotchas":["Prove global CRM completeness or classify/send replies outside the data returned by Zevari tools.","Do not assume a lead belongs to the active account without returned IDs or campaign/list membership.","The user references a lead by name only or asks for state across multiple workspaces/accounts."],"guidance":["Use returned lead IDs, list IDs, campaign IDs, and thread IDs in follow-up actions.","If lookup is ambiguous, ask for the lead URL, profile URL, email, campaign ID, or list ID."]},{"tool_name":"linkedin_get_post","display_name":"Get LinkedIn post","family":"linkedin.content","description":"Fetch a LinkedIn post's details, engagement stats, and metadata by post reference. For /posts/...-share-<id> use urn:li:share:<id>; for /posts/...-ugcPost-<id> use urn:li:ugcPost:<id>; activity ids may be passed as the numeric id. Use the returned social_id for comments, reactions, and comment listing.","input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"Post reference to retrieve. For LinkedIn /posts URLs: activity-<id> -> <id>, share-<id> -> urn:li:share:<id>, ugcPost-<id> -> urn:li:ugcPost:<id>. The response social_id is the reliable action id."}},"required":["postId"],"additionalProperties":false},"example_args":{"postId":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.getPost","path":"/v1/linkedin/getPost","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getPost","summary":"Get LinkedIn post"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_get_post_comments","display_name":"List LinkedIn post comments","family":"linkedin.content","description":"Fetch comments on a LinkedIn post with pagination. Zevari resolves the supplied post reference to social_id before listing comments.","input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"Post reference to fetch comments for. Prefer social_id. If using a URL, activity/share/ugcPost ids are resolved through retrieve-post first."},"limit":{"type":"number","default":100,"description":"Max comments per page"},"cursor":{"type":"string","description":"Pagination cursor from a previous call; omit for first page"}},"required":["postId"],"additionalProperties":false},"example_args":{"postId":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.getPostComments","path":"/v1/linkedin/getPostComments","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getPostComments","summary":"List LinkedIn post comments"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_get_post_media","display_name":"Get LinkedIn post media","family":"linkedin.content","description":"Resolve the highest-resolution image variants attached to a LinkedIn post.","input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"Post reference to resolve the highest public image variant for each image attachment. URL activity/share/ugcPost ids are normalized before retrieval."}},"required":["postId"],"additionalProperties":false},"example_args":{"postId":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.getPostMedia","path":"/v1/linkedin/getPostMedia","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getPostMedia","summary":"Get LinkedIn post media"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_get_profile","display_name":"Get LinkedIn profile","family":"linkedin.profile_read","description":"Fetch a LinkedIn profile by public identifier or provider ID. Returns the provider_id (ACoAAA...) needed for all write operations.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn public identifier (username) or provider ID. Omit to get your own profile."},"sections":{"type":"array","items":{"type":"string","enum":["education","skills","certifications"]},"description":"Additional profile sections to fetch"}},"additionalProperties":false},"example_args":{"identifier":"example_id","sections":["education"]},"sensitive":false,"api_equivalent":{"method":"linkedin.getProfile","path":"/v1/linkedin/getProfile","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getProfile","summary":"Get LinkedIn profile"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.profile_read","requires":["zevari_context_get"],"can":["Read LinkedIn profile/company/post detail and lightweight relationship context for the active account."],"cannot":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability."],"must_not_infer":["Do not infer canSendInMail from isPremium or open-profile fields."],"clarify_when":["The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"user_guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits."],"recovery":["If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-reads"},"gotchas":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability.","Do not infer canSendInMail from isPremium or open-profile fields.","The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits.","If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."]},{"tool_name":"linkedin_get_safety_status","display_name":"Get LinkedIn safety status","family":"linkedin.safety","description":"Check current LinkedIn safety status: rate limits, daily caps, circuit breaker state, and pause status.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":{"method":"linkedin.getSafetyStatus","path":"/v1/linkedin/getSafetyStatus","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getSafetyStatus","summary":"Get LinkedIn safety status"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.safety","requires":["zevari_context_get"],"can":["Report LinkedIn safety state, connection quota, and pause/resume automation for the active account when explicitly requested."],"cannot":[],"must_not_infer":["Do not use linkedin_get_connection_limits to reason about InMail availability."],"clarify_when":["The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"user_guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool."],"recovery":["If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#safety-tools"},"gotchas":["Do not use linkedin_get_connection_limits to reason about InMail availability.","The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool.","If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."]},{"tool_name":"linkedin_get_user_comments","display_name":"List user comments","family":"linkedin.profile_read","description":"Retrieve a person's recent LinkedIn comments. Used for behavioral profiling and identifying engagement patterns.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn provider ID or public identifier. Omit to get your own comments."},"limit":{"type":"number","default":10,"description":"Max comments to return"}},"additionalProperties":false},"example_args":{"identifier":"example_id","limit":10},"sensitive":false,"api_equivalent":{"method":"linkedin.getUserComments","path":"/v1/linkedin/getUserComments","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getUserComments","summary":"List user comments"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.profile_read","requires":["zevari_context_get"],"can":["Read LinkedIn profile/company/post detail and lightweight relationship context for the active account."],"cannot":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability."],"must_not_infer":["Do not infer canSendInMail from isPremium or open-profile fields."],"clarify_when":["The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"user_guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits."],"recovery":["If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-reads"},"gotchas":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability.","Do not infer canSendInMail from isPremium or open-profile fields.","The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits.","If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."]},{"tool_name":"linkedin_get_user_posts","display_name":"List user posts","family":"linkedin.profile_read","description":"Retrieve a person's recent LinkedIn posts. Used for personalization research and warming comment generation.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn provider ID or public identifier. Omit to get your own posts."},"limit":{"type":"number","default":10,"description":"Max posts to return"}},"additionalProperties":false},"example_args":{"identifier":"example_id","limit":10},"sensitive":false,"api_equivalent":{"method":"linkedin.getUserPosts","path":"/v1/linkedin/getUserPosts","docs_url":"https://docs.zevari.ai/api/reference#linkedin-getUserPosts","summary":"List user posts"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.profile_read","requires":["zevari_context_get"],"can":["Read LinkedIn profile/company/post detail and lightweight relationship context for the active account."],"cannot":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability."],"must_not_infer":["Do not infer canSendInMail from isPremium or open-profile fields."],"clarify_when":["The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"user_guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits."],"recovery":["If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-reads"},"gotchas":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability.","Do not infer canSendInMail from isPremium or open-profile fields.","The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits.","If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."]},{"tool_name":"linkedin_lookup_search_params","display_name":"Lookup search parameters","family":"linkedin.safety","description":"Resolve a natural language location or industry description into Unipile API parameter IDs for search.","input_schema":{"type":"object","properties":{"type":{"type":"string","enum":["INDUSTRY","COMPANY","LOCATION","PEOPLE","JOB_TITLE","JOB_FUNCTION"],"description":"Parameter type to look up"},"keywords":{"type":"string","description":"Keywords to search"},"limit":{"type":"number","default":5,"description":"Max results"}},"required":["type","keywords"],"additionalProperties":false},"example_args":{"type":"INDUSTRY","keywords":"string"},"sensitive":false,"api_equivalent":{"method":"linkedin.lookupSearchParams","path":"/v1/linkedin/lookupSearchParams","docs_url":"https://docs.zevari.ai/api/reference#linkedin-lookupSearchParams","summary":"Lookup search parameters"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.safety","requires":["zevari_context_get"],"can":["Report LinkedIn safety state, connection quota, and pause/resume automation for the active account when explicitly requested."],"cannot":[],"must_not_infer":["Do not use linkedin_get_connection_limits to reason about InMail availability."],"clarify_when":["The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"user_guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool."],"recovery":["If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#safety-tools"},"gotchas":["Do not use linkedin_get_connection_limits to reason about InMail availability.","The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool.","If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."]},{"tool_name":"linkedin_pause_all","display_name":"Pause LinkedIn automation","family":"linkedin.safety","description":"Pause all LinkedIn automation immediately (safety kill switch). Stops all campaign execution.","input_schema":{"type":"object","properties":{"reason":{"type":"string","description":"Why you're pausing LinkedIn activity"}},"additionalProperties":false},"example_args":{"reason":"string"},"sensitive":true,"api_equivalent":{"method":"linkedin.pauseAll","path":"/v1/linkedin/pauseAll","docs_url":"https://docs.zevari.ai/api/reference#linkedin-pauseAll","summary":"Pause LinkedIn automation"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.safety","requires":["zevari_context_get"],"can":["Report LinkedIn safety state, connection quota, and pause/resume automation for the active account when explicitly requested."],"cannot":[],"must_not_infer":["Do not use linkedin_get_connection_limits to reason about InMail availability."],"clarify_when":["The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"user_guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool."],"recovery":["If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#safety-tools"},"gotchas":["Do not use linkedin_get_connection_limits to reason about InMail availability.","The user asks whether a pause/resume applies to one campaign, one account, or all automation."],"guidance":["Report safety reasons and retry posture; do not advise bypassing safety with another write tool.","If paused or rate-limited, call linkedin_get_safety_status and wait for the recommended retry window unless the user explicitly requests resume."]},{"tool_name":"linkedin_react_to_post","display_name":"React to LinkedIn post","family":"linkedin.content","description":"React to a LinkedIn post (like, celebrate, support, etc.). REQUIRES actions_request_confirmation first. For postId, use Unipile social_id when available; Zevari resolves URL activity/share/ugcPost ids to social_id before approval.","input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"LinkedIn post reference to react to. Prefer Unipile's returned social_id (urn:li:activity:...). If you only have a LinkedIn URL, pass the full URL or resolve it first: activity URLs use the numeric id for retrieve-post, share URLs use urn:li:share:<id>, ugcPost URLs use urn:li:ugcPost:<id>. Zevari validates the post and stores social_id before approval."},"reaction":{"type":"string","enum":["like","celebrate","support","love","insightful","funny"],"default":"like","description":"Reaction type"},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["postId"],"additionalProperties":false},"example_args":{"postId":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.reactToPost","path":"/v1/linkedin/reactToPost","docs_url":"https://docs.zevari.ai/api/reference#linkedin-reactToPost","summary":"React to LinkedIn post"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.content","requires":["actions_request_confirmation"],"can":["Read LinkedIn content and execute approved post, comment, or reaction writes."],"cannot":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks."],"must_not_infer":["Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload."],"clarify_when":["The target post, reaction type, comment text, or public posting account is ambiguous."],"user_guidance":["Resolve and preview public-surface writes before asking for approval."],"recovery":["If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Create public-surface LinkedIn writes without confirmation or bypass post-id resolution checks.","Do not assume a URL, URN, and provider social_id are interchangeable after staging; use the approved payload.","The target post, reaction type, comment text, or public posting account is ambiguous."],"guidance":["Resolve and preview public-surface writes before asking for approval.","If post resolution or confirmation fails, re-read the post and stage a fresh confirmation."]},{"tool_name":"linkedin_resume_all","display_name":"Resume LinkedIn automation","family":"linkedin.safety","description":"Resume LinkedIn automation after a pause. Re-activates all paused campaigns.","input_schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Confirm you want to resume LinkedIn activity"}},"required":["confirm"],"additionalProperties":false},"example_args":{"confirm":true},"sensitive":true,"api_equivalent":{"method":"linkedin.resumeAll","path":"/v1/linkedin/resumeAll","docs_url":"https://docs.zevari.ai/api/reference#linkedin-resumeAll","summary":"Resume LinkedIn automation"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.safety","requires":["zevari_context_get"],"can":["Resume paused LinkedIn automation for the active account when the user explicitly requests it and passes confirm."],"cannot":[],"must_not_infer":["Do not resume automation from a vague troubleshooting request."],"clarify_when":["The user has not explicitly asked to resume all paused automation for the active account."],"user_guidance":["Call linkedin_get_safety_status first and explain current pause reason."],"recovery":["If resume is denied, report the reason and wait for retry posture instead of switching write tools."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#rate-limited-or-safety-denied"},"gotchas":["Do not resume automation from a vague troubleshooting request.","The user has not explicitly asked to resume all paused automation for the active account."],"guidance":["Call linkedin_get_safety_status first and explain current pause reason.","If resume is denied, report the reason and wait for retry posture instead of switching write tools."]},{"tool_name":"linkedin_search_companies","display_name":"Search LinkedIn companies","family":"linkedin.search","description":"Search LinkedIn for companies by name or keyword. Returns company profiles with follower counts and industry data.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Company name or keyword"}},"required":["query"],"additionalProperties":false},"example_args":{"query":"founder hiring sales"},"sensitive":false,"api_equivalent":{"method":"linkedin.searchCompanies","path":"/v1/linkedin/searchCompanies","docs_url":"https://docs.zevari.ai/api/reference#linkedin-searchCompanies","summary":"Search LinkedIn companies"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.search","requires":["zevari_context_get"],"can":["Search LinkedIn profiles, companies, or posts using the provider-backed search fields exposed by the tool."],"cannot":["Guarantee exhaustive results, expose profile-search pagination, or prove absence from a broad search."],"must_not_infer":["Do not assume a missing search result means the person/company/post does not exist."],"clarify_when":["The user asks for all results, precise counts, or broad recall from one query."],"user_guidance":["Use narrow searches by title, company, location, industry, or keyword; verify promising profiles with linkedin_get_profile."],"recovery":["If results are too few, split the query and search again with narrower filters."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-search"},"gotchas":["Guarantee exhaustive results, expose profile-search pagination, or prove absence from a broad search.","Do not assume a missing search result means the person/company/post does not exist.","The user asks for all results, precise counts, or broad recall from one query."],"guidance":["Use narrow searches by title, company, location, industry, or keyword; verify promising profiles with linkedin_get_profile.","If results are too few, split the query and search again with narrower filters."]},{"tool_name":"linkedin_search_posts","display_name":"Search LinkedIn posts","family":"linkedin.search","description":"Search LinkedIn posts by keyword with date and relevance filtering. Use for signal detection (hiring, funding, pain points).","input_schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Keywords to search for in posts"},"sort_by":{"type":"string","enum":["date","relevance"],"description":"Sort order"},"date_posted":{"type":"string","enum":["past_day","past_week","past_month"],"description":"Date filter"},"limit":{"type":"number","default":25,"description":"Max results"}},"required":["keywords"],"additionalProperties":false},"example_args":{"keywords":"string"},"sensitive":false,"api_equivalent":{"method":"linkedin.searchPosts","path":"/v1/linkedin/searchPosts","docs_url":"https://docs.zevari.ai/api/reference#linkedin-searchPosts","summary":"Search LinkedIn posts"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.search","requires":["zevari_context_get"],"can":["Search LinkedIn profiles, companies, or posts using the provider-backed search fields exposed by the tool."],"cannot":["Guarantee exhaustive results, expose profile-search pagination, or prove absence from a broad search."],"must_not_infer":["Do not assume a missing search result means the person/company/post does not exist."],"clarify_when":["The user asks for all results, precise counts, or broad recall from one query."],"user_guidance":["Use narrow searches by title, company, location, industry, or keyword; verify promising profiles with linkedin_get_profile."],"recovery":["If results are too few, split the query and search again with narrower filters."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-search"},"gotchas":["Guarantee exhaustive results, expose profile-search pagination, or prove absence from a broad search.","Do not assume a missing search result means the person/company/post does not exist.","The user asks for all results, precise counts, or broad recall from one query."],"guidance":["Use narrow searches by title, company, location, industry, or keyword; verify promising profiles with linkedin_get_profile.","If results are too few, split the query and search again with narrower filters."]},{"tool_name":"linkedin_search_profiles","display_name":"Search LinkedIn profiles","family":"linkedin.search","description":"Search LinkedIn for people by keywords, job title, industry, location, seniority, or company size. Returns profiles with provider IDs for follow-up actions.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query — can be keywords, job title, company, etc."},"keywords":{"type":"array","items":{"type":"string"},"description":"Keyword filters"},"job_titles":{"type":"array","items":{"type":"string"},"description":"Job title filters"},"industries":{"type":"array","items":{"type":"string"},"description":"Industry filters"},"locations":{"type":"array","items":{"type":"string"},"description":"Location filters"},"seniority_levels":{"type":"array","items":{"type":"string"},"description":"Seniority level filters"},"company_sizes":{"type":"array","items":{"type":"string"},"description":"Company size filters"},"search_url":{"type":"string","description":"LinkedIn/Sales Navigator search URL to scrape directly"}},"required":["query"],"additionalProperties":false},"example_args":{"query":"founder hiring sales"},"sensitive":false,"api_equivalent":{"method":"linkedin.searchProfiles","path":"/v1/linkedin/searchProfiles","docs_url":"https://docs.zevari.ai/api/reference#linkedin-searchProfiles","summary":"Search LinkedIn profiles"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.search","requires":["zevari_context_get"],"can":["Search profiles by query, keyword arrays, titles, industries, locations, seniority, company size, or search_url."],"cannot":["Expose limit, cursor, pagination controls, or exhaustive recall."],"must_not_infer":["Do not assume broad searches return all matching people."],"clarify_when":["The user asks for all candidates or absence proof."],"user_guidance":["Use narrower repeated searches and verify matches with linkedin_get_profile."],"recovery":["If expected targets are missing, refine by title/location/company/industry and retry."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-search"},"gotchas":["Expose limit, cursor, pagination controls, or exhaustive recall.","Do not assume broad searches return all matching people.","The user asks for all candidates or absence proof."],"guidance":["Use narrower repeated searches and verify matches with linkedin_get_profile.","If expected targets are missing, refine by title/location/company/industry and retry."]},{"tool_name":"linkedin_send_connection_request","display_name":"Send connection request","family":"linkedin.messaging","description":"Send a LinkedIn connection request with optional note. REQUIRES actions_request_confirmation first.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn provider ID (ACoAAA...) or public identifier (vanity slug)"},"note":{"type":"string","description":"Connection request note (max 300 chars)"},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.sendConnectionRequest","path":"/v1/linkedin/sendConnectionRequest","docs_url":"https://docs.zevari.ai/api/reference#linkedin-sendConnectionRequest","summary":"Send connection request"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.messaging","requires":["actions_request_confirmation"],"can":["Send an approved connection request with optional note within LinkedIn constraints."],"cannot":["Promise retry success after recent invite, withdraw, retry, or provider denial cooldown."],"must_not_infer":["Do not assume manual withdraw resets the cooldown immediately."],"clarify_when":["A recent invite/cooldown denial is surfaced or the user wants to retry quickly."],"user_guidance":["Warn about recent invite/cooldown state before approval; note text must fit provider limits."],"recovery":[],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#connection-requests"},"gotchas":["Promise retry success after recent invite, withdraw, retry, or provider denial cooldown.","Do not assume manual withdraw resets the cooldown immediately.","A recent invite/cooldown denial is surfaced or the user wants to retry quickly."],"guidance":["Warn about recent invite/cooldown state before approval; note text must fit provider limits."]},{"tool_name":"linkedin_send_inmail","display_name":"Send LinkedIn InMail","family":"linkedin.messaging","description":"Send a LinkedIn InMail to a non-connection using a Premium or Sales Navigator account. This is a separate, explicit action from linkedin_send_message and may consume InMail credits. REQUIRES actions_request_confirmation first, or actions_request_bulk_confirmation when executing a bulk child.","input_schema":{"type":"object","properties":{"recipientId":{"type":"string","description":"LinkedIn provider ID for the recipient. Classic/Premium usually uses ACo...; Sales Navigator uses ACw...; staging can convert a classic ACo... ID for Sales Navigator accounts."},"identifier":{"type":"string","description":"LinkedIn public identifier, profile URL, Sales Navigator lead URL, or provider ID. Staging resolves it to the product-specific provider ID before approval."},"message":{"type":"string","minLength":1,"maxLength":8000,"description":"InMail message body"},"subject":{"type":"string","minLength":1,"maxLength":200,"description":"Optional InMail subject when supported by the selected LinkedIn API mode"},"linkedin_api":{"type":"string","enum":["classic","sales_navigator","recruiter"],"description":"LinkedIn API mode for InMail. Defaults from the active LinkedIn account tier: premium -> classic, sales_navigator -> sales_navigator."},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["message"],"additionalProperties":false},"example_args":{"message":"string"},"sensitive":true,"api_equivalent":{"method":"linkedin.sendInMail","path":"/v1/linkedin/sendInMail","docs_url":"https://docs.zevari.ai/api/reference#linkedin-sendInMail","summary":"Send LinkedIn InMail"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.messaging","requires":["actions_request_confirmation"],"can":["Send explicit approved Premium/Sales Navigator InMail when sender tier/API and recipient resolution support it."],"cannot":["Guarantee recipient-side InMail reachability, use isPremium as deliverability proof, or support Recruiter InMail execution."],"must_not_infer":["Do not replace explicit InMail intent with a connection request.","Do not infer canSendInMail from isPremium."],"clarify_when":["The user asks for InMail preflight/reachability or a channel change after provider-side block."],"user_guidance":["Ask for LinkedIn profile URL, Sales Navigator lead URL, or product-specific provider ID when resolution fails."],"recovery":["If provider returns user_unreachable or resolution fails, preserve InMail intent and ask before changing channel."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#inmail-sending"},"gotchas":["Guarantee recipient-side InMail reachability, use isPremium as deliverability proof, or support Recruiter InMail execution.","Do not replace explicit InMail intent with a connection request.","Do not infer canSendInMail from isPremium.","The user asks for InMail preflight/reachability or a channel change after provider-side block."],"guidance":["Ask for LinkedIn profile URL, Sales Navigator lead URL, or product-specific provider ID when resolution fails.","If provider returns user_unreachable or resolution fails, preserve InMail intent and ask before changing channel."]},{"tool_name":"linkedin_send_message","display_name":"Send LinkedIn message","family":"linkedin.messaging","description":"Send a LinkedIn DM to an existing conversation or first-degree recipient. This does not auto-route to InMail for non-connections. REQUIRES actions_request_confirmation first.","input_schema":{"type":"object","properties":{"chatId":{"type":"string","description":"Chat ID for existing conversation (from get_inbox)"},"recipientId":{"type":"string","description":"LinkedIn provider ID for new conversation"},"lead_id":{"type":"string","description":"Saved lead ID when sending a quiet-reply follow-up"},"expected_last_inbound_at":{"type":"string","description":"Quiet-reply guard only. Set with lead_id for re-engaging a quiet saved lead; do not set for live inbox replies without lead_id."},"message":{"type":"string","description":"Message content"},"confirmation_id":{"type":"string","description":"REQUIRED. ID from actions_request_confirmation. You MUST call actions_request_confirmation FIRST with the exact payload you intend to send, return the approval_url to the user, and wait for them to approve. Only then call this tool with the confirmation_id. Without it, this tool returns an error."},"bulk_item_id":{"type":"string","description":"Set when confirmation_id refers to a bulk_actions parent (from actions_request_bulk_confirmation). Identifies the per-item child to consume — e.g. 'itm_03'. Omit for single-action confirmations."}},"required":["message"],"additionalProperties":false},"example_args":{"message":"string"},"sensitive":true,"api_equivalent":{"method":"linkedin.sendMessage","path":"/v1/linkedin/sendMessage","docs_url":"https://docs.zevari.ai/api/reference#linkedin-sendMessage","summary":"Send LinkedIn message"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.messaging","requires":["actions_request_confirmation"],"can":["Send an approved LinkedIn DM to an existing chat or resolved recipient."],"cannot":["Send without confirmation or treat a connection request/InMail approval as DM approval."],"must_not_infer":["Do not change recipientId/chatId/message after approval; execution uses the approved payload."],"clarify_when":["Recipient identity, chat ID, sender, or message text is unclear."],"user_guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint.","Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state."],"recovery":["If confirmation is missing, stage linkedin_send_message with the complete payload and retry after approval."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#linkedin-direct-messages-and-content-writes"},"gotchas":["Send without confirmation or treat a connection request/InMail approval as DM approval.","Do not change recipientId/chatId/message after approval; execution uses the approved payload.","Recipient identity, chat ID, sender, or message text is unclear."],"guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint.","Use saved Zevari context before drafting outbound copy: profile, ICP, voice, library context, target context, and recent lead/signal state.","If confirmation is missing, stage linkedin_send_message with the complete payload and retry after approval."]},{"tool_name":"linkedin_view_profile","display_name":"View LinkedIn profile","family":"linkedin.profile_read","description":"Trigger a LinkedIn profile view notification — used in warming sequences to get on a prospect's radar before connecting.","input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"LinkedIn provider ID — triggers 'Someone viewed your profile'"}},"required":["identifier"],"additionalProperties":false},"example_args":{"identifier":"example_id"},"sensitive":true,"api_equivalent":{"method":"linkedin.viewProfile","path":"/v1/linkedin/viewProfile","docs_url":"https://docs.zevari.ai/api/reference#linkedin-viewProfile","summary":"View LinkedIn profile"},"capability_contract":{"version":"2026-05-22.1","family":"linkedin.profile_read","requires":["zevari_context_get"],"can":["Read LinkedIn profile/company/post detail and lightweight relationship context for the active account."],"cannot":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability."],"must_not_infer":["Do not infer canSendInMail from isPremium or open-profile fields."],"clarify_when":["The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"user_guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits."],"recovery":["If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#profile-reads"},"gotchas":["Expose definitive InMail deliverability, batch profile reads, or guarantee fresh recipient-side availability.","Do not infer canSendInMail from isPremium or open-profile fields.","The user wants batch reachability, InMail preflight, or proof that a recipient can receive InMail."],"guidance":["Use profile reads to verify identity before writes; pace loops and respect safety limits.","If identity resolution fails, ask for LinkedIn profile URL, Sales Navigator lead URL, or provider ID."]},{"tool_name":"lists_delete","display_name":"Lists Delete","family":"destructive_cleanup","description":"Stage deletion of a lead list. This only creates a browser-only Zevari approval link; the list is not deleted until an owner/admin approves in the Zevari UI within 24 hours. Chat approval is not supported. By default leads remain in the workspace.","input_schema":{"type":"object","properties":{"list_id":{"type":"string","description":"List ID to delete"},"cascade":{"type":"boolean","description":"If true, also request deletion of leads whose only list membership is this list. The approval page recomputes and enforces the final impact."}},"required":["list_id"],"additionalProperties":false},"example_args":{"list_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"lists_remove_member","display_name":"Lists Remove Member","family":"destructive_cleanup","description":"Stage removal of a lead from a list. This only creates a browser-only Zevari approval link; the membership is not removed until an owner/admin approves in the Zevari UI within 24 hours. Chat approval is not supported. The lead remains in the workspace.","input_schema":{"type":"object","properties":{"list_id":{"type":"string","description":"List ID"},"lead_id":{"type":"string","description":"Lead ID to remove from the list"}},"required":["list_id","lead_id"],"additionalProperties":false},"example_args":{"list_id":"example_id","lead_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"media_assets_attach_from_url","display_name":"Attach media from URL","family":"content","description":"Attach an image (JPG/PNG/GIF, max 8MB) or PDF (max 100MB) **already hosted at a public HTTPS URL** to a draft post. **Do NOT use this when the user only has a local file or attached image in the chat — direct them to /dashboard/content/{contentId} where they can drag-and-drop upload directly.** This tool is only useful when the user explicitly provides a public URL. Only valid while content is in 'draft' state.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Draft content row to attach to"},"url":{"type":"string","description":"Public http(s) URL to fetch"},"kind":{"type":"string","enum":["image","document"],"description":"'image' for JPG/PNG/GIF; 'document' for PDF"},"position":{"type":"integer","minimum":0,"description":"Render order; defaults to append"}},"required":["content_id","url","kind"],"additionalProperties":false},"example_args":{"content_id":"example_id","url":"https://www.linkedin.com/in/example/","kind":"image"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"media_assets_delete","display_name":"Delete media asset","family":"destructive_cleanup","description":"Delete a media asset and remove it from R2. Fails if the asset is still attached to any content row.","input_schema":{"type":"object","properties":{"media_asset_id":{"type":"string","description":"Media asset ID to delete"}},"required":["media_asset_id"],"additionalProperties":false},"example_args":{"media_asset_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"media_assets_list","display_name":"List media assets","family":"content","description":"List media attached to a content row, in render order.","input_schema":{"type":"object","properties":{"content_id":{"type":"string","description":"Content row whose attachments to list"}},"required":["content_id"],"additionalProperties":false},"example_args":{"content_id":"example_id"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outbound_channels_get","display_name":"Get outbound channels","family":"entities","description":"Preflight outbound readiness for the active Zevari workspace: active LinkedIn account, Zevari-managed verified email sender readiness, and optional target LinkedIn relationship status. MUST be called before creating LinkedIn message campaigns that omit connect; email campaigns may omit from_address because Zevari resolves the sender server-side.","input_schema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object","properties":{"lead_id":{"type":"string"},"linkedin_provider_id":{"type":"string"},"lead_email":{"type":"string","format":"email"},"email":{"type":"string","format":"email"},"lead_url":{"type":"string"},"url":{"type":"string"},"name":{"type":"string"}},"additionalProperties":true},"description":"Optional targets to check for persisted LinkedIn relationship status."}},"additionalProperties":false},"example_args":{"targets":[{"lead_id":"example_id","linkedin_provider_id":"example_id"}]},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"outreach_templates_create","display_name":"Outreach Templates Create","family":"content","description":"Create a new user-owned outreach template in the catalog.","input_schema":{"type":"object","properties":{"slug":{"type":"string","minLength":2,"maxLength":80,"description":"Lowercase slug (a-z, 0-9, hyphens). Must be unique within your account."},"name":{"type":"string","minLength":1,"maxLength":120,"description":"Human-readable name shown in the catalog"},"framework":{"type":"string","minLength":1,"maxLength":80,"description":"Framework family (e.g. 'pain-led', 'hook-starter', 'custom')"},"description":{"type":"string","maxLength":500,"description":"One-line description"},"purpose":{"type":"string","maxLength":2000,"description":"Longer-form use case / when to pick this template"},"variant":{"type":"string","maxLength":40,"description":"Variant within the framework (e.g. 'active', 'inactive' for hook-starter)"},"prompt_components":{"type":"object","additionalProperties":{},"description":"Per-step prompt content. Shape: { system_prompt, user_prompt_template, char_limits, ... }"},"sequence_outline":{"type":"object","additionalProperties":{},"description":"UI-facing preview of the sequence (steps, timing, char limits)"},"metadata":{"type":"object","additionalProperties":{},"description":"Discovery metadata (persona_fit, gtm_motion, industry_tags, ...)"}},"required":["slug","name","framework"],"additionalProperties":false},"example_args":{"slug":"string","name":"string","framework":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outreach_templates_delete","display_name":"Outreach Templates Delete","family":"destructive_cleanup","description":"Permanently delete a user-owned outreach template.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Slug of your user-owned template to delete"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"outreach_templates_fork","display_name":"Outreach Templates Fork","family":"content","description":"Copy a system or existing template into a new user-owned template for customization.","input_schema":{"type":"object","properties":{"source_slug":{"type":"string","description":"Slug of the template to fork (system or your own)"},"new_slug":{"type":"string","minLength":2,"maxLength":80,"description":"Slug for the new fork (must be unique within your account)"},"new_name":{"type":"string","minLength":1,"maxLength":120,"description":"Override name for the fork (defaults to '<source name> (fork)')"},"new_description":{"type":"string","maxLength":500}},"required":["source_slug","new_slug"],"additionalProperties":false},"example_args":{"source_slug":"string","new_slug":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outreach_templates_get","display_name":"Outreach Templates Get","family":"content","description":"Fetch a single outreach template by slug, including its prompt components and optional version history.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Template slug to fetch"},"include_history":{"type":"boolean","default":false,"description":"Include version history (system template history is admin-only)"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outreach_templates_list","display_name":"Outreach Templates List","family":"content","description":"Browse the outreach template catalog by framework, scope, and status.","input_schema":{"type":"object","properties":{"framework":{"type":"string","description":"Filter by framework family (e.g. 'pain-led', 'hook-starter')"},"scope":{"type":"string","enum":["system","user-owned","all"],"default":"all","description":"Filter by scope. 'system' = built-in templates; 'user-owned' = your private templates; 'all' = both"},"status":{"type":"string","enum":["active","draft","disabled"],"default":"active","description":"Template status filter"},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Max templates to return"}},"additionalProperties":false},"example_args":{"framework":"string","scope":"system"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outreach_templates_preview","display_name":"Outreach Templates Preview","family":"content","description":"Fetch the prompt outline and sequence structure of a template for UI rendering or review.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Slug of the template to preview"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"outreach_templates_update","display_name":"Outreach Templates Update","family":"content","description":"Edit a user-owned outreach template; changes are versioned.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Slug of the template to update"},"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":500},"purpose":{"type":"string","maxLength":2000},"prompt_components":{"type":"object","additionalProperties":{}},"sequence_outline":{"type":"object","additionalProperties":{}},"metadata":{"type":"object","additionalProperties":{}},"status":{"type":"string","enum":["active","draft","disabled"]},"version_bump":{"type":"string","enum":["patch","minor","major"],"default":"patch","description":"Semver bump kind for content changes. Status-only edits do not bump version."},"change_reason":{"type":"string","maxLength":500,"description":"Optional note explaining the change (logged to history)"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"content","requires":["zevari_context_get"],"can":["Create, update, schedule, publish, cancel, list, and manage content/template/media records in Zevari."],"cannot":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path."],"must_not_infer":["Do not treat saved content, templates, or media assets as already published externally."],"clarify_when":["Destination, schedule time, media attachment, template, or publishing account is unclear."],"user_guidance":["Separate internal content lifecycle operations from external social publishing approvals."],"recovery":["If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#content-media-templates-contracts"},"gotchas":["Guarantee public LinkedIn posting without the separate LinkedIn write confirmation path.","Do not treat saved content, templates, or media assets as already published externally.","Destination, schedule time, media attachment, template, or publishing account is unclear."],"guidance":["Separate internal content lifecycle operations from external social publishing approvals.","If publish or schedule fails, read the content/calendar state and ask for corrected timing or destination."]},{"tool_name":"pipeline_list_opportunities","display_name":"List pipeline opportunities","family":"pipeline","description":"List existing pipeline opportunities in the active workspace. Use before pipeline_propose_deal_closed to find the right opportunity_id, or to avoid proposing duplicates.","input_schema":{"type":"object","properties":{"stage":{"type":"string","enum":["open","closed_won","closed_lost"],"description":"Filter by stage. Default: all stages."},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Max rows to return (1-200, default 50)."}},"additionalProperties":false},"example_args":{"stage":"open","limit":10},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"pipeline","requires":["zevari_context_get"],"can":["List opportunities and propose pipeline changes such as opportunity creation, meeting, or closed-deal updates."],"cannot":["Assert a proposed pipeline change is final business truth without returned proposal state and user review."],"must_not_infer":[],"clarify_when":["Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"user_guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used."],"recovery":["If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#pipeline-contracts"},"gotchas":["Assert a proposed pipeline change is final business truth without returned proposal state and user review.","Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used.","If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."]},{"tool_name":"pipeline_propose_deal_closed","display_name":"Propose closed deal","family":"pipeline","description":"Propose a deal-closed outcome against an existing opportunity. Stages a confirmation; nothing is saved until the user approves. On approval, the linked opportunity flips to closed_won. Use only for confirmed paid deals — not for verbal commitments.","input_schema":{"type":"object","properties":{"opportunity_id":{"type":"string","minLength":1,"description":"Required pipeline opportunity id (from pipeline_list_opportunities)."},"occurred_at":{"type":"string","description":"ISO timestamp when the deal closed."},"amount_cents":{"type":"integer","minimum":0,"maximum":1000000000000,"nullable":true,"description":"Final deal amount in cents. If omitted, uses the opportunity's existing amount."},"notes":{"type":"string","maxLength":4000,"nullable":true,"description":"Optional notes."}},"required":["opportunity_id","occurred_at"],"additionalProperties":false},"example_args":{"opportunity_id":"example_id","occurred_at":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"pipeline","requires":["zevari_context_get"],"can":["List opportunities and propose pipeline changes such as opportunity creation, meeting, or closed-deal updates."],"cannot":["Assert a proposed pipeline change is final business truth without returned proposal state and user review."],"must_not_infer":[],"clarify_when":["Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"user_guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used."],"recovery":["If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#pipeline-contracts"},"gotchas":["Assert a proposed pipeline change is final business truth without returned proposal state and user review.","Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used.","If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."]},{"tool_name":"pipeline_propose_meeting","display_name":"Propose meeting","family":"pipeline","description":"Propose a meeting-booked outcome for a lead. Stages a confirmation; nothing is saved until the user approves. Use this when a lead has confirmed a call, demo, or meeting time — not for tentative or one-sided invitations.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","minLength":1,"description":"Required Zevari lead id."},"occurred_at":{"type":"string","description":"ISO timestamp when the meeting is/was scheduled."},"opportunity_id":{"type":"string","nullable":true,"description":"Optional pipeline opportunity to associate this meeting with."},"linkedin_account_id":{"type":"string","nullable":true,"description":"Optional LinkedIn account id; defaults to session's active account."},"notes":{"type":"string","maxLength":4000,"nullable":true,"description":"Optional notes — what was discussed, agreed to, etc."}},"required":["lead_id","occurred_at"],"additionalProperties":false},"example_args":{"lead_id":"example_id","occurred_at":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"pipeline","requires":["zevari_context_get"],"can":["List opportunities and propose pipeline changes such as opportunity creation, meeting, or closed-deal updates."],"cannot":["Assert a proposed pipeline change is final business truth without returned proposal state and user review."],"must_not_infer":[],"clarify_when":["Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"user_guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used."],"recovery":["If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#pipeline-contracts"},"gotchas":["Assert a proposed pipeline change is final business truth without returned proposal state and user review.","Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used.","If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."]},{"tool_name":"pipeline_propose_opportunity","display_name":"Propose opportunity","family":"pipeline","description":"Propose a new pipeline opportunity. Stages a confirmation; nothing is saved until the user approves at the returned approval_url. Use this for confirmed sales opportunities — e.g., a lead has agreed to a paid pilot or signed a contract.","input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Opportunity name (e.g., 'Acme Corp pilot')."},"company":{"type":"string","maxLength":200,"nullable":true,"description":"Company name."},"amount_cents":{"type":"integer","minimum":0,"maximum":1000000000000,"nullable":true,"description":"Deal value in cents (USD). Optional."},"stage":{"type":"string","enum":["open","closed_won","closed_lost"],"description":"Stage. Default: open."},"lead_id":{"type":"string","nullable":true,"description":"Optional Zevari lead id to associate with this opportunity."},"linkedin_account_id":{"type":"string","nullable":true,"description":"Optional LinkedIn account id. Defaults to session's active account. Use null for workspace-wide opportunities (e.g., a non-LinkedIn referral)."}},"required":["name"],"additionalProperties":false},"example_args":{"name":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"pipeline","requires":["zevari_context_get"],"can":["List opportunities and propose pipeline changes such as opportunity creation, meeting, or closed-deal updates."],"cannot":["Assert a proposed pipeline change is final business truth without returned proposal state and user review."],"must_not_infer":[],"clarify_when":["Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"user_guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used."],"recovery":["If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#pipeline-contracts"},"gotchas":["Assert a proposed pipeline change is final business truth without returned proposal state and user review.","Opportunity identity, meeting details, deal value, close state, or source evidence is unclear."],"guidance":["Tie proposals to returned lead/thread/campaign IDs and summarize the evidence used.","If proposal inputs are incomplete, read the lead/thread/opportunity and ask for missing business details."]},{"tool_name":"profile_get","display_name":"Get business profile","family":"entities","description":"Get the current user's business profile: persona, company, ICP criteria, default CTA, and preferred tone. Read this before generating any outreach.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":{"method":"profile.get","path":"/v1/profile/get","docs_url":"https://docs.zevari.ai/api/reference#profile-get","summary":"Get business profile"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"profile_update","display_name":"Update business profile","family":"entities","description":"Update the user's business profile. Required before agent tools will produce accurate results.","input_schema":{"type":"object","properties":{"persona_type":{"type":"string","enum":["vc","saas_founder","recruiter","consultant","pe"],"description":"User's persona type"},"full_name":{"type":"string"},"job_title":{"type":"string"},"company_name":{"type":"string"},"company_description":{"type":"string"},"product_offering":{"type":"string"},"target_industry":{"type":"string","description":"ICP: target industry"},"target_role":{"type":"string","description":"ICP: target role/title"},"target_company_size":{"type":"string","description":"ICP: target company size"},"target_company_revenue":{"type":"string","description":"ICP: target company revenue"},"target_company_location":{"type":"string","description":"ICP: target company location"},"min_icp_score":{"type":"number","minimum":1,"maximum":5,"description":"Minimum ICP score for qualification"},"signal_keywords":{"type":"array","items":{"type":"string"},"description":"Keywords for signal scanning (e.g. 'evaluating CRM', 'hiring sales team')"},"monitoring_topics":{"type":"array","items":{"type":"string"},"description":"Topics for industry monitoring (e.g. 'AI in sales', 'outbound automation')"},"use_cases":{"type":"array","items":{"type":"string"},"description":"Selected use cases"},"recommended_skills":{"type":"array","items":{"type":"string"},"description":"Recommended skill slugs"},"default_cta_goal":{"type":"string","enum":["book_meeting","start_conversation","podcast_guest_invite","webinar_event_invite","free_audit_resource","get_published_pr","partnership_inquiry","feedback_review_request","other"],"description":"Default CTA goal for outreach"},"default_cta_custom":{"type":"string","description":"Custom CTA text when goal is 'other'"},"default_cta_resource_url":{"type":"string","description":"Default resource URL for CTA (e.g., calendar link, landing page)"}},"additionalProperties":false},"example_args":{"persona_type":"vc","full_name":"string"},"sensitive":false,"api_equivalent":{"method":"profile.update","path":"/v1/profile/update","docs_url":"https://docs.zevari.ai/api/reference#profile-update","summary":"Update business profile"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"signals_list","display_name":"List intent signals","family":"entities","description":"List signals with optional filtering by type, priority, or acted status.","input_schema":{"type":"object","properties":{"signal_type":{"type":"string","enum":["funding","hiring","leadership","exit_intent","thought_leadership","content_engagement"]},"priority":{"type":"string","enum":["high","medium","low"]},"acted_on":{"type":"boolean"},"limit":{"type":"number","minimum":1,"maximum":100,"default":30},"offset":{"type":"number","minimum":0,"default":0}},"additionalProperties":false},"example_args":{"signal_type":"funding","priority":"high"},"sensitive":false,"api_equivalent":{"method":"signals.list","path":"/v1/signals/list","docs_url":"https://docs.zevari.ai/api/reference#signals-list","summary":"List intent signals"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"signals_mark_acted","display_name":"Mark signals acted","family":"entities","description":"Mark a signal as acted upon so it no longer appears in the active signal queue.","input_schema":{"type":"object","properties":{"signal_id":{"type":"string","description":"Signal ID to mark as acted on"}},"required":["signal_id"],"additionalProperties":false},"example_args":{"signal_id":"example_id"},"sensitive":false,"api_equivalent":{"method":"signals.markActed","path":"/v1/signals/markActed","docs_url":"https://docs.zevari.ai/api/reference#signals-markActed","summary":"Mark signals acted"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"signals_save","display_name":"Save intent signals","family":"entities","description":"Persist detected buying signals (hiring, funding, pain point, etc.) linked to a lead and/or post.","input_schema":{"type":"object","properties":{"signals":{"type":"array","items":{"type":"object","properties":{"signal_type":{"type":"string","enum":["funding","hiring","leadership","exit_intent","thought_leadership","content_engagement"]},"source_type":{"type":"string","enum":["post","comment","profile_change","job_posting"],"default":"post"},"source_id":{"type":"string"},"source_url":{"type":"string"},"confidence":{"type":"number","minimum":0,"maximum":1,"default":0},"score":{"type":"number","minimum":1,"maximum":5},"priority":{"type":"string","enum":["high","medium","low"]},"persona_insight":{"type":"string"},"keyword_matched":{"type":"string"},"author_name":{"type":"string"},"author_headline":{"type":"string"},"author_provider_id":{"type":"string"},"snippet":{"type":"string"},"lead_id":{"type":"string"}},"required":["signal_type"],"additionalProperties":false},"description":"Array of signals to save"}},"required":["signals"],"additionalProperties":false},"example_args":{"signals":[{"signal_type":"funding"}]},"sensitive":false,"api_equivalent":{"method":"signals.save","path":"/v1/signals/save","docs_url":"https://docs.zevari.ai/api/reference#signals-save","summary":"Save intent signals"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"skills_activate","display_name":"Activate skill","family":"entities","description":"Activate a skill for the current user with initial configuration.","input_schema":{"type":"object","properties":{"skill_slug":{"type":"string","description":"Skill slug to activate"},"config":{"type":"object","additionalProperties":{},"description":"Initial configuration values"}},"required":["skill_slug"],"additionalProperties":false},"example_args":{"skill_slug":"string"},"sensitive":false,"api_equivalent":{"method":"skills.activate","path":"/v1/skills/activate","docs_url":"https://docs.zevari.ai/api/reference#skills-activate","summary":"Activate skill"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"skills_get","display_name":"Get skill instructions","family":"entities","description":"Get a skill's step-by-step instructions, config schema, and metadata by slug. Read these instructions before executing the skill.","input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Skill slug to retrieve"}},"required":["slug"],"additionalProperties":false},"example_args":{"slug":"string"},"sensitive":false,"api_equivalent":{"method":"skills.get","path":"/v1/skills/get","docs_url":"https://docs.zevari.ai/api/reference#skills-get","summary":"Get skill instructions"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"skills_list","display_name":"List skills","family":"entities","description":"List available skills by category. Always call this before complex workflows to check if a skill exists.","input_schema":{"type":"object","properties":{"category":{"type":"string","enum":["setup","discover","detect","deploy","pursue","converse","create","research"],"description":"Filter by category"}},"additionalProperties":false},"example_args":{"category":"setup"},"sensitive":false,"api_equivalent":{"method":"skills.list","path":"/v1/skills/list","docs_url":"https://docs.zevari.ai/api/reference#skills-list","summary":"List skills"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"skills_update_config","display_name":"Update skill config","family":"entities","description":"Update a user's skill configuration (e.g., change default settings).","input_schema":{"type":"object","properties":{"skill_slug":{"type":"string","description":"Skill slug"},"config":{"type":"object","additionalProperties":{},"description":"Updated configuration values"}},"required":["skill_slug","config"],"additionalProperties":false},"example_args":{"skill_slug":"string","config":{}},"sensitive":false,"api_equivalent":{"method":"skills.updateConfig","path":"/v1/skills/updateConfig","docs_url":"https://docs.zevari.ai/api/reference#skills-updateConfig","summary":"Update skill config"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"targets_archive","display_name":"Targets Archive","family":"destructive_cleanup","description":"Stage archive of a lead. This is destructive cleanup and only creates a browser-only Zevari approval link; nothing is archived until an owner/admin approves in the Zevari UI within 24 hours. Chat approval is not supported. Prefer archive for bad ICP matches or leads the user wants hidden from default views.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Lead ID to archive"},"reason":{"type":"string","maxLength":500,"description":"Optional archive reason"}},"required":["lead_id"],"additionalProperties":false},"example_args":{"lead_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"targets_create_list","display_name":"Create target list","family":"entities","description":"Create a named list and optionally add leads to it.","input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Name for the list"},"notes":{"type":"string","description":"Optional notes about this list"},"lead_ids":{"type":"array","items":{"type":"string"},"description":"Target IDs to add to the list"},"generated_from":{"type":"string","description":"How this list was generated (e.g. skill slug)"}},"required":["name"],"additionalProperties":false},"example_args":{"name":"string"},"sensitive":false,"api_equivalent":{"method":"targets.createList","path":"/v1/targets/createList","docs_url":"https://docs.zevari.ai/api/reference#targets-createList","summary":"Create target list"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"targets_delete","display_name":"Targets Delete","family":"destructive_cleanup","description":"Stage hard deletion of a lead. This is destructive cleanup and only creates a browser-only Zevari approval link; nothing is deleted until an owner/admin approves in the Zevari UI within 24 hours. Chat approval is not supported. Use only for records created by mistake, not ordinary disqualification.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Lead ID to delete"}},"required":["lead_id"],"additionalProperties":false},"example_args":{"lead_id":"example_id"},"sensitive":true,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"destructive_cleanup","requires":["zevari_context_get"],"can":["Stage browser-only Zevari approval for lead/list cleanup within the active tenant when authorized."],"cannot":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool."],"must_not_infer":["Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates."],"clarify_when":["The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"user_guidance":[],"recovery":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#cleanup-approvals"},"gotchas":["Execute cleanup directly, approve cleanup from chat, perform irreversible cleanup across unknown scope, or proceed without the explicit IDs required by the tool.","Do not treat a broad cleanup request as permission to delete unrelated lists, targets, assets, or templates.","The user asks to delete all, clean up old data, or remove records without exact IDs/scope."],"guidance":["If authorization or scope is denied, ask an owner/admin to perform the cleanup or provide narrower IDs."]},{"tool_name":"targets_get_pipeline","display_name":"Get target pipeline","family":"entities","description":"Query leads by pipeline status with optional keyword and list filters.","input_schema":{"type":"object","properties":{"status":{"type":"string","enum":["discovered","researched","qualified","warming","connected","replied","converted","disqualified"],"description":"Filter by pipeline status"},"limit":{"type":"number","minimum":1,"maximum":100,"default":50},"offset":{"type":"number","minimum":0,"default":0}},"additionalProperties":false},"example_args":{"status":"discovered","limit":10},"sensitive":false,"api_equivalent":{"method":"targets.getPipeline","path":"/v1/targets/getPipeline","docs_url":"https://docs.zevari.ai/api/reference#targets-getPipeline","summary":"Get target pipeline"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"targets_save","display_name":"Save targets","family":"entities","description":"Persist one or more actionable LinkedIn profiles as trackable leads in global_leads. This is an entity persistence tool and does not require actions_request_confirmation; call it directly. Include linkedin_provider_id when available; linkedin_profile_url/linkedin_url/profileUrl/publicIdentifier are accepted identity aliases.","input_schema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"linkedin_url":{"type":"string","description":"Alias for linkedin_profile_url."},"linkedinUrl":{"type":"string","description":"camelCase alias for linkedin_profile_url."},"url":{"type":"string","description":"Alias for linkedin_profile_url."},"profile_url":{"type":"string","description":"Alias returned by some LinkedIn APIs."},"profileUrl":{"type":"string","description":"camelCase profile URL alias returned by Zevari search."},"linkedin_provider_id":{"type":"string"},"provider_id":{"type":"string","description":"Alias for linkedin_provider_id."},"providerId":{"type":"string","description":"camelCase alias for linkedin_provider_id."},"id":{"type":"string","description":"LinkedIn provider id from linkedin_search_profiles results."},"linkedin_public_identifier":{"type":"string"},"public_identifier":{"type":"string","description":"LinkedIn profile slug from /in/{slug}."},"publicIdentifier":{"type":"string","description":"camelCase LinkedIn profile slug from /in/{slug}."},"name":{"type":"string"},"headline":{"type":"string"},"company_name":{"type":"string"},"location":{"type":"string"},"work_email":{"type":"string"},"connection_status":{"type":"string","enum":["none","pending","connected"]},"network_distance":{"type":"string","description":"LinkedIn network distance from search/profile results; DISTANCE_1 is saved as connected."},"networkDistance":{"type":"string","description":"camelCase alias for network_distance."}},"additionalProperties":true},"description":"Array of target profiles to save"},"source":{"type":"string","default":"search","description":"How these targets were found"}},"required":["targets"],"additionalProperties":false},"example_args":{"targets":[{"linkedin_profile_url":"https://www.linkedin.com/in/example/","linkedin_url":"https://www.linkedin.com/in/example/"}]},"sensitive":false,"api_equivalent":{"method":"targets.save","path":"/v1/targets/save","docs_url":"https://docs.zevari.ai/api/reference#targets-save","summary":"Save targets"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"targets_save_research","display_name":"Save target research","family":"entities","description":"Store research output (ICP score, behavioral profile, company intel) against an existing lead record.","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Target ID"},"research_type":{"type":"string","enum":["profile","behavioral","communication_blueprint","icp_scoring","company_intelligence","personalization"],"description":"Type of research"},"summary":{"type":"string","description":"Human-readable summary"},"data":{"type":"object","additionalProperties":{},"description":"Full structured research output"},"icp_score":{"type":"number","minimum":1,"maximum":5,"description":"ICP score if this is ICP research"},"icp_fit":{"type":"string","description":"ICP fit description"}},"required":["lead_id","research_type","data"],"additionalProperties":false},"example_args":{"lead_id":"example_id","research_type":"profile","data":{}},"sensitive":false,"api_equivalent":{"method":"targets.saveResearch","path":"/v1/targets/saveResearch","docs_url":"https://docs.zevari.ai/api/reference#targets-saveResearch","summary":"Save target research"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"targets_update_status","display_name":"Update target status","family":"entities","description":"Update a lead's pipeline status (discovered, contacted, qualified, converted, disqualified).","input_schema":{"type":"object","properties":{"lead_id":{"type":"string","description":"Target ID to update"},"pipeline_status":{"type":"string","enum":["discovered","researched","qualified","warming","connected","replied","converted","disqualified"],"description":"New pipeline status"},"icp_score":{"type":"number","minimum":1,"maximum":5,"description":"ICP score 1-5"},"icp_fit":{"type":"string","description":"ICP fit description"},"connection_status":{"type":"string","enum":["none","pending","connected"]}},"required":["lead_id","pipeline_status"],"additionalProperties":false},"example_args":{"lead_id":"example_id","pipeline_status":"discovered"},"sensitive":false,"api_equivalent":{"method":"targets.updateStatus","path":"/v1/targets/updateStatus","docs_url":"https://docs.zevari.ai/api/reference#targets-updateStatus","summary":"Update target status"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"voice_dna_save","display_name":"Save voice DNA","family":"entities","description":"Save a user's writing style profile extracted from their own LinkedIn content.","input_schema":{"type":"object","properties":{"style_system":{"type":"object","additionalProperties":{},"description":"Complete voice profile: syntax_patterns, vocabulary, tone, formatting, outreach_style"},"banned_words":{"type":"array","items":{"type":"string"},"description":"Words the user never uses"},"anti_voice":{"type":"array","items":{"type":"string"},"description":"3-5 phrases representing the opposite of how the user writes"},"killer_lines":{"type":"array","items":{"type":"string"},"description":"Exact lines the user wrote that are distinctive"},"samples_count":{"type":"number","description":"Number of writing samples analyzed"}},"required":["style_system"],"additionalProperties":false},"example_args":{"style_system":{}},"sensitive":false,"api_equivalent":{"method":"voiceDna.save","path":"/v1/voiceDna/save","docs_url":"https://docs.zevari.ai/api/reference#voiceDna-save","summary":"Save voice DNA"},"capability_contract":{"version":"2026-05-22.1","family":"entities","requires":["zevari_context_get"],"can":["Persist and read scoped Zevari entity records such as profiles, targets, skills, signals, and brand context."],"cannot":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence."],"must_not_infer":["Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it."],"clarify_when":["The target record, active account, or write intent is ambiguous."],"user_guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data."],"recovery":["If a record is not found, re-check the active context and ask for the relevant ID or URL."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#targets-entities-contracts"},"gotchas":["Bypass tenant/account scope or imply confirmation is required for ordinary entity persistence.","Do not stage actions_request_confirmation for direct persistence tools unless the tool contract explicitly requires it.","The target record, active account, or write intent is ambiguous."],"guidance":["Call direct persistence tools directly when the user has asked to save or update non-sensitive entity data.","If a record is not found, re-check the active context and ask for the relevant ID or URL."]},{"tool_name":"zevari_context_confirm","display_name":"Confirm Zevari context","family":"context","description":"Confirm the Zevari organization and LinkedIn account for this MCP chat after the user explicitly acknowledges a scope returned by zevari_context_get. The confirmed scope may be the current_context or any matching item in available_contexts. Do not call this until the user has confirmed the intended organization/account in natural language.","input_schema":{"type":"object","properties":{"organization_id":{"type":"string","description":"The organization_id from zevari_context_get.available_contexts for the context the user confirmed for this chat."},"linkedin_account_id":{"type":"string","nullable":true,"description":"The linkedin_account_id from zevari_context_get.available_contexts for the context the user confirmed for this chat. Use null only when that available context has no selected LinkedIn account."},"user_confirmation":{"type":"string","minLength":3,"description":"Short natural-language summary of the user's confirmation, e.g. 'User confirmed Manvi Workspace / Manvi LinkedIn for this chat.'"}},"required":["organization_id","user_confirmation"],"additionalProperties":false},"example_args":{"organization_id":"example_id","user_confirmation":"string"},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"context","requires":["zevari_context_get"],"can":["Record the user's explicit org/account confirmation for the MCP chat."],"cannot":["Invent confirmation, switch to contexts not returned by zevari_context_get, or replace natural-language user consent."],"must_not_infer":["Do not call this before the user acknowledges the intended org/account in natural language."],"clarify_when":["The user acknowledgement does not clearly match one available context."],"user_guidance":["Use exact organization_id and linkedin_account_id from available_contexts."],"recovery":["If the intended context is absent, ask the user to reconnect Zevari after selecting the right account."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Invent confirmation, switch to contexts not returned by zevari_context_get, or replace natural-language user consent.","Do not call this before the user acknowledges the intended org/account in natural language.","The user acknowledgement does not clearly match one available context."],"guidance":["Use exact organization_id and linkedin_account_id from available_contexts.","If the intended context is absent, ask the user to reconnect Zevari after selecting the right account."]},{"tool_name":"zevari_context_get","display_name":"Get Zevari context","family":"context","description":"Start-of-chat Zevari MCP context check. Call this before any other Zevari tool in a fresh chat. It returns the active organization, active LinkedIn account, other available scopes, and handover prompts for chats that should operate in a different scope.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"example_args":{},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"context","requires":[],"can":["Return active org/account context, available contexts, and handoff prompts for this MCP chat."],"cannot":["Confirm that the current context is the user's intended write scope by itself."],"must_not_infer":["Do not proceed with ambiguous writes only because a current_context exists."],"clarify_when":["The returned current context conflicts with user language or expected account/workspace."],"user_guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint."],"recovery":["Ask the user to confirm the intended context, then call zevari_context_confirm with returned IDs."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Confirm that the current context is the user's intended write scope by itself.","Do not proceed with ambiguous writes only because a current_context exists.","The returned current context conflicts with user language or expected account/workspace."],"guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint.","Ask the user to confirm the intended context, then call zevari_context_confirm with returned IDs."]},{"tool_name":"zevari_org_users_list","display_name":"List organization users","family":"context","description":"List active users/members in the current confirmed Zevari organization. Owner/admin callers also receive pending invitations. Use this when the user asks who is in the current org/workspace/team.","input_schema":{"type":"object","properties":{"include_pending_invitations":{"type":"boolean","default":true,"description":"Whether to include pending invitations. Only owner/admin callers receive pending invitations."}},"additionalProperties":false},"example_args":{"include_pending_invitations":true},"sensitive":false,"api_equivalent":null,"capability_contract":{"version":"2026-05-22.1","family":"context","requires":[],"can":["Read or confirm the active Zevari org/account scope for this MCP chat."],"cannot":["Change the user's real Zevari workspace or LinkedIn account selection outside the confirmed MCP scope."],"must_not_infer":["Do not assume the displayed user/org/account is intended for writes until confirmed when scope is ambiguous."],"clarify_when":["The user mentions a different workspace, teammate, LinkedIn account, or handoff context."],"user_guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint."],"recovery":["If scope is stale or wrong, ask the user to reconnect Zevari or start a new chat after selecting the intended account."],"unsupported_resolution":["For Zevari support/contact requests, bugs, unsupported feature requests, or suspected product gaps, route to issues@zevari.ai; for bugs or feature requests, ask for repro steps, expected behavior, relevant IDs, and screenshots/log context."],"wiki_anchor":"docs/reference/MCP-CAPABILITY-WIKI.md#session-start-checklist"},"gotchas":["Change the user's real Zevari workspace or LinkedIn account selection outside the confirmed MCP scope.","Do not assume the displayed user/org/account is intended for writes until confirmed when scope is ambiguous.","The user mentions a different workspace, teammate, LinkedIn account, or handoff context."],"guidance":["Use zevari_context_get at chat start before planning writes.","Respect the active organization and LinkedIn account returned by context tools.","If the user asks for Zevari support, a support email, or a contact address, answer with issues@zevari.ai directly; do not search MCP tools for a support-contact endpoint.","If scope is stale or wrong, ask the user to reconnect Zevari or start a new chat after selecting the intended account."]}]}