此 MCP 可以做什么
Supports B2B revenue operations with lead campaigns, ICP and company enrichment, CRM records and activities, outreach drafting, tasks, reminders, and sales intelligence.
工具
输入模式
{'type': 'object', 'required': ['campaign_id', 'leads'], 'properties': {'leads': {'type': 'array', 'items': {'type': 'object', 'properties': {'company_name': {'type': 'string'}, 'contact_name': {'type': 'string'}, 'contact_role': {'type': 'string'}, 'contact_email': {'type': 'string'}, 'company_domain': {'type': 'string'}, 'company_country': {'type': 'string'}, 'company_industry': {'type': 'string'}, 'contact_linkedin': {'type': 'string'}, 'company_employees': {'type': 'integer'}, 'contact_seniority': {'type': 'string'}}, 'additionalProperties': True}, 'description': 'Array of lead objects. Standard fields go to columns; unknown keys go to metadata jsonb. Max 100 per call.'}, 'source': {'enum': ['manual', 'apollo', 'hunter', 'enrichment', 'mcp', 'csv_upload'], 'type': 'string', 'description': "Default 'mcp'."}, 'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}}}
输入模式
{'type': 'object', 'required': ['reminder_id'], 'properties': {'reminder_id': {'type': 'string', 'description': 'ID of the pending reminder to cancel (from listReminders).'}}}
输入模式
{'type': 'object', 'properties': {}}
输入模式
{'type': 'object', 'required': ['change_reason'], 'properties': {'change_reason': {'type': 'string', 'description': 'REQUIRED: Why all memories should be cleared. Stored in audit log.'}}}
输入模式
{'type': 'object', 'properties': {'metadata_filter': {'type': 'object', 'description': 'Optional metadata filters. Use chapter to count within a specific chapter.', 'additionalProperties': {'type': 'string'}}}}
输出模式
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'integer', 'description': 'Number of matching memories.'}, 'chapter': {'type': 'string', 'description': 'Chapter the count was filtered to, if any.'}}}
输入模式
{'type': 'object', 'required': ['name', 'icp_snapshot', 'persona_snapshot', 'offer', 'pain_hypothesis', 'messaging_angle', 'channels', 'start_date', 'success_metric'], 'properties': {'name': {'type': 'string', 'description': "Short campaign label, 3-200 chars. Include strategic axis (e.g. 'Q2-DACH-Maschinenbau-EU-AI-Act')."}, 'notes': {'type': 'string', 'description': 'Optional internal notes about the campaign.'}, 'offer': {'type': 'string', 'description': "The concrete CTA, NOT the product name. E.g. 'Free 30-day pilot', not 'Buy GrowthKit'."}, 'channels': {'type': 'array', 'items': {'enum': ['email', 'linkedin', 'event', 'paid', 'cold_call', 'referral', 'webinar'], 'type': 'string'}, 'description': 'Outreach channels for this campaign: email | linkedin | event | paid | cold_call | referral | webinar.'}, 'end_date': {'type': 'string', 'description': 'Optional ISO date YYYY-MM-DD. Null = open-ended.'}, 'start_date': {'type': 'string', 'description': 'ISO date YYYY-MM-DD.'}, 'description': {'type': 'string', 'description': 'Optional free-text summary of the campaign.'}, 'icp_snapshot': {'type': 'object', 'description': "Frozen ICP at creation time. May be a NARROWED variant of the user's global ICP."}, 'success_metric': {'type': 'object', 'description': "{ type: 'replies'|'demos'|'sqls'|'pipeline_eur', target: number }"}, 'briefing_source': {'enum': ['wizard', 'upload', 'manual'], 'type': 'string', 'description': "Default 'wizard'."}, 'messaging_angle': {'type': 'string', 'description': 'The hook in the first email/message. The news/trend/insight that earns the read.'}, 'pain_hypothesis': {'type': 'string', 'description': 'ONE sentence stating the specific pain this campaign assumes the persona has.'}, 'persona_snapshot': {'type': 'object', 'description': 'Frozen target persona for this campaign.'}, 'product_snapshot': {'type': 'object', 'description': 'Frozen product info at creation time. Schema: { name, description, value_props[], differentiators[], pricing_hint }.'}, 'source_document_id': {'type': 'string', 'description': 'Optional documents.id if briefing was parsed from upload.'}}}
输入模式
{'type': 'object', 'required': ['title', 'remind_at'], 'properties': {'title': {'type': 'string', 'description': 'Short reminder title.'}, 'repeat': {'enum': ['none', 'daily', 'weekly', 'monthly'], 'type': 'string', 'description': 'Repeat interval: none | daily | weekly | monthly. Default: none.'}, 'channel': {'enum': ['email', 'slack', 'webhook'], 'type': 'string', 'description': 'Delivery channel: email | slack | webhook.'}, 'task_id': {'type': 'string', 'description': 'Optional: link this reminder to a task (task UUID). Linked reminders are auto-cancelled when the task is marked done/dropped.'}, 'remind_at': {'type': 'string', 'description': 'When to remind, ISO 8601 (convert relative times first).'}, 'description': {'type': 'string', 'description': 'Optional reminder details.'}, 'channel_target': {'type': 'string', 'description': 'Optional channel target, e.g. email address or webhook URL.'}}}
输入模式
{'type': 'object', 'required': ['title'], 'properties': {'owner': {'type': 'string', 'description': 'Assignee (free text)'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'done': {'type': 'boolean'}, 'text': {'type': 'string'}}}, 'description': 'Optional checklist of sub-steps.'}, 'title': {'type': 'string', 'description': 'Short task title.'}, 'bucket': {'enum': ['now', 'next', 'later', 'follow-up'], 'type': 'string', 'description': 'Time horizon: now | next | later | follow-up.'}, 'detail': {'type': 'string', 'description': 'Optional longer description of the task.'}, 'impact': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'ICE impact, 1-10 (higher = more impact).'}, 'confidence': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'ICE confidence, 0-1 (probability the impact materializes).'}, 'effort_constraint': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Effort on the bottleneck lane (see workspace label_constraint)'}, 'related_memory_id': {'type': 'string', 'description': 'Optional ID of a related memory to link.'}, 'effort_nonconstraint': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Effort on the non-bottleneck lane'}}}
输入模式
{'type': 'object', 'required': ['content'], 'properties': {'content': {'type': 'string', 'description': 'Note text — supports HTML.'}, 'deal_id': {'type': 'string', 'description': 'Optional deal ID to attach the note to.'}, 'company_id': {'type': 'string', 'description': 'Optional company ID to attach the note to.'}, 'contact_id': {'type': 'string', 'description': 'Optional contact ID to attach the note to.'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'required': ['connected'], 'properties': {'provider': {'type': ['string', 'null'], 'description': 'Active CRM provider, if connected.'}, 'connected': {'type': 'boolean', 'description': 'Whether a CRM provider is connected.'}}}
输入模式
{'type': 'object', 'required': ['subject'], 'properties': {'note': {'type': 'string', 'description': 'Optional note/body for the activity.'}, 'type': {'enum': ['call', 'meeting', 'task', 'email', 'deadline'], 'type': 'string', 'description': 'Activity type. Default: task.'}, 'deal_id': {'type': 'string', 'description': 'Optional deal ID to link the activity to.'}, 'subject': {'type': 'string', 'description': 'Activity subject.'}, 'due_date': {'type': 'string', 'description': 'Due date YYYY-MM-DD.'}, 'company_id': {'type': 'string', 'description': 'Optional company ID to link the activity to.'}, 'contact_id': {'type': 'string', 'description': 'Optional contact ID to link the activity to.'}}}
输入模式
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Company name.'}, 'address': {'type': 'string', 'description': 'Company address.'}}}
输入模式
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Full name.'}, 'email': {'type': 'string', 'description': 'Email address.'}, 'phone': {'type': 'string', 'description': 'Phone number.'}, 'company_id': {'type': 'string', 'description': 'Company ID. REQUIRED when company exists.'}}}
输入模式
{'type': 'object', 'required': ['title', 'stage_id'], 'properties': {'title': {'type': 'string', 'description': 'Deal title.'}, 'value': {'type': 'number', 'description': 'Deal value.'}, 'currency': {'type': 'string', 'description': 'Currency code. Default: EUR.'}, 'stage_id': {'type': 'string', 'description': 'Stage ID from crmGetPipelines.'}, 'company_id': {'type': 'string', 'description': 'Company ID.'}, 'contact_id': {'type': 'string', 'description': 'Contact ID.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Company ID from CRM.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Company ID.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Company ID.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Contact ID.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Deal ID.'}}}
输入模式
{'type': 'object', 'properties': {}}
输入模式
{'type': 'object', 'properties': {'filter': {'type': 'object', 'properties': {'city': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}}}}, 'name': {'type': 'object', 'properties': {'contains': {'type': 'string'}}}, 'limit': {'type': 'integer', 'description': 'Max results (1-200). Default: 50'}, 'offset': {'type': 'integer', 'description': 'Pagination offset. Default: 0'}, 'country': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}, 'description': "ISO country codes, e.g. ['DE','AT','CH']"}}}, 'industry': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Exact match on any value in list'}, 'contains': {'type': 'string', 'description': 'Substring match (case-insensitive)'}}}, 'order_by': {'enum': ['name', 'employees', 'created_at', 'updated_at'], 'type': 'string'}, 'employees': {'type': 'object', 'properties': {'max': {'type': 'integer', 'description': 'Maximum employee count (inclusive)'}, 'min': {'type': 'integer', 'description': 'Minimum employee count (inclusive)'}}}, 'has_deals': {'type': 'boolean'}, 'order_dir': {'enum': ['asc', 'desc'], 'type': 'string'}}, 'description': 'Filter object. All fields optional.'}}}
输入模式
{'type': 'object', 'properties': {'filter': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'offset': {'type': 'integer'}, 'country': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}}}}, 'order_by': {'enum': ['name', 'created_at', 'updated_at'], 'type': 'string'}, 'has_email': {'type': 'boolean'}, 'job_title': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}}, 'contains': {'type': 'string'}}}, 'order_dir': {'enum': ['asc', 'desc'], 'type': 'string'}, 'seniority': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'enum': ['executive', 'director', 'manager', 'senior', 'individual'], 'type': 'string'}}}}, 'company_id': {'type': 'string', 'description': 'Filter to contacts of a specific company'}, 'department': {'type': 'object', 'properties': {'in': {'type': 'array', 'items': {'type': 'string'}}}}}, 'description': 'Filter object. All fields optional.'}}}
输入模式
{'type': 'object', 'required': ['term'], 'properties': {'term': {'type': 'string', 'description': 'Company name or keyword to search for.'}, 'limit': {'type': 'integer', 'description': 'Max results. Default: 10.'}}}
输入模式
{'type': 'object', 'required': ['term'], 'properties': {'term': {'type': 'string', 'description': 'Contact name or keyword.'}, 'limit': {'type': 'integer', 'description': 'Max results. Default: 10.'}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Deal ID.'}, 'title': {'type': 'string', 'description': 'Optional new deal title.'}, 'value': {'type': 'number', 'description': 'Optional new deal value.'}, 'stage_id': {'type': 'string', 'description': 'Optional new stage ID (from crmGetPipelines).'}, 'expected_close': {'type': 'string', 'description': 'Expected close date YYYY-MM-DD.'}}}
输入模式
{'type': 'object', 'required': ['document_id'], 'properties': {'document_id': {'type': 'string', 'description': 'ID of the document to delete (from listDocuments).'}}}
输入模式
{'type': 'object', 'required': ['signal_id'], 'properties': {'signal_id': {'type': 'string', 'description': 'UUID of the signal — the `id` field of a signal in listLeadSignals.'}}}
输入模式
{'type': 'object', 'required': ['embedding_ids', 'change_reason'], 'properties': {'change_reason': {'type': 'string', 'description': "REQUIRED: Why these memories are being deleted, e.g. 'Outdated', 'Duplicate', 'User requested cleanup'. Stored in audit log."}, 'embedding_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'IDs of the memories to delete (from searchMemory/listMemories).'}}}
输入模式
{'type': 'object', 'properties': {'mode': {'enum': ['account', 'icp', 'won_deals'], 'type': 'string', 'description': 'account = similar to a seed domain (default); icp = match your saved ICP; won_deals = not yet implemented (returns not_implemented).'}, 'seed': {'type': 'object', 'properties': {'domain': {'type': 'string', 'description': 'Seed company domain.'}}, 'description': "Seed for mode='account', e.g. { domain: 'intertours.de' }. Leave empty for icp/won_deals."}, 'limit': {'type': 'integer', 'description': 'Max candidates to return (hard-capped at 25). Default 25.'}, 'score': {'type': 'boolean', 'description': 'Re-rank with canonical ICP scoring (calculate-alignment). Default true. similarity_to_seed is always returned regardless of this flag.'}, 'filters': {'type': 'object', 'description': "Optional Hunter Discover filter overrides, passed straight through. Use Hunter's exact sub-shapes — a wrong shape is silently dropped (or 400s). headquarters_location: { include:[{ country:'DE' }], exclude:[...] } — country is ISO-3166 alpha-2; continent / business_region / state / city are also supported inside those objects (NOT { countries:[...] }). keywords: { include:[...], exclude:[...], match:'any'|'all' } (NOT a flat array — flat → HTTP 400 invalid_keywords). industry: { include:[...], exclude:[...] }. headcount: array of enum buckets ('1-10','11-50','51-200','201-500','501-1000','1001-5000','5001-10000','10001+')."}, 'shortlist_size': {'type': 'integer', 'description': 'How many top pre-ranked candidates get fully enriched + scored (default 10). Pre-ranking uses the free discover fields (geo, size, emails_count). Lower = cheaper (fewer enrichment credits); the rest are returned unevaluated (enriched:false, null scores).'}}}
输入模式
{'type': 'object', 'required': ['mode', 'to', 'subject'], 'properties': {'to': {'type': 'string', 'description': 'Recipient email address.'}, 'from': {'type': 'string', 'description': 'Optional From address override. Must be an address the user has authorized.'}, 'mode': {'enum': ['draft', 'send'], 'type': 'string', 'description': "Default: 'draft'. Use 'send' only on explicit user confirmation."}, 'subject': {'type': 'string', 'description': 'Email subject line.'}, 'provider': {'enum': ['auto', 'google', 'microsoft'], 'type': 'string', 'description': "Default: 'auto'. Backend resolves from user's active integration."}, 'body_html': {'type': 'string', 'description': 'HTML email body with <p>, <br>, <strong>, <a href> tags as needed. For send mode, an open-tracking pixel is auto-injected.'}, 'body_text': {'type': 'string', 'description': 'Optional plain-text fallback. If only one of body_html/body_text is provided, the other is auto-generated.'}, 'thread_id': {'type': 'string', 'description': 'Optional Gmail thread ID for replies in-thread.'}, 'crm_deal_id': {'type': 'string', 'description': 'Optional CRM deal UUID if this email relates to a specific deal.'}, 'in_reply_to': {'type': 'string', 'description': 'Optional Message-ID of the message being replied to.'}}}
输入模式
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['content'], 'properties': {'content': {'type': 'string'}, 'metadata': {'type': 'object', 'additionalProperties': {'type': 'string'}}}}, 'description': 'Batch embed: array of {content, metadata}. Max 50. Each MUST include metadata.chapter.'}, 'content': {'type': 'string', 'description': 'Text content to store (for single embed).'}, 'metadata': {'type': 'object', 'description': 'REQUIRED: Must include chapter key.', 'additionalProperties': {'type': 'string'}}}}
输入模式
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': "Company name (if the domain is unknown), e.g. 'Seeburger AG'."}, 'domain': {'type': 'string', 'description': 'Company domain e.g. seeburger.de'}, 'country': {'type': 'string', 'description': "Optional hint for resolving the domain from the name: country name or ISO code, e.g. 'CH'. Only used when `domain` is absent."}, 'industry': {'type': 'string', 'description': "Optional hint for resolving the domain from the name, e.g. 'ERP software'. Only used when `domain` is absent."}, 'company_name': {'type': 'string', 'description': 'DEPRECATED — use `name`. Accepted as an alias for one more release so cached tool lists keep working; if both are given, `name` wins.'}, 'campaign_lead_id': {'type': 'string', 'description': "Optional. The `id` of a lead from listCampaignLeads (that is campaign_leads.id). Pass it whenever you enrich a lead that is already in a campaign: the result is then written back onto that lead. Contact fields are only filled where they are empty — a hand-curated e-mail is never overwritten, the rival candidate is kept in enrichment_data — while provider, timestamp and a short raw extract are always recorded, so `enriched_at` afterwards means 'this lead was enriched' instead of being a guess. Without it nothing is stored and you only get the result back, which is the right thing for a company that is not a lead yet. ⚠ This is NOT the `lead_id` from pipelineStatus' top_10 or listLeadSignals: that one names the company row, and the write fails with lead_not_found. The reply carries `enrichment_write` with what happened."}}}
输入模式
{'type': 'object', 'properties': {'email': {'type': 'string', 'description': "Person's email address."}, 'linkedin_url': {'type': 'string', 'description': 'Full LinkedIn profile URL.'}, 'linkedin_handle': {'type': 'string', 'description': 'LinkedIn handle/slug (without the full URL).'}, 'campaign_lead_id': {'type': 'string', 'description': "Optional. The `id` of a lead from listCampaignLeads (that is campaign_leads.id). Pass it whenever you enrich a lead that is already in a campaign: the result is then written back onto that lead. Contact fields are only filled where they are empty — a hand-curated e-mail is never overwritten, the rival candidate is kept in enrichment_data — while provider, timestamp and a short raw extract are always recorded, so `enriched_at` afterwards means 'this lead was enriched' instead of being a guess. Without it nothing is stored and you only get the result back, which is the right thing for a company that is not a lead yet. ⚠ This is NOT the `lead_id` from pipelineStatus' top_10 or listLeadSignals: that one names the company row, and the write fails with lead_not_found. The reply carries `enrichment_write` with what happened."}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 10.'}, 'domain': {'type': 'string', 'description': 'Company domain to find contacts at.'}, 'company': {'type': 'string', 'description': 'Company name (if domain unknown).'}, 'seniority': {'type': 'string', 'description': 'junior, senior, or executive.'}, 'department': {'type': 'string', 'description': 'sales, marketing, it, etc.'}, 'campaign_lead_id': {'type': 'string', 'description': "Optional. The `id` of a lead from listCampaignLeads (that is campaign_leads.id). Pass it whenever you enrich a lead that is already in a campaign: the result is then written back onto that lead. Contact fields are only filled where they are empty — a hand-curated e-mail is never overwritten, the rival candidate is kept in enrichment_data — while provider, timestamp and a short raw extract are always recorded, so `enriched_at` afterwards means 'this lead was enriched' instead of being a guess. Without it nothing is stored and you only get the result back, which is the right thing for a company that is not a lead yet. ⚠ This is NOT the `lead_id` from pipelineStatus' top_10 or listLeadSignals: that one names the company row, and the write fails with lead_not_found. The reply carries `enrichment_write` with what happened."}}}
输入模式
{'type': 'object', 'properties': {'domain': {'type': 'string', 'description': 'Company domain to search the email at.'}, 'company': {'type': 'string', 'description': 'Company name (if domain unknown).'}, 'full_name': {'type': 'string', 'description': 'Full name (alternative to first_name + last_name).'}, 'last_name': {'type': 'string', 'description': "Person's last name."}, 'first_name': {'type': 'string', 'description': "Person's first name."}, 'campaign_lead_id': {'type': 'string', 'description': "Optional. The `id` of a lead from listCampaignLeads (that is campaign_leads.id). Pass it whenever you enrich a lead that is already in a campaign: the result is then written back onto that lead. Contact fields are only filled where they are empty — a hand-curated e-mail is never overwritten, the rival candidate is kept in enrichment_data — while provider, timestamp and a short raw extract are always recorded, so `enriched_at` afterwards means 'this lead was enriched' instead of being a guess. Without it nothing is stored and you only get the result back, which is the right thing for a company that is not a lead yet. ⚠ This is NOT the `lead_id` from pipelineStatus' top_10 or listLeadSignals: that one names the company row, and the write fails with lead_not_found. The reply carries `enrichment_write` with what happened."}}}
输入模式
{'type': 'object', 'required': [], 'properties': {'weeks': {'type': 'integer', 'maximum': 52, 'minimum': 1, 'description': 'Optional. Number of most recent weeks. Default 12.'}, 'domain': {'type': 'string', 'examples': ['growthkit-tools', 'growthkit-consulting'], 'description': "Optional. Domain SLUG, not the bare hostname — dots become hyphens, e.g. 'growthkit-tools' or 'growthkit-consulting'. Omit to return all domains. An unknown slug yields an empty result, not an error."}}}
输入模式
{'type': 'object', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}}}
输入模式
{'type': 'object', 'required': ['campaign_lead_id'], 'properties': {'campaign_lead_id': {'type': 'string', 'description': 'The `id` of a row from listCampaignLeads (campaign_leads.id).'}}}
输入模式
{'type': 'object', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'required': ['chapters'], 'properties': {'total': {'type': 'integer', 'description': 'Total memory count across readable chapters.'}, 'chapters': {'type': 'array', 'items': {'type': 'object', 'required': ['chapter', 'count'], 'properties': {'count': {'type': 'integer'}, 'chapter': {'type': 'string'}}}, 'description': 'Per-chapter memory counts (readable chapters only).'}}}
输入模式
{'type': 'object', 'required': ['document_id'], 'properties': {'document_id': {'type': 'string', 'description': 'ID of the document (from listDocuments).'}}}
输入模式
{'type': 'object', 'required': ['embedding_id'], 'properties': {'embedding_id': {'type': 'string', 'description': 'ID of the memory to get history for.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max tasks to return. Default: 20.'}}}
输出模式
{'type': 'object', 'required': ['tasks'], 'properties': {'tasks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'status'], 'properties': {'id': {'type': ['string', 'number']}, 'owner': {'type': ['string', 'null']}, 'title': {'type': 'string'}, 'bucket': {'type': ['string', 'null'], 'description': 'now | next | later | follow-up.'}, 'detail': {'type': ['string', 'null']}, 'impact': {'type': ['integer', 'null']}, 'status': {'type': 'string', 'description': 'open | in_progress | done | dropped.'}, 'ice_score': {'type': ['number', 'null'], 'description': 'Computed ICE score (GENERATED column).'}, 'confidence': {'type': ['number', 'null']}, 'effort_constraint': {'type': ['integer', 'null']}, 'effort_nonconstraint': {'type': ['integer', 'null']}}}, 'description': 'Tasks ranked by ICE (highest first).'}}}
输入模式
{'type': 'object', 'required': [], 'properties': {'weeks': {'type': 'integer', 'maximum': 52, 'minimum': 1, 'description': 'Optional. Number of most recent weeks. Default 12.'}, 'domain': {'type': 'string', 'examples': ['growthkit-tools', 'growthkit-consulting'], 'description': "Optional. Domain SLUG, not the bare hostname — dots become hyphens, e.g. 'growthkit-tools' or 'growthkit-consulting'. Omit to return all domains. An unknown slug yields an empty result, not an error."}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of leads to return. Default 10, max 100.'}, 'filters': {'type': 'object', 'properties': {'min_completeness': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Minimum data completeness 0-1. Default 0.5 (filters ghost leads). Set to 0 to include data-sparse matches.'}, 'enrichment_recommended': {'type': 'boolean', 'description': 'If true, return only leads flagged for enrichment. If false, only leads with sufficient data. Omit for both.'}}, 'description': 'Optional result filters.'}, 'min_score': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Minimum score 0-100 to include. Default 60.'}}}
输入模式
{'type': 'object', 'required': ['session_id', 'kind', 'key'], 'properties': {'key': {'type': 'string', 'description': 'Logical identifier within the kind (same key used in setWorkingMemory).'}, 'kind': {'enum': ['wizard', 'working_set', 'pinned_entity'], 'type': 'string', 'description': 'Which kind of state to retrieve: wizard | working_set | pinned_entity.'}, 'session_id': {'type': 'string', 'description': 'The current chat session_id. REQUIRED.'}}}
输入模式
{'type': 'object', 'required': ['campaign_id'], 'properties': {'limit': {'type': 'integer', 'description': 'Default 50, max 100.'}, 'fields': {'enum': ['compact', 'full'], 'type': 'string', 'description': 'compact for lists and ranking; full when you need contacts or the enrichment trail across the list. For a single lead prefer getCampaignLead. Default compact.'}, 'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}, 'lifecycle_stage': {'enum': ['imported', 'enriched', 'scored', 'crm_ready', 'crm_synced', 'rejected', 'bounced'], 'type': 'string', 'description': 'Optional: filter by lifecycle stage.'}, 'enrichment_status': {'enum': ['pending', 'enriched', 'failed', 'skipped'], 'type': 'string', 'description': 'Optional: filter by enrichment status.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Default 25, max 100.'}, 'status': {'enum': ['draft', 'active', 'paused', 'completed', 'archived'], 'type': 'string', 'description': 'Optional: filter by status: draft | active | paused | completed | archived.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 20.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 50.'}, 'offset': {'type': 'integer', 'description': 'Pagination offset. Default: 0.'}, 'chapter': {'type': 'string', 'description': 'Optional: filter by associated memory chapter.'}, 'category': {'type': 'string', 'description': 'Optional: filter by storage category.'}}}
输入模式
{'type': 'object', 'properties': {'lang': {'enum': ['de', 'en'], 'type': 'string', 'description': 'Language of the `cite` line. Default de.'}, 'limit': {'type': 'integer', 'description': 'Default 50, max 200.'}, 'lead_id': {'type': 'string', 'description': 'UUID of the LEAD (leads.id), e.g. from pipelineStatus top_10. Either this, campaign_lead_id or campaign_id. Mixing the two lead UUIDs up is no longer a trap: whichever you pass is resolved to the right entity, and an unknown UUID returns 404 with an explanation instead of an empty list.'}, 'active_only': {'type': 'boolean', 'description': 'Only signals inside their TTL. Default true — an expired signal is not a reason to call.'}, 'campaign_id': {'type': 'string', 'description': 'All signals of a campaign (from listCampaigns). Either this or one of the lead UUIDs.'}, 'campaign_lead_id': {'type': 'string', 'description': 'UUID of the CAMPAIGN MEMBERSHIP (campaign_leads.id) — the id from listCampaignLeads or from the pipelineRun candidate list. Resolves to the same signals as lead_id.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 50.'}, 'offset': {'type': 'integer', 'description': 'Pagination offset. Default: 0.'}, 'metadata_filter': {'type': 'object', 'description': 'Optional metadata filters. Use chapter to list within a specific chapter.', 'additionalProperties': {'type': 'string'}}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 50.'}, 'status': {'enum': ['pending', 'sent', 'cancelled', 'all'], 'type': 'string', 'description': 'Filter by status: pending | sent | cancelled | all. Default: pending.'}, 'task_id': {'type': 'string', 'description': 'Optional: only reminders linked to this task.'}}}
输出模式
{'type': 'object', 'required': ['reminders'], 'properties': {'reminders': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'remind_at', 'status'], 'properties': {'id': {'type': ['string', 'number']}, 'title': {'type': 'string'}, 'status': {'type': 'string', 'description': 'pending | sent | cancelled.'}, 'remind_at': {'type': 'string', 'description': 'ISO 8601 timestamp.'}}}, 'description': 'Matching reminders, ordered by remind_at ascending.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 50.'}, 'owner': {'type': 'string', 'description': 'Optional: filter by assignee.'}, 'bucket': {'enum': ['now', 'next', 'later', 'follow-up'], 'type': 'string', 'description': 'Optional: filter by bucket: now | next | later | follow-up.'}, 'status': {'enum': ['open', 'in_progress', 'done', 'dropped'], 'type': 'string', 'description': 'Optional: filter by status: open | in_progress | done | dropped.'}}}
输出模式
{'type': 'object', 'required': ['tasks'], 'properties': {'tasks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'status'], 'properties': {'id': {'type': ['string', 'number']}, 'owner': {'type': ['string', 'null']}, 'title': {'type': 'string'}, 'bucket': {'type': ['string', 'null'], 'description': 'now | next | later | follow-up.'}, 'detail': {'type': ['string', 'null']}, 'impact': {'type': ['integer', 'null']}, 'status': {'type': 'string', 'description': 'open | in_progress | done | dropped.'}, 'ice_score': {'type': ['number', 'null'], 'description': 'Computed ICE score (GENERATED column).'}, 'confidence': {'type': ['number', 'null']}, 'effort_constraint': {'type': ['integer', 'null']}, 'effort_nonconstraint': {'type': ['integer', 'null']}}}, 'description': 'Tasks ranked by ICE (highest first).'}}}
输入模式
{'type': 'object', 'properties': {}}
输入模式
{'type': 'object', 'required': ['campaign_id', 'stage'], 'properties': {'lang': {'enum': ['de', 'en'], 'type': 'string', 'description': 'Language for the signal sentences written by the `signals` stage. Default de. Other stages ignore it.'}, 'limit': {'type': 'integer', 'description': 'How many candidates to process. Default 10, max 25.'}, 'stage': {'enum': ['resolve', 'score', 'signals', 'reveal', 'rescore', 'rerank'], 'type': 'string', 'description': 'resolve = find domain and firmographics. score = ICP fit. signals = why-now scan. reveal = persona, email and optionally phone (SPENDS CREDITS). rescore = second pass once seniority is known. rerank = re-check the contacts you already have against the persona, from the candidate lists reveal stored (0 credits, 1 per contact it actually swaps). Map user language: Firmendaten vervollstaendigen/ergaenzen/anreichern or complete company data = resolve; bewerten/priorisieren/einordnen or score/rank = score, use rescore if the campaign was scored before; Anlaesse/Signale/Trigger/Why-now suchen or find triggers = signals; Ansprechpartner/Kontakte finden, E-Mail/Telefon ermitteln or find contacts = reveal; Kontakte neu bewerten/Ansprechpartner neu pruefen/passt der Kontakt noch or re-check the contacts = rerank'}, 'dry_run': {'type': 'boolean', 'description': 'true = report candidates and estimated_credits, change nothing. Always do this first.'}, 'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "Optional: run only on these leads instead of letting the stage choose. Use it when the user names specific companies, for a first careful run on one lead, or to pick up after an aborted run. These are `leads.id` — the `lead_id` from this tool's own dry-run candidates, from pipelineStatus top_10 or from listLeadSignals. It is NOT the `id` from listCampaignLeads: that is the campaign membership (campaign_leads.id), and passing it is not refused — it simply matches nothing, and 0 candidates reads like 'nothing left to do'. Naming leads only NARROWS: whoever the gate excludes stays excluded. One exception, and it is the point of a second attempt: in the resolve stage a named lead is taken up again even inside the two retry windows."}, 'min_score': {'type': 'integer', 'description': 'Fit threshold for signals and reveal. Default 60.'}, 'with_phone': {'type': 'boolean', 'description': 'reveal only: also reveal a mobile number. Default false. A phone costs 10 credits per lead on top of the 3 for the email.'}, 'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}, 'require_signal': {'type': 'boolean', 'description': 'reveal only: require an active why-now signal. Default true. Setting this to false widens who gets contacted — ask the user before you do it.'}, 'confirm_credits': {'type': 'integer', 'description': 'Required for a paid stage when dry_run is false — reveal and resolve: the exact estimated_credits from the dry run. A mismatch is refused with 409 and a fresh number — the candidate set changed, so show the user the new figure instead of retrying with the old one. rerank is estimated at 0 and therefore runs without a confirmation, although a swap costs one credit; do the dry run anyway and tell the user how many contacts it would re-judge.'}}}
输入模式
{'type': 'object', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'ID of the campaign (from listCampaigns).'}}}
输入模式
{'type': 'object', 'required': ['campaign_lead_id'], 'properties': {'campaign_lead_id': {'type': 'string', 'description': "ID of the campaign lead to call (campaign_lead_id from show_callable_leads' structuredContent)."}}}
输入模式
{'type': 'object', 'required': ['version_id'], 'properties': {'version_id': {'type': 'string', 'description': 'The version ID (restore_id) to restore to. Get this from getHistory or listDeleted.'}}}
输入模式
{'type': 'object', 'required': ['call_log_id'], 'properties': {'notes': {'type': 'string', 'description': 'Optional free-text note about the call.'}, 'call_log_id': {'type': 'string', 'description': 'call_log_id returned by place_call in its structuredContent.'}, 'disposition': {'enum': ['interested', 'no_need', 'callback', 'voicemail', 'wrong_number', 'dnc'], 'type': 'string', 'description': 'Optional call disposition.'}, 'next_action': {'type': 'object', 'required': ['remind_at'], 'properties': {'title': {'type': 'string', 'description': 'Optional reminder title.'}, 'remind_at': {'type': 'string', 'description': 'ISO timestamp for the reminder.'}}, 'description': 'Optional follow-up reminder (typically for a callback disposition).'}}}
输入模式
{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['campaign', 'full', 'delta', 'company_ids'], 'type': 'string', 'description': "Which leads to score. 'campaign' scores the leads of one campaign and REQUIRES campaign_id — no CRM and no Pro plan needed. The other three target the connected CRM and require Pro: 'full' scores all CRM companies (slow for >1k), 'delta' only those updated since the last run or not yet scored (recommended for routine updates), 'company_ids' a specific list (requires company_ids)."}, 'campaign_id': {'type': 'string', 'description': "UUID of the campaign whose leads to score. REQUIRED when mode='campaign'; ignored in the CRM modes. Get it from listCampaigns."}, 'company_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "CRM company IDs to score. Required and only used when mode='company_ids'. Max 100 recommended per call."}}}
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Max results. Default: 10.'}, 'query': {'type': 'string', 'description': 'Search keywords — short and specific.'}, 'match_threshold': {'type': 'number', 'description': 'Min similarity (0-1). Default: 0.5.'}, 'metadata_filter': {'type': 'object', 'description': 'Filter by metadata. Use chapter to search within a specific chapter.', 'additionalProperties': {'type': 'string'}}}}
输入模式
{'type': 'object', 'required': ['message'], 'properties': {'context': {'type': 'object', 'description': "Optional context, e.g. {chapter: 'icp'}.", 'additionalProperties': {'type': 'string'}}, 'message': {'type': 'string', 'description': 'The notification message to send.'}, 'broadcast': {'type': 'boolean', 'description': 'If true, sends to ALL team members. Default: false.'}, 'to_prefix': {'type': 'string', 'description': "Recipient's token_prefix or display_name from listTeam."}}}
输入模式
{'type': 'object', 'required': ['w_constraint', 'w_nonconstraint'], 'properties': {'w_constraint': {'type': 'number', 'minimum': 0, 'description': 'Weight for the constraint (bottleneck) effort lane in the ICE score.'}, 'w_nonconstraint': {'type': 'number', 'minimum': 0, 'description': 'Weight for the non-constraint effort lane in the ICE score.'}, 'label_constraint': {'type': 'string', 'description': "Optional display label for the constraint lane (e.g. 'Engineering')."}, 'label_nonconstraint': {'type': 'string', 'description': "Optional display label for the non-constraint lane (e.g. 'Design')."}}}
输入模式
{'type': 'object', 'required': ['session_id', 'kind', 'key', 'state'], 'properties': {'key': {'type': 'string', 'description': "Logical identifier within a kind. Examples: 'campaign_briefing', 'lead_candidates', 'active_campaign'. Use snake_case."}, 'kind': {'enum': ['wizard', 'working_set', 'pinned_entity'], 'type': 'string', 'description': 'wizard = multi-turn field collection. working_set = ephemeral suggestion lists with TTL. pinned_entity = durable context across turns.'}, 'state': {'type': 'object', 'description': 'The full state object to store. Replaces any previous state for this (kind, key). Schema is free-form but conventions: wizard = { fields, required, collected, current_step }; working_set = { items, context }; pinned_entity = { id, name, summary, ... }.'}, 'status': {'enum': ['active', 'completed', 'abandoned'], 'type': 'string', 'description': "Default 'active'. Set to 'completed' when a wizard finishes successfully (triggers completed_at timestamp)."}, 'ttl_turns': {'type': 'integer', 'description': 'Optional TTL in user-turns. After this many turns, the record auto-expires. NULL/omit = permanent (typical for wizard and pinned_entity). Use 5 for working_set / suggestion lists.'}, 'session_id': {'type': 'string', 'description': 'The current chat session_id. REQUIRED. Comes from the conversation context.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max leads to render. Default 50, max 100.'}, 'campaign_id': {'type': 'string', 'description': 'Optional campaign UUID (from listCampaigns). Omit to aggregate callable leads across all campaigns.'}}}
输入模式
{'type': 'object', 'required': ['id', 'step_id'], 'properties': {'id': {'type': 'string', 'description': 'Task UUID.'}, 'done': {'type': 'boolean', 'description': 'Omit to flip the current state.'}, 'step_id': {'type': 'string', 'description': "ID of the step to toggle (from the task's steps)."}}}
输入模式
{'type': 'object', 'required': ['campaign_id'], 'properties': {'name': {'type': 'string', 'description': 'Short campaign label, 3-200 chars.'}, 'notes': {'type': 'string', 'description': 'Optional internal notes about the campaign.'}, 'offer': {'type': 'string', 'description': "The concrete CTA, NOT the product name. E.g. 'Free 30-day pilot'."}, 'status': {'enum': ['draft', 'active', 'paused', 'completed', 'archived'], 'type': 'string', 'description': 'Campaign status: draft | active | paused | completed | archived.'}, 'scoring': {'type': ['object', 'null'], 'properties': {'geo': {'type': ['array', 'object'], 'items': {'type': 'string'}, 'description': "ISO-3166-1 alpha-2 country codes. Two forms, both accepted: the plain list ['DE','AT','CH'], which is descriptive only, or { list: ['DE','AT'], gate: true } when a company outside the list should be penalised — same meaning as employees.gate. A plain list means gate=false."}, 'weights': {'type': 'object', 'properties': {'geo': {'type': 'integer'}, 'industry': {'type': 'integer'}, 'employees': {'type': 'integer'}, 'seniority': {'type': 'integer'}}, 'description': 'Optional {industry, employees, geo, seniority} overriding the default 35/25/20/20. A weight of 0 still counts toward completeness — use employees.gate=false to drop a dimension entirely.'}, 'employees': {'type': 'object', 'properties': {'max': {'type': 'integer'}, 'min': {'type': 'integer'}, 'gate': {'type': 'boolean'}}, 'description': '{ min, max, gate }. gate=true means a company outside the range is penalised; gate=false means the range is descriptive only.'}, 'seniority': {'type': 'object', 'properties': {'roles': {'type': 'array', 'items': {'type': 'string'}}}, 'description': '{ roles: [string] } — job titles as the user names them, in their language. Common leadership synonyms (GF, CEO, Inhaber, Managing Director, …) are matched anyway and need not be listed.'}, 'industries': {'type': 'array', 'items': {'type': 'string'}, 'description': "Target industries, free text in the user's own words."}}, 'description': "Lead-scoring profile for THIS campaign, merged into icp_snapshot.scoring (the rest of icp_snapshot is left alone). Fill it only from what the user told you — never from general knowledge or another campaign; a wrong profile scores every lead wrongly and the numbers look plausible either way. Set employees.gate=false when company size is context rather than a criterion ('no hard cut-off', 'roughly', 'kein Gate'): the dimension then counts neither toward the score nor toward completeness. Pass null to remove the profile and fall back to the global ICP. Rejected with scoring_invalid if it names none of industries/employees/geo/seniority.roles."}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Outreach channels for this campaign.'}, 'end_date': {'type': 'string', 'description': 'Optional ISO date YYYY-MM-DD. Null = open-ended.'}, 'start_date': {'type': 'string', 'description': 'ISO date YYYY-MM-DD.'}, 'campaign_id': {'type': 'string', 'description': 'ID of the campaign to update (from listCampaigns).'}, 'icp_snapshot': {'type': 'object', 'description': 'Frozen ICP for this campaign. May be a narrowed variant of the global ICP.'}, 'success_metric': {'type': 'object', 'description': "{ type: 'replies'|'demos'|'sqls'|'pipeline_eur', target: number }"}, 'messaging_angle': {'type': 'string', 'description': 'The hook in the first email/message — the news/trend/insight that earns the read.'}, 'pain_hypothesis': {'type': 'string', 'description': 'ONE sentence stating the specific pain this campaign assumes the persona has.'}, 'persona_snapshot': {'type': 'object', 'description': 'Frozen target persona for this campaign.'}, 'product_snapshot': {'type': 'object', 'description': 'Frozen product info. Schema: { name, description, value_props[], differentiators[], pricing_hint }.'}, 'fit_gate_min_score': {'type': ['integer', 'null'], 'description': 'Fit-gate threshold on score_fit for THIS campaign, 0 to 100. Default is 60 when unset — only change it when the user asks. Lower it when a documented signal decides suitability rather than the score: reveal then stops dropping leads that sit just below the default, which is the case this exists for. Pass null to put the campaign back on the default.'}}}
输入模式
{'type': 'object', 'required': ['lead_id', 'updates'], 'properties': {'lead_id': {'type': 'string', 'description': 'UUID of the campaign_lead to update'}, 'updates': {'type': 'object', 'properties': {'metadata': {'type': 'object', 'description': 'Shallow-merged into existing metadata. Pass {} to clear all keys.'}, 'company_name': {'type': 'string'}, 'contact_name': {'type': 'string'}, 'contact_role': {'type': 'string'}, 'contact_email': {'type': 'string'}, 'contact_phone': {'type': 'string'}, 'company_domain': {'type': 'string'}, 'company_country': {'type': 'string'}, 'lifecycle_stage': {'enum': ['imported', 'enriched', 'scored', 'crm_ready', 'crm_synced', 'rejected', 'bounced'], 'type': 'string'}, 'rejected_reason': {'type': 'string', 'description': "REQUIRED when lifecycle_stage='rejected'"}, 'company_industry': {'type': 'string'}, 'company_linkedin': {'type': 'string'}, 'contact_linkedin': {'type': 'string'}, 'company_employees': {'type': 'integer'}, 'contact_seniority': {'type': 'string'}, 'enrichment_status': {'enum': ['pending', 'enriched', 'failed', 'skipped'], 'type': 'string'}}, 'description': 'Object with fields to change. metadata is shallow-merged.'}}}
输入模式
{'type': 'object', 'required': ['signal_id', 'updates'], 'properties': {'updates': {'type': 'object', 'properties': {'type': {'enum': ['funding', 'acquisition', 'hiring', 'job_change', 'tech_change', 'expansion', 'leadership', 'regulatory', 'event', 'inbound', 'other'], 'type': 'string'}, 'signal': {'type': 'string', 'description': 'The one-sentence signal, 10 to 1000 characters.'}, 'source_url': {'type': 'string', 'description': 'Source URL, must start with http:// or https://. Unique per lead.'}, 'observed_at': {'type': 'string', 'description': 'YYYY-MM-DD — date of the source or event, not the date we saw it.'}, 'source_label': {'type': 'string', 'description': "Readable source name. It takes precedence over the URL host in `cite`, which goes verbatim into outreach — so a publication or site name, never a colleague's name."}, 'last_confirmed_at': {'type': 'string', 'description': 'YYYY-MM-DD — when the fact was last re-checked.'}}, 'description': 'Only the fields to change. At least one of them.'}, 'signal_id': {'type': 'string', 'description': 'UUID of the signal — the `id` field of a signal in listLeadSignals.'}}}
输入模式
{'type': 'object', 'required': ['embedding_id', 'change_reason'], 'properties': {'new_content': {'type': 'string', 'description': 'Updated text content.'}, 'embedding_id': {'type': 'string', 'description': 'ID of the memory to update.'}, 'new_metadata': {'type': 'object', 'description': 'Optional metadata to replace, e.g. chapter or tags.', 'additionalProperties': {'type': 'string'}}, 'change_reason': {'type': 'string', 'description': "REQUIRED: Why this memory is being updated, e.g. 'Added Q2 metrics', 'Fixed company name', 'User requested update'. Stored in audit log."}}}
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'ID of the task to update (from listTasks).'}, 'owner': {'type': 'string', 'description': 'Assignee (free text).'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string'}, 'done': {'type': 'boolean'}, 'text': {'type': 'string'}}}, 'description': "Replace the task's checklist. Omit to leave unchanged."}, 'title': {'type': 'string', 'description': 'Optional new task title.'}, 'bucket': {'enum': ['now', 'next', 'later', 'follow-up'], 'type': 'string', 'description': 'Time horizon: now | next | later | follow-up.'}, 'detail': {'type': 'string', 'description': 'Optional longer description of the task.'}, 'impact': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'ICE impact, 1-10 (higher = more impact).'}, 'status': {'enum': ['open', 'in_progress', 'done', 'dropped'], 'type': 'string', 'description': 'New status: open | in_progress | done | dropped.'}, 'confidence': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'ICE confidence, 0-1 (probability the impact materializes).'}, 'effort_constraint': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Effort on the bottleneck lane (see workspace label_constraint).'}, 'effort_nonconstraint': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Effort on the non-bottleneck lane.'}}}
输入模式
{'type': 'object', 'required': ['file_base64', 'filename', 'mime_type'], 'properties': {'title': {'type': 'string', 'description': 'Optional document title. Defaults to the filename.'}, 'chapter': {'type': 'string', 'description': 'Optional memory chapter to associate extracted insights with.'}, 'category': {'enum': ['battlecards', 'reports', 'uploads', 'exports', 'templates', 'presentations'], 'type': 'string', 'description': 'Optional storage category.'}, 'filename': {'type': 'string', 'description': 'Filename with extension.'}, 'mime_type': {'type': 'string', 'description': 'MIME type.'}, 'description': {'type': 'string', 'description': 'Optional short description of the document.'}, 'file_base64': {'type': 'string', 'description': 'Base64-encoded file content.'}, 'extract_insights': {'type': 'boolean', 'description': 'If true, extract text and embed insights into memory. Default: false.'}}}
输入模式
{'type': 'object', 'required': ['email'], 'properties': {'email': {'type': 'string', 'description': 'Email address to verify for deliverability.'}}}
近期工具变更
类似的 MCP 服务器
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
TradePilot Agent Commerce
Offers pay-per-use services for marketing content, sales account planning, customer success, business planning, data conversion, …
StackSwap
Researches and compares B2B go-to-market software, audits technology stacks, identifies overlaps and savings, recommends replacem…
Ergora Specialists
Provides cited guidance from specialist knowledge bases covering business strategy, marketing, advertising, ecommerce, sales, fin…
Income Factory Toll Fabric
Offers paid intelligence tools for B2B lead discovery, hiring demand, procurement opportunities, social-media trends, content opp…
Business Studio
Provides business back-office functions for tasks, deals, customers, publishing, and tracked links.
D50 AI — Sales, Marketing & Hiring Automation
Provides tools for CRM, lead generation, sales calling, marketing content, recruiting, and SEO automation.
businessmcp
Provides business analytics, CRM, SEO, advertising, and revenue data with scoped access.