GrowthKit Revenue Intelligence

by growthkit-tools

308 downloads
Not rated
GitHub

About

Sales intelligence for DACH & EU SMEs — lead scoring, ICP fit, CRM enrichment & writeback.

Details

Author
growthkit-tools
Downloads
308
Categories
Other

- Structured marketing memory with semantic search and version history
- ICP lead scoring with per-dimension breakdowns
- CRM read and writeback (Twenty live; more on roadmap)
- Company and person enrichment, email finding and verification
- Campaign creation, lead import, and lifecycle triage
- Guided playbooks for onboarding, ICP workshop, and weekly review

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name GrowthKit Revenue Intelligence
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Add the server to any MCP-compatible client (e.g., Claude Desktop, ChatGPT, Cursor) by configuring the URL https://mcp.growthkit.tools in the mcpServers section. On first connect, you will be taken through an OAuth screen where you paste your GrowthKit token or click "Try the demo" for a read-only sample workspace.

embedMemory

Store knowledge into long-term memory. Supports single items and batch embedding (max 50). IMPORTANT — Chapter System: Every memory MUST be classified into exactly one chapter via metadata.chapter. Available chapters: icp, strategy, campaigns, analytics, brand, competitors, learnings, general, pipeline, signals, playbook. Always analyze the content and pick the most specific chapter. Use general only as a last resort. BEFORE STORING: Search target chapter first to check for duplicates. QUALITY: 50-300 words, specific and factual, one concept per memory. AUTO-TAGGING: Before saving ANY memory, search the playbook chapter for 'tag-taxonomy' to load the current tag taxonomy. Then add 3-7 relevant tags as a comma-separated string in metadata.tags (e.g. metadata: { chapter: 'campaigns', tags: 'saas,series-a,dach,linkedin,demand-gen' }). Pick the most specific tags from the taxonomy. You may add 1-2 free-form tags if needed. For batch embeds, tag each item individually. PLAYBOOK SYSTEM: Available playbooks: icp-workshop, onboarding, campaign-brief, weekly-review, competitor-analysis, content-brief. When the user asks to do any of these tasks, use prompts/get to load the full playbook and follow its steps.

searchMemory

Search long-term memory using semantic similarity. ALWAYS SEARCH BEFORE ANSWERING marketing/strategy questions. Use short, specific keywords as queries. Available chapters: icp, strategy, campaigns, analytics, brand, competitors, learnings, general, pipeline, signals, playbook. TAG FILTERING: Memories are auto-tagged. Use metadata_filter with tags key to filter (e.g. metadata_filter: { chapter: 'campaigns', tags: 'linkedin' }).

listMemories

List stored memories with pagination. Filter by chapter using metadata_filter.chapter.

updateMemory

Update content or metadata of a stored memory. Use to enrich, fix, or reclassify. You MUST provide a change_reason explaining WHAT changed and WHY. The reason is stored in the version history audit log.

deleteMemories

Delete memories by IDs. Always confirm with user first. You MUST provide a change_reason explaining WHY these memories should be deleted. The reason is stored in the version history audit log.

clearMemories

Delete ALL memories. Irreversible. Always ask for explicit confirmation. You MUST provide a change_reason.

countMemories

Count memories, optionally filtered by chapter via metadata_filter.chapter.

getChapterOverview

Get memory count per chapter. Use as FIRST STEP in new conversations or reviews.

uploadDocument

Upload a file to GrowthKit document storage. Optionally extracts text and embeds insights.

listDocuments

List stored documents with optional filtering by category or chapter.

getDocument

Get a specific document with fresh download URL and linked insights.

deleteDocument

Delete a document and its associated insights.

createReminder

Schedule a reminder. Convert relative times to ISO 8601.

listReminders

List reminders. Filter by status.

cancelReminder

Cancel a pending reminder by ID.

getHistory

Get the version history of a specific memory. Shows all previous versions with timestamps and who made changes.

restoreVersion

Restore a memory to a previous version. Works for both existing and deleted memories. Use version_id from getHistory or listDeleted results.

listDeleted

