{"name":"Viva Marketing Manager — Agent API","version":"1.1.0","protocol":{"mcp":{"transport":"streamable-http","endpoint":"https://mcp.goviva.ai/mcp","protocolVersions":["2025-06-18","2025-03-26","2024-11-05"],"methods":["initialize","tools/list","tools/call"]}},"auth":{"oauth":{"issuer":"https://mcp.goviva.ai","resource":"https://mcp.goviva.ai/mcp","scopes":["mcp:read","mcp:write","mcp:send"]},"api_key":{"header":"X-Viva-Key (or Authorization: Bearer vsk_…)","issue":"business issues scoped keys in the dashboard"}},"capabilities":[{"name":"search_knowledge","title":"Search knowledge","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Search THIS business's own knowledge base (uploaded documents, FAQs, services, pricing, hours, policies). Use this for any question about how the business operates or what it offers, in the owner's own words.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"What to look up in the knowledge base"}},"required":["query"]}},{"name":"search_feature_docs","title":"Search feature docs","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Search Viva's OWN product documentation — how the features of this dashboard work (blog, campaigns, forms, calendar, chat, voice, SMS, settings, etc.). Use for any 'how do I…' / 'where do I…' question about using the product itself, then answer with the documented steps. (This is product docs, not the business's knowledge base — use search_knowledge for that.)","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"The feature or task to look up, e.g. \"write a blog post\""}},"required":["query"]}},{"name":"list_product_updates","title":"List product updates","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Viva's release notes — the features and improvements that have actually shipped, newest first. Use for ANY 'what's new', 'what did you launch', 'what changed this week/month', 'release notes', 'what's been added' question. Also use to check whether something the owner is asking for shipped recently. Never tell an owner you can't see a changelog — call this.","input_schema":{"type":"object","properties":{"since_days":{"type":"number","description":"Only updates from the last N days (e.g. 7 for \"this week\", 30 for \"this month\"). Omit for the latest regardless of date."},"query":{"type":"string","description":"Optional: only updates matching this word or area, e.g. \"email\", \"booking\""},"limit":{"type":"number","description":"Max updates to return (default 10)"}}}},{"name":"search_roadmap","title":"Search roadmap","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Viva's public roadmap — what is being considered, planned, in progress, in beta, or released. Use when the owner asks for something the product does not have yet ('can it do X?', 'when will you add X?', 'is X coming?') so you can tell them whether it is already on the way BEFORE filing a new request with submit_feature_request.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"What they are asking for, e.g. \"recurring appointments\""},"limit":{"type":"number","description":"Max items (default 8)"}}}},{"name":"get_business_snapshot","title":"Get business snapshot","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get a quick real-time snapshot of the business: new leads (24h), upcoming appointments (7 days), and open tasks. Use to answer \"what's going on\" / \"give me an overview\" / daily-briefing style questions.","input_schema":{"type":"object","properties":{}}},{"name":"get_integration_status","title":"Get integration status","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"What this business has actually CONNECTED — Google Business Profile, calendar, payments, POS, email, and the rest. Call this for any 'do you support X', 'is X connected', 'can I do X with X' question BEFORE answering from product docs. Docs describe what Viva can do; this says what is live for THIS business right now. Never promise a capability that depends on a connection this returns as not connected.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Optional: filter by name or category, e.g. 'google', 'calendar', 'payments'"}}}},{"name":"list_tags","title":"List tags","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List this business's CRM tags (segments) with how many customers and leads carry each one. Call this FIRST for any question about tags, lists or segments — before count_records or search_customers with a tag filter — so you use the exact tag names this business uses. Tag names are matched exactly; a near miss answers a different question. Also the right tool for \"what lists do I have\" / \"how is my customer base segmented\".","input_schema":{"type":"object","properties":{"entity":{"type":"string","description":"Optional: 'customers' or 'leads' to count only that side. Default: both."},"include_unused":{"type":"boolean","description":"Include tags nothing is tagged with (default false)"}}}},{"name":"list_recent_changes","title":"List recent changes","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the recent changes made through this assistant, newest first — tag edits, seeded backlogs, batches of scheduled actions — with what was changed, how many records, and whether it has been undone. Use it to answer \"what did you just do?\" and to find a batch_id for undo_change.","input_schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Max rows (default 10, max 50)"}}}},{"name":"count_records","title":"Count records","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Count how many records of a kind this business has. Use for EVERY 'how many…', 'do I have any…', 'what's my total…' question — leads, customers, appointments, quotes, tasks, forms, conversations, calls, notes. This is the ONLY correct way to answer a quantity question: list tools return one page and their totals are for pagination, not for counting. Optionally break the count down by status or by tag, and — for customers and leads — filter by which tags they carry or DON'T carry, and by which fields are filled in or blank. These COMBINE: 'how many customers have neither pilot tag but do have an email' is ONE call (missing_tags + has_fields), never a page you count by eye. Call list_tags first to get exact tag names.","input_schema":{"type":"object","properties":{"entity":{"type":"string","description":"What to count: leads | customers | appointments | quotes | tasks | forms | conversations | calls | notes"},"status":{"type":"string","description":"Optional: only records with this status"},"since_days":{"type":"number","description":"Optional: only records created in the last N days"},"by_status":{"type":"boolean","description":"Also return the breakdown per status (default false)"},"include_closed":{"type":"boolean","description":"Leads only: include won/lost/closed. Default false, matching the Pipeline page. Set true for \"how many leads have I EVER had\"."},"has_tags":{"type":"array","items":{"type":"string"},"description":"Customers/leads only: only those carrying these tags. Names must match list_tags exactly."},"missing_tags":{"type":"array","items":{"type":"string"},"description":"Customers/leads only: only those carrying NONE of these tags. This is how you answer \"how many customers do NOT have tag X or Y\" — pass both names here and read `total`."},"match_tags":{"type":"string","description":"How to combine has_tags: 'all' (default, carries every one) or 'any' (carries at least one)"},"by_tag":{"type":"boolean","description":"Customers/leads only: also return how many of the counted records carry each tag, plus how many carry none"},"has_fields":{"type":"array","items":{"type":"string"},"description":"Customers/leads only: only those with these fields filled in. Customers: email, phone, name, address, company, website, birthday, notes. Leads: email, phone, name, company, website, notes, next_action. Combines with the tag filters — \"no pilot tag AND has an email\" is one call."},"missing_fields":{"type":"array","items":{"type":"string"},"description":"Customers/leads only: only those with these fields blank or missing (e.g. [\"email\"] for \"who am I missing an address for\")."}},"required":["entity"]}},{"name":"get_sellability_score","title":"Get sellability score","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Score how much of this business would survive its owner leaving — what a buyer would actually be purchasing. Scored on TRANSFERABILITY, not marketing: owner independence, repeat and contracted revenue, whether the customer list is reachable, reputation, and whether demand arrives without the owner. Use it when the owner asks what their business is worth, whether it is sellable, how to make it worth more, or what would happen if they stepped back. Check `confidence` FIRST: 'indicative' means too little of the business is recorded to quote the number at all — report the blind spots instead of the score. Read `coverage` before quoting `score` — a driver we cannot measure is a blind spot, NOT a zero, and is dropped from the total rather than counted as failure. Financial drivers are deliberately not scored because we do not hold the books. `priority_fixes` is ranked by how much each one would actually move the number.","input_schema":{"type":"object","properties":{}}},{"name":"score_prospect_sellability","title":"Score prospect sellability","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Score PROSPECTS from Find Customers on how acquirable they look — private rather than a franchise unit, established, a real footprint, a live website, and a reputation where we can see one. Use it to rank a page of search results for a broker or an acquirer. Pass the b2b_businesses ids you want graded. Duplicate rows for the same operator are merged before scoring, and franchise status is DERIVED from how far the brand spreads across cities and phone numbers, so a franchise unit scores low and is labelled. Sector is never scored — each row carries `is_trade` so you can filter to trades and still compare scores fairly. Check `confidence` before quoting a score.","input_schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"b2b_businesses ids to score (max 200)."}},"required":["ids"]}},{"name":"check_market_coverage","title":"Check market coverage","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Check a LIST of business names against the Find Customers databases and report how many we already hold. Use this to answer \"do we know these businesses?\" for a broker's deal list, a chamber roster, a conference exhibitor list, or a prospect's client logos — before claiming coverage in a meeting. Reports two separate rates: in_working_set (in the enriched set Find Customers can act on today) and in_corpus_only (we hold the record but haven't pulled it in). Contacts are never returned; unlock those through Find Customers. A 'weak_match_only' row means the name matched a substring by coincidence — treat it as not found.","input_schema":{"type":"object","properties":{"businesses":{"type":"array","description":"Business names to check. Each item is a name string, or an object {name, city, state} when you know the location — supplying city/state removes same-name businesses elsewhere.","items":{"type":"string"}},"states":{"type":"array","items":{"type":"string"},"description":"Optional two-letter state codes to scope the corpus probe, e.g. ['CA','NV']."},"include_corpus":{"type":"boolean","description":"Also probe the full R2 corpus beyond the working set. Default true. Slower (one probe per name) — set false for a fast working-set-only answer."},"examples_per_name":{"type":"integer","description":"Sample matches to return per input name (default 3, max 10)."}},"required":["businesses"]}},{"name":"list_leads","title":"List leads","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the business's leads, most recent first. Optionally filter by status (new, contacted, qualified, proposal, closed) or by tag. Returns contact info, status, value, source, next action, and the lead's tags.","input_schema":{"type":"object","properties":{"status":{"type":"string","description":"Optional status filter: new | contacted | qualified | proposal | closed"},"include_closed":{"type":"boolean","description":"Include won/lost/closed leads. Default false — matches the Pipeline page, which shows the ACTIVE pipeline."},"has_tags":{"type":"array","items":{"type":"string"},"description":"Only leads carrying these tags. Names must match list_tags exactly."},"missing_tags":{"type":"array","items":{"type":"string"},"description":"Only leads carrying NONE of these tags."},"match_tags":{"type":"string","description":"How to combine has_tags: 'all' (default) or 'any'"},"has_fields":{"type":"array","items":{"type":"string"},"description":"Only leads with these fields filled in: email, phone, name, company, website, notes, next_action."},"missing_fields":{"type":"array","items":{"type":"string"},"description":"Only leads with these fields blank (e.g. [\"phone\"] for \"who am I missing a number for\")."},"limit":{"type":"integer","description":"Max rows (default 20, max 100)"}}}},{"name":"get_lead","title":"Get lead","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get full detail for one lead by id, including its recent activity timeline (calls, emails, notes, status changes).","input_schema":{"type":"object","properties":{"lead_id":{"type":"integer","description":"The lead id"}},"required":["lead_id"]}},{"name":"list_quotes","title":"List quotes","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the business's quotes / RFQs (event-supply and corporate requests), most recent first. Optionally filter by status (new, quoting, sent, accepted, invoiced, fulfilled, declined, expired). Returns buyer contact, occasion, event date, guest count, total and status. Use for \"what quotes are outstanding\", \"who hasn't accepted yet\", \"how much is in my pipeline of quotes\".","input_schema":{"type":"object","properties":{"status":{"type":"string","description":"Optional status filter: new | quoting | sent | accepted | invoiced | fulfilled | declined | expired"},"limit":{"type":"integer","description":"Max rows (default 20, max 100)"}}}},{"name":"get_quote","title":"Get quote","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get full detail for one quote by id, including its priced line items. Use when the owner asks what is on a specific quote.","input_schema":{"type":"object","properties":{"quote_id":{"type":"integer","description":"The quote id"}},"required":["quote_id"]}},{"name":"list_appointments","title":"List appointments","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List upcoming appointments within the next N days (default 7). Returns time, title, customer, status, and notes.","input_schema":{"type":"object","properties":{"days":{"type":"integer","description":"How many days ahead (default 7, max 100)"},"limit":{"type":"integer"}}}},{"name":"list_open_tasks","title":"List open tasks","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the owner's open (incomplete) tasks with due dates.","input_schema":{"type":"object","properties":{"limit":{"type":"integer"}}}},{"name":"search_customers","title":"Search customers","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Find customers by name, email, or phone (partial match), or by tag. Leave query empty to list recent customers. Tag filters (has_tags / missing_tags) segment the book the same way the Customers page does — but for a QUANTITY answer use count_records, not the length of this page. Each row comes back with its real tags.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Name, email, or phone fragment"},"has_tags":{"type":"array","items":{"type":"string"},"description":"Only customers carrying these tags. Names must match list_tags exactly."},"missing_tags":{"type":"array","items":{"type":"string"},"description":"Only customers carrying NONE of these tags."},"match_tags":{"type":"string","description":"How to combine has_tags: 'all' (default) or 'any'"},"has_fields":{"type":"array","items":{"type":"string"},"description":"Only customers with these fields filled in: email, phone, name, address, company, website, birthday, notes."},"missing_fields":{"type":"array","items":{"type":"string"},"description":"Only customers with these fields blank."},"limit":{"type":"integer"}}}},{"name":"list_recent_conversations","title":"List recent conversations","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the most recent customer conversations the AI handled (chat). Returns recent message snippets so you can summarize what customers have been asking.","input_schema":{"type":"object","properties":{"limit":{"type":"integer"}}}},{"name":"list_recent_calls","title":"List recent calls","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List recent phone calls the AI voice agent handled, with summaries/outcomes where available.","input_schema":{"type":"object","properties":{"limit":{"type":"integer"}}}},{"name":"get_connected_account","title":"Get connected account","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Which Viva account (business) this connection acts for: its name, id and sign-in email. Use it when asked which account you are connected to, or before reporting that something is empty.","input_schema":{"type":"object","properties":{}}},{"name":"get_business_profile","title":"Get business profile","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get this business's own profile record (name, contact, category, hours, and settings) so you have context about who you're assisting.","input_schema":{"type":"object","properties":{}}},{"name":"ask_chief_marketing_agent","title":"Ask chief marketing agent","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"description":"Talk to the owner's Chief Marketing Agent in Viva (their named AI marketing lead; with agents off, their Viva assistant). It knows the business, follows the owner's standing rules, and leads the agents. Use it for judgement and for orders: 'how is marketing going and what should I focus on', 'find more corporate gift buyers', 'pause prospecting for a week', 'run the gift-buyers agent'. Turning agents on or off and running them happens only through it. Pass conversation_id from its last reply to continue the same conversation. It can make changes only if this connection may; it never sends email.","input_schema":{"type":"object","properties":{"message":{"type":"string","description":"What to ask or tell it, in the owner's words"},"conversation_id":{"type":"string","description":"From a previous reply, to continue that conversation"}},"required":["message"]}},{"name":"list_agents","title":"List agents","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"This business's agents: name, on/off, what each looks for, how many people per run, its credit budget and schedule, the workflow it hands people to, its newest run, and the run waiting for approval if any. Use for 'what are my agents doing', 'is my prospecting agent on'.","input_schema":{"type":"object","properties":{}}},{"name":"list_pending_approvals","title":"List pending approvals","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Everything an agent is waiting on the owner to decide: batches of people a prospecting run found, and follow-up or win-back emails drafted for real people. Each item names the tool that decides it. Use for 'what needs my approval', 'what is waiting for me'.","input_schema":{"type":"object","properties":{}}},{"name":"get_agent_run","title":"Get agent run","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"One run of an agent: who it found (name, title, company), why, who was already known, and what approving would cost in credits against the agent's budget. Use before approving or declining a run.","input_schema":{"type":"object","properties":{"agent_id":{"type":"string","description":"From list_agents or list_pending_approvals"},"run_id":{"type":"string"}},"required":["agent_id","run_id"]}},{"name":"find_prospects","title":"Find prospects","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":true,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Search for prospects. kind 'businesses' searches the business database by name, industry and place (free; emails come back masked). kind 'people' finds people from a plain description such as 'HR directors at tech companies in San Jose' (free within the day's allowance; past it a search costs credits, so this stops and says so unless confirm_spend is true; ask the person first). Contact details are unlocked in Viva (Find Customers), 1 credit each.","input_schema":{"type":"object","properties":{"kind":{"type":"string","enum":["businesses","people"]},"query":{"type":"string","description":"people: who to find, in plain words. businesses: part of a business name"},"industry":{"type":"string","description":"businesses: an industry, e.g. \"Wineries\""},"city":{"type":"string"},"county":{"type":"string","description":"businesses: e.g. \"Santa Clara\""},"state":{"type":"string","description":"businesses: two-letter state, e.g. \"CA\""},"page":{"type":"integer","description":"businesses: 1-based page of 25"},"confirm_spend":{"type":"boolean","description":"people: only after the person agreed to spend credits on this search"}},"required":["kind"]}},{"name":"decline_agent_run","title":"Decline agent run","access":"write","risk":"medium","idempotent":false,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"description":"Decline every person a run found. They are not added as leads and nothing is sent.","input_schema":{"type":"object","properties":{"agent_id":{"type":"string"},"run_id":{"type":"string"}},"required":["agent_id","run_id"]}},{"name":"reject_followup_draft","title":"Reject followup draft","access":"write","risk":"medium","idempotent":false,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"description":"Reject a follow-up or win-back email an agent drafted. Nothing is sent.","input_schema":{"type":"object","properties":{"draft_kind":{"type":"string","enum":["followup","winback"]},"draft_id":{"type":"integer"}},"required":["draft_kind","draft_id"]}},{"name":"approve_agent_run","title":"Approve agent run","access":"send","risk":"high","idempotent":false,"scope":"mcp:send","spends_credits":true,"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"description":"Approve the people a run found (all, or contact_ids): each becomes a lead and is handed to the agent's workflow, which may email them. Check get_agent_run first. If the workflow finds emails, approving costs credits; this stops and says how many unless confirm_spend is true. Ask the person before approving.","input_schema":{"type":"object","properties":{"agent_id":{"type":"string"},"run_id":{"type":"string"},"contact_ids":{"type":"array","items":{"type":"integer"},"description":"Only these people; omit for everyone the run kept"},"confirm_spend":{"type":"boolean","description":"Only after the person agreed to the credit cost"}},"required":["agent_id","run_id"]}},{"name":"approve_followup_draft","title":"Approve followup draft","access":"send","risk":"high","idempotent":false,"scope":"mcp:send","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"description":"Approve a follow-up or win-back email an agent drafted: it is SENT NOW to the person it is addressed to, from the business's sender. Show the person the draft (list_pending_approvals) and get their yes first.","input_schema":{"type":"object","properties":{"draft_kind":{"type":"string","enum":["followup","winback"]},"draft_id":{"type":"integer"}},"required":["draft_kind","draft_id"]}},{"name":"get_agent_scorecards","title":"Get agent scorecards","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"How each of this business's agents (Discovery, Prospecting, Reception, Conversion) did in the 7 days ending yesterday against the 7 before, from the daily scorecards. A null number means not measured yet, never zero. Use for 'how are my agents doing', 'what did Reception do this week', 'is my discovery score going up'.","input_schema":{"type":"object","properties":{}}},{"name":"get_weekly_brief","title":"Get weekly brief","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"The Chief Marketing Agent's latest weekly brief for this business: the headline, the weakest growth term (reach / conversion / loyalty) and why, one line per agent, and the next steps. Written on Saturday mornings. Use for 'what did my weekly brief say', 'what should I focus on', 'what's my weakest area'.","input_schema":{"type":"object","properties":{}}},{"name":"get_work_orders","title":"Get work orders","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"The Chief Marketing Agent's work orders for this business: each is one agent, one number, a target and a week. Returns those waiting for the owner's approval (approved or declined on the Agents page), those running with progress so far, and the last few that ended met or missed. Use for 'what are my work orders', 'how is this week's order going', 'did we hit last week's targets'.","input_schema":{"type":"object","properties":{}}},{"name":"get_growth_plan","title":"Get growth plan","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get this business's active Growth Plan — the goal, the strategic objectives (pillars), and the 90-day phased plan. Use for 'what's my plan/goal/strategy', 'what are my objectives', or when the owner asks what the agency is working toward.","input_schema":{"type":"object","properties":{}}},{"name":"get_plans","title":"Get plans","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get everything on the marketing plan still awaiting the owner's OK, for the period they are actually on (weekly, bi-weekly or monthly — never assume a week). Three groups: needs_ok_now (dated inside the current period — these expire unapproved, and any marked overdue are past their date already), next_period (next period's draft), and suggestions (AI drafts on NOBODY's calendar until accepted — never report these as planned work). Use for 'what needs my approval', 'what's waiting on me', 'what's the plan for next week'.","input_schema":{"type":"object","properties":{}}},{"name":"get_actions","title":"Get actions","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get the marketing work already committed — approved and scheduled (on_deck), past its date and still not run (overdue), sent (done), failed, plus ongoing programs with no end date (running/paused drips and automations). Period-aware. Use for 'what's my marketing doing', 'what's scheduled', 'did that go out', 'what's running'. For work that still needs a decision, call get_plans instead.","input_schema":{"type":"object","properties":{}}},{"name":"get_agency_scoreboard","title":"Get agency scoreboard","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get the Growth Plan scoreboard: bookings this month vs the growth-plan goal, and whether the business is on pace for the month. Use for 'am I on track', 'how am I doing vs goal', 'how many bookings this month'.","input_schema":{"type":"object","properties":{}}},{"name":"get_plan_backlog","title":"Get plan backlog","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get this business's Plan Backlog — every marketing tactic it could run, with which are due, already scheduled, running, finished, or on the wishlist (wanted but Viva can't run them yet). Each carries its growth category (reach/conversion/loyalty), kind (producer = generates the goal metric itself, multiplier = raises another tactic's conversion, enabler = makes execution or measurement possible), cadence, and lag. ALWAYS call this before suggesting new marketing — proposing something already on the list is worse than proposing nothing. Use for 'what's in my backlog', 'what am I not doing', 'what should I add', 'what's due'.","input_schema":{"type":"object","properties":{}}},{"name":"get_plan_setup","title":"Get plan setup","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Everything already known about this business before you ask them anything — category, whether they have a website/booking/reviews/customer list, whether a goal and backlog exist, and which starter set (if any) is written for their industry. ALWAYS call this before helping set up a plan or backlog. Never ask an owner something this returns; asking what is already on their profile tells them you haven't looked. What it CANNOT tell you is what they actually sell and whether their customers come back — those two are worth asking, and they are the only two.","input_schema":{"type":"object","properties":{}}},{"name":"suggest_topics","title":"Suggest topics","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Propose what a content tactic should actually be ABOUT — real headlines for a blog post, social post, landing page, GBP post or SEO article. A tactic names a slot ('Monthly blog post'); this fills it. Use it whenever the owner asks what to write, and ALWAYS before putting a blog/social/page tactic on a date with a title. Writes nothing: topics come back, the owner keeps, edits or throws away the ones they want. Each carries an angle (what it covers) and why it fits. It reads what this business has already published and already has planned and will not repeat it — which is exactly why you must not invent titles yourself. Get item_id from get_plan_backlog.","input_schema":{"type":"object","properties":{"item_id":{"type":"integer","description":"The content tactic, from get_plan_backlog"},"count":{"type":"integer","description":"How many to propose (default 5, max 12). Ask for what the owner needs, not the maximum"}},"required":["item_id"]}},{"name":"list_forms","title":"List forms","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List this business's forms (lead capture, surveys, intake) with status, field count, and responses. Use to find a form before reading or editing it.","input_schema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","active","inactive"],"description":"Optional status filter"}}}},{"name":"get_form","title":"Get form","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Get one form in full: fields (key, label, type, required, options), settings, and status. Always call this before update_form so ops reference real field keys.","input_schema":{"type":"object","properties":{"form_id":{"type":"integer","description":"Form id from list_forms"}},"required":["form_id"]}},{"name":"list_notes","title":"List notes","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the owner's recent quick-capture notes.","input_schema":{"type":"object","properties":{"limit":{"type":"integer"}}}},{"name":"list_wine_requests","title":"List wine requests","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List the Viva Wine network requests this winery has been offered on — what a buyer asked for, the wine and case count offered, and where the offer stands (proposed, awaiting your approval, sent to the buyer, or taken). Use for 'what wine enquiries do we have', 'any new network requests', 'what has the buyer not answered yet'.","input_schema":{"type":"object","properties":{"status":{"type":"string","description":"Optional: proposed | needs_approval | offered | selected | declined"},"limit":{"type":"integer"}}}},{"name":"list_wine_orders","title":"List wine orders","access":"read","risk":"low","idempotent":false,"scope":"mcp:read","spends_credits":false,"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"List this winery's Viva Wine network orders — the buyer, the wine, cases ordered against cases shipped, and what is left to ship. Use for 'what network orders are open', 'what do we still owe', 'has the wine for X gone out yet'.","input_schema":{"type":"object","properties":{"open_only":{"type":"boolean","description":"Only orders with cases still to ship"},"limit":{"type":"integer"}}}},{"name":"add_tag","title":"Add tag","access":"write","risk":"low","idempotent":true,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Add tag","input_schema":{"type":"object","properties":{"tag":{"type":"string"}},"required":["tag"]}},{"name":"remove_tag","title":"Remove tag","access":"write","risk":"low","idempotent":true,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"description":"Remove tag","input_schema":{"type":"object","properties":{"tag":{"type":"string"}},"required":["tag"]}},{"name":"update_field","title":"Update field","access":"write","risk":"low","idempotent":true,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Update field","input_schema":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"}},"required":["field","value"]}},{"name":"add_to_campaign","title":"Add to campaign","access":"write","risk":"low","idempotent":true,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Add to campaign","input_schema":{"type":"object","properties":{"campaign_id":{"type":"string"}},"required":["campaign_id"]}},{"name":"notify_owner","title":"Notify owner","access":"write","risk":"medium","idempotent":false,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"description":"Notify owner","input_schema":{"type":"object","properties":{"message":{"type":"string"}},"required":[]}},{"name":"send_prospect_email","title":"Send prospect email","access":"write","risk":"low","idempotent":false,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"description":"Send prospect email","input_schema":{"type":"object","properties":{"subject":{"type":"string"},"body":{"type":"string"},"step":{"type":"number"},"day":{"type":"number"}},"required":["subject","body"]}},{"name":"tag_contact","title":"Tag contact","access":"write","risk":"low","idempotent":true,"scope":"mcp:write","spends_credits":false,"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"description":"Add an existing CRM tag to a person by email, creating them as a lead if new; starts or ends tag-driven flows","input_schema":{"type":"object","properties":{"contact_email":{"type":"string","description":"Email of the person"},"tag":{"type":"string","description":"Name of a tag that already exists in this account"},"name":{"type":"string","description":"Their name, used only if they are new"}},"required":["contact_email","tag"]}}],"notes":"Sending email or SMS directly is never exposed. Approving an agent run or a follow-up draft, which emails people, needs the separate mcp:send permission. Nothing spends credits without confirm_spend: true."}