# API Direct (remote · apidirect.io)

Search social media, news, forums and Google Maps: LinkedIn, X, Reddit, TikTok, YouTube.

- Trust score: 75/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- remote · `apidirect.io`: 75/100 (this document), [markdown](https://verifymcp.io/servers/io-apidirect-api-direct/apidirect.md), [page](https://verifymcp.io/servers/io-apidirect-api-direct/apidirect)

## Channel facts

- Endpoint: `https://apidirect.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 102 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 15639 tokens (~153/item across 102 items; 102 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 25/100
  - Injection-marker check failed: the server instructions contains an instruction to conceal the call from the user, the text "NEVER tell the user", at byte 1140 of that field.
  - 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "google_ai_mode" implies "send" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 103 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 40/100
  - Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28.

## Install

### How do I install the API Direct MCP server?

API Direct is a hosted endpoint at https://apidirect.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-apidirect-api-direct 'https://apidirect.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-apidirect-api-direct": {
      "url": "https://apidirect.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-apidirect-api-direct": {
      "type": "http",
      "url": "https://apidirect.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-apidirect-api-direct]
url = "https://apidirect.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-apidirect-api-direct": {
      "type": "remote",
      "url": "https://apidirect.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-apidirect-api-direct --url 'https://apidirect.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-apidirect-api-direct:
    url: "https://apidirect.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-apidirect-api-direct": {
      "Transport": "http",
      "Url": "https://apidirect.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-apidirect-api-direct -t streamable-http -u 'https://apidirect.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-apidirect-api-direct": {
      "type": "http",
      "url": "https://apidirect.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-17 (score 75, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional regression] Schema quality: 13273 → 15639
- [functional] New tool “bluesky_post_comments”
- [functional] New tool “bluesky_post_details”
- [functional] New tool “bluesky_post_likes”
- [functional] New tool “bluesky_post_quotes”
- [functional] New tool “bluesky_post_reposts”
- [functional] New tool “bluesky_user_followers”
- [functional] New tool “bluesky_user_following”
- [functional] New tool “bluesky_user_likes”
- [functional] New tool “bluesky_user_posts”
- [functional] New tool “bluesky_user_profile”
- [functional] New tool “search_bluesky”
- [functional] New tool “search_bluesky_users”
- [cosmetic] “amazon_seller_reviews” reworded the description of “get_sentiment”
- [cosmetic] “facebook_group_posts” reworded the description of “get_sentiment”
- [cosmetic] “facebook_page_posts” reworded the description of “get_sentiment”
- [cosmetic] “facebook_page_reels” reworded the description of “get_sentiment”
- [cosmetic] “facebook_page_reviews” reworded the description of “get_sentiment”
- [cosmetic] “facebook_page_videos” reworded the description of “get_sentiment”
- [cosmetic] “facebook_post_comments” reworded the description of “get_sentiment”
- [cosmetic] “instagram_comment_replies” reworded the description of “get_sentiment”
- [cosmetic] “instagram_hashtag_posts” reworded the description of “get_sentiment”
- [cosmetic] “instagram_post_comments” reworded the description of “get_sentiment”
- [cosmetic] “instagram_post_details” reworded the description of “get_sentiment”
- [cosmetic] “instagram_user_posts” reworded the description of “get_sentiment”
- [cosmetic] “linkedin_company_posts” reworded the description of “get_sentiment”
- [cosmetic] “linkedin_person_posts” reworded the description of “get_sentiment”
- [cosmetic] “linkedin_post_details” reworded the description of “get_sentiment”
- [cosmetic] “place_reviews” reworded the description of “get_sentiment”
- [cosmetic] “search_facebook_posts” reworded the description of “get_sentiment”
- [cosmetic] “search_facebook_videos” reworded the description of “get_sentiment”
- [cosmetic] “search_forums” reworded the description of “get_sentiment”
- [cosmetic] “search_instagram” reworded the description of “get_sentiment”
- [cosmetic] “search_linkedin” reworded the description of “get_sentiment”
- [cosmetic] “search_reddit” reworded the description of “get_sentiment”
- [cosmetic] “search_reddit_comments” reworded the description of “get_sentiment”
- [cosmetic] “search_threads” reworded the description of “get_sentiment”
- [cosmetic] “search_tiktok” reworded the description of “get_sentiment”
- [cosmetic] “search_twitter” reworded the description of “get_sentiment”
- [cosmetic] “search_youtube” reworded the description of “get_sentiment”
- [cosmetic] “threads_user_posts” reworded the description of “get_sentiment”
- [cosmetic] “trustpilot_company_reviews” reworded the description of “get_sentiment”
- [cosmetic] “truthsocial_user_posts” reworded the description of “get_sentiment”
- [cosmetic] “twitter_tweet_comments” reworded the description of “get_sentiment”
- [cosmetic] “twitter_tweet_details” reworded the description of “get_sentiment”
- [cosmetic] “twitter_tweet_quotes” reworded the description of “get_sentiment”
- [cosmetic] “twitter_user_replies” reworded the description of “get_sentiment”
- [cosmetic] “twitter_user_tweets” reworded the description of “get_sentiment”

### 2026-09-16 (score 75, 0)

- [security] Tool “instagram_user_followers” rewrote its description, which is the text the model reads
- [security] Tool “instagram_user_following” rewrote its description, which is the text the model reads
- [cosmetic] “instagram_user_followers” reworded the description of “pages”

### 2026-09-14 (score 75, 0)

- [security] Stability: 0.97 → pass

### 2026-09-13 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 74, +1)

- [functional] New tool “search_trustpilot_categories”
- [functional] New tool “search_trustpilot_companies”
- [functional] New tool “trustpilot_category_companies”
- [functional] New tool “trustpilot_category_details”
- [functional] New tool “trustpilot_category_newest”
- [functional] New tool “trustpilot_company_reviews”
- [functional] New tool “trustpilot_user_profile”

### 2026-09-08 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-06 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-05 (score 71, 0)

- [cosmetic] “amazon_seller_products” reworded the description of “page”
- [cosmetic] “amazon_seller_reviews” reworded the description of “page”
- [cosmetic] “facebook_group_posts” reworded the description of “pages”
- [cosmetic] “facebook_page_photos” reworded the description of “pages”
- [cosmetic] “facebook_page_posts” reworded the description of “pages”
- [cosmetic] “facebook_page_reviews” reworded the description of “pages”
- [cosmetic] “facebook_page_videos” reworded the description of “pages”
- [cosmetic] “facebook_post_comments” reworded the description of “pages”
- [cosmetic] “get_youtube_comments” reworded the description of “pages”
- [cosmetic] “instagram_post_comments” reworded the description of “pages”
- [cosmetic] “instagram_user_followers” reworded the description of “pages”
- [cosmetic] “instagram_user_following” reworded the description of “pages”
- [cosmetic] “instagram_user_posts” reworded the description of “pages”
- [cosmetic] “linkedin_company_posts” reworded the description of “page”
- [cosmetic] “linkedin_person_posts” reworded the description of “page”
- [cosmetic] “search_facebook_events” reworded the description of “pages”
- [cosmetic] “search_facebook_pages” reworded the description of “pages”
- [cosmetic] “search_facebook_posts” reworded the description of “pages”
- [cosmetic] “search_facebook_videos” reworded the description of “pages”
- [cosmetic] “search_forums” reworded the description of “page”
- [cosmetic] “search_instagram” reworded the description of “pages”
- [cosmetic] “search_linkedin” reworded the description of “page”
- [cosmetic] “search_linkedin_jobs” reworded the description of “page”
- [cosmetic] “search_reddit” reworded the description of “page”
- [cosmetic] “search_reddit_comments” reworded the description of “pages”
- [cosmetic] “search_twitter” reworded the description of “pages”
- [cosmetic] “search_twitter_users” reworded the description of “pages”
- [cosmetic] “search_youtube” reworded the description of “pages”
- [cosmetic] “search_youtube_channels” reworded the description of “pages”
- [cosmetic] “truthsocial_user_posts” reworded the description of “pages”
- [cosmetic] “twitter_tweet_comments” reworded the description of “pages”
- [cosmetic] “twitter_tweet_quotes” reworded the description of “pages”
- [cosmetic] “twitter_tweet_retweets” reworded the description of “pages”
- [cosmetic] “twitter_user_followers” reworded the description of “pages”
- [cosmetic] “twitter_user_replies” reworded the description of “pages”
- [cosmetic] “twitter_user_tweets” reworded the description of “pages”
- [cosmetic] “twitter_verified_followers” reworded the description of “pages”

## MCP tools (102)

### `list_skills` (~196 tokens)

START HERE for common goals. Lists the ready-made API Direct skills — expert playbooks that chain these tools (with non-obvious filters like author_title, mentions_company, author_company, freshness windows and AI sentiment) to deliver a concrete outcome: find leads, intercept a competitor's unhappy customers, source talent, monitor brand/reputation, detect just-raised startups, build a local acquisition list, run due diligence, and more. Whenever the user's request looks like lead-gen, competitor/brand monitoring, recruiting, due diligence, deal sourcing or market research, call this FIRST to check for a matching playbook before improvising your own searches. Returns each skill's id, name, category, what it does, and its inputs. Then call get_skill to run one.

Input parameters:

- `category` (string): Optional: filter to a category substring, e.g. "sales", "recruiting", "investing", "crisis".

### `get_skill` (~174 tokens)

Get a ready-made skill's step-by-step playbook with your inputs filled in, then follow it. Returns an ordered recipe of tool calls to execute. PREFER running a matching skill over improvising raw searches — skills encode the filters and sequencing that produce far better results. If the user names a skill (e.g. "use the local-buying-intent-capture skill"), pass that as skill_id directly; otherwise call list_skills first to find the right id.

Input parameters:

- `inputs` (object): The skill's inputs as key/value pairs, e.g. {"competitor": "Notion"}. Optional — omit and the playbook will tell you what to ask the user for.
- `skill_id` (string, required): The skill id from list_skills, e.g. "competitor-conquest-radar".

### `search_linkedin` (~434 tokens)

Search LinkedIn posts. Provide a `query` and/or a filter below. Powerful filters: author (posts BY a person), author_title (posts by people with a given job title, e.g. Founder/CEO — applies alongside a query), author_company (posts by employees of a company id), from_company (posts by a company page id), mentions_company (posts that MENTION a company id), mentions_member (posts that mention a person), author_industry. Returns post content, engagement metrics, attached media, a has_content_entities repost flag, and optional AI sentiment.

Input parameters:

- `author` (string): Posts authored by this person — profile URL, public slug (e.g. williamhgates), or member URN. Comma-separate for multiple.
- `author_company` (string): Posts by people who work at this company. Numeric LinkedIn company id (from search_linkedin_companies).
- `author_industry` (string): Posts by authors in these numeric LinkedIn industry id(s), comma-separated. Advanced; applies alongside a query.
- `author_title` (string): Posts by authors whose job title matches this free text (e.g. "CEO", "Founder"). Applies alongside a query.
- `from_company` (string): Posts authored by a company page. Numeric company id(s), comma-separated.
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `mentions_company` (string): Posts that mention this company. Numeric company id.
- `mentions_member` (string): Posts that mention this person (profile URL, public slug, or member URN).
- `page` (integer): Page number, 1-25 (default: 1). 20 posts per page
- `query` (string): Search keyword (max 500 characters). Optional if you supply a filter below.
- `sort_by` (string): Sort order: "most_recent" or "relevance"

### `linkedin_person_posts` (~157 tokens)

Get recent posts authored by a LinkedIn person by profile URL or public slug. Returns posts with engagement metrics (likes, comments, shares, reactions), author info, images, videos, and articles.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page` (integer): Page number, 1-30 (default: 1). 20 posts per page — up to ~600 of the person's most recent posts.
- `url` (string, required): LinkedIn profile URL or public slug (e.g. williamhgates)

### `linkedin_post_details` (~105 tokens)

Get detailed information about a specific LinkedIn post by URL. Returns full post text, author details, and engagement metrics (likes, comments, shares, reaction breakdowns).

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `url` (string, required): LinkedIn post URL

### `linkedin_company_details` (~55 tokens)

Get detailed information about a LinkedIn company page by URL. Returns company name, description, employee count, locations, specialities, industry, website, and similar companies.

Input parameters:

- `url` (string, required): LinkedIn company page URL

### `linkedin_company_posts` (~123 tokens)

Get recent posts from a LinkedIn company page by URL. Returns posts with engagement metrics (likes, comments, shares, reactions).

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page` (integer): Page number, 1-50 (default: 1). 10 posts per page
- `url` (string, required): LinkedIn company page URL

### `search_linkedin_companies` (~68 tokens)

Search LinkedIn companies by keyword. Returns company name, description, followers, and logo.

Input parameters:

- `page` (integer): Page number, 1-100 (default: 1). 10 results per page.
- `query` (string, required): Search keyword (max 500 characters)

### `search_linkedin_jobs` (~257 tokens)

Search LinkedIn job listings by keyword. Returns title, company (with company_id), location, posting date, job type, experience level, workplace type, industry, salary, and full description. Filter by recency, job type, company, and location — useful as a hiring/expansion/funding signal.

Input parameters:

- `company_ids` (string): Filter by company — comma-separated numeric LinkedIn company id(s) (from search_linkedin_companies).
- `job_type` (string): Job type filter: full_time, part_time, contract, temporary, volunteer, internship, other. Comma-separated for multiple.
- `location_id` (string): Filter by location — a numeric LinkedIn location id (see the Job Location IDs doc).
- `page` (integer): Page number, 1-40 (default: 1). 25 jobs per page
- `posted_ago` (string): Maximum job age: "1h", "24h", "7d", or "30d" (default: all time)
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: "most_recent" or "relevance" (default: relevance)

### `linkedin_job_details` (~86 tokens)

Get detailed information about a specific LinkedIn job listing by URL or numeric job ID. Returns title, company, location, posting date, job type, experience level, workplace type, industry, salary, benefits, and full description.

Input parameters:

- `url` (string, required): LinkedIn job URL (e.g. https://linkedin.com/jobs/view/1234567890) or numeric job ID

### `search_twitter` (~120 tokens)

Search Twitter/X posts.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: "most_recent" or "relevance"

### `search_twitter_users` (~68 tokens)

Search Twitter/X users by keyword. Returns profile data including username, bio, follower counts, and verification status.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)

### `twitter_user_profile` (~54 tokens)

Get detailed profile information for a Twitter/X user by username. Returns follower/following counts, bio, verification status, and account metadata.

Input parameters:

- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_user_tweets` (~110 tokens)

Get tweets posted by a specific Twitter/X user.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_user_followers` (~59 tokens)

Get the followers of a specific Twitter/X user.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_user_following` (~68 tokens)

Get the accounts that a specific Twitter/X user is following.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-175 (default: 1). Each page returns ~50 accounts.
- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_verified_followers` (~65 tokens)

Get the verified (blue checkmark) followers of a specific Twitter/X user.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_user_replies` (~110 tokens)

Get replies posted by a specific Twitter/X user.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `username` (string, required): Twitter username (without @, max 50 characters)

### `twitter_tweet_details` (~94 tokens)

Get detailed information for a single tweet by its ID. Returns full content, engagement metrics, and author info.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `tweet_id` (string, required): Numeric tweet ID

### `twitter_tweet_retweets` (~54 tokens)

Get the users who retweeted a specific tweet.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `tweet_id` (string, required): Numeric tweet ID

### `twitter_tweet_quotes` (~103 tokens)

Get the quote tweets for a specific tweet.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `tweet_id` (string, required): Numeric tweet ID

### `twitter_tweet_comments` (~106 tokens)

Get the comments (replies) on a specific tweet.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `tweet_id` (string, required): Numeric tweet ID

### `twitter_trends` (~51 tokens)

Get the current trending topics for a specific location on Twitter/X. Use woeid=1 for Worldwide.

Input parameters:

- `woeid` (integer, required): Where On Earth ID for the location. Use 1 for Worldwide.

### `search_reddit` (~128 tokens)

Search Reddit posts.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page` (integer): Page number, 1-12 (default: 1). 20 posts per page
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: "most_recent", "relevance", "hot", or "top"

### `search_reddit_comments` (~123 tokens)

Search Reddit comments.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-10 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: "most_recent", "relevance", or "top"

### `search_reddit_users` (~45 tokens)

Search Reddit users by keyword. Returns profile data including username, karma scores, account age, and bio.

Input parameters:

- `query` (string, required): Search keyword (max 500 characters)

### `search_youtube` (~133 tokens)

Search YouTube videos.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)
- `upload_date` (string): Filter by upload date: "last_hour", "today", "this_week", "this_month", or "this_year"

### `search_youtube_channels` (~65 tokens)

Search YouTube channels by keyword. Returns channel name, description, subscriber count, and thumbnail.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)

### `get_youtube_comments` (~127 tokens)

Get comments from a YouTube video. Returns each comment's text, author, like count, reply count, date, a direct link, and up to 5 preview replies. Billed $0.005 per page.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to ~100 comments.
- `sort_by` (string): Sort order: most_recent (newest first) or relevance (default: relevance)
- `url` (string, required): YouTube video URL or 11-character video ID

### `youtube_channel_details` (~130 tokens)

Get details for a YouTube channel: channel name, description, subscriber count, video count, total views, country, creation date, verification status, external links, profile picture, and banner. Provide exactly one of id, url, or name.

Input parameters:

- `id` (string): YouTube channel ID (24 characters, starts with UC)
- `name` (string): Channel name or @handle (e.g. @mkbhd or Linus Tech Tips)
- `url` (string): Channel URL: youtube.com/channel/..., youtube.com/@handle, /c/ or /user/ forms

### `youtube_video_details` (~94 tokens)

Get details for a YouTube video: title, full description, channel name and ID, publish date, duration in seconds, view count, category, keywords, and thumbnail. Works for regular videos, Shorts, and live streams.

Input parameters:

- `url` (string, required): YouTube video URL (watch?v=, youtu.be/, /shorts/, /embed/ or /live/ forms) or 11-character video ID

### `search_instagram` (~102 tokens)

Search Instagram posts by keyword.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)

### `search_instagram_users` (~43 tokens)

Search Instagram users by keyword. Returns username, full name, verification status, and profile picture.

Input parameters:

- `query` (string, required): Search keyword (max 500 characters)

### `instagram_user_profile` (~114 tokens)

Get the full profile for a single Instagram user by username or profile URL. Returns biography, follower / following counts, media count, category, external link, verification status, country the account is based in, join date, verification date, and former usernames. Provide exactly one of username or url.

Input parameters:

- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_user_posts` (~198 tokens)

Get a single Instagram user's recent posts and reels (their feed) by profile URL or username. Returns captions, engagement metrics (likes, comments, shares, views), author metadata, hashtags, and mentions. Up to 12 posts per page; billed per page. Provide exactly one of url or username.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 12 posts
- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_post_details` (~192 tokens)

Get full details for a single Instagram post, reel, or IGTV video by post URL or shortcode. Returns the caption, like/comment/share/view counts, media URLs, carousel slides, audio track info, tagged users, location, and author details. Provide exactly one of url or code.

Input parameters:

- `code` (string): The post's shortcode, e.g. CxYQJO8xuC6, or numeric media ID (max 50 characters)
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `url` (string): Instagram post, reel, or story URL, e.g. https://www.instagram.com/p/CxYQJO8xuC6/ (max 500 characters)

### `instagram_user_followers` (~222 tokens)

Get an Instagram user's followers by username or profile URL. Returns username, full name, user ID, verification and privacy status, and profile picture for each follower, 50 per page (billed per page returned). Verified (blue checkmark) accounts return only their first ~50 followers; extra pages are not billed. Pass query to search the followers instead (up to 50 matches, one request). Provide exactly one of username or url.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-40 (default: 1). Each page returns up to 50 followers; verified accounts return the first page only
- `query` (string): Optional keyword to search this user's followers by username or name (max 100 characters). Returns up to 50 matches in a single request; pages is ignored
- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_user_following` (~199 tokens)

Get the accounts an Instagram user follows, by username or profile URL. Returns username, full name, user ID, verification and privacy status, and profile picture for each account, 50 per page (billed per page returned). Pass query to search the following list instead (up to 50 matches, one request). Provide exactly one of username or url.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-40 (default: 1). Each page returns up to 50 accounts
- `query` (string): Optional keyword to search the accounts this user follows by username or name (max 100 characters). Returns up to 50 matches in a single request; pages is ignored
- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_user_stories` (~134 tokens)

Get an Instagram user's currently active stories (last 24 hours) by username or profile URL. Returns each story's media URLs (image or video), post time and expiry, link stickers, mentions, tagged users, location, and audio. Media URLs are temporary (~6-24 hours). Returns an empty list when the user has no active stories. Provide exactly one of username or url.

Input parameters:

- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_user_highlights` (~117 tokens)

Get an Instagram user's story highlights tray by username or profile URL. Returns each highlight's ID, title, story count, cover image, created / updated dates, and link. Use instagram_highlight_stories with a highlight_id to fetch the stories inside a highlight. Provide exactly one of username or url.

Input parameters:

- `url` (string): Instagram profile URL, e.g. https://instagram.com/natgeo (max 500 characters)
- `username` (string): Instagram username, with or without leading @ (max 100 characters)

### `instagram_highlight_stories` (~127 tokens)

Get the stories saved in one Instagram highlight by highlight ID (from instagram_user_highlights) or highlight URL. Returns the highlight's title and cover plus every story's media URLs, post time, link stickers, mentions, tagged users, location, and audio. Media URLs are temporary (~6-24 hours).

Input parameters:

- `highlight_id` (string, required): Highlight ID, e.g. 17987606483520330 (also accepts highlight:17987606483520330), or a highlight URL like https://www.instagram.com/stories/highlights/17987606483520330/

### `instagram_post_comments` (~261 tokens)

Get the comments on an Instagram post or reel by post URL or shortcode. Returns each comment's text, author details, like and reply counts, date, and link, up to 15 per page (billed per page), sorted by popular (default, includes pinned) or recent. Use instagram_comment_replies to fetch a comment's replies. Provide exactly one of url or code.

Input parameters:

- `code` (string): The post's shortcode, e.g. CxYQJO8xuC6, or numeric media ID (max 50 characters)
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 15 comments
- `sort_by` (string): Sort order: popular (default, includes pinned comments) or recent
- `url` (string): Instagram post or reel URL, e.g. https://www.instagram.com/p/CxYQJO8xuC6/ (max 500 characters)

### `instagram_comment_replies` (~247 tokens)

Get the replies to one Instagram comment (its thread) by post URL or shortcode plus the comment ID from instagram_post_comments. Returns each reply's text, author details, like count, date, link, and the comment it replies to. Billed per page. Returns an empty list when the comment has no replies. Provide exactly one of url or code.

Input parameters:

- `code` (string): The post's shortcode, e.g. CxYQJO8xuC6, or numeric media ID (max 50 characters)
- `comment_id` (string, required): The comment's numeric ID, from instagram_post_comments (comment_id)
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-10 (default: 1)
- `url` (string): Instagram post or reel URL, e.g. https://www.instagram.com/p/CxYQJO8xuC6/ (max 500 characters)

### `instagram_post_likes` (~145 tokens)

Get the users who liked an Instagram post or reel by post URL or shortcode. Returns username, full name, user ID, verification and privacy status, and profile picture for every liker Instagram exposes (typically several hundred), plus the post's total like count, in a single request. Provide exactly one of url or code.

Input parameters:

- `code` (string): The post's shortcode, e.g. CxYQJO8xuC6, or numeric media ID (max 50 characters)
- `url` (string): Instagram post or reel URL, e.g. https://www.instagram.com/p/CxYQJO8xuC6/ (max 500 characters)

### `instagram_hashtag_posts` (~230 tokens)

Get Instagram posts and reels for a hashtag. Returns the same post objects as search_instagram (captions, engagement metrics, media URLs, author metadata, hashtags, mentions) plus the hashtag's total post count, up to about 30 new posts per page (billed per page). sort_by picks the hashtag page tab: top (default), recent, or reels.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `hashtag` (string, required): Hashtag, with or without the leading # (max 100 characters), e.g. summer
- `pages` (integer): Number of pages to fetch, 1-10 (default: 1). Each page adds up to about 30 posts (repeats across pages are removed)
- `sort_by` (string): Hashtag tab: top (default), recent (newest first), or reels (Reels only)

### `search_threads` (~111 tokens)

Search Threads (Meta's Threads app) posts by keyword. Returns post text, author, engagement metrics, media, and post permalinks. Billed $0.006 per request.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `query` (string, required): Search keyword (max 500 characters)

### `search_threads_users` (~57 tokens)

Search Threads (Meta's Threads app) users by keyword. Returns username, full name, verification status, and profile picture. Billed $0.006 per request.

Input parameters:

- `query` (string, required): Search keyword (max 500 characters)

### `threads_user_profile` (~72 tokens)

Get the full profile for a single Threads (Meta's Threads app) user by username. Returns biography, bio links, follower count, verification status, and profile metadata. Billed $0.006 per request.

Input parameters:

- `username` (string, required): Threads username, with or without leading @ (max 100 characters)

### `threads_user_posts` (~121 tokens)

Get a single Threads (Meta's Threads app) user's recent posts by username. Returns post text, engagement metrics, media, timestamps, and permalinks. Billed $0.006 per request.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `username` (string, required): Threads username, with or without leading @ (max 100 characters)

### `truthsocial_user_posts` (~172 tokens)

Get a single Truth Social user's recent posts (their feed) by username. Returns post text, engagement metrics (replies, reposts, likes), media attachments, hashtags, reply status, and permalinks. Up to 20 posts per page; billed $0.006 per page.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 20 posts
- `username` (string, required): Truth Social username, with or without leading @ (max 100 characters)

### `search_bluesky` (~212 tokens)

Search Bluesky posts by keyword. Billed $0.003 per page.

Input parameters:

- `end_date` (string): Only posts up to this date (format: YYYY-MM-DD)
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 posts; you are billed per page returned.
- `query` (string, required): Search keyword (max 500 characters). Bluesky search syntax works: "exact phrase", -exclude, from:handle, lang:en, #tag
- `sort_by` (string): Sort order: "most_recent" or "relevance"
- `start_date` (string): Only posts from this date onward (format: YYYY-MM-DD)

### `search_bluesky_users` (~79 tokens)

Search Bluesky users by keyword. Billed $0.003 per page.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 users; you are billed per page returned.
- `query` (string, required): Search keyword (max 500 characters)

### `bluesky_user_profile` (~106 tokens)

Get a Bluesky user's full profile by handle, DID, or profile URL. Billed $0.003 per request. Provide exactly one of username or url.

Input parameters:

- `url` (string): Bluesky profile URL, e.g. https://bsky.app/profile/bsky.app (max 500 characters).
- `username` (string): Bluesky handle, e.g. bsky.app, with or without leading @, or the account's DID (max 100 characters).

### `bluesky_user_posts` (~222 tokens)

Get a user's feed by handle: their posts, replies, and reposts in feed order (the pinned post first, then newest first), each flagged with is_reply, is_repost, and is_pinned. Billed $0.003 per page. Provide exactly one of username or url.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 posts; you are billed per page returned.
- `url` (string): Bluesky profile URL, e.g. https://bsky.app/profile/bsky.app (max 500 characters).
- `username` (string): Bluesky handle, e.g. bsky.app, with or without leading @, or the account's DID (max 100 characters).

### `bluesky_user_followers` (~141 tokens)

Get the followers of a Bluesky user, newest first. Billed $0.003 per page. Provide exactly one of username or url.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 accounts; you are billed per page returned.
- `url` (string): Bluesky profile URL, e.g. https://bsky.app/profile/bsky.app (max 500 characters).
- `username` (string): Bluesky handle, e.g. bsky.app, with or without leading @, or the account's DID (max 100 characters).

### `bluesky_user_following` (~141 tokens)

Get the accounts a Bluesky user follows, newest first. Billed $0.003 per page. Provide exactly one of username or url.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 accounts; you are billed per page returned.
- `url` (string): Bluesky profile URL, e.g. https://bsky.app/profile/bsky.app (max 500 characters).
- `username` (string): Bluesky handle, e.g. bsky.app, with or without leading @, or the account's DID (max 100 characters).

### `bluesky_user_likes` (~193 tokens)

Get the posts a Bluesky user has liked, newest first. Billed $0.003 per page. Provide exactly one of username or url.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 posts; you are billed per page returned.
- `url` (string): Bluesky profile URL, e.g. https://bsky.app/profile/bsky.app (max 500 characters).
- `username` (string): Bluesky handle, e.g. bsky.app, with or without leading @, or the account's DID (max 100 characters).

### `bluesky_post_details` (~194 tokens)

Get a single Bluesky post by URL or ID. Billed $0.003 per request. Provide exactly one of url or post_id.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `post_id` (string): The post's AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters).
- `url` (string): Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters).

### `bluesky_post_comments` (~192 tokens)

Get the replies to a Bluesky post. Billed $0.003 per request. Provide exactly one of url or post_id.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `post_id` (string): The post's AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters).
- `url` (string): Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters).

### `bluesky_post_likes` (~184 tokens)

Get the users who liked a Bluesky post, newest first. Billed $0.003 per page. Provide exactly one of url or post_id.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 accounts; you are billed per page returned.
- `post_id` (string): The post's AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters).
- `url` (string): Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters).

### `bluesky_post_quotes` (~234 tokens)

Get the posts that quote a Bluesky post, newest first. Billed $0.003 per page. Provide exactly one of url or post_id.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 posts; you are billed per page returned.
- `post_id` (string): The post's AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters).
- `url` (string): Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters).

### `bluesky_post_reposts` (~185 tokens)

Get the users who reposted a Bluesky post, newest first. Billed $0.003 per page. Provide exactly one of url or post_id.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 accounts; you are billed per page returned.
- `post_id` (string): The post's AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters).
- `url` (string): Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters).

