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 single MCP service exposing five tool categories:

CategoryWhat it does
AdminAPI keys, token balance, card top-ups, auto-reload, invoices
LinkedInLinkedIn automation — search, profiles, companies, posts, jobs, DMs
RedditReddit automation — read threads, post + comment, vote, DM via Reddit Chat
EmailProfessional email finding — SMTP-verified
SignalsBuying-intent signals — hiring, Trustpilot, social spikes, tech stack

Everything ships behind a single host: api.gtm-tools.sh/mcp for MCP, api.gtm-tools.sh/api/v0/{tool} for REST. One auth boundary, one billing wallet. New accounts get 100 free tokens to start.

(gtm-tools.sh itself is the docs site you’re reading — the API lives under the api. subdomain.)

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 "gtm-tools": {
4 "url": "https://api.gtm-tools.sh/mcp",
5 "headers": { "Authorization": "Bearer <your-api-key>" }
6 }
7 }
8}
2

REST

Every tool is reachable as POST /api/v0/{tool_name}. Same JSON body, same auth header, no MCP overhead.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_linkedin_company_url \
> -H "Authorization: Bearer $GTM_TOOLS_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. Get auth and manage billing

get_api_key gets a key via email verification. get_token_balance returns the wallet state, buy_tokens tops up via card (1=100tokens,1 = 100 tokens, 5 minimum), set_auto_reload configures auto top-up when the balance dips below a threshold, and list_invoices returns the purchase 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 lists the workforce with boolean title filters ("(CEO OR CTO OR Founder) NOT intern"), get_linkedin_profile_url gets a profile URL from name + company, and get_linkedin_profile / get_linkedin_company get the full structured records. Once you’ve found the right person, send_linkedin_invitation and send_linkedin_message close the loop. The write and personal-data tools run through a logged-in session shared by the browser extension; list_connected_linkedin_accounts shows which sessions are connected.

3. Engage on Reddit

