Skip to main content
Glama

social-research-mcp

MCP server for social media research — scrape, search, and analyze across 7 platforms with an AI-powered timeline.

Works with Claude Code, Claude Desktop, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client.

Features

  • 7 Platform Scrapers — Twitter/X, Instagram, TikTok, YouTube, LinkedIn, Facebook, Reddit (powered by Apify)

  • AI Timeline — All scraped data is stored in a local LanceDB database with OpenAI embeddings for semantic search

  • Trend Detection — Identify trending topics, sentiment shifts, and engagement spikes across platforms

  • Profile Analysis — Engagement rates, posting frequency, content themes, peak hours

  • Sentiment Analysis — Rule-based sentiment scoring with emoji support

  • Cross-Platform Comparison — Compare profiles, hashtags, or topics side-by-side

Quick Start

# Run with npx (no install needed)
APIFY_TOKEN=your-token npx social-research-mcp

# With timeline/embeddings support
APIFY_TOKEN=your-token OPENAI_API_KEY=your-key npx social-research-mcp

Installation

npm install -g social-research-mcp

Configuration

Environment Variable

Required

Description

APIFY_TOKEN

Yes

Apify API token for scraping

OPENAI_API_KEY

No

OpenAI API key for timeline embeddings (semantic search)

SOCIAL_RESEARCH_DATA_DIR

No

Data directory (default: ~/.social-research-mcp/data/)

SOCIAL_RESEARCH_PORT

No

HTTP port (default: 3847)

Get your Apify token here and OpenAI key here.

Usage with MCP Clients

Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "social-research": {
      "command": "npx",
      "args": ["social-research-mcp"],
      "env": {
        "APIFY_TOKEN": "your-token",
        "OPENAI_API_KEY": "your-key"
      }
    }
  }
}

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "social-research": {
      "command": "npx",
      "args": ["social-research-mcp"],
      "env": {
        "APIFY_TOKEN": "your-token",
        "OPENAI_API_KEY": "your-key"
      }
    }
  }
}

HTTP Mode

For clients that support HTTP/SSE transport:

social-research-mcp --http          # Port 3847
social-research-mcp --http 8080     # Custom port

Tools

Scrape Tools (7)

Each scraper pulls data from its platform via Apify and automatically saves results to the local timeline database.

Tool

Description

scrape_twitter

Search tweets by query, hashtag, or user timeline

scrape_instagram

Scrape posts by URL, hashtag, or search

scrape_tiktok

Scrape videos by profile, hashtag, or search

scrape_youtube

Scrape videos by search or channel URL

scrape_linkedin

Scrape posts by profile, company, or search

scrape_facebook

Scrape page posts by URL or search

scrape_reddit

Scrape posts by subreddit, search, or URL

Timeline Tools (4)

Query and analyze your locally stored timeline data.

Tool

Description

timeline_search

Semantic search using AI embeddings (requires OPENAI_API_KEY)

timeline_query

Structured filtering by platform, date, engagement, author, hashtags

timeline_trends

Detect trending topics with growth rates and sentiment

timeline_stats

Aggregate stats: post counts, top authors, top hashtags

Analysis Tools (3)

Tool

Description

analyze_profile

Full profile analysis with engagement benchmarks

analyze_sentiment

Sentiment scoring on timeline data or direct text

compare

Side-by-side comparison of profiles, hashtags, or topics

Architecture

