Skip to Content
MCPPrompting guide

Prompting guide

Your AI picks the tool, fills the parameters, and decides how many times to run. A vague prompt gets a wrong tool, an empty result, or a large credit bill. A strict one gets exactly the rows you asked for.


Best practices

  • Break it down step by step. When the job needs several tools, write a Goal: line and then number the steps. One step, one tool, one output. “Pull my CRM contacts and get their emails” is three tools in one sentence and the model will guess the boundaries; numbered, it cannot. Put a stop point on any step that spends credits or writes to a system of record.
  • Link the docs page for the tool. Paste the URL in the prompt — “parameter reference: https://docs.syncgtm.com/mcp_server/tools/find_companies, read it before you call the tool”. The client fetches the page and fills the real parameter names and value formats instead of inventing company_size or location. Every tool has one at docs.syncgtm.com/mcp_server/tools/<tool_name>.
  • Start from our optimized skill files, not a blank prompt. Each GTM agent  ships a SKILL.md with the tool named, the filters set, the result count capped and the credit check already in it. Install it, run it by slash command, and there is no prompt to get wrong. See Start from a GTM agent.
  • Name the tool you want. Say find_people, not “search LinkedIn”. Several tools look similar to the model, and the wrong pick still costs credits. The full list is in Tools.
  • Spell out every filter. Title, seniority, headcount, location, industry — if you didn’t say it, it wasn’t applied. “Heads of sales” is a guess; current_titles: ["Head of Sales", "VP Sales"] is a filter.
  • State the exclusions too. Titles to drop, countries to skip, companies you already own. Cheaper than filtering the output afterwards.
  • Cap the result count. Most search tools return 25 by default and up to 100 per call, and cost scales per result. Say “return 25” so the model doesn’t page through more than you wanted.
  • Chain in the right order. Search tools return profiles, not contact details — pass their output into find_work_email, then verify_email.
  • Ask for the raw output. Tell your AI to return the tool’s fields as a table or CSV. Left to itself it will summarize, and you lose the columns you paid for.

If the answer arrives instantly and no credits are charged, the model answered from memory instead of calling a tool. Re-prompt with the tool name and “use the Sync GTM MCP server”. More fixes in Common issues.


Good and bad prompts

Four pairs. Same intent each time — the difference is only in how it is written.

1. One search — vague vs strict

Bad — wrong tool, unbounded results, two jobs in one line:

Find me some sales leaders at SaaS companies and get their emails.

Nothing here is a filter. “Sales leaders” is not a title list, “SaaS” is not an industry string, there is no cap, and “get their emails” silently authorises a second tool on every row that comes back.

Good — one tool, explicit filters, capped, enrichment held back:

Use the Sync GTM MCP find_people tool. current_titles: ["Head of Sales", "VP Sales", "CRO"] seniority_levels: ["c_suite", "vp"] current_company_headcount_ranges: ["51-200", "201-500"] current_company_countries: ["United States"] industries: ["Computer Software"] Return 25 results as a table: name, title, company, LinkedIn URL. Do not enrich emails yet.

2. A multi-step workflow — one blob vs numbered steps

Bad — one sentence, three systems, no boundaries:

Sync my ActiveCampaign contacts with Sync GTM and get everyone's emails updated.

No filter, so it pulls every contact in the account. No cap, so the credit bill is whatever the list size happens to be. No verification, so unverified addresses go straight into the CRM. And no gate before the write-back, so the first thing you see is the damage.

Good — a goal line, then one step per tool:

Goal: pull contacts from ActiveCampaign > find their work emails using the Sync GTM MCP > update them back into ActiveCampaign. Step 1 — ActiveCampaign: pull contacts created after 2026-07-01, in the list "Q3 Inbound", where the email field is empty. Return contact ID, first name, last name, company domain, LinkedIn URL. Show me the count and stop. Step 2 — Sync GTM find_work_email on each contact from step 1. Pass linkedin_url where we have one, otherwise first name, last name and domain. 1 credit per lookup — confirm the total with me before running. Step 3 — verify_email on every address returned. Keep valid and catch_all only. Tell me how many were dropped and why. Step 4 — ActiveCampaign: update each contact by ID with its verified email. Update only — do not create new contacts. Report how many were updated.

Two things make this work. Step 1 is a filter, not a dump — swap in whichever narrowing your CRM supports: added after a date, inside a specific list or segment, matching certain titles, missing an email, missing a phone. Step 2 is a slot — the rest of the shape holds whether you put find_work_email, find_mobile_number, find_linkedin_from_work_email or linkedin_profile_posts in it.