21 tools covering the full engagement loop. Discover: search_reddit_posts (keyword surveillance), list_subreddit_posts (daily hot/new/rising), search_reddit_subreddits (shortlist communities), get_subreddit_about (the rule-compliance gate every Reddit playbook flags as the #1 shadowban trigger). Evaluate: get_reddit_post (post + full comment tree), get_reddit_user (karma, account age, verified flags), list_reddit_user_posts (posting history — is this actually our ICP?). Engage: create_reddit_comment (reply to post or comment), create_reddit_post (submit), vote_reddit (up/down/clear), send_reddit_message (DM via Reddit’s Matrix-based Chat — works for every account, including the post-rollout cohort that can’t receive legacy PMs). Follow up: follow_reddit_post (notifications on new comments), save_reddit_thing with optional CRM-stage category label, list_reddit_saved, list_reddit_inbox. Organize: subscribe_reddit_subreddit (bulk sub/unsub), list_reddit_subscriptions, plus custom feeds (multireddits) via list_reddit_custom_feeds, list_reddit_custom_feed_posts, create_reddit_custom_feed — one feed per ICP / campaign, then daily monitoring reads the merged stream in one call. All write tools (and the gate-bypassing reads) run on a pooled session from the browser extension; list_connected_reddit_accounts shows which accounts are connected. See the Results Ranking Optimization guide for the should-I-reply gate and anti-spam style rules.

4. 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.

5. 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. Get the LinkedIn page from a domain
2const company = await fetch("https://api.gtm-tools.sh/api/v0/get_linkedin_company_url", {
3 method: "POST",
4 headers: {
5 "Authorization": `Bearer ${process.env.GTM_TOOLS_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://api.gtm-tools.sh/api/v0/list_linkedin_company_employees", {
13 method: "POST",
14 headers: {
15 "Authorization": `Bearer ${process.env.GTM_TOOLS_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://api.gtm-tools.sh/api/v0/get_email", {
27 method: "POST",
28 headers: {
29 "Authorization": `Bearer ${process.env.GTM_TOOLS_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 siena.cx --filter "(CEO OR CTO) NOT intern"
$gtm-tools signals detect gymshark.com

Available tools

Admin Tools

ToolTokensDescription
ping0Health check
get_api_key0Get an API key (sends a verification code to email)
get_token_balance0Get your token balance and per-tool costs
buy_tokens0Buy tokens via card (1=100tokens,min1 = 100 tokens, min 5)
set_auto_reload0Set auto-reload to top up when balance is low
list_invoices0List purchase and charge history

LinkedIn Tools

ToolTokensDescription
list_connected_linkedin_accounts0List connected LinkedIn accounts
get_linkedin_company_url2Get a company’s LinkedIn URL from a domain
get_linkedin_profile_url5Get a person’s LinkedIn URL from name + domain
get_linkedin_post2Get a LinkedIn post
get_linkedin_job2Get a LinkedIn job listing
get_linkedin_profile2Get a LinkedIn profile
get_linkedin_company1Get a LinkedIn company
list_user_posts5List a user’s recent LinkedIn posts
send_linkedin_message5Send a LinkedIn direct message
send_linkedin_invitation5Send a LinkedIn connection request
list_linkedin_conversations5List recent LinkedIn conversations
list_linkedin_jobs5List a company’s open LinkedIn jobs
list_linkedin_company_employees30List a company’s employees (with optional boolean title filters)
list_linkedin_company_posts2List a company’s recent LinkedIn posts
list_linkedin_post_reactions5List reactions on a LinkedIn post
list_linkedin_post_comments5List comments on a LinkedIn post
list_linkedin_saved_posts10List a user’s saved LinkedIn posts
list_linkedin_company_employees_posts80List recent posts from a company’s employees

Reddit Tools

ToolTokensDescription
list_connected_reddit_accounts0List connected Reddit accounts
search_reddit_posts2Search posts by keyword (optionally restricted to a subreddit)
list_subreddit_posts1List posts from a subreddit (hot / new / top / rising / …)
search_reddit_subreddits1Search subreddits by name or description
get_subreddit_about1Get a subreddit’s metadata + rules (compliance check before posting)
get_reddit_post1Get a Reddit post and its full comment tree
get_reddit_user1Get a user’s karma, account age, and verified flags
list_reddit_user_posts1List a user’s recent posts and/or comments
create_reddit_comment5Reply to a Reddit post or comment
create_reddit_post5Submit a new post to a subreddit (text or link)
vote_reddit1Upvote, downvote, or clear a vote on a post or comment
send_reddit_message5Send a direct message via Reddit Chat (works for every account)
follow_reddit_post1Follow/unfollow a post for new-comment notifications (best-effort)
save_reddit_thing1Save (or unsave) a post/comment to your engagement queue
list_reddit_saved1List saved posts and comments
list_reddit_inbox1Read DMs, comment replies, post replies, and mentions
subscribe_reddit_subreddit1Bulk subscribe/unsubscribe to subreddits
list_reddit_subscriptions1List subreddits the connected account is subscribed to
list_reddit_custom_feeds1List the connected account’s custom feeds (multireddits)
list_reddit_custom_feed_posts1List posts from a custom feed, merged across subreddits
create_reddit_custom_feed5Create a custom feed (multireddit) from a list of subreddits

Email Tools

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

Signals Tools

ToolTokensDescription
detect_signal0Detect all signals for a company
signal_socials_spike5Detect Instagram/TikTok follower spikes
signal_hiring_role5Detect hiring for specific roles
signal_hiring_support5Detect CX/support hiring
signal_hiring_sales_rep5Detect SDR/BDR hiring
signal_hiring_sales_leadership5Detect sales leadership hiring
signal_hiring_sales_rep_repost5Detect reposted SDR roles (churn signal)
signal_trustpilot_negative_reviews5Detect negative Trustpilot reviews
signal_trustpilot_negative_support_reviews5Detect negative support-related Trustpilot reviews
signal_trustpilot_positive_reviews5Detect positive Trustpilot reviews
signal_technologies_identified5Detect a tech stack on a website
set_signals_order0Set signal execution order
get_signals_order0Get current signal execution order

Next steps