Introduction

The GTM stack your agent is missing

Your AI agent can write outreach, schedule meetings, and qualify leads. But the moment it needs real data — a prospect’s LinkedIn URL, a verified email, evidence that a company is hiring SDRs, follower spikes on TikTok — it stalls. Stitching together RapidAPI calls, scraping rules, SMTP verifiers, and rate-limit logic is a project in itself.

GTM Tools is a monorepo of MCP servers that exposes that stack as a handful of tool calls. Every tool is metered in tokens, billed centrally, and reachable via MCP, REST, or CLI — so you focus on the agent loop, not the plumbing.

What is GTM Tools?

GTM Tools is a pnpm monorepo with four servers, each behind its own subdomain:

ServerSubdomainWhat it does
admin-toolsadmin.gtm-engine.shAPI keys, token balance, Stripe top-ups, auto-reload, invoices
socials-toolssocials.gtm-engine.shLinkedIn automation — search, profiles, companies, posts, jobs, DMs
data-toolsdata.gtm-engine.shProfessional email finding — SMTP-verified via Reacher
signals-toolssignals.gtm-engine.shBuying-intent signals — hiring, Trustpilot, social spikes, tech stack

Each server is independent (its own deploy, its own tools.json) but shares one auth boundary (@mcp-tools/shared) and one billing wallet. New accounts get 100 free tokens to start.

Three ways in

1

MCP

Point an MCP-compatible client (Claude Desktop, Cursor, Windsurf) at the server URL with your bearer token. Tools appear in your agent’s tool list automatically.

1{
2 "mcpServers": {
3 "socials-tools": {
4 "url": "https://socials.gtm-engine.sh/mcp",
5 "headers": { "Authorization": "Bearer <your-api-key>" }
6 }
7 }
8}
2

REST

Every tool is reachable as POST /api/v0/{tool_name} on its server’s subdomain. Same JSON body, same auth header, no MCP overhead.

$curl -X POST https://socials.gtm-engine.sh/api/v0/get_linkedin_company_url \
> -H "Authorization: Bearer $GTM_ENGINE_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"domain": "siena.cx"}'
3

CLI

A single gtm-tools binary fronts every server.

$gtm-tools socials company-url siena.cx
$gtm-tools signals detect gymshark.com
$gtm-tools admin balance

What your agent can do

1. Provision auth and billing

get_api_key provisions a key via email verification. get_token_balance checks the wallet, buy_tokens tops up via Stripe (1=100tokens,1 = 100 tokens, 5 minimum), set_auto_reload charges the saved card when the balance dips below a threshold, and list_invoices returns the history. New accounts get 100 free tokens.

2. Find and act on LinkedIn

The most common starting point is get_linkedin_company_url — feed it a domain and it returns the company’s LinkedIn page. From there, list_linkedin_company_employees searches the workforce with boolean title filters ("(CEO OR CTO OR Founder) NOT intern"), get_linkedin_profile_url resolves a name + company to a profile, and get_linkedin_profile / get_linkedin_company fetch the full structured records. Once you’ve found the right person, send_linkedin_invitation and send_linkedin_message close the loop. connect_linkedin and list_connected_linkedin_accounts manage the underlying browser sessions.

3. Verify professional emails

get_email takes a name + domain and returns a deliverable email. It generates every common pattern (first@, first.last@, flast@, etc.) and verifies each against the domain’s mail server via SMTP — no mail actually sent. Catch-all domains are flagged in the response so your agent knows when to trust the result.

4. Detect buying signals

detect_signal runs every signal in one call. The individual detectors live alongside it: signal_socials_spike (Instagram/TikTok follower jumps), signal_hiring_role / signal_hiring_support / signal_hiring_sales_rep / signal_hiring_sales_leadership / signal_hiring_sales_rep_repost (job-board scans, including reposted SDR roles as a churn signal), signal_trustpilot_negative_reviews / signal_trustpilot_negative_support_reviews / signal_trustpilot_positive_reviews, and signal_technologies_identified (stack detection on the website). set_signals_order / get_signals_order configure execution order.

Quick example