The same four-step shape covers HubSpot, Attio, Salesforce, Instantly, Smartlead and Google Sheets — anything you have connected as a second MCP server. Only step 1 and step 4 change.

Bad — reads fine to a human, and the model has to invent every field name:

Find fintech companies with 200 to 500 people and over $5M revenue.

You get invented parameters (company_size, revenue, location), an industry string that is not in the LinkedIn taxonomy, and either an empty result or a result where half your filters were quietly dropped.

Good — point at the reference page and make it read it first:

Use find_companies. Parameter reference: https://docs.syncgtm.com/mcp_server/tools/find_companies Read that page first and use the exact parameter names and value formats from it — do not guess field names. categories: ["fintech"] employee_count_ranges: ["201-500"] min_revenue_usd: 5000000 countries: ["United States"] limit: 25 Return company_name, primary_domain, employee count, revenue band.

Every tool has a page at docs.syncgtm.com/mcp_server/tools/<tool_name> listing its parameters, accepted values and credit cost — the index is at Tools. Paste the URL for whichever tool you are calling; clients that can browse will read it, and clients that cannot still get the tool name right.

4. A blank prompt vs a skill file

Bad — the whole workflow re-typed from memory, slightly differently each time:

ok do the lead list thing again like last week but for fintech this time

Good — run the optimized skill and override only what changed:

Run /mcp-people-search for Heads of Revenue Operations at US fintech companies, 201-500 employees. Cap at 25. Show me the filters and the credit estimate before you spend anything.

The skill file already carries the tool name, the parameter shapes, the cap and the credit check, so there is nothing left to get wrong in the prompt. Grab them from Sync GTM GTM agents  — 87 of them, one per job, free.


Worked lead-sourcing prompts

Five shapes that cover most sourcing requests. Each one is copy-paste — change the filter values, keep the structure.

Decision-makers across a list of companies

find_people takes a list of domains in one call, so a known account list is one request rather than one per company. It bills 0.5 per result, so cap limit rather than letting it page.

Use find_people. current_company_domains: [the domains below] current_titles: ["VP Sales", "Head of Sales", "CRO", "VP Revenue", "Head of Revenue Operations", "Head of GTM"] limit: 25 Return: company, domain, name, title, LinkedIn URL. Mark any company where nothing came back. Do not enrich emails yet.

Recently funded companies, by industry and region

Use find_companies. industries: ["Construction", "Financial Services"] exclude_industries: ["Staffing and Recruiting"] countries: ["United States", "Canada"] last_fundraise_after: "2026-05-01" last_funding_round_types: ["seed", "series_a", "series_b"] employee_count_ranges: ["51-200", "201-500"] limit: 25 Return company_name, primary_domain, last round and date. Stop after one page and report credits used.

Dates are YYYY-MM-DD — “last three months” will not parse. industries must be the exact LinkedIn string: “Financial Services”, not “Finance” or “Fintech”. Industry reference list .

Accounts first, then the buyers inside them

Two tools in sequence, with a review gate between them.

Step 1 — find_companies. industries: ["Financial Services", "Banking", "Capital Markets"] categories: ["fintech"] countries: ["United States", "United Kingdom"] employee_count_ranges: ["201-500", "501-1000"] limit: 20 Show me that list and stop. Step 2 — on my go-ahead, find_people with those domains in current_company_domains. current_titles: ["Head of Procurement", "VP Finance", "Head of Finance", "Financial Controller", "Head of Payments"] limit: 40 Return company, name, title, LinkedIn URL. No enrichment yet.

Local businesses with contact details

Local firms are not in a B2B database. Source from Maps, then scrape the sites.

1. google_maps_listings — query "restaurants", location "Sydney, Australia", max_results 50. 2. Drop every listing with no website. Tell me how many survived. 3. scrape_emails_from_website on each survivor — 0.5 credits each, confirm the total before starting. 4. Split into named addresses and role addresses (info@, bookings@). verify_email on the named ones only. 5. Return a CSV. Leave blanks where nothing was published — do not guess.

Companies on a given technology, within a revenue band

The reverse tech-stack search does not exist yet. find_company_techstack goes domain → stack; stack → companies is on the coming soon list. Source on filters that do exist, then confirm the stack per company.

Step 1 — find_companies. min_revenue_usd: 1000000 max_revenue_usd: 10000000 industries: ["Retail", "Consumer Goods"] countries: ["United States"] limit: 50 Step 2 — find_company_techstack on each domain returned. 1 credit each, so up to 50 credits — confirm with me first. Step 3 — keep only companies whose stack includes Shopify or Shopify Plus. Tell me the hit rate out of the 50.

