Agent Onboarding

Everything you need to onboard your AI agent to GTM Tools

If you’re developing with AI, GTM Tools offers several resources to improve your experience.

Get an API key

Your agent can sign up programmatically through get_api_key. No console access needed: a 6-digit code is sent to the email you provide, and calling the same endpoint again with the code returns the bearer token.

$# 1. Request a verification code
$curl -X POST https://api.gtm-tools.sh/api/v0/get_api_key \
> -H "Content-Type: application/json" \
> -d '{"email": "you@yourcompany.com"}'
$
$# 2. Re-call with the code from your inbox
$curl -X POST https://api.gtm-tools.sh/api/v0/get_api_key \
> -H "Content-Type: application/json" \
> -d '{"email": "you@yourcompany.com", "code": "123456"}'
$# → { "api_key": "sk_..." }

Autonomous registration via auth.md

GTM Tools implements the auth.md spec so an autonomous agent that hits a 401 can register itself without a human signup form. The 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.gtm-tools.sh/.well-known/oauth-protected-resource"; following that hop leads to the auth.md narrative with copy-paste curl examples.

Two registration shapes are supported:

ShapeWhenOutcome
{"type":"anonymous"}No user contextNew isolated workspace + sk_ key returned immediately. 100 free tokens; free tools work out of the box.
{"type":"identity_assertion", "assertion_type":"verified_email", "assertion":"user@example.com"}Agent acts on behalf of a known user6-digit code emailed to the user; agent submits it via /agent/identity/claim, polls /oauth/token with grant_type=urn:workos:agent-auth:grant-type:claim, receives the sk_ key bound to the user’s workspace.
Anonymous registration in one call
$curl -s -X POST https://api.gtm-tools.sh/agent/identity \
> -H "Content-Type: application/json" \
> -d '{"type":"anonymous"}'
$# → { "access_token":"sk_...", "token_type":"bearer", "expires_in":31536000, "scope":"api", "organization_id":"org_..." }

Revoke at any time:

$curl -X POST https://api.gtm-tools.sh/oauth/revoke \
> -H "Content-Type: application/x-www-form-urlencoded" \
> -d 'token=sk_...'

ID-JAG (urn:ietf:params:oauth:token-type:id-jag) is not yet accepted, since no agent provider mints them in production. We’ll enable it when an issuer ships.

New accounts receive 100 free tokens ($1 = 100 tokens, paid top-ups start at $5). Live token costs per tool are returned by get_token_balance.

GTM Tools MCP Server

MCP (Model Context Protocol) is an open protocol that standardizes how applications provide context to LLMs. The GTM Tools MCP server gives your AI agent tools to find LinkedIn profiles, engage on Reddit, verify professional emails, detect buying signals, and manage your wallet, all through a single Streamable HTTP endpoint.

Setup

Point any MCP-compatible client at the endpoint:

https://api.gtm-tools.sh/mcp

On first connect, the server runs the OAuth flow via /.well-known/oauth-protected-resource and the client opens a browser to authenticate. Clients that prefer static keys can authenticate with Authorization: Bearer <api-key> instead.

The fastest path is the mcp add CLI, which patches Claude Desktop, Cursor, or Windsurf configs in place:

$npx gtm-tools@latest mcp add --client claude-desktop
$# Append `--with-api-key sk_...` to skip OAuth and embed a key.

For a manual config, point a gtm-tools MCP entry at the URL above. The full set of supported clients (Claude Desktop, Cursor, Windsurf, Codex, Goose, OpenClaw, Hermes Agent, NanoClaw, Raycast, VS Code, Cline, …) is on the Connect page.

Available MCP tools

Your MCP client discovers tools directly from the hosted runtime, so there is nothing to declare on your side. See the current MCP tool catalog for names and parameter shapes, and Pricing for the token cost of each one.

get_token_balance returns the live per-tool cost table. Agents should call it rather than hardcoding costs.

GTM Tools Docs for Agents