1// 1. Find the LinkedIn page from a domain
2const company = await fetch("https://socials.gtm-engine.sh/api/v0/get_linkedin_company_url", {
3 method: "POST",
4 headers: {
5 "Authorization": `Bearer ${process.env.GTM_ENGINE_API_KEY}`,
6 "Content-Type": "application/json",
7 },
8 body: JSON.stringify({ domain: "siena.cx" }),
9}).then(r => r.json());
10
11// 2. Search senior decision-makers
12const employees = await fetch("https://socials.gtm-engine.sh/api/v0/list_linkedin_company_employees", {
13 method: "POST",
14 headers: {
15 "Authorization": `Bearer ${process.env.GTM_ENGINE_API_KEY}`,
16 "Content-Type": "application/json",
17 },
18 body: JSON.stringify({
19 domain: "siena.cx",
20 title_filters: "(CEO OR CTO OR Founder) NOT intern",
21 limit: 10,
22 }),
23}).then(r => r.json());
24
25// 3. Verify a professional email
26const email = await fetch("https://data.gtm-engine.sh/api/v0/get_email", {
27 method: "POST",
28 headers: {
29 "Authorization": `Bearer ${process.env.GTM_ENGINE_API_KEY}`,
30 "Content-Type": "application/json",
31 },
32 body: JSON.stringify({ name: "Justin Mares", domain: "kettleandfire.com" }),
33}).then(r => r.json());
34// → { "email": "justin@kettleandfire.com", "is_catch_all": false, ... }

Same flow from the CLI:

$gtm-tools socials company-url siena.cx
$gtm-tools socials employees https://linkedin.com/company/siena --filter "(CEO OR CTO) NOT intern"
$gtm-tools signals detect gymshark.com

Available tools

Admin

ToolTokensDescription
ping0Health check
get_api_key0Provision an API key via email verification
get_token_balance0Check your token balance and per-tool costs
buy_tokens0Purchase tokens via Stripe (1=100tokens,min1 = 100 tokens, min 5)
set_auto_reload0Auto-charge your card when balance is low
list_invoices0View purchase and charge history

Socials

ToolTokensDescription
connect_linkedin0Start a LinkedIn browser session
list_connected_linkedin_accounts0List connected LinkedIn accounts
get_linkedin_company_url2Find a company’s LinkedIn page from a domain
get_linkedin_profile_url5Find a person’s LinkedIn profile from name + company domain
get_linkedin_post2Get content of a LinkedIn post
get_linkedin_job2Get full details of a job listing
get_linkedin_profile4Get a LinkedIn profile
get_linkedin_company2Get company data
list_user_posts5List recent posts from a LinkedIn user
send_linkedin_message5Send a direct message
send_linkedin_invitation5Send a connection request
list_linkedin_conversations5List recent conversations
list_linkedin_jobs5List all jobs for a company
list_linkedin_company_employees30List/search employees with optional title filters
list_linkedin_company_posts5List recent company posts
list_linkedin_post_reactions5List people who reacted to a post
list_linkedin_post_comments5List comments on a post
list_linkedin_saved_posts10List saved posts with content
list_linkedin_company_employees_posts80Recent posts from a company’s employees

Data

ToolTokensDescription
get_email5Find a person’s professional email (SMTP-verified)

Signals

ToolTokensDescription
detect_signal0Run all signal detections for a company
signal_socials_spike5Instagram/TikTok follower spikes
signal_hiring_role5Hiring for specific roles
signal_hiring_support5CX/support hiring
signal_hiring_sales_rep5SDR/BDR hiring
signal_hiring_sales_leadership5Sales leadership hiring
signal_hiring_sales_rep_repost5Reposted SDR roles (churn signal)
signal_trustpilot_negative_reviews5Negative Trustpilot reviews
signal_trustpilot_negative_support_reviews5Negative support-related reviews
signal_trustpilot_positive_reviews5Positive Trustpilot reviews
signal_technologies_identified5Detect tech stack on a website
set_signals_order0Configure signal execution order
get_signals_order0View current signal order

Packages

PackageDescription
@mcp-tools/sharedAuth, billing, Stripe, web-tools client
@mcp-tools/cliThe gtm-tools Commander.js CLI

Hosted services

EndpointDescription
admin.gtm-engine.sh/{mcp,api/v0}Admin server — keys, balance, billing
socials.gtm-engine.sh/{mcp,api/v0}Socials server — LinkedIn automation
data.gtm-engine.sh/{mcp,api/v0}Data server — email finding
signals.gtm-engine.sh/{mcp,api/v0}Signals server — buying-intent detection

Dev mode

In dev mode, socials-tools and signals-tools run without WORKOS_API_KEY or STRIPE_SECRET_KEY. Auth is bypassed (every request is treated as org "dev") and token charges are skipped. Only admin-tools requires those keys, since it owns the WorkOS + Stripe integrations.

Next steps