# Manifold MCP MCP Server

> **Manifold MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Manifold MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/manifoldmcp-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Manifold consolidates SEO research, AI search visibility tracking, social media intelligence, advertising research, and B2B lead discovery in one platform. Analyze Google rankings and backlinks, monitor brand mentions in ChatGPT and Perplexity, research social content across Reddit, YouTube, TikTok, LinkedIn, and X, and find business contacts with verified work emails.

---

## Details

- Server ID: `manifoldmcp-mcp`
- Version: 0.1.0
- Tools: 81
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Manifold MCP has to be in the toolset
first. In order:

1. Add Manifold MCP to your toolset at https://mewcp.com/mcp/manifoldmcp-mcp
2. Connect your Manifold MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (81)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `seo_search_keywords` _(read)_ — Candidate keywords around a seed, with volume, difficulty, intent, CPC and trend for each. Use when: "find keywords for X", "what should I target around X",…
- `seo_get_keyword_metrics` _(read)_ — Volume, difficulty, intent, CPC and 12-month trend for keywords you already have, with AI-engine prompt volume on request. Use when: the user supplies…
- `seo_get_serp` _(read)_ — The top organic results and SERP features Google shows for one query. Use when: "what ranks for X", "who is on page one for X", "is there a featured snippet or…
- `seo_get_position` _(read)_ — Where one target ranks for one keyword, scanning the top 100 server-side. Use when: "where does example.com rank for X", "did we make page one for X", a rank…
- `seo_get_domain_overview` _(read)_ — Traffic estimate, ranked keyword count, position spread, top pages and domain rank for one domain. The canonical source of domain rank. Use when: "how strong…
- `seo_get_ranked_keywords` _(read)_ — Keywords a domain or one page ranks for in the top 100, with position, URL and metrics. Use when: "what does competitor.com rank for", "which keywords send…
- `seo_get_serp_competitors` _(read)_ — Domains that share search results with a target, with how many keywords overlap. SERP competitors, not business competitors. Use when: "who competes with…
- `seo_get_keyword_gap` _(read)_ — Keywords one competitor ranks for in the top 100 that the target does not rank for at all. Use when: "what does competitor.com rank for that we do not", "find…
- `seo_get_backlink_summary` _(read)_ — Link totals for a domain or page: backlinks, referring domains, dofollow share, link types and domain rank. Use when: "how many links does X have", "what is…
- `seo_get_backlinks` _(read)_ — Individual backlinks pointing at a domain or page, strongest referring domain first. Use when: "show me the links to this page", "which pages link to…
- `seo_get_referring_domains` _(read)_ — Domains linking to a target, one row per domain, with domain rank, link counts and spam score. Use when: "who links to competitor.com", "build a list of sites…
- `seo_get_domain_ratings` _(read)_ — Domain rank and Ahrefs DR only, for up to 1,000 domains in one call. The cheap way to rate a list. Use when: "rate these domains", "which of these sites are…
- `seo_get_traffic_estimates` _(read)_ — Estimated monthly organic and paid traffic for up to 1,000 domains in one call. Use when: "how much traffic do these sites get", comparing a list of domains by…
- `seo_get_page` _(read)_ — An on-page snapshot of one URL: title, meta description, canonical, robots, headings, word count, schema types and link counts. Fetched live, free. Use when:…
- `seo_run_technical_crawl` _(write)_ — Crawl a site for technical SEO issues. Slow: returns a task_id, then read the result with get_task. Use when: "audit example.com", "crawl the site for broken…
- `get_task` _(read)_ — The result of a run_* tool, or TaskPending while it runs. Use when: you hold a task_id from seo_run_technical_crawl or aeo_run_ai_answers. Not for: starting…
- `submit_feedback` _(destructive)_ — Sends a report to the Manifold team: an error a tool returned, data that looks wrong, a tool or parameter that is missing, or anything the user asks you to…
- `aeo_run_ai_answers` _(write)_ — What AI engines answer for a prompt, with the brands they mention and the sources they cite. Slow: returns a task_id, then read the result with get_task. Use…
- `aeo_search_prompts` _(read)_ — Prompts people ask an AI engine (ChatGPT or Google AI Overview) about a topic or brand, from the provider's index of observed answers. Not keywords. Use when:…
- `aeo_get_site_readiness` _(read)_ — Whether a site is set up for AI answer engines, from about seventeen live fetches of its origin, free. Checks what the engines document as gating their…
- `console_list_properties` _(read)_ — The Search Console and Bing Webmaster properties the workspace's connected accounts can read. The first console call; every other console tool takes a property…
- `console_get_search_analytics` _(read)_ — Clicks, impressions, CTR and average position from the user's own Search Console or Bing data, grouped by query, page, country, device or date. Use when:…
- `console_get_sitemaps` _(read)_ — The sitemaps submitted for one of the user's properties, with when they were read, how many URLs they carry and their errors. Use when: "is my sitemap picked…
- `console_inspect_url` _(read)_ — Google's index status for one URL of the user's property: indexed or not and why, last crawl, canonical, mobile usability and rich results. Use when: "why is…
- `console_get_crawl_issues` _(read)_ — URLs Bing had trouble crawling on the user's property: HTTP errors, redirects, robots.txt blocks, DNS and timeouts, with the inbound link count of each. Use…
- `analytics_list_properties` _(read)_ — The Google Analytics 4 properties the workspace's connected Google account can read, with the account each sits under. The first analytics call; the other…
- `analytics_get_fields` _(read)_ — Every dimension and metric one Google Analytics 4 property reports, with the api_name analytics_get_report takes, custom dimensions and metrics included. Use…
- `analytics_get_report` _(read)_ — A Google Analytics 4 report from the user's own property: any metrics by any dimensions over a date range, optionally against a second range. Use when: "how…
- `leads_search_companies` _(read)_ — Companies matching a name, keywords, location or headcount. Use when: "find fintech companies in London with 50 to 200 staff", "companies that do X", building…
- `leads_get_company` _(read)_ — The full firmographic record of one company, by domain. Use when: "tell me about acme.com", sizing a company, the industry, revenue and funding stage behind a…
- `leads_search_people` _(read)_ — People matching title, seniority and company filters. No email. Use when: "find heads of marketing at fintech startups", building a target list by role,…
- `leads_get_person` _(read)_ — The full record of one person: real name, title, seniority, company, location, LinkedIn and employment history. No email. Use when: filling in a search row by…
- `leads_get_email` _(read)_ — Find and verify the work email of one named person. The only paid reveal keyed by a person; it runs a waterfall of sources and stops at the first verified hit.…
- `leads_get_email_status` _(read)_ — Whether an email address the user already has will deliver. Use when: "is jane@acme.com still valid", cleaning a list before a send, checking a shortlist from…
- `leads_get_domain_emails` _(read)_ — Email addresses known for a website's domain, with name, role, confidence and where each was seen. The contact-finding tool for link outreach. Use when: "find…
- `reddit_search_posts` _(read)_ — Reddit posts matching a query, ranked by the search, across all of Reddit or inside one community. Use when: "what do people on Reddit say about X", "find…
- `reddit_search_comments` _(read)_ — Reddit comments matching a query, ranked by the search, across all of Reddit or inside one community. Use when: "what do people reply when someone asks about…
- `reddit_get_new_posts` _(read)_ — Every post created in the given subreddits inside a time window, oldest first. The check-in tool: complete for the window it reports, unlike search. Use when:…
- `reddit_get_post` _(read)_ — One Reddit thread in full: the whole post body, its score, its flair and how big the community is. Use when: a row from a search or a check-in is worth reading…
- `reddit_get_comments` _(read)_ — The comments on one Reddit thread, flattened in reading order with their reply depth. Use when: "what did people reply", judging whether a thread is worth…
- `reddit_search_subreddits` _(read)_ — The communities that discuss a topic, counted from one page of search results. Use when: "which subreddits talk about X", picking the communities to pass to…
- `reddit_get_subreddit` _(read)_ — One community: how big it is, how busy it is, and the rules it posts, as the moderators wrote them. Use when: before you post or reply anywhere, to read the…
- `tiktok_get_profile` _(read)_ — One TikTok account: its follower count, its lifetime likes and how many videos it has posted. Use when: sizing a creator or a brand on TikTok, checking a…
- `tiktok_get_videos` _(read)_ — The videos one TikTok account has posted, newest or most viewed first. Use when: "what has this creator posted", judging how often a brand posts, pulling a…
- `tiktok_get_video` _(read)_ — One TikTok video with its engagement: views, likes, comments, shares and its length. Use when: a row from a search or a listing is worth the detail, or you…
- `tiktok_get_comments` _(read)_ — The comments on one TikTok video. Use when: reading what an audience actually said, finding objections and questions under a creator's post. Not for: comments…
- `tiktok_search_videos` _(read)_ — TikTok videos matching a keyword, ranked by the platform's own search. Use when: "what is TikTok saying about X", finding creators in a category, watching a…
- `tiktok_get_transcript` _(read)_ — What is said out loud in one TikTok video, as text. Use when: reading a video without watching it, pulling the claims or the hook out of an ad or a review. Not…
- `tiktok_get_followers` _(read)_ — The accounts that follow one TikTok account, with their own follower counts. Use when: judging whether a creator's audience is real, looking for the notable…
- `tiktok_get_audience` _(read)_ — Where one TikTok account's audience is, by country. Use when: checking a creator reaches the market you sell in, before paying for a partnership. Not for: who…
- `instagram_get_profile` _(read)_ — One Instagram account: followers, posts and whether it is a business account. Use when: sizing a creator or a brand, checking a handle, reading a bio and its…
- `instagram_get_posts` _(read)_ — The posts on one Instagram account, newest first. Use when: "what has this account been posting", judging cadence and engagement before a partnership. Not for:…
- `instagram_get_reels` _(read)_ — The reels on one Instagram account, newest first. Use when: video is what matters: watching a brand's reel cadence, pulling a creator's recent reels. Not for:…
- `instagram_get_post` _(read)_ — One Instagram post or reel with its caption and its engagement. Use when: a row is worth the detail, or you have a URL and nothing else. Not for: the comments,…
- `instagram_get_comments` _(read)_ — The comments on one Instagram post or reel. Use when: reading what an audience said, finding the questions a product post keeps getting. Not for: the post…
- `instagram_search_posts` _(read)_ — Instagram posts under one hashtag. Use when: "who is posting about X on Instagram", watching a campaign hashtag or a product tag. Not for: free-text search…
- `instagram_get_transcript` _(read)_ — What is said out loud in one Instagram reel, as text. Use when: reading a reel without watching it, pulling the claims out of a creator's video. Not for: the…
- `facebook_get_profile` _(read)_ — One Facebook page: its followers, its category, its address and its website. Use when: checking a business page is real and current, reading its category and…
- `facebook_get_posts` _(read)_ — The posts on one Facebook page, newest first. Use when: watching what a business page publishes, judging cadence and reactions. Not for: a group's posts, use…
- `facebook_get_post` _(read)_ — One Facebook post with its reactions, comments, shares and views. Use when: a row is worth the detail, or you have a URL and nothing else. Not for: the…
- `facebook_get_comments` _(read)_ — The comments on one Facebook post. Use when: reading what people replied to a page or a group post. Not for: the post itself, use facebook_get_post. Comments…
- `facebook_get_group_posts` _(read)_ — The posts in one Facebook group, newest first. Use when: watching a community you sell into, the way reddit_get_new_posts watches a subreddit. Not for: a…
- `facebook_get_transcript` _(read)_ — What is said out loud in one Facebook video or reel, as text. Use when: reading a video without watching it, pulling the claims out of a page's ad or clip. Not…
- `youtube_get_channel` _(read)_ — One YouTube channel: subscribers, total views and when it joined. Use when: sizing a channel before a sponsorship, checking a handle, reading a channel…
- `youtube_get_videos` _(read)_ — The videos on one YouTube channel, newest or most viewed first. Use when: "what does this channel publish", judging cadence and view counts before a…
- `youtube_get_video` _(read)_ — One YouTube video with its views, likes, comments and length. Use when: a row is worth the detail, or you have a URL and nothing else. Not for: what is said in…
- `youtube_get_comments` _(read)_ — The comments on one YouTube video, most liked first. Use when: reading what an audience said, finding the objections under a review or a tutorial. Not for: the…
- `youtube_search_videos` _(read)_ — YouTube videos matching a keyword, ranked by YouTube's own search. Use when: "what videos cover X", finding review and tutorial coverage of a product or a…
- `youtube_get_transcript` _(read)_ — The transcript of one YouTube video, as text. Use when: reading a video instead of watching it, pulling claims, chapters or quotes out of long content. Not…
- `linkedin_get_profile` _(read)_ — One LinkedIn person: their headline, location, followers and connections. Use when: checking a person before outreach, reading how they describe themselves.…
- `linkedin_get_company` _(read)_ — One LinkedIn company page: headcount, industry, location and website. Use when: sizing a company from its own page, confirming an industry and a headcount band…
- `linkedin_get_company_posts` _(read)_ — The posts on one LinkedIn company page, newest first. Use when: watching what a competitor publishes, judging cadence and engagement. Not for: posts by topic…
- `linkedin_get_post` _(read)_ — One LinkedIn post with its text, its author and its engagement. Use when: a row from a search is worth the detail, or you have a URL and nothing else. Not for:…
- `linkedin_search_posts` _(read)_ — LinkedIn posts matching a keyword, ranked by LinkedIn's own search. Use when: "what is being said about X on LinkedIn", finding the people posting about a…
- `twitter_get_profile` _(read)_ — One X account: followers, following, how much it posts and its bio. Use when: sizing an account, checking a handle, reading a bio and its link before outreach.…
- `twitter_get_tweets` _(read)_ — The recent posts on one X account, newest first. Use when: "what has this account been saying", watching a competitor's announcements. Not for: keyword search…
- `twitter_get_tweet` _(read)_ — One post on X with its replies, reposts, likes and views. Use when: a row is worth the detail, or you have a URL and nothing else. Not for: the replies…
- `ads_search_ads` _(read)_ — Ads running on a platform's public library, by keyword or brand. Use when: "what ads is this category running", finding the angles and offers competitors are…
- `ads_get_advertiser_ads` _(read)_ — Every ad one advertiser is running, from a platform's public library. Use when: a competitor teardown: what they are running, since when, and with what offer.…
- `ads_get_ad` _(read)_ — One ad from a platform's public library, with its creative text and where it sends people. Use when: reading the offer and the call to action behind an ad you…
- `ads_search_advertisers` _(read)_ — The advertisers matching a brand name in Google's ad library, with their ids. Use when: before ads_get_advertiser_ads on Google, because that library is keyed…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization: Bearer API_KEY"
      ]
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file and restart Claude Desktop
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)