List recently deleted memories that can be restored. Shows content preview and deletion info.

listTeam

List all team members (token holders) for your account. Shows display names, roles, and identifies which token is yours.

sendNotification

Send a notification to a team member. First use listTeam to find the recipient. For 2-person teams, the recipient is auto-resolved.

checkNotifications

Check for unread notifications (direct messages and broadcasts).

crmSearchCompany

Search CRM for a company by name. ALWAYS search before creating to avoid duplicates.

crmGetCompany

Get full company details by ID. Returns name, domain, industry, employees, address, CRM link.

crmCreateCompany

Create a new company. ALWAYS search first to avoid duplicates.

crmGetCompanyDeals

Get all deals linked to a company.

crmGetCompanyContacts

Get all contacts linked to a company.

crmSearchContact

Search CRM for a contact by name.

crmListCompanies

List companies from CRM with structured filters. Use for segment queries like 'all pharma companies with 50-200 employees in DACH'. All filter fields optional. Returns companies with id, name, industry, employees, country, and pagination info. Unlike crmSearchCompany (which does fuzzy name search), this does precise structured filtering.

crmListPeople

List people/contacts from CRM with structured filters. Use for segment queries like 'all CEOs in pipeline companies'. All filter fields optional.

crmGetContact

Get full contact details by ID.

crmCreateContact

Create a new contact. ALWAYS pass company_id when the company exists.

crmGetPipelines

Get all pipelines with stages. ALWAYS call before creating deals to get valid stage_id.

crmCreateDeal

Create a new deal. Requires title + stage_id. MUST call crmGetPipelines first.

crmUpdateDeal

Update a deal. Use generic names: company_id, contact_id, expected_close.

crmGetDeal

Get full deal details by ID.

crmAddNote

Add a note to a deal, company, or contact.

crmCreateActivity

Create a follow-up task/call/meeting.

crmCheckConnection

Check if CRM is connected and which provider is active.

enrichCompany

Get company info by domain or name. Returns industry, employees, revenue, location, technologies.

enrichPerson

Get person profile from email or LinkedIn URL.

findContacts

Find contacts at a company. Filter by seniority or department.

findEmail

Find one person's email by name + domain.

verifyEmail

Check if an email is deliverable. Use before outreach.

scoreLeads

Trigger lead scoring against ICP for this user's CRM companies. Scores each (company, contact) pair on 4 dimensions (industry 35%, employees 25%, geo 20%, seniority 20%) with missing-data renormalization. Use mode='full' for all companies, 'delta' for new/changed since last run, 'company_ids' for specific IDs. Persists to lead_scores table; read results via getTopLeads. Returns counts and per-user summary. Requires Pro plan (active or trialing). Write-operation — scores are persisted to lead_scores table.

getTopLeads

