Skip to content

MCP Tool Reference

Reference for every tool the graph8 MCP server exposes. For setup and modes (dev / gtm / all), see the MCP Server page.

Tool counts per mode:

ModeCountIncludes
dev17Repo, install, scan, forms, KB, campaigns
gtm23Studio campaigns, KB, ICPs, personas, global context
all35+Every tool below (default for remote OAuth)

All tools accept JSON arguments and return a JSON-encoded string in the MCP response. Tools annotated as destructive create real records, send real messages, charge credits, or both — confirm with the user before invoking them.


Contacts

g8_search_contacts

Search contacts already in your CRM database. Read-only. Use this to find people you already know about — for prospecting new leads use g8_find_contacts.

Parameters

NameTypeRequiredDescription
emailstringnoExact match on work email
list_idstringnoFilter by contact list ID
namestringnoPartial match on first or last name
job_titlestringnoPartial match on job title
seniority_levelstringnoExact match (e.g. C-Suite, VP, Director, Manager)
company_namestringnoPartial match on company name
countrystringnoExact match on country
pageintegernoPage number, default 1
limitintegernoItems per page, default 50, max 200

Backs: GET /contacts. Returns a paginated list of contact records.

Example

{
"seniority_level": "VP",
"company_name": "acme",
"country": "US",
"limit": 25
}

g8_find_contacts

Search graph8’s open data index (700M+ contacts / 100M+ companies) for prospects you don’t have in your CRM yet. Read-only. Free on both PAYG and Platform within the 5 rps cap — there is no monthly cap on index-backed endpoints.

Parameters

NameTypeRequiredDescription
filtersarray of objectsyesEach filter is {field, operator, value}
pageintegernoDefault 1
limitintegernoDefault 25, max 200

Available filter fields: first_name, last_name, work_email, job_title, seniority_level, job_department, role, linkedin_url, city, state, country, company_name, company_domain, company_industry, company_employee_count, company_revenue, company_founded_year.

Operators: any_of, contains, all_of, none_of, is_empty, is_not_empty, between, exists.

Backs: POST /search/contacts.

Example

{
"filters": [
{"field": "seniority_level", "operator": "any_of", "value": ["VP", "Director"]},
{"field": "company_industry", "operator": "contains", "value": ["SaaS"]},
{"field": "company_employee_count", "operator": "between", "value": [50, 500]}
],
"limit": 50
}

g8_create_contact

Create a contact in your CRM. Use after g8_lookup_person to persist a prospect, or to add a contact manually. Returns the new contact_id (needed for g8_add_to_sequence and g8_add_to_list).

Parameters

NameTypeRequiredDescription
work_emailstringyesWork email address
first_namestringnoFirst name
last_namestringnoLast name
job_titlestringnoJob title
company_domainstringnoCompany domain (e.g. acme.com)
linkedin_urlstringnoLinkedIn profile URL
direct_phonestringnoDirect phone
mobile_phonestringnoMobile phone
seniority_levelstringnoSeniority (e.g. VP)
citystringnoCity
statestringnoState / province
countrystringnoCountry
list_idintegernoOptionally add to this list immediately

Backs: POST /contacts. Returns the contact record including contact_id.


g8_enrich_contacts

Enrich existing CRM contacts with third-party data via graph8’s multi-provider waterfall. Runs asynchronously and returns a job_id. Credits charged per contact.

Parameters

NameTypeRequiredDescription
contact_idsarray of integersyesCRM contact IDs to enrich
list_idintegeryesList the contacts belong to (required for job tracking)
modestringnolive (default — runs the enrichment + charges credits) or preview (dry-run, returns cost + provider plan without charging)
ai_group_idstringnoReuse an existing AI prompt group instead of creating a new one
providersarray of stringsnoOverride the default provider order. Allowed values: apollo, dropcontact, emaillistverify, graph8, hunter, icypeas, leadmagic, lusha, prospeo, rocketreach. Mutually exclusive with caller-supplied raw steps on the underlying config endpoint.
email_verificationbooleannoWhen true, attach ZeroBounce email verification (system credentials, valid_statuses=["valid"]) to the waterfall pipeline so deliverability is checked before the contact is marked enriched. Default false.

