Skip to main content
Glama
SocialAPIsHub

SocialAPIs: Facebook & Instagram Data

Official

SocialAPIs MCP Server

SocialAPIs Logo

Facebook & Instagram data for AI agents — local (npx) or hosted (remote MCP)

npm version License: MIT GitHub stars SocialAPIs MCP Server MCP server – quality and maintenance score on Glama

Website • Documentation • Discord • npm

Install in Cursor

Official SDKs: Python • JavaScript / TypeScript • Go


🚀 Quick Start

AI agents (Cline, Claude Code, Cursor): follow llms-install.md for step-by-step install and verification.

One-click: use the Install in Cursor button above — then replace YOUR_API_KEY in Cursor's MCP settings with your key. Also listed on Smithery, cursor.directory, mcp.so and the official MCP Registry (io.github.SocialAPIsHub/social-media-api).

Option A — Hosted (remote MCP, no install)

Point any client that supports remote MCP servers (Streamable HTTP) at:

https://mcp.socialapis.io/mcp

Authenticate with your SocialAPIs API key in a header:

Authorization: Bearer YOUR_API_KEY

(x-api-token: YOUR_API_KEY also works.) Tool listing works without a key; tool calls need one. Example config for clients that take a URL + headers:

{
  "mcpServers": {
    "socialapis": {
      "url": "https://mcp.socialapis.io/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Option B — Local (npx, stdio)

Installation

npm install -g @socialapis/mcp

Configuration

Add to your Claude Desktop config:

macOS:

nano ~/Library/Application\ Support/Claude/claude_desktop_config.json

Windows:

notepad %APPDATA%\Claude\claude_desktop_config.json

Related MCP server: Facebook MCP Server

🔧 Configuration

{
  "mcpServers": {
    "socialapis": {
      "command": "npx",
      "args": ["-y", "@socialapis/mcp", "YOUR_API_KEY"]
    }
  }
}

Method 2: Environment Variable

# Set environment variable
export SOCIALAPIS_API_KEY=your_api_key_here

# Run without argument
npx @socialapis/mcp

Method 3: .env File (For Development)

# Copy example file
cp .env.example .env

# Edit with your values
nano .env

.env file:

SOCIALAPIS_API_KEY=your_api_key_here
MCP_PROXY_URL=https://mcp.socialapis.io

Environment Variables

Variable

Description

Default

SOCIALAPIS_API_KEY

Your SocialAPIs API key

None (required)

MCP_PROXY_URL

MCP proxy server URL

https://mcp.socialapis.io

PORT

HTTP server port

3001

API_BASE_URL

Backend API URL

https://api.socialapis.io

SOCIALAPIS_CATALOG_URL

Live endpoint catalog the server follows (server only)

https://auth.socialapis.io/api/public/endpoints

SOCIALAPIS_CATALOG_REFRESH_MS

How often the catalog (server) or tool list (npm client) is re-read

600000 (10 min)

SOCIALAPIS_LIVE_CATALOG

0 = always use the bundled definitions (server only)

on

Live catalog

Prices, descriptions and parameters follow the SocialAPIs API without a new release. The server reads the public endpoint catalog at startup (3 s timeout) and every 10 minutes, compares it with src/catalogBaseline.json (the catalog src/tools.js was written against) and applies only what changed since: a new price replaces the tool's Pricing: sentence, an edited description or parameter replaces ours, added and removed parameters are added and removed, and a disabled endpoint's action says "Currently unavailable." Tool and action names never change, and new endpoints don't become tools until a release adds them. If the catalog can't be read, or a change would make two actions' parameters conflict, the last good definitions (at first the bundled ones) stay. GET /health shows catalog: { source, version, fetchedAt, routes }. The npm client re-reads the tool list every 10 minutes and sends notifications/tools/list_changed when it changes.

After updating tools.js to match the API, refresh the baseline: node scripts/snapshot-catalog.mjs --from https://auth.socialapis.io/api/public/endpoints (public fields only).

Get API Key

  1. Sign up at socialapis.io

  2. Go to Dashboard

  3. Copy your API key

  4. Replace YOUR_API_KEY in config

Test It

Restart Claude Desktop and ask:

Get Nike's Facebook page details

📋 Features

  • 🌐 One API key - Facebook and Instagram behind a single interface

  • 🤖 AI-First - Built for Claude, Cursor, and AI agents

  • 📊 Rich Data - Posts, comments, engagement metrics

  • 🔍 Advanced Filtering - Time ranges, pagination

  • 🎯 Simple Auth - No OAuth complexity

  • 🧩 Structured output - every tool declares an output schema and returns { result, creditsCharged, creditsRemaining }, so agents can track credit spend directly

  • 🛡️ Read-only annotations - all tools are marked readOnlyHint, so clients can skip confirmation prompts

  • ⚡ Fast - Global edge network

  • 🔒 Secure - API keys stay local


🛠️ Available Tools

12 tools covering 50 actions across Facebook and Instagram. Each tool groups one resource and takes an action argument; every action maps to one REST endpoint on api.socialapis.io. Tool descriptions list each action, the parameters it needs and its credit cost.

Tool

Actions

facebook_page

details (followers, contact info, category; exact_followers_count=true costs 5 credits), id, posts (limit 3-9, date filters), videos (limit 6-12), reels, albums (profile_id from id, limit 8-16), album_items (photos and videos in an album)

facebook_group

details, id, posts (limit 3-9, date filters), videos, albums (group_id from id, limit 8-16), album_items

facebook_post

details, details_extended (view counts, video URLs, audio metadata), id, attachments (5 credits), video, comments, comment_replies

facebook_search

pages, people, posts, videos, locations (location UIDs for the other searches)

facebook_ads

search (ads by keyword, page, country, status), keywords (advertisers for a keyword), page_details, archive_details, countries

facebook_marketplace

search (price, location, category, condition filters), vehicles, rentals, listing, seller, categories, city_coordinates

facebook_media_download

Download URLs for Facebook images and videos

instagram_profile

details, id, posts, reels, highlights, highlight_details

instagram_post

details, id (shortcode from a post URL)

instagram_reels

feed, by_audio

instagram_search

Popular users, hashtags and places for a keyword

instagram_location

posts (recent or top), nearby

Example call: facebook_page with {"action": "posts", "link": "https://www.facebook.com/nike", "limit": 9}.

Upgrading from 1.x: the earlier per-endpoint tool names (facebook_get_page_details, instagram_get_profile_posts, …) still work when called directly, so existing prompts and scripts keep running. They're no longer listed. If your client auto-approves tools by name, add the new names.

Not supported yet

Only Facebook and Instagram are live today. TikTok, X / Twitter, LinkedIn and YouTube are on the roadmap with no committed dates — tools for them will appear here only once they ship.

Track the platform roadmap at socialapis.io/api-sources.


💡 Usage examples

Each prompt below is a real Claude Desktop session. Some of these are single-tool-call patterns ("get me X"); some require Claude to chain multiple calls + aggregate the results (noted where).

Single-call patterns (fast, cheap)

What's Nike's follower count on Facebook?
→ Uses facebook_page action=details (1 credit)

Get the latest 9 posts from facebook.com/EngenSA
→ Uses facebook_page action=posts with limit=9 (1-3 credits depending on actual returned count)

Show me the Meta ads currently running for "Apple Vision Pro" in Germany
→ Uses facebook_ads action=search (1 credit)

Multi-call patterns (Claude orchestrates these — but it's slower + more expensive)

Compare engagement on Nike vs Adidas's last 9 Facebook posts
→ Claude calls facebook_page action=posts twice (~2-6 credits total),
  aggregates reactions/comments/shares per post, returns a comparison.

What are people saying in the comments on Coca-Cola's last 3 posts?
→ Claude calls facebook_page action=posts (1 credit) then
  facebook_post action=comments 3 times (3 credits) and summarizes.

Show me marketplace listings for "PlayStation 5" under $400 in Berlin
→ Claude calls facebook_marketplace action=city_coordinates (1 credit) +
  facebook_marketplace action=search with filters (1 credit).

What this MCP server does NOT do

Some queries look natural in a chat ("compare engagement over the last month") but require aggregations the API doesn't expose as a single tool yet. Claude can still answer them, but it'll fan out into many tool calls — which is slow + expensive.

Query shape

Why it's hard

"Engagement rate over the last 30 days" for a page

Requires fetching every post in the date range (paginated, limit capped at 9 per call) and computing engagement per post. Hits the LLM tool-call budget on busy pages.

"Compare engagement rates between Brand A, B, C over the last month"

Same problem, 3× — one paginated fetch per brand, then comparison math. Works for small windows; slow for "last month" on high-volume pages.

Historical archive older than what Facebook itself serves

We surface what Facebook makes publicly visible. Posts that scrolled off Facebook's visible feed aren't retrievable.

Server-side time-series (daily engagement, weekly growth)

Not yet — on the roadmap as a future engagement-stats endpoint with built-in aggregation.

If your use case maps to one of these patterns and you want the aggregation pre-computed instead of LLM-orchestrated, contact support with the specific query — we're prioritizing the aggregation endpoint based on customer demand.


🏗️ Architecture

Claude Desktop
    ↓
@socialapis/mcp (local MCP client)
    ↓
https://mcp.socialapis.io (global proxy)
    ↓
https://api.socialapis.io (data API)

Why this architecture?

  • ✅ Low latency (global edge network)

  • ✅ High reliability (99.9% uptime)

  • ✅ Auto rate limiting

  • ✅ Smart caching

  • ✅ Your API key stays local


🔧 Development

Local Setup

# Clone repository
git clone https://github.com/SocialAPIsHub/mcp-server.git
cd mcp-server

# Install dependencies
npm install

# Run MCP client
npm start YOUR_API_KEY

# Run HTTP proxy server
npm run serve

Project Structure

mcp-server/
├── src/
│   ├── tools.js          # The 50 endpoint definitions (one per action)
│   ├── groups.js         # Groups them into the 12 listed tools
│   ├── catalogBaseline.json  # The API catalog tools.js was written against
│   ├── catalogOverlay.js # Applies live catalog changes to the definitions
│   └── liveCatalog.js    # Fetches the live catalog (startup + every 10 min)
├── scripts/snapshot-catalog.mjs  # Rewrites catalogBaseline.json
├── test/                 # node --test (npm run test:unit)
├── mcp-wrapper.js        # MCP client (runs locally)
├── server.js             # HTTP proxy server
├── package.json
├── Dockerfile
└── README.md

Testing

# Unit tests
npm run test:unit

# Test MCP client locally
node mcp-wrapper.js YOUR_API_KEY

# Test HTTP proxy
curl http://localhost:3001/health
curl http://localhost:3001/tools

# Test specific tool
curl -X POST http://localhost:3001/proxy \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool":"facebook_page","arguments":{"action":"details","link":"https://facebook.com/nike"}}'

📊 Pricing

Plan

Credits / month

Price

Free

200

$0

Pro

1,500

$4.99

Ultra

30,000

$49

Mega

120,000

$179

Enterprise

Custom

Contact us

Most tools cost 1 credit per call; each tool description states its exact price. Current plans: socialapis.io/pricing.

View detailed pricing →


🤝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for details.

Quick Contribution Guide

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request


📖 Documentation


💬 Support


🗺️ Roadmap

Shipped:

Upcoming:

  • TikTok support

  • X (Twitter) support

  • LinkedIn support

  • YouTube support

  • Advanced analytics — server-side aggregation endpoints (engagement-over-time, brand comparisons) so multi-call patterns become a single tool call

  • Real-time webhooks — push notifications on new posts / engagement thresholds

  • LangChain integration

Platform priorities shift based on customer demand. The fastest way to push something up the queue is to email support@socialapis.io or DM @socialapis on Telegram with the use case.


📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments


📇 Listed on

SocialAPIs MCP Server MCP server – quality and maintenance score on Glama

Also on the Official MCP Registry, Smithery, LobeHub, mcp.so, mcpservers.org, cursor.directory and awesome-remote-mcp-servers.


🌟 Star History

Star History Chart


Made with ❤️ by the SocialAPIs Team

Website • Twitter • Discord

Python SDK • JS SDK • Go SDK

Available Tools

12 tools
facebook_adsFacebook: AdsA
Read-only
Inspect

Meta Ads Library: search ads, find advertisers by keyword, advertiser page details, single ad details and supported countries.

Actions:

  • action=search: Search ads in the Meta Ad Library. Pass a keyword (query) to find ads about a topic, or ad_page_id to list one advertiser's ads; filter by country, active status and date range, sort by impressions or recency. Returns ads with creative, body text, dates, platforms and snapshot URL, plus an end_cursor. Get an advertiser's ad_page_id from action=keywords or facebook_page (action=details). Pricing: 1 credit per call. Inputs: query (optional), ad_page_id (optional), country (optional), activeStatus (optional), after_time (optional), before_time (optional), sort_data (optional), end_cursor (optional).

  • action=keywords: Find advertisers running ads that match a keyword: returns Facebook pages with their page_id and ad count. Use it to discover who advertises on a topic, then pass a page_id to action=search (as ad_page_id) or action=page_details. To get the ads for a keyword directly, use action=search. Pricing: 1 credit per call. Inputs: query (required), country (optional).

  • action=page_details: Get an advertiser's Ads Library profile: page name, verification status, category, location and total ad count. Needs the page ID (ad_page_id from facebook_page (action=details) or page_id from action=keywords). To list the ads themselves, use action=search with ad_page_id. Pricing: 1 credit per call. Inputs: page_id (required).

  • action=archive_details: Get one Ad Library ad in full: creative, body text, CTA, platforms, countries, date range, and spend and impression estimates where Meta publishes them. Needs the ad_archive_id from a action=search result. Pricing: 1 credit per call. Inputs: ad_archive_id (required), page_id (optional), country (optional), is_ad_non_political (optional), is_ad_not_aaa_eligible (optional).

  • action=countries: List the country codes the Ads Library tools accept in their country parameter. Pricing: 1 credit per call. Inputs: none.

NameRequiredDescriptionDefault
queryNoKeyword. search: words in the ads (or pass ad_page_id instead) · keywords: a topic to find advertisers for, e.g. running shoes. Required for: keywords. Optional for: search.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
countryNoISO country code or "ALL". Optional for: search, keywords, archive_details.
page_idNoAdvertiser page ID: ad_page_id from facebook_page (action=details), or page_id from action=keywords. Required for: page_details. Optional for: archive_details.
sort_dataNoSort by "impressions" or "recent". Optional for: search.
ad_page_idNoFacebook AD Page ID (alternative to query). Optional for: search.
after_timeNoFilter ads after this date (YYYY-MM-DD). Optional for: search.
end_cursorNoPagination cursor. Optional for: search.
before_timeNoFilter ads before this date (YYYY-MM-DD). Optional for: search.
activeStatusNoFilter: ALL, Active, or Inactive. Optional for: search.
ad_archive_idNoAd Library archive ID of the ad (ad_archive_id from a action=search result). Required for: archive_details.
is_ad_non_politicalNoFilter non-political ads. Optional for: archive_details.
is_ad_not_aaa_eligibleNoFilter AAA eligibility. Optional for: archive_details.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: a cost model ('Pricing: 1 credit per call') on every action, the presence of an end_cursor for pagination on search, and the caveat that spend/impression estimates are only returned 'where Meta publishes them'. It does not discuss rate limits or auth, but the annotations carry the safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with the overall scope, then cleanly organized as one bullet per action with a consistent 'Pricing/Inputs' footer, which makes scanning easy. It loses a point for redundancy: the identical 'Pricing: 1 credit per call' line is repeated five times, and the 'Inputs:' lines duplicate what the 100%-covered schema already states.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, 5-action multiplexed tool, the description covers every action, its inputs, its return shape in brief, its cost, and the cross-tool workflow to obtain each required ID. An output schema exists, so return-value detail is correctly left out, and nothing an agent needs to invoke a given action successfully is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already marks each parameter with 'Required for: X / Optional for: Y', so the description's per-action 'Inputs:' lines largely restate structured data. It does add a small amount of meaning (ad_page_id described as 'an alternative to query', and derivation of ad_archive_id from search results), but the baseline of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Meta Ads Library) and enumerates five distinct actions with a specific verb+output for each: search ads, find advertisers, advertiser page details, single ad details, supported countries. It also disambiguates from siblings by naming facebook_page (action=details) as the source of ad_page_id. An agent can tell exactly what each action does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given for every fork: action=keywords to discover advertisers then feed the page_id into action=search or action=page_details, and conversely 'To get the ads for a keyword directly, use action=search' rather than keywords. Prerequisites are stated per action (archive_details 'Needs the ad_archive_id from a action=search result'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

facebook_groupFacebook: GroupA
Read-only
Inspect

Public Facebook groups: details, group ID, posts, videos and photo albums.

Actions:

  • action=details: Get a public Facebook group's profile: name, description, member count, privacy, rules and activity stats. Use action=posts for its posts. Pricing: 1 credit per call. Inputs: link (required).

  • action=id: Resolve a Facebook group URL to its numeric group ID. Use action=details for the group's data. Pricing: 1 credit per call. Inputs: link (required).

  • action=posts: List recent posts from a public Facebook group, with text, media, author, reactions and comment counts. Returns 3-9 posts per call plus an end_cursor for the next page; filter by date with after_time / before_time. Pricing: ceil(posts_returned / 3) credits per call, minimum 1. Inputs: link (required), limit (optional), end_cursor (optional), after_time (optional), before_time (optional), timezone (optional).

  • action=videos: List videos posted in a public Facebook group, with video_id, title, duration, view count and thumbnail. Returns an end_cursor for the next page. Pricing: 1 credit per call. Inputs: link (required), end_cursor (optional).

  • action=albums: List the photo albums of a public Facebook group, with album_id, album_title, url, thumbnail_uri, photos_count and videos_count. Returns an end_cursor for the next page. Needs the numeric group ID (group_id) from action=id. To get the photos in an album, pass its album_id to action=album_items. Pricing: 1 credit per call. Inputs: group_id (required), limit (optional).

  • action=album_items: Get the photos and videos inside a Facebook album (from a page or a group): media_id, media_type, url, thumbnail_uri and timestamp (Unix seconds). Needs an album_id from facebook_page (action=albums) or action=albums. Returns an end_cursor for the next page. Pricing: 1 credit per call. Inputs: album_id (required), end_cursor (optional).

NameRequiredDescriptionDefault
linkNoFacebook group URL. Required for: details, id, posts, videos.
limitNoResults per call. posts: 3-9 (default 3) · albums: 8-16 (default 8). Optional for: posts, albums.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
album_idNoAlbum ID, from facebook_page (action=albums) or action=albums. Required for: album_items.
group_idNoFacebook group ID, from action=id. Required for: albums.
timezoneNoIANA timezone for returned timestamps, e.g. UTC or America/New_York. Default: UTC. Optional for: posts.
after_timeNoISO 8601 timestamp. Optional for: posts.
end_cursorNoPagination cursor. Optional for: posts, videos, album_items.
before_timeNoISO 8601 timestamp. Optional for: posts.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, non-destructive behavior, so the description need not cover safety. It goes further by disclosing per-action credit pricing, return sizes (3-9 posts per call), pagination via end_cursor, and timezone handling — genuinely useful operational context. It stops short of noting failure modes for private/inaccessible groups or any rate limits beyond pricing, keeping it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One lead sentence plus a clean per-action bullet format that groups purpose, pricing, and inputs consistently, so the agent can scan to a single action. It is somewhat long and repeats 'Pricing: 1 credit per call' across actions, but no sentence is empty of content and the purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-action tool with an output schema, the description supplies everything an agent needs: what each action returns, which inputs it requires, the inter-action dependencies (id before albums, albums before album_items), and cross-tool links to facebook_page. Return-value details are covered by the output schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: it maps each parameter to the actions that require it (link for details/id/posts/videos, group_id for albums, album_id for album_items) and explains that group_id comes from action=id and album_id from a prior albums call. The after_time/before_time date-filtering intent is also clarified beyond the bare ISO-8601 schema note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line names a specific resource (public Facebook groups) and its scope (details, group ID, posts, videos, photo albums), then each action is spelled out with the exact data it returns. It clearly differentiates itself from siblings like facebook_page by explicitly noting that album_items works for both, and by restricting the domain to groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Every action carries explicit routing guidance: 'Use action=posts for its posts', 'Use action=details for the group's data', and 'To get the photos in an album, pass its album_id to action=album_items'. Prerequisites are stated (albums needs the numeric group ID from action=id), so the agent knows the correct call sequence rather than guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

facebook_marketplaceFacebook: MarketplaceA
Read-only
Inspect

Facebook Marketplace: search listings, vehicles and rentals, listing and seller details, categories and city coordinates.

Actions:

  • action=search: Search general Facebook Marketplace listings (items for sale) by keyword or category near a location, with price, condition, radius and sort filters. Returns listings with their listing_id, plus an end_cursor. For cars and other vehicles use action=vehicles; for homes and rooms to rent use action=rentals. Get coordinates from action=city_coordinates. Pricing: 1 credit per call. Inputs: query (optional), category_url (optional), commerce_search_sort_by (optional), commerce_search_and_rp_condition (optional), filter_location_latitude (optional), filter_location_longitude (optional), filter_price_lower_bound (optional), filter_price_upper_bound (optional), filter_radius_km (optional), posted_today (optional), exact_match (optional), limit (optional), end_cursor (optional).

  • action=vehicles: Search Facebook Marketplace vehicle listings (cars, trucks, motorcycles) near a location, with price, radius and seller-type filters. Returns listings with title, price, mileage, year and listing_id, plus an end_cursor. For non-vehicle items, use action=search. Pricing: 1 credit per call. Inputs: sort_by (optional), filter_location_latitude (optional), filter_location_longitude (optional), filter_price_lower_bound (optional), filter_price_upper_bound (optional), filter_radius_km (optional), is_c2c_listing_only (optional), end_cursor (optional).

  • action=rentals: Search Facebook Marketplace rental listings (apartments, houses, rooms) near a location, with price, bedroom, bathroom and radius filters. Returns rental listings with their listing_id, plus an end_cursor. For items for sale, use action=search. Pricing: 1 credit per call. Inputs: sort_by (optional), filter_location_latitude (optional), filter_location_longitude (optional), filter_price_lower_bound (optional), filter_price_upper_bound (optional), filter_radius_km (optional), filter_bedrooms_min (optional), filter_bedrooms_max (optional), filter_bathrooms_min (optional), filter_bathrooms_max (optional), end_cursor (optional).

  • action=listing: Get one Marketplace listing in full: title, price, description, condition, all photos, location and seller. Needs the listing_id from a Marketplace search result. Pricing: 1 credit per call. Inputs: listing_id (required).

  • action=seller: Get a Marketplace seller's profile: name, join date, rating, review count and badges. Needs the seller_id from action=listing. Pricing: 1 credit per call. Inputs: seller_id (required).

  • action=categories: List Marketplace categories with their IDs and category_url values. Use a category_url to filter action=search. Pricing: 1 credit per call. Inputs: none.

  • action=city_coordinates: Convert a city name to the latitude and longitude that the Marketplace search tools expect in filter_location_latitude / filter_location_longitude. Pricing: 1 credit per call. Inputs: city (required), country (optional), exactly_one (optional).

NameRequiredDescriptionDefault
cityNoCity name, e.g. Austin. Required for: city_coordinates.
limitNoMaximum number of items to return. Default: 24. Optional for: search.
queryNoKeyword to search listings for, e.g. iphone 15. Optional for: search.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
countryNoCountry name or code. Optional for: city_coordinates.
sort_byNoSort order. vehicles: CREATION_TIME_DESCEND, PRICE_ASCEND, VEHICLE_MILEAGE_ASCEND, … · rentals: CREATION_TIME_DESCEND, PRICE_ASCEND, BEST_MATCH. Optional for: vehicles, rentals.
seller_idNoSeller ID, from the seller field of action=listing. Required for: seller.
end_cursorNoPagination cursor. Optional for: search, vehicles, rentals.
listing_idNoMarketplace listing ID, from a Marketplace search result. Required for: listing.
exact_matchNoWhen "true", exact match search. Optional for: search.
exactly_oneNoWhen "true", return exactly one result. Optional for: city_coordinates.
category_urlNoCategory URL slug. Optional for: search.
posted_todayNoWhen "true", limit to items posted today. Optional for: search.
filter_radius_kmNoSearch radius around the center in kilometres, e.g. 40. Optional for: search, vehicles, rentals.
filter_bedrooms_maxNoMaximum number of bedrooms. Optional for: rentals.
filter_bedrooms_minNoMinimum number of bedrooms, e.g. 2. Optional for: rentals.
is_c2c_listing_onlyNoIndividual sellers only. Optional for: vehicles.
filter_bathrooms_maxNoMaximum number of bathrooms. Optional for: rentals.
filter_bathrooms_minNoMinimum number of bathrooms, e.g. 1. Optional for: rentals.
commerce_search_sort_byNoSort: BEST_MATCH, CREATION_TIME_DESCEND, PRICE_ASCEND, etc. Optional for: search.
filter_location_latitudeNoLatitude of the search center, e.g. 30.2672 (from action=city_coordinates). Optional for: search, vehicles, rentals.
filter_price_lower_boundNoMinimum price in the local currency, whole number, e.g. 100. Optional for: search, vehicles, rentals.
filter_price_upper_boundNoMaximum price in the local currency, whole number, e.g. 2000. Optional for: search, vehicles, rentals.
filter_location_longitudeNoLongitude of the search center, e.g. -97.7431 (from action=city_coordinates). Optional for: search, vehicles, rentals.
commerce_search_and_rp_conditionNoCondition: new, used_like_new, used_good, used_fair. Optional for: search.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. Beyond that, the description discloses per-call credit pricing, pagination via end_cursor, and the required upstream identifiers for listing/seller calls, which are genuinely useful operational facts the annotations do not carry. It stops short of auth or rate-limit detail, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The length is justified by seven actions and 25 parameters, and structure is strong: a front-loaded overview followed by one labeled block per action with purpose, returns, alternatives, and inputs. The repeated 'Pricing: 1 credit per call' line is mildly redundant but earns its place by informing cost decisions per action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity, multi-action tool the description covers every action's purpose, alternatives, prerequisites, and returns, and an output schema exists to handle response shape. Nothing an agent needs in order to pick the right action and supply the right arguments is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already carries its own 'Required for:'/'Optional for:' tagging, so the schema does the heavy lifting. The per-action 'Inputs:' lists in the description mirror that mapping but add no syntax, format, or constraint detail beyond what the schema states (e.g., condition values, coordinate examples). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the resource (Facebook Marketplace) and enumerates every operation it covers: listings, vehicles, rentals, listing/seller details, categories, and city coordinates. Each action entry begins with a specific verb+resource (e.g., 'Search Facebook Marketplace vehicle listings'), and the Marketplace scope clearly separates it from sibling tools like facebook_search or facebook_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routing is explicit at every decision point: 'For cars and other vehicles use action=vehicles; for homes and rooms to rent use action=rentals. Get coordinates from action=city_coordinates,' and the reverse guards ('For non-vehicle items, use action=search'). It also states the dependency chain (listing needs listing_id from a search; seller needs seller_id from listing), so an agent never has to infer the correct action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

facebook_media_downloadFacebook: Media DownloadA
Read-only
Inspect

Resolve a Facebook media URL (image, video or audio, e.g. from a post or reel) to direct downloadable file URLs. Returns URLs, not file bytes. Pricing: 1 credit per call. Inputs: url (required).

NameRequiredDescriptionDefault
urlYesFacebook media URL to download

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds two genuinely useful behavioral facts beyond that: it returns URLs rather than file bytes (so the agent must fetch the file separately), and it costs 1 credit per call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and return semantics before the pricing and input notes. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter resolver with an output schema and full annotation coverage, the description supplies everything needed: what it resolves, that the output is URLs not bytes, and the cost. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required parameter with 100% schema description coverage, so the schema already documents it fully. The description only restates that url is required and adds no syntax, format, or constraint detail beyond the schema; the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Resolve a Facebook media URL ... to direct downloadable file URLs') and enumerates accepted media types (image, video, audio) with example sources (post, reel). This clearly separates it from the sibling listing/search tools like facebook_post or facebook_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope statement ('e.g. from a post or reel') and by the explicit note that it returns URLs rather than bytes, which tells the agent when this is the right call. However, there is no explicit when-to-use/when-not guidance and no named alternative among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

facebook_pageFacebook: PageA
Read-only
Inspect

Facebook pages: profile details, page ID, posts, videos, reels and photo albums.

Actions:

  • action=details: Get a Facebook page's profile: name, category, follower and like counts, bio, contact info (email, phone, website, address), rating and the ad_page_id used by the Ads Library tools. Use it when you have the page URL; to find a page by name, use facebook_search (action=pages) first. Pricing: 1 credit per call; 5 credits when exact_followers_count=true. Inputs: link (required), exact_followers_count (optional).

  • action=id: Resolve a Facebook page URL to its numeric page ID. Use it when another tool needs a page or profile ID; use action=details for the page's data. Pricing: 1 credit per call. Inputs: link (required).

  • action=posts: List a Facebook page's recent posts, newest first, with text, media, reactions, comment and share counts. Returns 3-9 posts per call plus an end_cursor for the next page; filter by date with after_time / before_time. For reels or videos only, use action=reels or action=videos. Pricing: ceil(posts_returned / 3) credits per call, minimum 1. Inputs: link (required), limit (optional), end_cursor (optional), after_time (optional), before_time (optional), timezone (optional).

  • action=videos: List videos uploaded to a Facebook page, with video_id, title, duration, view count and thumbnail. Provide the page URL (link) or its numeric profile_id. Returns an end_cursor for the next page. For short-form reels, use action=reels. Pricing: 1 credit per call. Inputs: link (optional), profile_id (optional), limit (optional), end_cursor (optional).

  • action=reels: List a Facebook page's reels (short-form videos). Returns an end_cursor for the next page. For long-form videos, use action=videos. Pricing: 1 credit per call. Inputs: link (required), end_cursor (optional).

  • action=albums: List the photo albums of a Facebook page, with album_id, album_title, url, thumbnail_uri and album_items_count (text, e.g. "400 items"). Needs the numeric page ID (profile_id) from action=id. Returns an end_cursor for the next page. To get the photos in an album, pass its album_id to action=album_items. Pricing: 1 credit per call. Inputs: profile_id (required), limit (optional), end_cursor (optional).

  • action=album_items: Get the photos and videos inside a Facebook album (from a page or a group): media_id, media_type, url, thumbnail_uri and timestamp (Unix seconds). Needs an album_id from action=albums or facebook_group (action=albums). Returns an end_cursor for the next page. Pricing: 1 credit per call. Inputs: album_id (required), end_cursor (optional).

NameRequiredDescriptionDefault
linkNoFacebook page URL, e.g. https://facebook.com/nike. For videos you can pass profile_id instead. Required for: details, id, posts, reels. Optional for: videos.
limitNoResults per call. posts: 3-9 (default 3) · videos: 6-12 (default 6) · albums: 8-16 (default 8). Optional for: posts, videos, albums.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
album_idNoAlbum ID, from action=albums or facebook_group (action=albums). Required for: album_items.
timezoneNoTimezone for timestamps (e.g., UTC, America/New_York). Optional for: posts.
after_timeNoISO 8601 timestamp - only return posts after this time. Optional for: posts.
end_cursorNoPagination cursor from the previous response. Optional for: posts, videos, reels, albums, album_items.
profile_idNoNumeric Facebook page ID, from action=id. For videos, an alternative to link. Required for: albums. Optional for: videos.
before_timeNoISO 8601 timestamp - only return posts before this time. Optional for: posts.
exact_followers_countNoWhen true, performs a deeper scrape to return the exact follower count (e.g. 38,493,217 instead of "38M"). Charges 5 credits when true, 1 credit otherwise. Default: false. Optional for: details.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the read-only/non-destructive/open-world safety profile, and the description adds a great deal beyond that: per-action credit pricing (including the 5-credit surcharge for exact_followers_count and ceil(posts_returned/3) for posts), per-action return volumes (3-9 posts, 6-12 videos, 8-16 albums), and pagination via end_cursor. The deeper-scrape behavior behind exact_followers_count ('38,493,217 instead of "38M"') is disclosed before the agent spends the credits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary sentence followed by one consistently formatted block per action, which is the right structure for a 7-action tool. It is dense with no filler, though the repeated 'Pricing: N credit per call' lines and a few Inputs lines restate what the schema already lists, adding mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, 7-action tool with an output schema, this definition covers everything an agent needs to choose an action, satisfy its parameter requirements, chain calls (id -> albums -> album_items), and anticipate cost and pagination. Return values are described as a bonus even though the output schema already carries them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so the baseline is 3, but the description adds workflow semantics the schema cannot express: which parameters each action needs, that profile_id is the numeric ID obtained from action=id, that album_id must come from action=albums or facebook_group, and that link/profile_id are interchangeable for videos. It also explains the effect of after_time/before_time and timezone on the posts action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the resource (Facebook pages) and the data surface (profile details, page ID, posts, videos, reels, photo albums), then enumerates all seven actions with a specific verb+object for each. Sibling boundaries are made explicit: facebook_search (action=pages) to find a page by name, facebook_group (action=albums) as another album_id source, and action=videos vs action=reels vs action=posts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Every action carries a when-to-use clause plus a named alternative: 'use it when you have the page URL; to find a page by name, use facebook_search (action=pages) first', 'use action=details for the page's data', 'For reels or videos only, use action=reels or action=videos', 'For long-form videos, use action=videos'. Cross-action dependencies (album_id comes from action=albums, profile_id from action=id) are spelled out rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

facebook_postFacebook: PostA
Read-only
Inspect

Facebook posts, videos and comments: post details, attachments, comments and replies.

Actions:

  • action=details: Get a Facebook post's text, author, timestamp, media, and reaction, comment and share counts. Start here for any post. If you need view counts, video download URLs or audio metadata (common for reels and videos), use action=details_extended instead. Pricing: 1 credit per call. Inputs: link (required).

  • action=details_extended: Get everything action=details returns plus view counts, HD/SD video URLs, music/audio metadata and author verification status. Use it for reels and video posts, or when the standard details lack view_count, video_hd_src or attached_track. Pricing: 1 credit per call. Inputs: link (required).

  • action=id: Extract the numeric post ID from a Facebook post URL. Use it to get the post_id that action=attachments needs. Pricing: 1 credit per call. Inputs: link (required).

  • action=attachments: List every media attachment (images and videos, with URLs and dimensions) on a Facebook post, including all items in multi-photo posts. Needs the numeric post_id from action=id. For the post's text and engagement, use action=details. Pricing: 5 credits per call (deeper scrape than standard post details). Inputs: post_id (required).

  • action=video: Get a Facebook video post's metadata: title, message text and hashtags, owner, reactions and view count. Needs the numeric video_id (the number in a facebook.com/.../videos/ URL, or from facebook_page (action=videos)). Pricing: 1 credit per call. Inputs: video_id (required).

  • action=comments: List top-level comments on a Facebook post or reel, with author, text, timestamp and reaction count. Returns up to 30 per call plus an end_cursor for the next page. Set include_reply_info=true to get the comment_feedback_id and expansion_token that action=comment_replies needs. Pricing: 1 credit per call. Inputs: link (required), limit (optional), end_cursor (optional), include_reply_info (optional).

  • action=comment_replies: List replies to one Facebook comment. Needs comment_feedback_id and expansion_token, which action=comments returns when called with include_reply_info=true. Pricing: 1 credit per call. Inputs: comment_feedback_id (required), expansion_token (required).

NameRequiredDescriptionDefault
linkNoFacebook post or reel URL (regular posts, video posts and reels). Required for: details, details_extended, id, comments.
limitNoMaximum number of comments to return. Default: 10. Maximum: 30. Optional for: comments.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
post_idNoNumeric Facebook post ID, from action=id. Required for: attachments.
video_idNoNumeric Facebook video ID, e.g. the number in a facebook.com/.../videos/<id> URL. Required for: video.
end_cursorNoPagination cursor for next page of comments. Optional for: comments.
expansion_tokenNoExpansion token from the comments endpoint with include_reply_info=true. Required for: comment_replies.
include_reply_infoNoWhen "true", includes comment_feedback_id and expansion_token for fetching replies. Optional for: comments.
comment_feedback_idNoFeedback ID from the comments endpoint with include_reply_info=true. Required for: comment_replies.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare read-only, open-world, non-destructive behavior, and the description adds substantial context beyond them: per-action credit costs, comment pagination (up to 30 plus end_cursor), token prerequisites, and extra fields returned by details_extended. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a summary and organized as a scannable action list, which suits a seven-action tool. It is somewhat verbose because 'Pricing: 1 credit per call' and 'Inputs:' are repeated for each action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the multi-action complexity, nine-parameter schema, and presence of an output schema, the description covers all operations, required inputs, pagination, prerequisites, and pricing. An agent has enough information to invoke each action correctly without return-value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all nine parameters and their action-specific requirements. The description reinforces the action-to-parameter mapping and workflow dependencies (e.g. action=id produces post_id for attachments; include_reply_info produces tokens for comment_replies), adding useful consolidation beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence and action breakdown state a specific resource (Facebook posts, videos, comments) and the operations available, so the tool's general purpose is clear. It differentiates its internal actions but does not explicitly distinguish this tool from sibling tools such as facebook_page or facebook_media_download.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action has explicit when-to-use guidance: 'Start here for any post' for details, 'Use it for reels and video posts' for details_extended, and clear prerequisites for attachments and comment_replies. It also names alternatives within the action set, e.g. details_extended when view_count or video_hd_src is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

instagram_locationInstagram: LocationA
Read-only
Inspect

Instagram locations: posts tagged at a place, and nearby places.

Actions:

  • action=posts: List Instagram posts tagged at a location: top posts (tab=ranked) or most recent (tab=recent). Needs a location_id, e.g. from a place in instagram_search (action=search). Returns an end_cursor for the next page. Pricing: 1 credit per call. Inputs: location_id (required), tab (optional), end_cursor (optional).

  • action=nearby: List Instagram places near a given location, with name, category, coordinates and post count. Needs a location_id, e.g. from a place in instagram_search (action=search). Pricing: 1 credit per call. Inputs: location_id (required).

NameRequiredDescriptionDefault
tabNoFilter: "recent" or "ranked". Optional for: posts.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
end_cursorNoPagination cursor for next page. Optional for: posts.
location_idNoInstagram location ID. Required for: posts, nearby.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that: per-call pricing (1 credit), pagination via end_cursor, and the shape of nearby results (name, category, coordinates, post count). It does not discuss rate limits or auth requirements, which are the remaining behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action-bulleted layout is front-loaded and easy to scan, and each action states its purpose, inputs, and cost. It loses a point for redundancy: 'Pricing: 1 credit per call' and 'Needs a location_id' are each repeated verbatim across both actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be exhaustively explained, yet the description still summarizes what nearby returns and flags the pagination cursor for posts. Both actions, their required vs optional parameters, the location_id prerequisite, and cost are all covered, leaving nothing an agent needs to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond the flat schema by mapping parameters to actions ('Inputs: location_id (required), tab (optional), end_cursor (optional)') and by clarifying tab semantics as 'top posts (tab=ranked)' vs 'most recent (tab=recent)', which the schema only labels as 'recent' or 'ranked'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Instagram locations: posts tagged at a place, and nearby places') and breaks the tool into two clearly delineated actions, posts and nearby. It distinguishes itself from siblings by explicitly pointing to instagram_search (action=search) as the source of location_id, so an agent can route between the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action carries its own usage context: posts offers tab=ranked for top posts vs tab=recent for recency, and the prerequisite location_id is named along with where to obtain it (instagram_search action=search). What's missing is explicit when-not guidance, e.g. when to prefer instagram_post over this tool for a single post.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

instagram_postInstagram: PostA
Read-only
Inspect

Instagram posts: full post details, or the shortcode from a post URL.

Actions:

  • action=details: Get one Instagram post or reel in full: caption, media URLs, engagement counts, timestamp and owner. Needs the shortcode (the part after /p/ or /reel/ in the URL, or from action=id). Pricing: 1 credit per call. Inputs: shortcode (required).

  • action=id: Extract the shortcode from an Instagram post or reel URL. action=details needs the shortcode. Pricing: 1 credit per call. Inputs: link (required).

NameRequiredDescriptionDefault
linkNoInstagram post URL. Required for: id.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
shortcodeNoInstagram post shortcode (e.g., DMF-GjGO0-q). Required for: details.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description adds real value beyond that: per-call pricing ('1 credit per call'), the specific fields returned for details (caption, media URLs, engagement counts, timestamp, owner), and the accepted shortcode source. No behavioral contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action-by-action structure with Actions/Inputs/Pricing lines is front-loaded and scannable, and every line carries information. It loses a little to redundancy, restating that action=details needs the shortcode in both action entries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Both enum actions are covered with required inputs, the chaining between them is explained, and pricing is disclosed. An output schema exists, so return values need not be spelled out, and the description's brief note about the details payload is a bonus rather than a gap-filler.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already states 'Required for: details/id' per parameter, so the baseline is 3. The description goes further by explaining where the shortcode comes from ('the part after /p/ or /reel/ in the URL, or from action=id'), which the schema only partially hints at with an example value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs and resources per action: 'Get one Instagram post or reel in full' and 'Extract the shortcode from an Instagram post or reel URL'. An agent can tell exactly what each action produces. However, it never distinguishes itself from siblings like instagram_reels or instagram_search, so the boundary between this tool and those is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful internal routing: action=details needs a shortcode, and action=id produces that shortcode from a URL. That is implied workflow guidance rather than explicit when-to-use versus alternatives — there is no indication of when to prefer instagram_reels, instagram_search, or instagram_profile instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

instagram_profileInstagram: ProfileA
Read-only
Inspect

Instagram profiles: details, user ID, posts, reels, highlights and highlight stories.

Actions:

  • action=details: Get an Instagram profile by username: bio, follower and post counts, verification status and related profiles. Pricing: 1 credit per call. Inputs: username (required), link (optional).

  • action=id: Resolve an Instagram username or profile URL to its two IDs: user_id (long, e.g. 17841401474538262), used by action=posts and action=reels, and pk (short, e.g. 528817151), used by action=highlights. Pricing: 1 credit per call. Inputs: link (optional), username (optional).

  • action=posts: List an Instagram profile's posts (photos, videos, carousels) with captions, like and comment counts and media URLs. Pass username (returns more results) or user_id (the long user_id from action=id, not the pk). Returns an end_cursor for the next page. For reels only, use action=reels. Pricing: 1 credit per call. Inputs: username (optional), user_id (optional), end_cursor (optional).

  • action=reels: List an Instagram profile's reels with play counts, captions, video URLs and audio metadata. Needs the long user_id from action=id (not the pk). Returns an end_cursor for the next page. Pricing: 1 credit per call. Inputs: user_id (required), end_cursor (optional).

  • action=highlights: List an Instagram profile's story highlights with titles, cover images and highlight IDs. Needs the profile's pk from action=id, passed as user_id (not the long user_id). Use action=highlight_details to get the stories in one highlight. Pricing: 1 credit per call. Inputs: user_id (required).

  • action=highlight_details: Get the stories inside one Instagram highlight. Needs a highlight_id from action=highlights. Pricing: 1 credit per call. Inputs: highlight_id (required).

NameRequiredDescriptionDefault
linkNoInstagram profile URL (alternative to username). Optional for: details, id.
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
user_idNoInstagram profile ID from action=id. posts, reels: its long user_id (e.g. 17841401474538262) · highlights: its pk (e.g. 528817151). For posts, an alternative to username. Required for: reels, highlights. Optional for: posts.
usernameNoInstagram username, without the @. For posts it returns more results than user_id. Required for: details. Optional for: id, posts.
end_cursorNoPagination cursor for next page. Optional for: posts, reels.
highlight_idNoHighlight ID (from profile highlights endpoint). Required for: highlight_details.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive; the description goes well beyond them by disclosing per-call credit pricing, pagination via end_cursor on posts and reels, and the critical trap that highlights need the short pk while posts/reels need the long user_id. That is exactly the operational context an agent cannot get from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource then organizes everything as a scannable per-action list, so the length is justified by six actions. The repeated 'Inputs:' lines per action partially duplicate the schema descriptions, which is the only waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-action tool with an output schema present, the description covers what each action returns, its inputs, its pricing and its pagination behavior. Nothing needed to invoke an action correctly is missing, and return-value detail is appropriately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it explains the two-ID model (user_id vs pk), which action consumes which, that username returns more posts than user_id, and that highlight_id must come from action=highlights. It reinforces rather than merely restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource (Instagram profiles) and enumerates the six concrete operations with specific verbs (get details, resolve ID, list posts/reels/highlights, get highlight stories). An agent can distinguish this from siblings like instagram_post, instagram_reels and instagram_search because the description covers the whole profile surface plus highlight stories, which the siblings do not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear in-tool routing: 'For reels only, use action=reels', 'Use action=highlight_details to get the stories in one highlight', and per-action required/optional inputs. It does not, however, tell the agent when to pick this tool over the sibling instagram_post or instagram_reels tools, so sibling differentiation is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

instagram_reelsInstagram: ReelsA
Read-only
Inspect

Instagram Reels: the trending feed, or reels that use a given audio track.

Actions:

  • action=feed: Get Instagram's recommended and trending reels. Pass clips_media_id from a previous result to continue the feed or get similar reels by the same author. Not tied to a user; for one profile's reels use instagram_profile (action=reels). Pricing: 1 credit per call. Inputs: clips_media_id (optional).

  • action=by_audio: List Instagram reels that use a given sound. Needs the audio_id (music/audio cluster ID) found in reel results' audio metadata. Pass max_id from the previous response for the next page. Pricing: 1 credit per call. Inputs: audio_id (required), max_id (optional).

NameRequiredDescriptionDefault
actionYesWhich operation to run. See the tool description for what each action returns and which parameters it needs.
max_idNoPagination cursor for next page. Optional for: by_audio.
audio_idNoAudio cluster ID (music ID). Required for: by_audio.
clips_media_idNoClip media ID for chaining/pagination (from previous response). Optional for: feed.

Output Schema

NameRequiredDescription
resultYesJSON response from the SocialAPIs REST endpoint, unchanged. Object or array depending on the endpoint; most include a `meta` block (statusCode, duration, creditsCharged, creditsRemaining).
creditsChargedNoCredits charged for this call, or null if the endpoint did not report it.
creditsRemainingNoCredits left on the API key after this call, or null if not reported.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/openWorld/destructive, so the bar is lower, yet the description still adds real context: 1-credit pricing per action, pagination chaining via clips_media_id/max_id, and that audio_id comes from reel results' audio metadata. It does not mention auth or rate-limit traits, but the operational disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line summary, then a clean per-action bullet structure with inputs and pricing. Slightly verbose with repeated pricing lines, but every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be restated, and the description covers both actions, their inputs, chaining, and cost. It is complete enough for correct invocation, with only minor room to note result-shape differences between actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining where each ID originates (audio_id from audio metadata, clips_media_id from a previous result) and what each enables (continuing the feed vs. paging results). This adds sourcing semantics beyond the schema's terse field notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise resource (Instagram Reels) and splits it into two clearly-stated operations, feed and by_audio, each with a specific verb and scope. It also distinguishes itself from instagram_profile (action=reels), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each action states its use case and required inputs, and the feed action explicitly excludes the profile case by pointing to instagram_profile (action=reels). The condition selecting each branch is unambiguous, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 59 tool updatesv1.0.5
    • Addedfacebook_ads
    • Removedfacebook_ads_archive_details
    • Removedfacebook_ads_countries
    • Removedfacebook_ads_keywords
    • Removedfacebook_ads_page_details
    • Removedfacebook_ads_search
    • Removedfacebook_download_media
    • Removedfacebook_get_comment_replies
    • Removedfacebook_get_group_details
    • Removedfacebook_get_group_id
    • Removedfacebook_get_group_metadata
    • Removedfacebook_get_group_posts
    • Removedfacebook_get_group_videos
    • Removedfacebook_get_page_details
    • Removedfacebook_get_page_id
    • Removedfacebook_get_page_posts
    • Removedfacebook_get_page_reels
    • Removedfacebook_get_page_videos
    • Removedfacebook_get_post_attachments
    • Removedfacebook_get_post_comments
    • Removedfacebook_get_post_details
    • Removedfacebook_get_post_id
    • Removedfacebook_get_video_details
    • Addedfacebook_group
    • Addedfacebook_marketplace
    • Removedfacebook_marketplace_categories
    • Removedfacebook_marketplace_city_coordinates
    • Removedfacebook_marketplace_listing
    • Removedfacebook_marketplace_rentals
    • Removedfacebook_marketplace_search
    • Removedfacebook_marketplace_seller
    • Removedfacebook_marketplace_vehicles
    • Addedfacebook_media_download
    • Addedfacebook_page
    • Addedfacebook_post
    • Addedfacebook_search
    • Removedfacebook_search_locations
    • Removedfacebook_search_pages
    • Removedfacebook_search_people
    • Removedfacebook_search_posts
    • Removedfacebook_search_videos
    • Removedinstagram_get_highlight_details
    • Removedinstagram_get_location_posts
    • Removedinstagram_get_nearby_locations
    • Removedinstagram_get_post_details
    • Removedinstagram_get_post_id
    • Removedinstagram_get_profile_details
    • Removedinstagram_get_profile_highlights
    • Removedinstagram_get_profile_posts
    • Removedinstagram_get_profile_reels
    • Removedinstagram_get_reels_by_audio
    • Removedinstagram_get_reels_feed
    • Removedinstagram_get_user_id
    • Addedinstagram_location
    • Removedinstagram_popular_search
    • Addedinstagram_post
    • Addedinstagram_profile
    • Addedinstagram_reels
    • Addedinstagram_search
  2. 47 tool updatesv1.0.1
    • First observedfacebook_ads_archive_details
    • First observedfacebook_ads_countries
    • First observedfacebook_ads_keywords
    • First observedfacebook_ads_page_details
    • First observedfacebook_ads_search
    • First observedfacebook_download_media
    • First observedfacebook_get_comment_replies
    • First observedfacebook_get_group_details
    • First observedfacebook_get_group_id
    • First observedfacebook_get_group_metadata
    • First observedfacebook_get_group_posts
    • First observedfacebook_get_group_videos
    • First observedfacebook_get_page_details
    • First observedfacebook_get_page_id
    • First observedfacebook_get_page_posts
    • First observedfacebook_get_page_reels
    • First observedfacebook_get_page_videos
    • First observedfacebook_get_post_attachments
    • First observedfacebook_get_post_comments
    • First observedfacebook_get_post_details
    • First observedfacebook_get_post_id
    • First observedfacebook_get_video_details
    • First observedfacebook_marketplace_categories
    • First observedfacebook_marketplace_city_coordinates
    • First observedfacebook_marketplace_listing
    • First observedfacebook_marketplace_rentals
    • First observedfacebook_marketplace_search
    • First observedfacebook_marketplace_seller
    • First observedfacebook_marketplace_vehicles
    • First observedfacebook_search_locations
    • First observedfacebook_search_pages
    • First observedfacebook_search_people
    • First observedfacebook_search_posts
    • First observedfacebook_search_videos
    • First observedinstagram_get_highlight_details
    • First observedinstagram_get_location_posts
    • First observedinstagram_get_nearby_locations
    • First observedinstagram_get_post_details
    • First observedinstagram_get_post_id
    • First observedinstagram_get_profile_details
    • First observedinstagram_get_profile_highlights
    • First observedinstagram_get_profile_posts
    • First observedinstagram_get_profile_reels
    • First observedinstagram_get_reels_by_audio
    • First observedinstagram_get_reels_feed
    • First observedinstagram_get_user_id
    • First observedinstagram_popular_search

TDQS

A4.3/5.0

Scored across 12 tools

Disambiguation4/5

The 12 top-level tools are mostly cleanly partitioned by platform and entity, so an agent can usually choose correctly from the name alone. However, several tools expose overlapping action concepts such as posts, videos, albums and ID resolution across page, group, post and search tools, so descriptions are still needed to avoid misselection.

Naming Consistency5/5

Tool names consistently follow a platform_entity snake_case pattern: facebook_* and instagram_* throughout. The action values are also snake_case, even though their semantics vary between nouns, verbs and qualifiers.

Tool Count5/5

Twelve top-level tools is well within a reasonable range for a server covering both Facebook and Instagram public data. Each top-level tool corresponds to a meaningful resource family, and the multi-action bundling keeps the tool count manageable.

Completeness4/5

The surface covers a broad range of public Facebook and Instagram data: pages, groups, posts, videos, reels, albums, marketplace, ads, search, locations and media download. Minor gaps remain, such as Instagram hashtag post feeds and Instagram comments/replies, plus limited Facebook group discovery beyond URL-based lookup.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage a Facebook Fanpage via the official Graph API, supporting posting, scheduling, comment moderation, and analytics, without scraping or accessing private messages.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Exposes 10 tools to manage Facebook Pages, Posts, Comments, Ad Accounts, Campaigns, Insights, and execute any raw Graph API request from AI coding assistants.
    10
    MIT

Appeared in Searches