CLI

The gtm-tools CLI is a single Commander.js binary that fronts every server. Install it once, set GTM_ENGINE_API_KEY, and call any tool from the terminal.

Installation

$npm install -g @mcp-tools/cli
$export GTM_ENGINE_API_KEY="sk_..."

Command pattern

gtm-tools <namespace> <command> [args] [flags]

Namespaces map 1:1 to servers:

NamespaceServer
adminadmin-tools
socialssocials-tools
datadata-tools
signalssignals-tools

admin

Manage your API key, balance, and billing.

$gtm-tools admin balance
$gtm-tools admin invoices
$gtm-tools admin buy-tokens --amount 25
$gtm-tools admin auto-reload --enable --threshold 200 --topup 50
$gtm-tools admin get-api-key --email you@yourcompany.com
CommandDescription
balanceShow token balance and per-tool costs
invoicesList purchase / charge history
buy-tokens --amount <usd>Charge saved card and credit tokens
auto-reload --enable / --disableToggle auto top-up
get-api-key --email <addr>Provision a new key (sends verification email)

socials

LinkedIn automation.

$# Resolve a company's LinkedIn URL from a domain (2 tokens)
>gtm-tools socials company-url siena.cx
>
># Resolve a person's LinkedIn URL (5 tokens)
$gtm-tools socials profile-url --name "Andrei Negrau" --domain siena.cx
$
$# Hydrate a profile (4 tokens)
$gtm-tools socials profile rauchg
$
$# List employees with boolean title filters (30 tokens)
$gtm-tools socials employees https://linkedin.com/company/vercel \
> --filter "(CEO OR CTO OR Founder) NOT intern" \
> --limit 25
$
$# List a company's recent posts (5 tokens)
>gtm-tools socials company-posts vercel --limit 10
>
># Get a single post (2 tokens)
>gtm-tools socials post https://linkedin.com/posts/...
>
># Send a connection invitation (5 tokens)
>gtm-tools socials invite https://linkedin.com/in/andreinegrau \
> --message "Hi Andrei — saw your post on CX agents."
>
># Manage browser sessions
>gtm-tools socials connect
>gtm-tools socials accounts

signals

Buying-intent detection.

$# Run every detector at once
$gtm-tools signals detect gymshark.com
$
$# Individual detectors
$gtm-tools signals socials-spike gymshark.com
$gtm-tools signals hiring-support gymshark.com
$gtm-tools signals hiring-sales-rep gymshark.com
$gtm-tools signals hiring-sales-rep-repost gymshark.com
$gtm-tools signals trustpilot-negative mammaly.de
$gtm-tools signals trustpilot-negative-support mammaly.de
$gtm-tools signals technologies siena.cx --techs "zendesk.com,intercom.com"
$
$# Configure detector order
$gtm-tools signals get-order
$gtm-tools signals set-order \
> --order "signal_hiring_sales_rep_repost,signal_trustpilot_negative_support_reviews,signal_socials_spike"

data

Email finding.

$gtm-tools data email --name "Justin Mares" --domain kettleandfire.com

Global flags

FlagDescription
--format <fmt>Output format: json (default) or pretty
--api-key <key>Override GTM_ENGINE_API_KEY for one call

Using with jq

The CLI defaults to JSON, so it pipes cleanly into jq:

$# Get just the LinkedIn URL
$gtm-tools socials company-url siena.cx | jq -r '.url'
$
$# Pull email addresses for a list of employees
$gtm-tools socials employees https://linkedin.com/company/vercel \
> --filter "VP AND Sales" --limit 5 | \
> jq -r '.results[].name' | \
> while read name; do
$ gtm-tools data email --name "$name" --domain vercel.com | jq -r '.email'
$ done

Scripting example

$#!/bin/bash
$# Detect signals across a list of target domains.
$
$DOMAINS=(gymshark.com mammaly.de kettleandfire.com)
$
$for domain in "${DOMAINS[@]}"; do
$ echo "=== $domain ==="
$ gtm-tools signals detect "$domain" | \
> jq '.signals[] | select(.fired == true) | {name, evidence: (.evidence // []) | length}'
$ echo
$done

Next steps