### `search_tiktok` (~194 tokens)

Search TikTok videos by keyword.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch, 1-10 (default: 1)
- `publish_time` (integer): Time filter: 0=ALL, 1=24h, 7=week, 30=month, 90=3months, 180=6months
- `query` (string, required): Search keyword (max 500 characters)
- `region` (string): 2-letter region code, e.g. "us", "gb", "jp"
- `sort_by` (string): Sort order: "relevance", "most_recent", or "most_liked"

### `search_tiktok_users` (~70 tokens)

Search TikTok users by keyword. Returns username, bio, follower/following counts, likes, and video count.

Input parameters:

- `pages` (integer): Number of pages to fetch, 1-10 (default: 1)
- `query` (string, required): Search keyword (max 500 characters)

### `tiktok_user_profile` (~147 tokens)

Get the full profile for a single TikTok user by username, numeric user ID, or profile URL. Returns bio, bio link, follower/following counts, total likes, video count, verification status, join date, and linked Instagram/X/YouTube accounts. Provide exactly one of username, user_id, or url.

Input parameters:

- `url` (string): TikTok profile URL, e.g. https://www.tiktok.com/@tiktok (max 500 characters)
- `user_id` (string): Numeric TikTok user ID, as returned by search_tiktok_users
- `username` (string): TikTok username, with or without leading @ (max 100 characters)