Behavior

  • When providers or email_verification is supplied, the tool first calls POST /enrichment/waterfall/configs to upsert a fresh waterfall config built from your overrides (BYOK fallback handled per provider), then dispatches the enrichment job.
  • When neither is supplied, the tool reuses the org’s existing active waterfall config for that column (creating the default graph8 lookup-person pipeline if none exists).

Backs: POST /enrichment/waterfall/configs (when overrides supplied) + POST /enrichment/waterfall/enrich.


Fields

g8_create_field

Create a custom column on a contact / company / account list. STRONGLY RECOMMENDED: pass enrichment_providers (or enrichment_email_verification=true) in the SAME call whenever the column is meant to hold enriched data (emails, phones, job titles, etc.). The companion waterfall config is provisioned in the same request so the UI Enrich button and g8_enrich_contacts work out-of-the-box.

If you skip the enrichment args, the column exists but isn’t runnable — g8_enrich_contacts and the UI Enrich button will both fail with 422 waterfall_config_missing. You’d then have to call POST /enrichment/waterfall/configs to repair it.

Parameters

NameTypeRequiredDescription
list_idintegeryesList the column belongs to
namestringyesDisplay name for the column (e.g. "Verified work email")
typestringyesColumn type: text, number, boolean, single_select, multi_select, date, url, email, phone
descriptionstringnoOptional column description
optionsarray of stringsnoRequired when type is single_select or multi_select
enrichment_providersarray of stringsnoWhen supplied, a companion waterfall config is created. Same allowed providers as g8_enrich_contacts.
enrichment_email_verificationbooleannoWhen true, the companion config also runs ZeroBounce email verification. Default false.
enrichment_namestringnoFriendly name for the waterfall pipeline. Defaults to a name derived from providers + verification flag.

Backs: POST /fields with optional nested enrichment block. When the enrichment block is included, the backend writes both dynamic_columns and enrichment_configs in the same request and the response includes both column_id and config_id.

Example — column only

{
"list_id": 123,
"name": "Lead temperature",
"type": "single_select",
"options": ["hot", "warm", "cold"]
}

Example — column + waterfall enrichment

{
"list_id": 123,
"name": "Verified work email",
"type": "email",
"enrichment_providers": ["hunter", "prospeo", "graph8"],
"enrichment_email_verification": true,
"enrichment_name": "Verified email waterfall"
}

Companies

g8_search_companies

Search companies already in your CRM. Read-only. For new prospects use g8_find_companies.

Parameters

NameTypeRequiredDescription
domainstringnoFilter by company domain
industrystringnoFilter by industry
namestringnoPartial match on name
pageintegernoDefault 1
limitintegernoDefault 50, max 200

Backs: GET /companies.


g8_find_companies

Search graph8’s open data index for companies you don’t track yet. Read-only, credits charged per record returned.

Parameters

NameTypeRequiredDescription
filtersarray of objectsyes{field, operator, value} filters
pageintegernoDefault 1
limitintegernoDefault 25, max 200

Filter fields: name, domain, industry, industry_group, employee_count, revenue, founded_year, country, state, city, linkedin_followers.

Operators: same set as g8_find_contacts.

Backs: POST /search/companies.


Enrichment & Lookup

g8_lookup_person

Look up a single person in graph8’s data index. Returns enriched data (verified email, phone, job title, company, confidence score). Costs 1 credit.

Provide at least one of: email, linkedin_url, or (first_name + last_name + company_domain).

Parameters

NameTypeRequiredDescription
emailstringconditionalPerson’s email
linkedin_urlstringconditionalLinkedIn profile URL
first_namestringconditionalCombine with last_name and company_domain
last_namestringconditional
company_domainstringconditionale.g. acme.com

Backs: POST /enrichment/lookup/person.


g8_lookup_company

Look up a single company. Returns revenue, headcount, industry, tech stack, funding, confidence score. Costs 1 credit.

Provide at least one of: domain or name.

Parameters

NameTypeRequiredDescription
domainstringconditionalCompany domain
namestringconditionalCompany name

Backs: POST /enrichment/lookup/company.