You can give your agent current docs in three ways:

  1. Full documentation index

    A structured index of every doc page with descriptions:

    https://gtm-tools.sh/llms.txt
  2. Markdown versions of any page

    Every doc page is available as Markdown. Append .md to any page URL:

    https://gtm-tools.sh/quickstart.md
  3. Section indexes

    Append /llms.txt to any section URL for a scoped index:

    https://gtm-tools.sh/api-reference/llms.txt

Agents that would rather search than read can point an MCP client at the docs server itself, https://gtm-tools.sh/_mcp/server. Or add the index to your system prompt:

For GTM Tools usage, refer to: https://gtm-tools.sh/llms.txt

GTM Tools Skills

Skills give AI agents specialized knowledge for specific tasks. Install the gtm-tools skill to give your coding assistant the whole tool surface: how to get a key, how to connect a browser session, the full 63-tool catalog with token costs, the metering rules, and the error contract.

Claude Code

$npx skills add arnaudjnn/gtm-skills --skill gtm-tools

Cursor

$npx skills add arnaudjnn/gtm-skills --skill gtm-tools --agent cursor

Codex

$npx skills add arnaudjnn/gtm-skills --skill gtm-tools --agent codex

Other supported values for --agent: amp, cline, gemini-cli, kimi-code-cli, opencode, windsurf. Use --agent '*' for all of them, --global for a user-level install, and --yes to skip the prompts.

Manual installation

$git clone https://github.com/arnaudjnn/gtm-skills.git
$cp -R gtm-skills/skills/gtm-tools ~/.claude/skills/gtm-tools

Then set your API key:

$export GTM_TOOLS_API_KEY="sk_..."

Quick start for agents

Get a key, qualify a target with signals, find decision-makers on LinkedIn, and verify their emails, end-to-end:

1const KEY = process.env.GTM_TOOLS_API_KEY!;
2const HEADERS = {
3 "Authorization": `Bearer ${KEY}`,
4 "Content-Type": "application/json",
5};
6
7async function call<T>(tool: string, body: unknown = {}): Promise<T> {
8 const res = await fetch(`https://api.gtm-tools.sh/api/v0/${tool}`, {
9 method: "POST",
10 headers: HEADERS,
11 body: JSON.stringify(body),
12 });
13 if (!res.ok) throw new Error(`${tool}: ${res.status} ${await res.text()}`);
14 return res.json();
15}
16
17// 1. Detect buying signals (free dispatch + 5 per detector that fires)
18const signals = await call<any>("detect_signal", { domain: "gymshark.com" });
19
20// 2. Find decision-makers (30 tokens)
21const employees = await call<any>("list_linkedin_company_employees", {
22 domain: "gymshark.com",
23 title_filters: "(VP OR Director OR Head) AND (CX OR Support) NOT intern",
24 limit: 10,
25});
26
27// 3. Verify professional emails (5 tokens each)
28for (const e of employees.results.slice(0, 3)) {
29 const { email, status, reason } = await call<any>("get_email", {
30 name: e.name,
31 domain: "gymshark.com",
32 });
33 console.log(e.name, "", status === "ok" ? email : `no address (${reason})`);
34}

Browse a target’s recent activity

1// Recent posts from a company's employees (80 tokens)
2const posts = await call<any>("list_linkedin_company_employees_posts", {
3 company: "gymshark",
4 max_employees: 5,
5 days_back: 7,
6});

AI Builder Integrations

GTM Tools plugs into the runtime your agent already uses:

What Makes GTM Tools Different?

Unlike traditional GTM platforms, which are seat-licensed UIs that bolt on a partial REST API, GTM Tools is built for autonomous agent use:

FeatureGTM ToolsTraditional GTM platforms
Pricing model✅ Per-tool token metering❌ Per-seat licenses
Getting started✅ 100 free tokens, no card⚠️ 14–30 day demo, often gated
Primary surface✅ MCP + REST + CLI❌ UI with a partial REST API
Agent self-registrationauth.md, no signup form❌ Human signup required
LinkedIn + email + signals✅ One bearer token❌ Several vendors stitched together
Writes from your own account✅ Pooled browser sessions⚠️ Gated partner APIs
Auto top-upset_auto_reload on a saved card❌ Annual contract
Agent-friendly docsllms.txt + .md for every page❌ HTML only

Next Steps