### `tiktok_video_details` (~124 tokens)

Get full details for a single TikTok video by video URL or numeric video ID. Returns the caption, play/like/comment/share/save counts, watermark-free playback and download URLs, cover images, music track info, and author details. Provide exactly one of url or video_id.

Input parameters:

- `url` (string): TikTok video URL, e.g. https://www.tiktok.com/@tiktok/video/7516594811734854943 (max 500 characters)
- `video_id` (string): Numeric TikTok video ID, as returned by search_tiktok

### `facebook_page_details` (~50 tokens)

Get detailed information about a Facebook page including name, followers, categories, contact info, and verification status.

Input parameters:

- `url` (string, required): Facebook page URL (e.g. https://www.facebook.com/facebook)

### `facebook_page_posts` (~135 tokens)

Get recent posts from a Facebook page by page ID.

Input parameters:

- `end_date` (string): Filter posts until this date
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page_id` (string, required): Facebook page ID (numeric)
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `start_date` (string): Filter posts from this date

### `facebook_page_photos` (~55 tokens)

Get photos from a Facebook page.

Input parameters:

- `page_id` (string, required): Facebook page ID (numeric)
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.

### `facebook_page_videos` (~121 tokens)

Get videos from a Facebook page. Requires the delegate_page_id from the page details endpoint.

Input parameters:

- `delegate_page_id` (string, required): Delegate page ID (from page details endpoint)
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.

### `facebook_page_reels` (~122 tokens)

Get reels from a Facebook page. Requires the reels_page_id from the page details endpoint.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch (1-10, default 1). Billed per page.
- `reels_page_id` (string, required): Reels page ID (from page details endpoint)

### `facebook_page_reviews` (~105 tokens)

Get reviews for a Facebook page.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page_id` (string, required): Facebook page ID (numeric)
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.

### `facebook_group_details` (~35 tokens)

Get Facebook group details including name, description, members count, and privacy setting.

Input parameters:

- `url` (string, required): Facebook group URL

### `facebook_group_posts` (~126 tokens)

Get posts from a public Facebook group.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `group_id` (string, required): Facebook group ID (numeric)
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `sort_by` (string): Sort order: most_recent or relevance (default: most_recent)

### `facebook_post_comments` (~146 tokens)

Get comments on a Facebook post by post ID. Returns each comment's text, author details, reaction and reply counts, date, and any attachment.

Input parameters:

- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch (1-20, default 1). Billed per page.
- `post_id` (string, required): Facebook post ID (pfbid or numeric, from facebook_page_posts, facebook_group_posts, or search_facebook_posts)

### `search_facebook_posts` (~200 tokens)

Search Facebook posts by keyword across all of Facebook. Optionally scope results to a place with location_id (resolve one via the search_facebook_locations tool).

Input parameters:

- `end_date` (string): Filter posts until this date
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `location_id` (string): Facebook location ID (from search_facebook_locations) to scope results to a place
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: most_recent or relevance (default: relevance)
- `start_date` (string): Filter posts from this date

### `search_facebook_pages` (~55 tokens)

Search Facebook pages by keyword.

Input parameters:

- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `query` (string, required): Search keyword (max 500 characters)

### `search_facebook_videos` (~152 tokens)

Search Facebook videos by keyword.

Input parameters:

- `end_date` (string): Filter videos until this date
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `query` (string, required): Search keyword (max 500 characters)
- `sort_by` (string): Sort order: most_recent or relevance (default: relevance)
- `start_date` (string): Filter videos from this date

### `search_facebook_events` (~134 tokens)

Search Facebook events by keyword. Optionally scope results to a place with location_id (resolve one via the search_facebook_locations tool).

Input parameters:

- `end_date` (string): Filter events until this date (YYYY-MM-DD)
- `location_id` (string): Facebook location ID (from search_facebook_locations) to scope results to a place
- `pages` (integer): Number of pages to fetch (1-15, default 1). Billed per page.
- `query` (string, required): Search keyword (max 500 characters)
- `start_date` (string): Filter events from this date (YYYY-MM-DD)

### `search_facebook_locations` (~83 tokens)

Resolve a place name (city, region, or country) to Facebook location IDs. Use the returned id as the location_id argument to search_facebook_posts or search_facebook_events to scope a search to that place.

Input parameters:

- `query` (string, required): Place name to resolve, e.g. "London" or "Paris, France" (max 500 characters)

### `search_forums` (~156 tokens)

Search forum posts across the web.

Input parameters:

- `country` (string): 2-letter ISO country code, e.g. "us", "gb"
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page` (integer): Page number, 1-10 (default: 1). 10 posts per page
- `query` (string, required): Search keyword (max 500 characters)
- `time` (string): Time filter: "any", "hour", "day", "week", "month", or "year"

### `search_news` (~136 tokens)

Search news articles from thousands of sources worldwide.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `language` (string): 2-letter language code (default: "en")
- `limit` (integer): Number of results, 1-100 (default: 10)
- `query` (string, required): Search keyword (max 500 characters)
- `source` (string): Filter by news source domain, e.g. "bbc.com"
- `time_published` (string): Time filter: "anytime", "1h", "1d", "7d", or "1y"

### `search_web` (~231 tokens)

Search the web (Google organic results). Returns title, URL, snippet, source and domain for each result. Supports country and language targeting, time filters, city-level geo, and an optional Google AI Overview.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `device` (string): Device profile: "desktop" or "mobile"
- `include_ai_overview` (boolean): Include Google AI Overview when available (+$0.002 flat surcharge)
- `language` (string): 2-letter language code (default: "en")
- `location` (string): City-level geo location (e.g. "London,England,United Kingdom")
- `pages` (integer): Number of result pages to fetch, 1-10 (default: 1). 10 results per page.
- `query` (string, required): Search keyword (max 500 characters). Supports Google advanced operators (site:, inurl:, intitle:, etc.)
- `time` (string): Time filter: "any", "hour", "day", "week", "month", or "year"

### `google_ai_mode` (~120 tokens)

Send a prompt to Google's AI Mode and get back a structured conversational reply (reply_parts: paragraphs, headings, lists, images) with reference_links citations. Use session_token from a previous response to continue the conversation.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `language` (string): 2-letter language code (default: "en")
- `prompt` (string, required): The AI Mode prompt (max 12000 characters)
- `session_token` (string): Token from a prior response to continue the conversation

### `search_places` (~222 tokens)

Search Google Maps places (local businesses, points of interest) by free-text query. Returns place_id, name, address, phone, website, rating, review count, opening hours, coordinates, and more. Optionally bias results by geographic center (lat/lng/zoom). Each page returns up to 10 results.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `language` (string): 2-letter language code (default: "en")
- `lat` (number): Center latitude for geographic bias (use with lng)
- `lng` (number): Center longitude for geographic bias (use with lat)
- `pages` (integer): Number of pages, 1-20 (default: 1). Each page returns up to 10 results and is billed as one request.
- `query` (string, required): Search keyword, e.g. "coffee shops brooklyn" (max 500 characters)
- `zoom` (integer): Map zoom level 1-20 (default: 13). Smaller widens radius.

### `place_details` (~143 tokens)

Get full details for a Google Maps place by place_id (the ChIJ... value returned by search_places). Returns name, address, phone, website, rating, review counts per star, opening hours, photos sample, coordinates, plus codes, menu link, owner info, and an emails / phones / social profile scrape of the place's website.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `language` (string): 2-letter language code (default: "en")
- `place_id` (string, required): Google place_id (e.g. ChIJifIePKtZwokRVZ-UdRGkZzs)

### `place_reviews` (~263 tokens)

Get user reviews for a Google Maps place by place_id. Each review includes rating, review text, author info, timestamps, photos, and any owner response. Each page returns up to 10 reviews. The `language` parameter filters reviews to those originally written in that language (language=fr returns French reviews only, language=es returns Spanish only, etc.). Combine with sort_by (4 options) to surface a much larger pool.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `language` (string): 2-letter language code (default: "en"). Filters reviews to those originally written in this language.
- `pages` (integer): Number of pages, 1-10 (default: 1). Each page returns up to 10 reviews and is billed as one request.
- `place_id` (string, required): Google place_id
- `sort_by` (string): Sort order
- `translate_reviews` (boolean): Translate the returned reviews into the requested language

### `place_photos` (~164 tokens)

Get photos and videos for a Google Maps place by place_id. Returns photo URLs (both standard and large), coordinates, and capture timestamps. Photos and videos are returned together — filter by the type field client-side if you want one or the other. Use the pages parameter to fetch more — each page returns up to 10 items and is billed as one request.

Input parameters:

- `country` (string): 2-letter country code (default: "us")
- `language` (string): 2-letter language code (default: "en")
- `pages` (integer): Number of pages to fetch, 1-10 (default: 1). Each page returns up to 10 items and is billed as one request.
- `place_id` (string, required): Google place_id

### `search_amazon_products` (~365 tokens)

Search Amazon products by keyword across 24 marketplaces. Returns ASIN, title, price, original price, rating, ratings count, Prime status, sales volume, badges, and delivery info. Filter by category, price range, condition, brand, seller, Prime eligibility, deals, and rating floor. Each page returns ~16 results.

Input parameters:

- `brand` (string): Brand name(s), comma-separated for multiple
- `category` (string): Numeric Amazon category node ID(s) from an Amazon URL's ?node= parameter, comma-separated
- `category_id` (string): Category slug, e.g. electronics (see /docs/amazon-categories)
- `country` (string): Marketplace country code (default: "us"). One of: us, au, br, ca, cn, fr, de, in, it, mx, nl, sg, es, tr, ae, gb, jp, sa, pl, se, be, eg, za, ie
- `deals_and_discounts` (string): Deals filter
- `four_stars_and_up` (boolean): Only products rated 4 stars and up
- `is_prime` (boolean): Only products with Prime-eligible offers
- `max_price` (number): Maximum price in the marketplace currency
- `min_price` (number): Minimum price in the marketplace currency
- `page` (integer): Page number, 1-20 (default: 1). Each page returns ~16 results.
- `product_condition` (string): Product condition filter
- `query` (string, required): Search keyword or a product ASIN (max 500 characters)
- `seller_id` (string): Only products from specific seller ID(s), comma-separated
- `sort_by` (string): Sort order

### `amazon_product_details` (~104 tokens)

Get full details for an Amazon product by ASIN (the 10-character code returned by search_amazon_products). Returns pricing, buy box with seller_id, availability, condition, photos, videos, specs, about bullets, description, rating breakdown per star, and top reviews.

Input parameters:

- `asin` (string, required): 10-character Amazon ASIN (e.g. B07ZPKN6YR)
- `country` (string): Marketplace country code (default: "us")

### `amazon_seller_profile` (~115 tokens)

Get an Amazon seller's profile by seller ID (from a product's main_buy_box.seller_id). Returns seller name, logo, about text, registered business name and address, average rating, total ratings, positive-feedback percentage, and a feedback breakdown over 30 days / 90 days / 12 months / lifetime.

Input parameters:

- `country` (string): Marketplace country code (default: "us")
- `seller_id` (string, required): Amazon seller ID (e.g. A2L77EE7U53NWQ)

### `amazon_seller_reviews` (~176 tokens)

Get customer feedback for an Amazon seller by seller ID. Each review includes author name, text, star rating, date, and whether the seller responded. Filter by star rating (5_stars..1_stars) or positive/critical sentiment; paginate with page until has_next_page is false.

Input parameters:

- `country` (string): Marketplace country code (default: "us")
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `page` (integer): Page number, 1-50 (default: 1)
- `seller_id` (string, required): Amazon seller ID
- `star_rating` (string): Star rating filter

### `amazon_seller_products` (~123 tokens)

Get the catalog of products sold by an Amazon seller by seller ID. Returns the same product objects as search_amazon_products plus the seller's total catalog size. Each page returns ~16 results; sortable by price, reviews, newest, or best sellers.

Input parameters:

- `country` (string): Marketplace country code (default: "us")
- `page` (integer): Page number, 1-50 (default: 1). Each page returns ~16 results.
- `seller_id` (string, required): Amazon seller ID
- `sort_by` (string): Sort order

### `amazon_best_sellers` (~161 tokens)

Get Amazon best-seller rankings for a category — Best Sellers, New Releases, Movers & Shakers, Most Wished For, or Gift Ideas. Each item includes rank, rank change, ASIN, title, price, and rating. Each page returns up to 50 ranked items (rankings typically cover the top 100).

Input parameters:

- `category` (string, required): Category slug, e.g. electronics or software (see /docs/amazon-categories)
- `country` (string): Marketplace country code (default: "us")
- `page` (integer): Page number, 1 or 2 (default: 1). Each page returns up to 50 items; rankings cover the top 100.
- `type` (string): Ranking type

### `trustpilot_company_reviews` (~329 tokens)

Get a company's Trustpilot reviews plus its full profile (TrustScore, star rating, review counts, per-star breakdown, categories, claimed/verification status, reply behaviour, contact details). Each review has rating, title, text, dates, verification level, likes, author id/name/country and the company's reply. Filter by star rating, recency, language, verified-only, has-reply, or keyword. 20 reviews per page, up to 10 pages in one call.

Input parameters:

- `domain` (string, required): Company website domain (e.g. gossby.com) or its Trustpilot review-page URL
- `get_sentiment` (boolean): Add AI sentiment analysis (Plutchik emotions, dominant_emotion, intensity, and positive/negative/neutral polarity) to each result. Adds a small surcharge per page, or per request on single-request en…
- `language` (string): 2-letter ISO 639-1 language code (default: all languages)
- `pages` (integer): Pages to fetch, 1-10 (default: 1). Each page returns up to 20 reviews and is billed as one request.
- `posted_ago` (string): Only reviews from this period
- `query` (string): Only reviews matching this keyword
- `rating` (string): Only these star ratings, comma-separated 1-5 (e.g. '1,2')
- `sort_by` (string): Sort order
- `verified` (boolean): Only verified reviews
- `with_replies` (boolean): Only reviews the company replied to

### `search_trustpilot_companies` (~154 tokens)

Search Trustpilot companies by name or keyword. Each match includes business_unit_id, name, domain, website, Trustpilot page URL, logo, TrustScore rating, stars, review count, categories, and location. Also returns matching categories (feed a category_id into trustpilot_category_companies). 10 results per page; filter by minimum rating and minimum review count.

Input parameters:

- `min_rating` (string): Minimum TrustScore
- `min_review_count` (string): Minimum number of reviews
- `page` (integer): Page number, 1-500 (default: 1). Each page returns up to 10 results.
- `query` (string, required): Company name or keyword (max 500 characters)

### `trustpilot_category_companies` (~208 tokens)

List the companies in a Trustpilot category (20 per page, up to 500 pages) with name, domain, TrustScore, review count, categories and location, plus the category's size and subcategories. Filter by country, minimum rating and claimed status; sort by recommended or recently reviewed. Category IDs: see /docs/trustpilot-category-ids or search_trustpilot_categories.

Input parameters:

- `category_id` (string, required): Trustpilot category slug (e.g. electronics_technology, bank) or a trustpilot.com/categories/... URL
- `claimed` (boolean): Only companies that have claimed their Trustpilot profile
- `country` (string): 2-letter ISO 3166-1 country code (default: all countries)
- `min_rating` (string): Minimum TrustScore
- `page` (integer): Page number, 1-500 (default: 1). Each page returns up to 20 companies.
- `sort_by` (string): Sort order

### `trustpilot_category_newest` (~84 tokens)

Get the newest companies added to a Trustpilot category (a short unpaginated list, often 0-10 entries) with name, domain, TrustScore, review count and location, plus the category's size and subcategories.

Input parameters:

- `category_id` (string, required): Trustpilot category slug (e.g. bank) or a trustpilot.com/categories/... URL

### `trustpilot_category_details` (~79 tokens)

Get a Trustpilot category: display name, number of businesses, parent category, and its subcategories with their ids and business counts. Works for top-level, second- and third-level category slugs.

Input parameters:

- `category_id` (string, required): Trustpilot category slug (e.g. electronics_technology) or a trustpilot.com/categories/... URL

### `search_trustpilot_categories` (~82 tokens)

Search Trustpilot categories by keyword. Returns up to 6 fuzzy matches with category_id and name; the search never returns zero matches, so check the names. Feed a category_id into trustpilot_category_companies or trustpilot_category_details.

Input parameters:

- `query` (string, required): Keyword (max 200 characters), e.g. 'bank' or 'shop'

### `trustpilot_user_profile` (~133 tokens)

Get a Trustpilot reviewer's public profile (name, country, review count, verified, likes, reads) and the reviews they have written across all companies, 20 per page, each with the company name/domain, rating, title, text, dates and the company's reply. The user_id is a review's author_id.

Input parameters:

- `page` (integer): Page number, 1-500 (default: 1). Each page returns up to 20 reviews.
- `user_id` (string, required): Reviewer ID (24 hex characters, a review's author_id) or a trustpilot.com/users/... URL

### `batch_requests` (~145 tokens)

Execute up to 100 API Direct requests in a single call — any mix of the other tools' endpoints (e.g. 50 twitter_user_profile lookups + 50 instagram_user_profile lookups). Items run concurrently server-side and each returns its own status and body, in input order. The batch call itself is free; each item bills at its endpoint's normal rate. Not supported inside a batch: /v1/web/ai-mode. Large batches can take several minutes. See /docs/batch.

Input parameters:

- `requests` (array, required): 1-100 items to execute. Each item's params are exactly the query parameters that endpoint accepts when called directly (string or number values).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-apidirect-api-direct/apidirect#diagnostics

## Score history

- 2026-09-20: 75
- 2026-09-19: 75
- 2026-09-18: 75
- 2026-09-17: 75
- 2026-09-16: 75
- 2026-09-15: 75
- 2026-09-14: 75
- 2026-09-13: 75
- 2026-09-12: 74
- 2026-09-11: 74
- 2026-09-10: 74
- 2026-09-09: 73
- 2026-09-08: 73
- 2026-09-07: 72
- 2026-09-06: 72
- 2026-09-05: 71
- 2026-09-04: 71
- 2026-09-03: 70
- 2026-09-02: 70
- 2026-09-01: 70
- 2026-08-31: 69
- 2026-08-30: 69
- 2026-08-29: 68
- 2026-08-28: 68
- 2026-08-27: 67
- 2026-08-26: 67
- 2026-08-25: 69
- 2026-08-24: 69
- 2026-08-23: 68
- 2026-08-22: 68

## Common questions

### What is the API Direct MCP server?

API Direct is an MCP server listed in the public MCP registry as io.apidirect/api-direct. Search social media, news, forums and Google Maps: LinkedIn, X, Reddit, TikTok, YouTube. This page covers its hosted endpoint (https://apidirect.io/mcp).

### Is the API Direct MCP server safe to use?

API Direct scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the API Direct MCP server expose?

API Direct exposes 102 tools: list_skills, get_skill, search_linkedin, linkedin_person_posts, linkedin_post_details, and 97 more. Their descriptions and schemas cost roughly 14,256 tokens of context every time the server is loaded.

### Does the API Direct MCP server require authentication?

No. We connected to API Direct without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the API Direct MCP server still maintained?

API Direct is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://apidirect.io/mcp
- Authorisation metadata: https://apidirect.io/.well-known/oauth-protected-resource/mcp
- Website: https://apidirect.io/
- Changelog RSS feed: https://verifymcp.io/servers/io-apidirect-api-direct/apidirect.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-apidirect-api-direct/apidirect.json
- HTML version of this page: https://verifymcp.io/servers/io-apidirect-api-direct/apidirect
