MCP tools: CRM, Lead-Engine and network

Maintain leads, log activities, evaluate the Lead-Engine, prepare email drafts and manage network contacts.

Prerequisites
  • CRM module enabled (network tools are always available).
  • For email drafts: a Produkt-Briefing article in the organization's knowledgebase.

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.
email
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.
email
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.

Keep reading

Still have a question or a problem?

Visit support

Last reviewed on 2026-09-26