Lists

g8_get_lists

List contact and company lists in your CRM. Read-only.

Parameters

NameTypeRequiredDescription
pageintegernoDefault 1
limitintegernoDefault 50

Backs: GET /lists.


g8_create_list

Create a new empty contact or company list. Returns the list_id.

Parameters

NameTypeRequiredDescription
titlestringyesList name (e.g. "Enterprise Q2 Targets")
typestringno"contacts" or "companies" (default "contacts")

Backs: POST /lists.


g8_add_to_list

Add existing contacts (must already have contact_ids) to a list.

Parameters

NameTypeRequiredDescription
list_idintegeryesTarget list
contact_idsarray of integersyesContact IDs to add

Backs: POST /lists/{list_id}/contacts.


g8_build_contact_list

Search prospects and save matching results to a new list in one call. Free on both PAYG and Platform (within 5 rps) — save-to-list is part of the unlimited index bundle. Credits only deduct later when you enrich, send, or generate AI content on the saved records.

Parameters

NameTypeRequiredDescription
filtersarray of objectsyesSame filter format as g8_find_contacts
list_titlestringyesName for the new list
max_resultsintegernoCap on contacts saved (default 100)

Backs: POST /search/contacts/save.


Pipeline & CRM

g8_get_deals

List deals in your CRM with optional filters. Read-only.

Parameters

NameTypeRequiredDescription
pageintegernoDefault 1
limitintegernoDefault 50
stage_idstringnoFilter by stage
pipeline_idstringnoFilter by pipeline
searchstringnoFree-text search

Backs: GET /deals.


g8_get_deal

Get details for a single deal. Read-only.

Parameters

NameTypeRequiredDescription
deal_idstringyesDeal ID

Backs: GET /deals/{deal_id}.


g8_get_pipeline

List deal pipelines and their stages. Read-only. No parameters.

Backs: GET /deals/pipelines.


Tasks

g8_get_tasks

List tasks for the current organization. Read-only.

Parameters

NameTypeRequiredDescription
statusstringnoFilter by status
priorityintegernoFilter by priority
assignee_idstringnoFilter by assignee
searchstringnoFree-text search

Backs: GET /tasks.


g8_create_task

Create a task linked to a CRM contact.

Parameters

NameTypeRequiredDescription
contact_idintegeryesContact the task belongs to
titlestringyesTask title
descriptionstringnoTask description
due_datestringnoISO 8601 date string
assignee_idstringnoUser ID of assignee
priorityintegernoPriority value

Backs: POST /contacts/{contact_id}/tasks.


Activity & Notes

g8_get_activities

List recent CRM activities for the current organization. Read-only.

Parameters

NameTypeRequiredDescription
limitintegernoDefault 50
activity_typestringnoFilter by activity type
contact_idstringnoFilter by contact
company_idstringnoFilter by company
deal_idstringnoFilter by deal

Backs: GET /activities.


g8_create_note

Add a note to a CRM contact.

Parameters

NameTypeRequiredDescription
contact_idintegeryesContact to attach the note to
contentstringyesNote body

Backs: POST /contacts/{contact_id}/notes.


Sequences

g8_list_sequences

List available outbound sequences. Read-only. Use to find a sequence_id before calling g8_add_to_sequence.

Parameters

NameTypeRequiredDescription
pageintegernoDefault 1
limitintegernoDefault 50

Backs: GET /sequences.


g8_create_sequence

Create a new outbound sequence (drafted). Optionally include steps and channels.

Parameters

NameTypeRequiredDescription
namestringyesSequence name
user_emailstringyesOwner email
descriptionstringnoDescription
finish_on_replybooleannoDefault true
send_in_same_threadbooleannoDefault false
stepsarray of objectsnoEach step: {step_order, step_type, input_type, time_interval, step_data}
channelsarray of objectsnoEach channel: {channel_id, channel_value, channel_type}
campaign_idstringnoAI Studio campaign to link

Backs: POST /sequences.


g8_get_sequence_preview

Preview a sequence with steps and channels. Read-only — no enrollment.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence ID

Backs: GET /sequences/{sequence_id}/preview.


g8_update_sequence