Retrieve the highest-scoring leads from the CRM, ranked by ICP fit. Returns company details, contact (if any), 4-dimension score breakdown, and qualitative reasons like 'Industry X — strong match to ICP'. By default filters out leads with <50% data completeness to avoid false-positives from data-sparse ICP matches (e.g. leads where only the contact's seniority matched but industry/employees/country are unknown). Override via filters.min_completeness if you want incomplete leads too. Requires scoreLeads to have been run at least once. Requires Pro plan. Read-only — does not trigger new scoring. Call scoreLeads first if your CRM has new companies or ICP has changed (check icp_version_hash in the response to detect staleness).

email_compose

Compose an email via the user's connected email provider (currently Gmail; Microsoft 365 coming in Phase B). DEFAULT mode is 'draft' — creates a real draft in Gmail that the user can review before sending. Only use mode='send' when the user explicitly confirms sending with keywords like 'sende', 'schick raus', 'verschicken', 'send it', 'raus damit'. On 'draft' success, response includes draft_url the user can click to open the draft in Gmail. On 'send' success, response includes a tracking_id (1×1 pixel auto-injected for open-tracking). The From address is resolved server-side (5-level precedence: explicit from > user-token integration > user-token default > account default > account email) — do NOT fabricate a From address. Optional crm_deal_id links the message to a deal for future activity writeback. Requires active email provider OAuth connection.

createCampaign

Create a new campaign briefing. Use after collecting the 7 required fields via the campaign-briefing-playbook (search 'campaign-briefing-playbook' in playbook chapter to load the methodology). Sets status='draft'. Returns the created campaign id. NEVER call this without first running the playbook conversation — every campaign needs a complete briefing.

listCampaigns

List campaigns for the current user, optionally filtered by status. Returns campaign metadata plus per-stage lead counts.

getCampaign

Get a single campaign with full briefing details and lead-stage counts.

updateCampaign

Update fields on an existing campaign. Pass only the fields to change.

addCampaignLeads

Add one or more leads to a campaign. Standard fields (company_name, contact_email, etc.) go to typed columns. ANY OTHER FIELD you pass automatically gets stored in the metadata jsonb column — no schema migration needed for new fields. Examples of custom fields: booth_number, source_event, scanned_at, follow_up_priority, notes_from_call. Call getCampaignLeadFields first to discover what custom fields are already used in this campaign.

getCampaignLeadFields

Discover which fields are actually used in a campaign's leads. Returns standard columns with non-null values PLUS all metadata (custom) keys with usage counts and sample values. ALWAYS call this BEFORE asking the user about lead structure or before adding new custom fields — it tells you what's already established for this list.

updateCampaignLead

Update fields on an existing campaign lead. Pass lead_id (UUID from listCampaignLeads) and an updates object with only the fields to change. Use this to mark leads as rejected, manually correct enrichment data, or attach custom metadata. Setting lifecycle_stage='rejected' REQUIRES rejected_reason in the same call. The metadata field is shallow-merged into existing metadata jsonb — existing keys are preserved unless overwritten by the same key. Score/dim_*/icp_version_hash are NOT writable here (those come from scoreLeads). crm_external_id/crm_synced_at are NOT writable either (CRM-Sync owns those).

listCampaignLeads

List leads in a campaign, optionally filtered by lifecycle_stage or enrichment_status. Returns up to 100 per call.

setWorkingMemory

Store structured state for the current chat session. Use this to persist data that must survive history compression — wizard fields, suggestion lists, active entities. Three kinds: 'wizard' (multi-turn field collection), 'working_set' (ephemeral suggestion lists with TTL), 'pinned_entity' (durable context). Call this AFTER the user confirms a value, BEFORE moving to the next step. The state object replaces (not merges) — fetch first if you need to merge.

getWorkingMemory

Retrieve the current state for a (kind, key) in the current session. Returns null if not set. Use this when you need to merge into existing state or verify what's stored. NOTE: Active working memory entries are ALSO automatically injected into the system prompt by Build Messages — you usually don't need to call this manually. Only call when you need a specific record's full state on-demand.

createTask

Create a prioritized task. Provide the four ICE inputs (impact, confidence, effort_constraint, effort_nonconstraint); the DB computes ice_score. Show the inputs to the user for confirmation before calling.

listTasks

List tasks in the workspace, ranked by ICE (highest first). Optional filters.

getOpenTasks

Return the workspace's open/in-progress tasks ranked by ICE (highest priority first) plus the total open count. Call this at the START of any planning, prioritization, or 'what should I work on next' discussion to ground the conversation in current open tasks before advising.

updateTask

Update fields of a task. Partial update; status='done' sets done_at automatically. ice_score recomputes when impact/confidence/effort change.

setTaskWeights

Set the workspace effort weights (constraint vs non-constraint lane) and optional display labels. Re-stamps open tasks so their ICE re-ranks.

toggleStep

Hakt einen Step eines Tasks ab/an. done weglassen = flippen.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "growthkit revenue intelligence": {
            "growthkit": {
                "url": "https://mcp.growthkit.tools"
            }
        }
    }
}

McpServers

{
    "growthkit": {
        "url": "https://mcp.growthkit.tools"
    }
}

GrowthKit Revenue Intelligence — MCP Server

