MCP

Connect any MCP-compatible AI agent to the GTM Tools server

GTM Tools exposes every tool through the Model Context Protocol over Streamable HTTP at a single endpoint. This is the fastest way to give an AI agent access to LinkedIn + Reddit automation, signal detection, and email finding.

Endpoint

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

The Streamable HTTP transport handles POST for requests, GET for SSE streaming, and DELETE to close sessions.

Authentication

On first connect, the server triggers OAuth via /.well-known/oauth-protected-resource — clients open a browser to authenticate against gtm-tools.sh. Clients that prefer static keys can authenticate with a bearer token instead:

Authorization: Bearer sk_...

Get a key with get_api_key (see Quickstart). Keys are scoped to your org; balances and rate limits are enforced per org.

Configuration

The fastest path is the mcp add CLI — it patches the right config file in place:

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

For a manual setup, point a gtm-tools MCP entry at the URL above.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

1{
2 "mcpServers": {
3 "gtm-tools": {
4 "command": "npx",
5 "args": ["-y", "mcp-remote@latest", "https://api.gtm-tools.sh/mcp"]
6 }
7 }
8}

Restart Claude Desktop and complete the OAuth flow. To skip OAuth, append --header and Authorization: Bearer sk_... to the args array.

Cursor

Add to ~/.cursor/mcp.json:

1{
2 "mcpServers": {
3 "gtm-tools": {
4 "url": "https://api.gtm-tools.sh/mcp"
5 }
6 }
7}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

1{
2 "mcpServers": {
3 "gtm-tools": {
4 "url": "https://api.gtm-tools.sh/mcp"
5 }
6 }
7}

For other clients (Codex, Goose, OpenClaw, Hermes Agent, NanoClaw, Raycast, VS Code, Cline, …) see the Connect page.

Tool annotations

Each tool includes MCP annotations that help agents reason about behavior:

AnnotationDescription
readOnlyHintTool only reads data (e.g. get_linkedin_company_url, all signal_*)
destructiveHintTool could create or alter external state (e.g. send_linkedin_message, send_reddit_message, create_reddit_post, vote_reddit, buy_tokens)
idempotentHintCalling multiple times produces the same result (most read tools)
openWorldHintTool interacts with external systems (LinkedIn, Reddit, SMTP servers, web pages)

Errors

Tool calls surface API errors directly to the agent:

StatusMeaning
401Missing or invalid bearer token
402Insufficient token balance — top up via buy_tokens
404Tool name not found on this server
429Rate limit hit — back off and retry
5xxUpstream provider issue (LinkedIn, Reddit, email verifier, web-tools)

Tool catalogue

For the complete tool list with parameter shapes, see:

Next steps