Update sequence metadata. Cannot modify while in a transitional state.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence to update
namestringnoNew name
descriptionstringnoNew description
is_sharedbooleannoShared flag
finish_on_replybooleanno
send_in_same_threadbooleanno
wait_for_new_contactsbooleanno

Backs: PATCH /sequences/{sequence_id}.


g8_update_sequence_step

Update a single step in a sequence.

Parameters

NameTypeRequiredDescription
sequence_idstringyesParent sequence
step_idstringyesStep to update
step_dataobjectnoTemplate / content data
time_intervalintegernoDelay (seconds) after previous step
step_typestringnoEMAIL, PHONE, SMS, etc.
input_typestringnoON_DEMAND or TEMPLATE

Backs: PATCH /sequences/{sequence_id}/steps/{step_id}.


g8_add_to_sequence

Enroll contacts in an outbound sequence.

Parameters

NameTypeRequiredDescription
sequence_idstringyesFrom g8_list_sequences
contact_idsarray of integersyesCRM contact IDs
list_idintegeryesList the contacts belong to

Backs: POST /sequences/{sequence_id}/contacts.


g8_pause_sequence

Pause a live sequence — contacts in progress wind down.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence to pause

Backs: POST /sequences/{sequence_id}/pause.


g8_resume_sequence

Resume a paused sequence.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence to resume

Backs: POST /sequences/{sequence_id}/resume.


g8_get_sequence_analytics

Get overview, performance, engagement, timeline, and contact distribution for a sequence. Read-only.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence ID

Backs: GET /sequences/{sequence_id}/analytics.


g8_delete_sequence

Soft-delete (archive) a sequence. Sets is_archived=true. Hidden from UI and excluded from worker processing.

Parameters

NameTypeRequiredDescription
sequence_idstringyesSequence to archive

Backs: DELETE /sequences/{sequence_id}.


Inbox

Multi-channel inbox covering email, SMS, and LinkedIn. Each tool accepts an optional channel (email / sms / linkedin, default email).

g8_list_inbox

List inbox threads across channels. Read-only.

Parameters

NameTypeRequiredDescription
channelstringnoemail, sms, linkedin, or omit for all
sequence_idstringnoFilter by sequence/campaign
statusstringnoFilter by status
assigneestringnoAssignee email
tagstringnoTag ID
pageintegernoDefault 1
page_sizeintegernoDefault 50, max 200

Backs: GET /inbox.


g8_get_reply

Get a single inbox thread with full message history. Read-only.

Parameters

NameTypeRequiredDescription
reply_idstringyesThread / reply ID
channelstringnoDefault "email"

Backs: GET /inbox/{reply_id}.


g8_assign_reply

Assign a user to an inbox thread.

Parameters

NameTypeRequiredDescription
reply_idstringyesThread / reply ID
assignee_emailstringyesUser to assign
channelstringnoDefault "email"

Backs: POST /inbox/{reply_id}/assign.


g8_tag_reply

Attach tags to an inbox thread.

Parameters

NameTypeRequiredDescription
reply_idstringyesThread / reply ID
tag_idsarray of stringsyesTag IDs
channelstringnoDefault "email"

Backs: POST /inbox/{reply_id}/tag.


g8_get_reply_draft

Generate an AI draft reply for a thread. Charges credits. Returns HTTP 402 if the org has insufficient credits.

Parameters

NameTypeRequiredDescription
reply_idstringyesThread / reply ID
channelstringnoDefault "email"

Backs: GET /inbox/{reply_id}/draft.


g8_send_reply

Send a reply through the specified channel.

Parameters

NameTypeRequiredDescription
reply_idstringyesThread to reply to
bodystringyesMessage body
channelstringyesemail, sms, or linkedin
subjectstringnoEmail subject (email channel)
tostringnoRecipient (email / phone / LinkedIn ID)
from_addressstringnoSender mailbox / phone / LinkedIn account

Backs: POST /inbox/{reply_id}/send.


Audience Sync

Push graph8 audience lists to ad platforms (Meta, LinkedIn, Google, X).

g8_list_audience_syncs

List all audience sync configurations. Read-only. No parameters.

