
GrowthKit MCP server
Which MCP servers are GrowthKit's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.
read 2026-10-26
- Registry nametools.growthkit/revenue-intelligenceverified in the MCP registry
The registry name sits under growthkit.tools. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.
- Stateanswerschecked 2026-10-26
- Tools74
- Server calls itselfgrowthkit-mcp
- Server version1.12.2
- Protocol version2025-11-25
On 2026-10-26 the server answered initialize and tools/list without a sign-in. First answer in 95 ms.
- Whether its tools do the product's job has not been judged yet.
- Checked on 2 of the 7 days it takes to judge reliability.
Once connected
- Keep approval on for sendNotification: they delete, send or pay without saying so.
- updateMemory, deleteMemories, uploadDocument, deleteDocument, createReminder change data without a sign-in: anyone with the address can call them.
- Its definitions take about 18802 tokens of context: enable only the tools a task needs.
Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.
- INITE MCP scoreafter a weeka score needs 7 daily checks: 2 so far
- Answeredmeasuring2 of the 7 daily checks it takes to print a share
- Median first answer148 ms
- Space in an agent's context≈ 18,802 tokensthe definitions of all its tools (74), which an agent carries on every turn
- Tool definitionsA · 100 of 100
- Typed results6 of 74 toolsdeclared outputSchema: results come typed, read once
- Every tool passes all six checks.
Worth a look
- Tools that delete, send or pay, marked as not destructive: sendNotification
- Tools that change data, on a server that answers without a sign-in: updateMemory, deleteMemories, uploadDocument, deleteDocument, createReminder
A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →
embedMemoryStore 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…
searchMemorySearch 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…
listMemoriesList stored memories in stored order with pagination. Unlike searchMemory (semantic relevance ranking), use this to browse, enumerate, or audit a chapter — not to find the most relevant memory for a question. Filter by chapter via…
updateMemoryUpdate 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.
deleteMemoriesDelete 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.
clearMemoriesDelete ALL memories. Irreversible. Always ask for explicit confirmation. You MUST provide a change_reason.
countMemoriesReturn only counts, not content — use for overview/sizing (e.g. 'how many competitor memories exist?') before deciding whether to list or search. Optionally filter by chapter via metadata_filter.chapter. For a per-chapter breakdown in one…
getChapterOverviewGet memory count per chapter. Use as FIRST STEP in new conversations or reviews.
uploadDocumentUpload a file to GrowthKit document storage. Optionally extracts text and embeds insights.
listDocumentsList stored documents with optional filtering by category or chapter.
getDocumentGet a specific document with fresh download URL and linked insights.
deleteDocumentDelete a document and its associated insights. Irreversible — always confirm with the user first.
createReminderSchedule a reminder. Convert relative times to ISO 8601.
listRemindersList reminders, ordered by remind_at ascending. By default returns only pending reminders; pass status=sent|cancelled|all to widen. Optionally scope to one task via task_id. Returns each reminder's id, title, remind_at, and status.
cancelReminderCancel a pending reminder by ID.
getHistoryGet the version history of a specific memory. Shows all previous versions with timestamps and who made changes.
restoreVersionRestore a memory to a previous version. Works for both existing and deleted memories. Use version_id from getHistory or listDeleted results.
listDeletedList recently deleted memories that can be restored. Shows content preview and deletion info.
listTeamList all team members (token holders) for your account. Shows display names, roles, and identifies which token is yours.
sendNotificationSend a notification to a team member. First use listTeam to find the recipient. For 2-person teams, the recipient is auto-resolved.
checkNotificationsCheck for unread notifications (direct messages and broadcasts).
crmSearchCompanySearch CRM for a company by name. ALWAYS search before creating to avoid duplicates.
crmGetCompanyGet full company details by ID. Returns name, domain, industry, employees, address, CRM link.
crmCreateCompanyCreate a new company. ALWAYS search first to avoid duplicates.
crmGetCompanyDealsGet all deals linked to a company, by company ID. Use after crmSearchCompany or crmGetCompany to review that company's pipeline.
crmGetCompanyContactsGet all contacts linked to a company, by company ID. Use to find who to reach at a known company.
crmSearchContactSearch CRM for a contact by name or keyword (fuzzy match); returns the top matches. Use to look up one known person. For structured segment queries across the contact base (e.g. 'all CEOs in pipeline companies'), use crmListPeople instead.
crmListCompaniesList 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…
crmListPeopleList people/contacts from CRM with structured filters. Use for segment queries like 'all CEOs in pipeline companies'. All filter fields optional. Unlike crmSearchContact (fuzzy lookup of one person by name), this does precise structured…
crmGetContactGet full contact details by ID.
crmCreateContactCreate a new contact. ALWAYS pass company_id when the company exists.
crmGetPipelinesGet all pipelines with stages. ALWAYS call before creating deals to get valid stage_id.
crmCreateDealCreate a new deal. Requires title + stage_id. MUST call crmGetPipelines first.
crmUpdateDealUpdate a deal. Use generic names: company_id, contact_id, expected_close.
crmGetDealGet the full record for one deal by ID. Use after a search or list returns a deal id when you need its complete details.
crmAddNoteAdd a note to a CRM record — a deal, company, or contact. Provide content (HTML supported) and at least one target id (deal_id, company_id, or contact_id). Use to log call summaries, context, or decisions against the record.
crmCreateActivityCreate a follow-up activity on a CRM record. Provide a subject and set type (call | meeting | task | email | deadline; default task). Optionally link it to a deal, company, or contact and set a due_date (YYYY-MM-DD). Use to schedule next…
crmCheckConnectionCheck if CRM is connected and which provider is active.
enrichCompanyGet company info by domain or name. Returns industry, employees, revenue, location, technologies. Prefer `domain` — it is unambiguous; a name matches whatever the provider thinks it means. `domain_unresolved` is not a provider failure…
enrichPersonGet person profile from email or LinkedIn URL.
findContactsFind contacts at a company. Filter by seniority or department.
findEmailFind one person's email by name + domain.
verifyEmailCheck if an email is deliverable. Use before outreach.
discoverSimilarFind lookalike companies for a seed and re-rank them by fit. mode='account' (seed={domain}) finds companies similar to that domain via Hunter similar_to; mode='icp' (no seed) discovers companies matching your saved ICP; mode='won_deals'…
scoreLeadsTrigger ICP lead scoring. Two independent modes — choose by WHERE the leads live, they do not overlap. (1) CAMPAIGN MODE — mode='campaign' plus campaign_id: scores the leads of one campaign (campaign_leads). Use this whenever the request…
getTopLeadsRetrieve 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…
email_composeCompose 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…
createCampaignCreate 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…
listCampaignsList campaigns for the current user, optionally filtered by status. Returns campaign metadata plus per-stage lead counts.
getCampaignGet a single campaign with full briefing details and lead-stage counts.
updateCampaignUpdate fields on an existing campaign. Pass only the fields to change. Use `scoring` to give THIS campaign its own lead-scoring profile — without it the campaign is scored against the user's global ICP, which is wrong whenever the…
addCampaignLeadsAdd 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…
getCampaignLeadFieldsDiscover 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…
updateCampaignLeadUpdate 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…
listCampaignLeadsList leads in a campaign, optionally filtered by lifecycle_stage or enrichment_status. Returns up to 100 per call. Compact rows by default — id, company name, domain, score, fit_gate, strong_signals, has_email, has_phone, lifecycle_stage…
getCampaignLeadOne campaign lead with everything stored about it: contact, company, score, lifecycle_stage, metadata and the complete enrichment_data. That is where you answer why a contact was chosen and who else was found: enrichment_data.persona…
pipelineStatusShow where a campaign's leads stand in the qualification chain. Returns the funnel (how many leads have a domain, firmographics, a score, a signal, an email, a phone), how many candidates each stage currently has, and the top 10 leads by…
pipelineRunRun ONE stage of the qualification chain for the next N candidates. Stages in order: resolve → score → signals → reveal → rescore; rerank follows reveal and re-judges the contacts that are already there. ALWAYS call with dry_run=true…
listLeadSignalsList the stored why-now signals for one lead or for a whole campaign: `id` (the signal_id that updateLeadSignal and deleteLeadSignal take), type (funding, hiring, job_change, leadership, acquisition, expansion, tech_change, regulatory…
updateLeadSignalCorrect ONE stored why-now signal in place. signal_id is the `id` of a signal from listLeadSignals — call that with active_only=false to also see expired signals. updates carries only the fields to change: type, signal, source_url…
The first 60 of 74, as the server listed them.
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"revenue-intelligence": {
"type": "http",
"url": "https://mcp.growthkit.tools"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http growthkit https://mcp.growthkit.toolsclaude.ai, ChatGPT and other clients: add https://mcp.growthkit.tools as a custom connector in the settings.
Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.
Cookies
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.