src/
├── index.ts            # CLI entry point
├── server.ts           # MCP server (registers all tools)
├── config.ts           # Environment configuration
├── types.ts            # Shared types (UnifiedPost, Platform, etc.)
├── transport/
│   ├── stdio.ts        # MCP stdio transport (default)
│   └── http.ts         # HTTP/SSE transport
├── platforms/
│   ├── base.ts         # Abstract platform class
│   ├── index.ts        # Platform registry
│   └── [7 platforms]   # Platform-specific scrapers
├── tools/
│   ├── scrape.ts       # Scrape tool handlers
│   ├── timeline.ts     # Timeline tool handlers
│   └── analysis.ts     # Analysis tool handlers
├── db/
│   ├── lance.ts        # LanceDB connection and queries
│   ├── schema.ts       # Post row schema and converters
│   └── embeddings.ts   # OpenAI embedding wrapper
└── analysis/
    ├── sentiment.ts    # Rule-based sentiment analysis
    ├── trends.ts       # Trend detection and topic clustering
    └── engagement.ts   # Platform-specific engagement formulas

All scraped data is normalized to a UnifiedPost schema, embedded via OpenAI, and stored in a local LanceDB database. This enables cross-platform semantic search and trend analysis over time.

Apify Costs

Scraping costs are billed through your Apify account. Approximate costs:

Platform

Approximate Cost

Twitter

~$0.40 / 1k tweets

TikTok

~$5 / 1k results

Others

Compute-based (varies)

See Apify pricing for details.

Development

git clone https://github.com/TerminalGravity/social-research-mcp.git
cd social-research-mcp
npm install
npm run build
npm run typecheck

License

MIT

Available Tools

14 tools
analyze_profileB

Analyze a social media profile: scrape recent posts and compute engagement rate, posting frequency, content themes, peak hours, and sentiment.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_usernameYesProfile URL or username to analyze
platformYesSocial media platform
max_postsNoNumber of recent posts to analyze (default 50)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'scrape recent posts' and 'compute' metrics, implying data retrieval and processing, but does not disclose important traits such as rate limits, authentication needs, data privacy implications, or whether the operation is read-only or has side effects. This leaves significant gaps for an AI agent to understand the tool's behavior.

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?

The description is a single, efficient sentence that front-loads the core purpose ('Analyze a social media profile') and lists specific computed metrics. There is no wasted language, and it is appropriately sized for the tool's complexity.

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

Completeness3/5

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

Given the complexity of analyzing social media profiles with multiple metrics, no annotations, and no output schema, the description is moderately complete. It outlines what the tool does but lacks details on behavioral aspects and output format. For a tool with 3 parameters and no structured output information, it should provide more context to be fully helpful.

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?