smithery badge <!-- GLAMA BADGE — nach dem ersten Glama-Crawl ersetzen. Den fertigen Badge-Markdown findest du auf deiner Glama-Server-Seite unter "Overview"/"Badge". Beispielform: Glama Bis dahin auskommentiert lassen, damit kein toter Link im README steht. --> > Sales intelligence for DACH & EU SMEs — lead scoring, ICP fit, CRM enrichment & writeback. GrowthKit Revenue Intelligence is a remote Model Context Protocol server that gives Claude, ChatGPT, Cursor and other MCP clients a persistent, structured GTM brain: a chaptered long-term marketing memory, ICP-based lead scoring, CRM enrichment, and — uniquely — strategy writeback into your CRM rather than just into a dashboard. It is built for owner-led B2B companies in the DACH/EU mid-market that don't have a dedicated GTM team to wire all of this together by hand. - Homepage: https://growthkit.tools/en/mcp - Server URL: https://mcp.growthkit.tools - Hosted: remote MCP over Streamable HTTP, OAuth 2.0 with PKCE. No local install. ---

Quick start

Add the server to any MCP-compatible client (Claude Desktop, Claude.ai, ChatGPT, Cursor, VS Code, Cline, …): ``json { "mcpServers": { "growthkit": { "url": "https://mcp.growthkit.tools" } } } ` On first connect you'll be taken through an OAuth screen. Paste your GrowthKit token (gk_…) to connect your own workspace, or click Try the demo to explore a read-only sample workspace — no signup required. Don't have a token yet? See plans & pricing: https://growthkit.tools/en/pricing ---

What it does

GrowthKit organises GTM knowledge into a chaptered memory (icp, strategy, campaigns, analytics, brand, competitors, learnings, pipeline, signals, playbook) and lets the assistant read and write that memory, score leads against your ICP, enrich companies and contacts, and push the result back into your CRM.

Capability areas

- Structured marketing memory — semantic search, batch embedding, auto-tagging, full version history with an audit trail. - ICP lead scoring — scores company/contact pairs against your ICP and surfaces the highest-fit leads, with per-dimension breakdowns and data-completeness filtering. - CRM read & writeback — search/create companies, contacts and deals; structured segment queries; notes and follow-up activities. (Twenty live; Pipedrive, HubSpot, Salesforce and others on the roadmap.) - Enrichment — company and person enrichment, contact discovery, email finding and verification. - Campaigns — create and manage campaign briefings, import and triage leads through their lifecycle. - Tasks & reminders — ICE-prioritised tasks and scheduled reminders. - Email — draft or send via your connected Gmail account (Microsoft 365 on the roadmap). - Guided playbooks — onboarding, ICP workshop, competitor analysis, campaign brief, content brief and weekly review (available on the Growth and Pro plans). > Discovery methods (
tools/list, prompts/list, resources/list) are open so > registries and inspectors can enumerate capabilities without authenticating. > Everything that touches your data is gated behind OAuth and role-/plan-based > access control. ---

Roles & access

Access is scoped by token type —
admin, team, view — with chapter-level read/write permissions, plus a read-only demo surface. Plan-gated features (such as the guided playbook bodies) additionally require a Growth or Pro plan. ---

Architecture

` MCP client ──▶ Cloudflare Worker (this repo) ──▶ Supabase Edge Functions ──▶ Postgres │ (EU / Frankfurt) └─ OAuth 2.0 (PKCE), role/plan gating, demo surface `` This repository contains the Cloudflare Worker that speaks the MCP protocol, handles the OAuth flow, enforces role- and plan-based access control, and routes tool calls to the GrowthKit backend. The backend itself (scoring logic, database, automation) is not part of this repository. EU-hosted (Supabase, Frankfurt). GDPR-aligned. ---

Links

- Website: https://growthkit.tools - MCP overview: https://growthkit.tools/en/mcp - Pricing: https://growthkit.tools/en/pricing - Smithery: https://smithery.ai/server/growthkit/revenue-intelligence --- <sub>GrowthKit is built in public. This repository is the MCP server surface only; the product backend and proprietary GTM logic live elsewhere.</sub>
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.