How to exclude companies and profiles you already have

There is no exclude-by-domain parameter on find_companies, and no exclude-by-profile on find_people. Exclusion happens in two places, and only one of them is free.

In the tool. Free, and it applies before anything is returned:

ToolParameterDrops
find_companiesexclude_industriesWhole industries — agencies, staffing, consultancies
find_peopleexclude_current_titlesTitles you never sell to
company_job_listingsjob_title_excludeRoles you do not care about
search_linkedin_job_openingsexclude_recruiting_agencies, company_excludeAgency posts, named companies

In the conversation. For your own customers, open deals and anyone already sequenced. Give your AI the exclusion list first, then have it filter the results — the list itself can be a CSV you attach, a column pulled from your CRM, or domains pasted straight into the prompt.

Match on a unique identifier, never on a name. Company names and person names collide constantly — “Apex”, “Nova Health”, three different Sarah Chens. Two identifiers are safe:

ExcludingMatch onNot on
Companiesprimary_domain — root domain, lowercase, no www., no https://Company name, LinkedIn slug, brand
PeopleLinkedIn profile URL — normalised to linkedin.com/in/<slug>Full name, email, job title

Attach a CSV of domains:

Attached: suppression.csv — one column, "domain", 480 rows. Load it as my exclusion list. Normalise to root domain, lowercase, strip www. and any protocol. find_companies — industries ["Financial Services"], countries ["United States"], employee_count_ranges ["201-500"], exclude_industries ["Staffing and Recruiting"], limit 100. Drop every result whose primary_domain appears in suppression.csv. Tell me how many were dropped and name them. Return only what remains.

Or paste the list inline when it is short:

Exclusion list — skip these domains entirely: stripe.com, brex.com, ramp.com, mercury.com, navan.com find_companies — categories ["fintech"], countries ["United States"], employee_count_ranges ["201-500"], limit 50. Drop anything whose primary_domain is on that list before you show me results, and tell me which ones you dropped.

Or pull the list live from your CRM when it changes daily:

1. Pull every company domain already in HubSpot with lifecycle stage Customer, Opportunity or Disqualified. Hold that as my exclusion list. 2. find_companies — industries ["Financial Services"], countries ["United States"], employee_count_ranges ["201-500"], exclude_industries ["Staffing and Recruiting"], limit 100. 3. Drop every result whose primary_domain is in the exclusion list. Tell me how many were dropped and name them. 4. Return only what remains.

For people, the same three shapes work — the identifier is the LinkedIn profile URL:

Attached: already-contacted.csv — column "linkedin_url", 1,200 rows. Before enriching anyone: normalise every LinkedIn URL on both sides to linkedin.com/in/<slug> (drop the protocol, www, trailing slash and any ?query), then drop every profile that matches a row in that file. Report the count dropped, then run find_work_email on what is left only.

Put the dedupe step above the enrichment step. Filtering costs nothing; running find_work_email on 40 people you already own costs 40 credits and teaches you nothing.

Always ask for the dropped count back. If it comes back as zero on a list you know overlaps, your two sides are formatted differently — https://www.acme.com/ does not match acme.com, and linkedin.com/in/jane-doe-1a2b3c/ does not match www.linkedin.com/in/jane-doe-1a2b3c. Say “normalise both sides first” and re-run.


Not sure how to phrase it?

Two ways out.

Option 1 — have your AI write the prompt.

You have the Sync GTM MCP server connected. Read the available tools and their parameters, then write me a prompt that will [describe your goal]. List which filters you'll set and what it will cost in credits before running anything.

Then read the filters it picked, correct the ones that are wrong, and run it.

Option 2 — use Sync GTM recommended skills. 87 of them on the GTM agents page , each already scoped to one job: the tool is named, the filters are set, the result count is capped. Download the skill file, add it to Claude, then run it by name:

Use the Sync GTM recommended skills — run /lead-list-builder for [describe your ICP]. Show me the filters before you spend any credits.

No prompt-writing, and no wrong-tool credit burn. See Start from a GTM agent below.


Start from a GTM agent

Skip prompt-writing altogether — the Sync GTM agents  are the recommended skills, already scoped to the right tools and filters:

  • Lead List Builder — build a filtered list of people from an ICP description
  • Contact Finder — find and verify work emails for a list you already have
  • ICP Qualifier — score accounts against your ideal customer profile
  • Hiring Signal Tracker — surface accounts opening relevant roles
  • Prospect Researcher — brief on one person before a call

Browse all GTM agents →


Where to next


Keep learning

Two courses take these tools past the reference page — clustered by GTM job, then chained into workflows.