list_crm_leads
Lists CRM leads, newest first. Filter by stage, source and the Lead-Engine fields priority, ballWith and category. Every lead also carries the computed fields category, dueAt and lastContactAt. When filtering by category the tool scans the 1,000 newest matching leads and then trims to limit. Requirements: role Viewer or higher, key scope "read" or higher, module "CRM" enabled.
- stage
- Optional · string · possible | lead | contacted | demo | proposal | invited | active | lost — Only leads in this stage.
- source
- Optional · string · manual | referral | inbound | outbound | event — Source of the lead: manual, referral, inbound, outbound or event.
- priority
- Optional · string · A | B | C — Only leads with this Lead-Engine priority.
- ballWith
- Optional · string · us | other | none — Only leads where this party has the next move: us, other or none.
- category
- Optional · string · absage | geparkt | signalabhaengig | ueberfaellig | termin_fix | heute_morgen | diese_woche | spaeter — Computed follow-up category: ueberfaellig (our turn and past due), heute_morgen, diese_woche, spaeter, termin_fix, signalabhaengig, geparkt or absage.
- limit
- Optional · number — Maximum number of results (default 50, max 200).
get_crm_lead
Returns a CRM lead with its activity history (newest first) and the computed fields category, dueAt and lastContactAt. Synced or sent emails appear as activities of type email_inbound or email_outbound – subject only, email bodies are never stored. Requirements: role Viewer or higher, key scope "read" or higher, module "CRM" enabled.
- id
- Required · string — ID of the lead.
create_crm_lead
Creates a CRM lead. Only the company name is required. Without input the lead starts in stage lead, source manual, priority B, ballWith us and language de. Send the contact name as free text (contactName) or split into first and last name. With consentBasis you document the legal basis for contacting the lead, including the time. Requirements: role Member or higher, key scope "write" or higher, module "CRM" enabled.
- companyName
- Required · string — Company name.
- contactName
- Optional · string — Full name as free text; ignored as soon as a first or last name is sent.
- contactSalutation
- Optional · string · herr | frau | divers — Contact person's salutation: herr, frau or divers.
- contactFirstName
- Optional · string — Contact person's first name. Takes precedence over contactName.
- contactLastName
- Optional · string — Contact person's last name. Takes precedence over contactName.
- contactEmail
- Optional · string — Contact person's email address.
- language
- Optional · string · de | en — Language of invite and customer emails to this lead: de or en (default: de).
- phone
- Optional · string — Phone number.
- website
- Optional · string — Website URL.
- stage
- Optional · string · possible | lead | contacted | demo | proposal | invited | active | lost — Initial stage. Default: lead.
- source
- Optional · string · manual | referral | inbound | outbound | event — Source of the lead. Default: manual.
- estimatedRevenueMin
- Optional · number — Estimated minimum revenue of the lead.
- estimatedRevenueMax
- Optional · number — Estimated maximum revenue of the lead.
- notes
- Optional · string — Notes as free text.
- tags
- Optional · string[] — Tags as a list.
- ballWith
- Optional · string · us | other | none — Lead-Engine: who has the next move – us, other or none. Default: us.
- waitingFor
- Optional · string · first_contact | docs_reply | demo_followup | offer_reply | order_form | promised_reply | fixed_meeting | own_step | signal — Lead-Engine: what the ball-holder is waiting for (drives the due-date and category logic): first_contact, docs_reply, demo_followup, offer_reply, order_form, promised_reply, fixed_meeting, own_step, signal.
- priority
- Optional · string · A | B | C — Lead-Engine priority A, B or C. Default: B.
- nextStep
- Optional · string — Lead-Engine "next step" – a structured line, separate from notes and history.
- segment
- Optional · string — Lead-Engine segment label (grouped via the organization's segment groups).
- consentBasis
- Optional · string · inquiry | existing_customer | consent | none — Legal basis for contacting the lead (TKG § 174): inquiry, existing_customer, consent or none. Cold outbound leads with none get no email drafts.
- consentNote
- Optional · string — Evidence for the consent basis, e.g. date and channel of the inquiry.
update_crm_lead
Updates a CRM lead; only the fields you send are changed (including Lead-Engine fields, parking and consent basis). When the stage changes to active, the organization's activation automation also runs (lead-to-contact hand-over/onboarding). First name, last name and the derived full name stay in sync. Requirements: role Member or higher, key scope "write" or higher, module "CRM" enabled.
- id
- Required · string — ID of the lead.
- companyName
- Optional · string — Company name.
- contactName
- Optional · string — Full name as free text; ignored as soon as a first or last name is sent.
- contactSalutation
- Optional · string · herr | frau | divers — Contact person's salutation: herr, frau or divers.
- contactFirstName
- Optional · string — Contact person's first name. Takes precedence over contactName.
- contactLastName
- Optional · string — Contact person's last name. Takes precedence over contactName.
- contactEmail
- Optional · string — Contact person's email address.
- language
- Optional · string · de | en — Language of invite and customer emails to this lead: de or en (default: de).
- stage
- Optional · string · possible | lead | contacted | demo | proposal | invited | active | lost — New stage. Switching to active triggers the activation automation.
- estimatedRevenueMin
- Optional · number — Estimated minimum revenue of the lead.
- estimatedRevenueMax
- Optional · number — Estimated maximum revenue of the lead.
- notes
- Optional · string — Notes as free text.
- followUpAt
- Optional · string — Follow-up reminder time (ISO 8601). An empty value clears it.
- followUpNote
- Optional · string — Note for the follow-up.
- tags
- Optional · string[] — Tags as a list.
- ballWith
- Optional · string · us | other | none — Lead-Engine: who has the next move – us, other or none.
- waitingFor
- Optional · string · first_contact | docs_reply | demo_followup | offer_reply | order_form | promised_reply | fixed_meeting | own_step | signal — Lead-Engine: what the ball-holder is waiting for (drives the due-date and category logic): first_contact, docs_reply, demo_followup, offer_reply, order_form, promised_reply, fixed_meeting, own_step, signal.
- priority
- Optional · string · A | B | C — New Lead-Engine priority A, B or C.
- nextStep
- Optional · string — Lead-Engine "next step" – a structured line, separate from notes and history.
- noResponseAttempts
- Optional · number — Number of contact attempts without a response.
- segment
- Optional · string — Lead-Engine segment label (grouped via the organization's segment groups).
- parkedSignal
- Optional · string — Lead-Engine: parks the lead until this signal occurs (a named event from the organization's signal list, never a date). An empty string un-parks.
- parkedSnapshot
- Optional · string — "State before parking": the lead's state when it was parked, so it can be picked up again later.
- consentBasis
- Optional · string · inquiry | existing_customer | consent | none — Legal basis for contacting the lead (TKG § 174): inquiry, existing_customer, consent or none. Cold outbound leads with none get no email drafts.
- consentNote
- Optional · string — Evidence for the consent basis, e.g. date and channel of the inquiry.
delete_crm_lead
Deletes a CRM lead. Requires at least the Admin role and a key with the delete scope. Requirements: role Admin or higher, key scope "delete" or higher, module "CRM" enabled.
- id
- Required · string — ID of the lead.
create_crm_activity
Logs an activity on a lead. The types email_inbound and email_outbound stand for a mail the lead sent or received: like a synced mail they also update the Lead-Engine fields (ball, waiting-for, contact attempts, auto-park after three unanswered attempts). All other types are plain history entries. Requirements: role Member or higher, key scope "write" or higher, module "CRM" enabled.
- leadId
- Required · string — ID of the CRM lead.
- type
- Required · string · note | call | email | email_inbound | email_outbound | meeting | stage_change — Kind of activity.
- content
- Required · string — Content or description of the activity.
- occurredAt
- Optional · string — Time the event happened (ISO 8601, default: now). For mails or calls that already took place; must not be in the future (5 minutes tolerance).
get_crm_dashboard
Live Lead-Engine dashboard: headline numbers (active pipeline, win rate, new leads), cumulative funnel with conversion ratings, segment and source breakdowns, follow-up hygiene (overdue, due today, stale, priority A, open drafts/tasks, leads blocked by missing consent) and the organization-wide mailbox sync status. Requirements: role Viewer or higher, key scope "read" or higher, module "CRM" enabled. This tool takes no parameters.
get_crm_weekly_briefing
Returns weekly Lead-Engine snapshots, newest first: KPI numbers, the AI-written findings (briefingMd) and the named control metric (controlMetric). briefingMd is AI-generated (aiGenerated=true) and null if generation failed that week – the KPIs still stand on their own. Requirements: role Viewer or higher, key scope "read" or higher, module "CRM" enabled.
- weeks
- Optional · number · Default: 1 — How many weeks back (1–12).
list_crm_email_drafts
Lists CRM email drafts, newest first, optionally for one lead. Only open drafts by default. Each entry includes the lead's company name. As a member you only see drafts of leads assigned to you or your reports, plus unassigned ones. Requirements: role Viewer or higher, key scope "read" or higher, module "CRM" enabled.
- leadId
- Optional · string — Only drafts for this lead.
- status
- Optional · string · open | sent | discarded · Default: open — Only drafts with this status. Default: open.
- limit
- Optional · number — Maximum number of results (default 50, max 200).
create_crm_email_draft
Saves an email draft for a lead that a human reviews and sends in the CRM – this tool cannot send. The text is written from the organization's Produkt-Briefing knowledgebase article; prices only from the configured packages, otherwise the placeholder [PREIS], no invented facts. The send condition ("send now", "send from 28.09.", "send once …") goes at the end of the reasoning. The draft is flagged as AI-generated. It is blocked without a Produkt-Briefing, for cold outbound leads without a documented consent basis and for recipients on the suppression list. Requirements: role Member or higher, key scope "write" or higher, module "CRM" enabled.
- leadId
- Required · string — ID of the CRM lead.
- subject
- Required · string — Subject (max. 300 characters).
- body
- Required · string — Ready-to-send plain text (max. 20,000 characters) in the contact's register (Sie/Du as noted on the lead).
- to
- Optional · string — Recipient. Default: the lead's contact email.
- cc
- Optional · string — CC recipient – only with a reason (intermediary, participant with unclear role).
- reasoning
- Optional · string — Reasoning for the draft: (1) evidence with timestamps, (2) why now / what changed since an earlier draft, (3) warnings, (4) send condition.
- sendCondition
- Optional · string · immediately | after_date | condition · Default: immediately — Send condition: immediately, after_date or condition (as soon as a condition is met). Default: immediately.
- sendAfter
- Optional · string — Earliest send time (ISO 8601). Required when sendCondition is after_date.
update_crm_email_draft
Edits an open email draft (subject, body, recipient, CC) or discards it with a reason – for example when new events made it obsolete; then create a new one. The tool can neither send nor mark a draft as sent: that remains a human action in the CRM. Drafts that are already sent or discarded can no longer be changed. Requirements: role Member or higher, key scope "write" or higher, module "CRM" enabled.
- draftId
- Required · string — ID of the draft.
- subject
- Optional · string — Subject (max. 300 characters).
- body
- Optional · string — New body (max. 20,000 characters).
- to
- Optional · string — New recipient. Addresses on the suppression list are rejected.
- cc
- Optional · string — CC recipient – only with a reason (intermediary, participant with unclear role).
- status
- Optional · string · discarded — Only discarded is allowed.
- discardReason
- Optional · string — Reason for discarding the draft, e.g. because new events made it obsolete.
list_network_contacts
Lists network contacts of the organization (freelancers, agencies, partners, investors …), newest first; filter by type. This tool has no module switch. Requirements: role Viewer or higher, key scope "read" or higher, no module switch (always available).
- type
- Optional · string — Only contacts of this type, e.g. freelancer, agency, partner.
- limit
- Optional · number — Maximum number of results (default 50, max 200).
get_network_contact
Returns a network contact by ID. Requirements: role Viewer or higher, key scope "read" or higher, no module switch (always available).
- id
- Required · string — ID of the contact.
search_network_contacts
Searches network contacts by partial text in name, company and specialization (case-insensitive). Requirements: role Viewer or higher, key scope "read" or higher, no module switch (always available).
- query
- Required · string — Search text for name, company or specialization.
- limit
- Optional · number — Maximum number of results (default 20, max 50).
create_network_contact
Creates a network contact. Only the name is required; the type defaults to freelancer. Requirements: role Member or higher, key scope "write" or higher, no module switch (always available).
- fullName
- Required · string — Full name of the contact.
- companyName
- Optional · string — Company of the contact.
- specialization
- Optional · string — Specialization of the contact.
- phone
- Optional · string — Phone number.
- Optional · string — Email address.
- website
- Optional · string — Website URL.
- location
- Optional · string — Location.
- linkedinUrl
- Optional · string — LinkedIn profile URL.
- type
- Optional · string — Type, e.g. freelancer, agency, partner, investor. Default: freelancer.
- hourlyRate
- Optional · number — Hourly rate of the contact.
- notes
- Optional · string — Notes as free text.
- tags
- Optional · string[] — Tags as a list.
update_network_contact
Updates a network contact; only the fields you send are changed. Website, location, LinkedIn URL and type cannot be changed with this tool. Requirements: role Member or higher, key scope "write" or higher, no module switch (always available).
- id
- Required · string — ID of the contact.
- fullName
- Optional · string — Full name of the contact.
- companyName
- Optional · string — New company.
- specialization
- Optional · string — Specialization of the contact.
- phone
- Optional · string — Phone number.
- Optional · string — Email address.
- notes
- Optional · string — Notes as free text.
- tags
- Optional · string[] — Tags as a list.
- hourlyRate
- Optional · number — New hourly rate.
delete_network_contact
Deletes a network contact. Requires at least the Admin role and a key with the delete scope. Requirements: role Admin or higher, key scope "delete" or higher, no module switch (always available).
- id
- Required · string — ID of the contact.
Common pitfalls
No sending via MCP
Email drafts are reviewed and sent by a human in the CRM. There is no tool to send or to mark as sent.
Legal basis before the first draft
Cold outbound leads need a documented consentBasis (TKG § 174), otherwise no draft is created. Recipients on the suppression list are rejected.
Product briefing required
Without an approved Produkt-Briefing in the knowledgebase, create_crm_email_draft refuses the draft.
Category filter has a cap
list_crm_leads with category scans only the 1,000 newest matching leads.
Stage active triggers automation
update_crm_lead with stage active starts the organization's activation automation.