The schema description coverage is 100%, meaning all parameters are well-documented in the schema itself. The description does not add any additional meaning beyond what the schema provides (e.g., it doesn't explain the implications of 'max_posts' on performance or accuracy). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 description clearly states the tool's purpose: 'Analyze a social media profile' with specific actions like 'scrape recent posts and compute engagement rate, posting frequency, content themes, peak hours, and sentiment.' It uses a specific verb ('analyze') and resource ('social media profile'), but it does not explicitly distinguish itself from sibling tools like 'analyze_sentiment' or 'timeline_stats,' which might have overlapping functionality.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'analyze_sentiment' (which might focus only on sentiment) and various 'scrape_' tools (which might only collect data without analysis), there is no mention of when this comprehensive analysis tool is preferred or when other tools might be more appropriate.

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

analyze_sentimentB

Run sentiment analysis on posts. Provide a query to search timeline data, or pass texts directly. Returns positive/negative/neutral breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query to find posts for sentiment analysis. If omitted, analyzes all timeline data.
platformsNoFilter by platforms
textsNoDirect text inputs to analyze (alternative to query)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'Returns positive/negative/neutral breakdown,' which gives some output context, but lacks details on permissions, rate limits, data sources (beyond 'timeline data'), error handling, or whether it's read-only/destructive. For a tool with no annotations, this is a significant gap in transparency.

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 concise and front-loaded: the first sentence states the core purpose, followed by input options and return value. Every sentence earns its place, with no redundant information. However, it could be slightly more structured (e.g., separating input and output details more clearly).

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

Completeness3/5

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

Given 3 parameters with full schema coverage but no annotations and no output schema, the description is moderately complete. It covers the basic purpose, input methods, and return type, but lacks behavioral context (e.g., how sentiment is calculated, data scope limitations). For a tool with no output schema, more detail on the return structure would be beneficial.

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%, so the schema already documents all three parameters (query, platforms, texts) with clear descriptions. The description adds marginal value by explaining the relationship between 'query' and 'texts' as alternative inputs, but doesn't provide additional semantics beyond what's in the schema (e.g., format details or constraints). Baseline 3 is appropriate when schema does the heavy lifting.

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 description clearly states the tool's purpose: 'Run sentiment analysis on posts' with the specific action 'analyze' and resource 'posts'. It distinguishes from sibling tools like 'analyze_profile' or 'timeline_stats' by focusing on sentiment rather than profile analysis or statistical trends. However, it doesn't explicitly differentiate from all siblings (e.g., 'compare' might also involve analysis).

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 provides implied usage guidance by mentioning two input methods: 'Provide a query to search timeline data, or pass texts directly.' This suggests when to use each approach. However, it doesn't explicitly state when to choose this tool over alternatives like 'timeline_query' or 'timeline_search', nor does it mention prerequisites or exclusions (e.g., whether it works with all sibling scrapers).

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

compareB

Compare 2+ profiles, hashtags, or topics side-by-side across engagement, sentiment, and volume metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesItems to compare (2 or more profiles, hashtags, or topics)
metricNoComparison metric (default: all)

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the types of comparisons and metrics but lacks critical details such as time range defaults, data freshness, rate limits, authentication requirements, or output format expectations. This is inadequate for a tool with 2 parameters and no output schema.

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?

The description is a single, well-structured sentence that efficiently conveys the tool's core functionality without unnecessary words. It is appropriately sized and front-loaded with essential information.

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

Completeness2/5

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

Given the complexity of comparing multiple items across platforms and metrics, with no annotations and no output schema, the description is insufficient. It lacks details on behavioral aspects (e.g., time ranges, data sources), output structure, and error handling, leaving significant gaps for an AI agent to use the tool effectively.

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%, so the schema already documents both parameters thoroughly. The description adds minimal value by mentioning '2+ profiles, hashtags, or topics' and 'engagement, sentiment, and volume metrics', which aligns with but doesn't significantly expand upon the schema's details for 'items' and 'metric'.

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 clearly states the tool's purpose with specific verbs ('compare side-by-side') and resources ('profiles, hashtags, or topics'), and explicitly distinguishes it from siblings by focusing on comparative analysis rather than individual analysis (like analyze_profile) or scraping operations.

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 implies usage context by specifying what can be compared (profiles, hashtags, topics) and metrics (engagement, sentiment, volume), but does not explicitly state when to use this tool versus alternatives like analyze_sentiment or timeline_stats, nor does it provide exclusion criteria.

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

scrape_facebookB

Scrape posts from Facebook pages. Search by page URL or keyword. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_urlsNoFacebook page URLs to scrape
searchNoSearch query
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that 'Results are saved to the local timeline database,' which adds context about data persistence and integration. However, it lacks critical details such as authentication requirements, rate limits, potential legal/ethical considerations for scraping Facebook, error handling, or whether the operation is read-only or mutative. The description provides some behavioral insight but leaves significant gaps for a scraping tool.

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 concise with two sentences that efficiently convey the core functionality and key behavioral aspect (saving to database). It's front-loaded with the main purpose, and each sentence adds value without redundancy. However, it could be slightly more structured by explicitly separating usage instructions from behavioral notes.

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

Completeness3/5

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

Given the complexity of a scraping tool with 3 parameters, no annotations, and no output schema, the description is moderately complete. It covers the basic purpose and hints at integration with the timeline database, but lacks details on output format, error cases, authentication, or legal constraints. For a tool that interacts with an external platform like Facebook, more contextual information would be beneficial to ensure safe and effective use.

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%, so the schema already documents all three parameters (page_urls, search, max_results) with descriptions. The description adds marginal value by mentioning 'Search by page URL or keyword,' which aligns with the parameters but doesn't provide additional syntax, format details, or usage examples beyond what's in the schema. This meets the baseline for high schema coverage.

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 description clearly states the tool's purpose: 'Scrape posts from Facebook pages' with specific actions (scrape) and resources (posts, Facebook pages). It distinguishes from sibling tools like 'scrape_instagram' by specifying the Facebook platform, but doesn't explicitly differentiate from other Facebook-related tools (none listed). The mention of 'Search by page URL or keyword' adds useful scope but doesn't fully distinguish from potential alternatives.

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 implies usage context through 'Search by page URL or keyword' and mentions results are saved to 'local timeline database,' which suggests integration with timeline-related siblings. However, it lacks explicit guidance on when to use this tool versus alternatives like 'scrape_twitter' or 'timeline_search,' and doesn't specify prerequisites or exclusions for Facebook scraping.

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

scrape_instagramC

Scrape posts from Instagram. Search by URL, hashtag, or keyword. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNoDirect Instagram post or profile URLs
hashtagsNoHashtags to search
searchNoSearch query
typeNoContent type to scrape
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It mentions results are 'saved to the local timeline database' which adds some behavioral context about persistence, but doesn't cover rate limits, authentication needs, error conditions, or what happens with duplicate content. For a scraping tool with zero annotation coverage, this leaves significant 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?

Two sentences that efficiently convey the core functionality and outcome. The first sentence covers the what and how, the second explains the persistence behavior. No wasted words, though it could be more front-loaded with critical information.

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

Completeness3/5

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

For a scraping tool with 5 parameters, no annotations, and no output schema, the description is adequate but has clear gaps. It covers the basic action and persistence behavior but doesn't address error handling, rate limits, authentication, or how results are structured. The 100% schema coverage helps, but behavioral aspects are under-specified.

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%, so the schema already documents all 5 parameters thoroughly. The description adds marginal value by mentioning the three search approaches (URL, hashtag, keyword) which maps to the first three parameters, but doesn't provide additional context beyond what the schema already specifies.

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 description clearly states the action ('scrape posts') and resource ('Instagram'), specifying multiple search methods (URL, hashtag, keyword). It distinguishes from some siblings by focusing on Instagram, but doesn't explicitly differentiate from other scrape_* tools beyond platform name.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like scrape_facebook or timeline_query. The description mentions saving to 'local timeline database' but doesn't explain when that's preferable or how this differs from other scraping tools in the sibling set.

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

scrape_linkedinC

Scrape posts from LinkedIn. Search by profile URL, company URL, or keyword. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_urlsNoLinkedIn profile URLs
company_urlsNoLinkedIn company page URLs
searchNoSearch query for posts
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that results are saved to a local database, which implies persistence and potential data storage implications, but doesn't cover critical aspects like rate limits, authentication needs, error handling, or whether the operation is idempotent. For a scraping tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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 concise and front-loaded with the core purpose in the first sentence. The second sentence adds necessary context about result persistence. Both sentences earn their place, though it could be slightly more structured (e.g., separating usage from outcomes).

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

Completeness2/5

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

Given the complexity of a scraping tool with no annotations and no output schema, the description is incomplete. It lacks details on return values, error conditions, performance characteristics, and how it interacts with the timeline database. For a tool that performs data extraction and storage, more context is needed to use it effectively.

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%, so the schema already documents all parameters. The description adds minimal value by listing the search methods (profile URL, company URL, keyword), which aligns with the schema but doesn't provide additional syntax, format details, or usage examples beyond what's in the parameter descriptions. Baseline 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.

Purpose4/5

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

The description clearly states the tool's purpose: 'Scrape posts from LinkedIn' with specific resources (posts) and methods (profile URL, company URL, or keyword). It distinguishes from siblings like 'scrape_facebook' by specifying LinkedIn, but doesn't explicitly differentiate from other LinkedIn-related tools like 'analyze_profile' beyond the scraping action.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It mentions that 'Results are saved to the local timeline database,' but doesn't explain when to choose this over other scraping tools (e.g., 'scrape_twitter') or analysis tools (e.g., 'analyze_profile'), nor does it specify prerequisites or exclusions for usage.

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

scrape_redditB

Scrape posts from Reddit. Search by subreddit, keyword, or direct URL. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
subredditsNoSubreddit names (e.g., "technology") or URLs
searchNoReddit search query
urlsNoDirect Reddit post/thread URLs
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions that 'Results are saved to the local timeline database' which reveals persistence behavior, but doesn't cover important aspects like rate limits, authentication requirements, data freshness, error handling, or whether this is a read-only vs write operation. The description provides minimal behavioral context beyond the basic action.

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 appropriately concise with two sentences that efficiently convey the core functionality and outcome. The first sentence states the action and search methods, the second reveals the persistence behavior. No wasted words, though it could be slightly more structured.

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

Completeness2/5

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

For a scraping tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what format the results take, how pagination works, error conditions, authentication needs, or rate limiting. The mention of saving to database adds some context but leaves many operational questions unanswered.

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%, so the schema already fully documents all 4 parameters. The description adds marginal value by mentioning the three search approaches (subreddit, keyword, URL) which map to the parameters, but doesn't provide additional semantic context beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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 description clearly states the tool's purpose: 'Scrape posts from Reddit' with specific search methods (subreddit, keyword, URL). It distinguishes from sibling tools like scrape_facebook or scrape_twitter by specifying the Reddit platform. However, it doesn't explicitly differentiate from timeline_query/timeline_search which might also retrieve saved data.

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 implies usage context by listing search methods (subreddit, keyword, URL) but doesn't provide explicit guidance on when to use this vs alternatives like timeline_query (for saved data) or other scraping tools for different platforms. No when-not-to-use or prerequisite information is included.

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

scrape_tiktokB

Scrape videos from TikTok. Search by profile, hashtag, or keyword. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
profilesNoTikTok profile usernames or URLs
hashtagsNoHashtags to search
searchNoSearch query
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that results are saved to a local database, which adds some context about persistence, but it doesn't cover critical aspects like rate limits, authentication needs, error handling, or whether the scraping is read-only or mutative. This leaves significant gaps for a tool with potential behavioral complexity.

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 concise with two sentences that efficiently cover the core action and outcome. It's front-loaded with the main purpose, though it could be slightly more structured by explicitly separating search methods from the result handling. Overall, it avoids unnecessary verbosity.

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

Completeness2/5

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

Given the complexity of a scraping tool with no annotations and no output schema, the description is incomplete. It lacks details on return values, error conditions, rate limits, and how the saved data interacts with sibling tools like 'timeline_query'. For a 4-parameter tool with behavioral implications, this is inadequate.

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?

The description adds minimal semantic value beyond the input schema, which has 100% coverage. It mentions search methods ('profile, hashtag, or keyword') that loosely map to parameters like 'profiles', 'hashtags', and 'search', but doesn't provide additional details on syntax, interactions between parameters, or default behaviors. With high schema coverage, the baseline is 3.

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 description clearly states the tool's purpose with a specific verb ('scrape') and resource ('videos from TikTok'), distinguishing it from sibling tools like 'scrape_facebook' or 'scrape_instagram' by specifying the platform. However, it doesn't explicitly differentiate from other TikTok-related tools (none exist in the sibling list), so it's not a perfect 5.

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 implies usage by listing search methods ('profile, hashtag, or keyword'), but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'scrape_youtube' or 'timeline_query'. No exclusions or prerequisites are mentioned, leaving usage context somewhat vague.

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

scrape_twitterB

Scrape tweets from Twitter/X. Search by query, hashtag, or user timeline. Results are saved to the local timeline database for later analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query, hashtag, or username to scrape
typeNoType of scrape: search tweets or user timeline
date_fromNoStart date (YYYY-MM-DD)
date_toNoEnd date (YYYY-MM-DD)
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that results are saved to a local timeline database, which adds some context about persistence. However, it doesn't address critical behavioral aspects like rate limits, authentication requirements, whether this is a read-only or write operation (though 'scrape' implies read), error handling, or platform-specific constraints.

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 appropriately sized with two sentences that are front-loaded with the core functionality. The first sentence clearly states the purpose, and the second adds important behavioral context about data persistence. There's no wasted verbiage, though it could be slightly more structured with explicit usage guidance.

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

Completeness2/5

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

Given the tool's complexity (5 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain what the tool returns, error conditions, authentication needs, or how it differs from sibling tools. While it mentions data persistence, it lacks sufficient context for an agent to understand the full behavioral implications of using this scraping tool.

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%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning 'search by query, hashtag, or user timeline' which aligns with the query parameter description, but doesn't provide additional semantic context like format examples or usage patterns beyond what's in the structured fields.

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 clearly states the tool's purpose with specific verbs ('scrape tweets') and resources ('from Twitter/X'), distinguishing it from siblings like scrape_facebook or timeline_query by specifying the target platform and action. It explicitly mentions what gets scraped (tweets) and the scope (search by query, hashtag, or user timeline).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like scrape_facebook, timeline_query, or timeline_search. It mentions that results are saved to a local database, but doesn't specify when this tool is preferred over direct querying tools or other scraping siblings, leaving usage context unclear.

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

scrape_youtubeC

Scrape videos from YouTube. Search by keyword or channel URL. Results are saved to the local timeline database.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoYouTube search query
channel_urlsNoYouTube channel URLs to scrape
max_resultsNoMaximum number of results to return (default varies by platform)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that 'Results are saved to the local timeline database,' which adds behavioral context about data persistence. However, it lacks details on permissions, rate limits, error handling, or what 'scrape' entails (e.g., data extraction scope), making it insufficient for a mutation tool.

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 concise with two sentences that are front-loaded: the first states the purpose, and the second adds usage and behavioral details. There is no wasted text, but it could be slightly more structured (e.g., separating guidelines from behavior).

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

Completeness3/5

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

Given no annotations and no output schema, the description is moderately complete. It covers the basic purpose and some behavioral aspects (data saving), but for a scraping tool with mutation implications, it should include more on permissions, limitations, or output format to be fully adequate.

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%, so the schema fully documents the parameters. The description adds marginal value by mentioning 'Search by keyword or channel URL,' which aligns with the 'search' and 'channel_urls' parameters but does not provide additional semantics beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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 description clearly states the tool's purpose: 'Scrape videos from YouTube' specifies the action (scrape) and resource (YouTube videos). It distinguishes from some siblings (e.g., timeline_query) but not explicitly from other scraping tools like scrape_facebook or scrape_twitter, which reduces it from a 5.

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

Usage Guidelines2/5

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

The description provides minimal guidance: it mentions 'Search by keyword or channel URL' but does not specify when to use this tool versus alternatives like scrape_tiktok or timeline_search. There are no explicit when/when-not instructions or named alternatives, leaving usage context vague.

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

timeline_queryC

Structured query against the timeline database. Filter by platform, date, engagement, author, or hashtags — no AI needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformsNoFilter by platforms
date_fromNoStart date (YYYY-MM-DD)
date_toNoEnd date (YYYY-MM-DD)
min_engagementNoMinimum total engagement (likes + comments + shares)
authorNoFilter by author username
hashtagsNoFilter by hashtags
limitNoMax results (default 50)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the query is 'structured' and lists filterable fields, but doesn't describe what the tool returns (format, structure), whether it's paginated, rate limits, authentication requirements, or error conditions. For a query tool with 7 parameters, this leaves significant 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 description is appropriately concise with two clear parts: the core function and the filtering capabilities. The 'no AI needed' clause adds useful context. However, it could be more front-loaded by starting with the primary purpose before listing filters.

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

Completeness2/5

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

For a query tool with 7 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what results look like, how they're structured, whether there's pagination, or what happens when no results match. The 'no AI needed' hint is helpful but insufficient for full contextual understanding.

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%, so the schema already documents all 7 parameters thoroughly. The description adds minimal value beyond the schema by listing the same filterable fields in natural language. No additional syntax, format details, or constraints beyond what the schema provides.

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 description clearly states the tool performs a 'structured query against the timeline database' with specific filtering capabilities (platform, date, engagement, author, hashtags). It distinguishes from AI-based analysis tools by stating 'no AI needed', but doesn't explicitly differentiate from sibling timeline tools like timeline_search or timeline_stats.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It mentions 'no AI needed' which might imply not to use it for analysis, but doesn't specify when to choose timeline_query over timeline_search, timeline_stats, or timeline_trends 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.

timeline_statsB

Get aggregate statistics from your timeline: total posts by platform, avg engagement, most active authors, top hashtags.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformsNoFilter by platforms
date_fromNoStart date (YYYY-MM-DD)
date_toNoEnd date (YYYY-MM-DD)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions what statistics are returned, it doesn't describe important behavioral aspects like whether this is a read-only operation, whether it requires authentication, rate limits, pagination behavior, or what happens when no data matches the filters. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.

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?

The description is perfectly concise - a single sentence that efficiently communicates the core purpose and enumerates the specific statistics returned. Every element earns its place, with no wasted words or redundant information.

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

Completeness3/5

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

Given the tool's moderate complexity (aggregation across multiple metrics), no annotations, no output schema, and 3 parameters, the description is minimally adequate. It explains what statistics are returned but doesn't cover behavioral aspects, usage context, or output format details. The high schema coverage helps, but for a statistical tool with no output schema, more context about the return structure would be beneficial.

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?

The description doesn't mention any parameters, while the input schema has 3 parameters with 100% description coverage. The schema already documents platforms (with enum values), date_from, and date_to. The description's mention of 'by platform' and implied date filtering aligns with the parameters but adds no additional semantic context beyond what the schema provides, meeting the baseline for high schema coverage.

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 description clearly states the tool's purpose: 'Get aggregate statistics from your timeline' with specific metrics listed (total posts by platform, avg engagement, most active authors, top hashtags). It uses a specific verb ('Get') and resource ('aggregate statistics from your timeline'), but doesn't explicitly distinguish it from sibling tools like timeline_query, timeline_search, or timeline_trends, which likely have overlapping domains.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like timeline_query, timeline_search, and timeline_trends available, there's no indication of when this statistical aggregation tool is preferred over those other timeline-related tools or when it should be avoided.

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

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes, with clear separation between scraping (platform-specific), analysis (profile, sentiment, comparison), and timeline operations (query, search, stats, trends). However, timeline_query and timeline_search could be confused as both search the timeline database, though one is structured and the other semantic.

Naming Consistency5/5

Tool names follow a consistent snake_case pattern throughout, with clear verb_noun structures (e.g., analyze_profile, scrape_facebook, timeline_query). The naming is predictable and readable, with no mixing of conventions or styles.

Tool Count5/5

14 tools is well-scoped for a social research server covering multiple platforms and analysis types. Each tool earns its place, providing comprehensive coverage without being overwhelming, typical for a domain with diverse data sources and analytical needs.

Completeness5/5

The toolset offers complete coverage for social research: scraping from major platforms (Facebook, Instagram, etc.), storing data in a timeline database, and providing analysis tools (profile analysis, sentiment, comparison, stats, trends). No obvious gaps exist for the stated purpose, enabling agents to perform end-to-end research workflows.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TerminalGravity/social-research-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server