Backs: GET /audience-syncs.


g8_create_audience_sync

Create a new audience sync. Returns 409 if a sync already exists for the same audience + platform.

Parameters

NameTypeRequiredDescription
audience_idintegeryesAudience list ID
platformstringyesmeta, linkedin, google, or x
modestringnomirror (add+remove) or append_only (default mirror)
refresh_cadence_hoursintegernoDefault 24
platform_audience_namestringnoCustom name on the platform

Backs: POST /audience-syncs.


g8_get_audience_sync

Get a single sync configuration. Read-only.

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID

Backs: GET /audience-syncs/{config_id}.


g8_update_audience_sync

Update sync config (mode, cadence, active flag).

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID
modestringnomirror or append_only
refresh_cadence_hoursintegerno
is_activebooleannoEnable / disable

Backs: PATCH /audience-syncs/{config_id}.


g8_delete_audience_sync

Soft-delete a sync configuration. The audience on the ad platform is not deleted — manage that on the platform directly.

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID

Backs: DELETE /audience-syncs/{config_id}.


g8_trigger_audience_sync

Manually push the latest audience members to the ad platform now.

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID

Backs: POST /audience-syncs/{config_id}/trigger.


g8_get_audience_sync_runs

Get sync run history with status, member counts, and timing. Read-only.

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID
limitintegernoDefault 20, max 100

Backs: GET /audience-syncs/{config_id}/runs.


g8_get_audience_sync_errors

Get failed sync runs with error messages. Read-only.

Parameters

NameTypeRequiredDescription
config_idintegeryesSync config ID
limitintegernoDefault 20, max 100

Backs: GET /audience-syncs/{config_id}/errors.


CRM Sync

Push contacts, companies, and list memberships to external CRMs (HubSpot, Salesforce, Pipedrive, Zoho, SugarCRM).

g8_list_crm_syncs

List configured CRM integrations and their connection status. Read-only. No parameters.

Backs: GET /crm-syncs.


g8_push_to_crm_contact

Push contacts to an external CRM.

Parameters

NameTypeRequiredDescription
providerstringyeshubspot, salesforce, pipedrive, zoho, or sugarcrm
recordsarray of objectsyesContact records (each a dict of contact fields)

Backs: POST /crm-syncs/{provider}/contacts/push.


g8_push_to_crm_company

Push companies to an external CRM.

Parameters

NameTypeRequiredDescription
providerstringyesCRM provider
recordsarray of objectsyesCompany records

Backs: POST /crm-syncs/{provider}/companies/push.


g8_push_to_crm_list

Modify CRM list memberships (add/remove contacts from lists). Each record contains list_id, add_contact_ids, remove_contact_ids.

Parameters

NameTypeRequiredDescription
providerstringyesCRM provider
recordsarray of objectsyesMembership operations

Backs: POST /crm-syncs/{provider}/lists/push.


g8_get_crm_fields

Discover available fields for an entity type on a CRM provider — useful for building field mappings before pushing data. Read-only.

Parameters

NameTypeRequiredDescription
providerstringyesCRM provider
entity_typestringnocontacts (default), companies, leads, deals

Backs: GET /crm-syncs/{provider}/fields.


g8_get_crm_status

Check connection health for a CRM provider. Read-only.

Parameters

NameTypeRequiredDescription
providerstringyesCRM provider

Backs: GET /crm-syncs/{provider}/status.


Tool Annotations

Every MCP tool carries one of two annotation presets that hint at side effects:

AnnotationMeaning
readOnlyHint=true, idempotentHint=trueSafe to call repeatedly. No writes, no credits, no external delivery.
destructiveHint=true, openWorldHint=trueWrites to your CRM, sends messages, pushes to external systems, or charges credits. Confirm with the user before invoking.

Tools without an explicit annotation (e.g. g8_create_contact, g8_create_list, g8_add_to_list, g8_create_task, g8_create_note, g8_assign_reply, g8_tag_reply, g8_create_audience_sync, g8_update_audience_sync) still write data — they just aren’t tagged as destructive in the MCP layer. Treat any tool that creates or modifies records as a write.


See Also