Skip to main content
Glama
macrocosm-os

Macrocosmos MCP

Official
by macrocosm-os

Macrocosmos MCP


Quickstart with Claude Desktop

  1. Get your API key from Macrocosmos. There is a free tier with $5 of credits to start.

  2. Install uv (Python package manager), install with curl -LsSf https://astral.sh/uv/install.sh | sh or see the uv repo for additional install methods.

  3. Go to Claude > Settings > Developer > Edit Config > claude_desktop_config.json to include the following:

{
  "mcpServers": {
    "macrocosmos": {
      "command": "uvx",
      "args": ["macrocosmos-mcp"],
      "env": {
        "MC_API": "<insert-your-api-key-here>"
      }
    }
  }
}

Related MCP server: MCP Twitter

Available Tools

1. query_on_demand_data - Real-time Social Media Queries

Fetch real-time data from X (Twitter) and Reddit. Best for quick queries up to 1000 results.

Parameters:

Parameter

Type

Description

source

string

REQUIRED. Platform: 'X' or 'REDDIT' (case-sensitive)

usernames

list

Up to 5 usernames. For X: @ is optional. Not available for Reddit

keywords

list

Up to 5 keywords. For Reddit: first item is subreddit (e.g., 'r/MachineLearning')

start_date

string

ISO format (e.g., '2024-01-01T00:00:00Z'). Defaults to 24h ago

end_date

string

ISO format. Defaults to now

limit

int

Max results 1-1000. Default: 10

keyword_mode

string

'any' (default) or 'all'

Example prompts:

  • "What has @elonmusk been posting about today?"

  • "Get me the latest posts from r/bittensor about dTAO"

  • "Fetch 50 tweets about #AI from the last week"


2. create_gravity_task - Large-Scale Data Collection

Create a Gravity task for collecting large datasets over 7 days. Use this when you need more than 1000 results.

Parameters:

Parameter

Type

Description

tasks

list

REQUIRED. List of task objects (see below)

name

string

Optional name for the task

email

string

Email for notification when complete

Task object structure:

{
  "platform": "x",           // 'x' or 'reddit'
  "topic": "#Bittensor",     // For X: MUST start with '#' or '$'
  "keyword": "dTAO"          // Optional: filter within topic
}

Important: For X (Twitter), topics MUST start with # or $ (e.g., #ai, $BTC). Plain keywords are rejected.

Example prompts:

  • "Create a gravity task to collect #Bittensor tweets for the next 7 days"

  • "Start collecting data from r/MachineLearning about neural networks"


3. get_gravity_task_status - Check Collection Progress

Monitor your Gravity task and see how much data has been collected.

Parameters:

Parameter

Type

Description

gravity_task_id

string

REQUIRED. The task ID from create_gravity_task

include_crawlers

bool

Include detailed stats. Default: True

Returns: Task status, crawler IDs, records_collected, bytes_collected

Example prompts:

  • "Check the status of my Bittensor data collection task"

  • "How many records have been collected so far?"


4. build_dataset - Build & Download Dataset

Build a dataset from collected data before the 7-day completion.

Warning: This will STOP the crawler and de-register it from the network.

Parameters:

Parameter

Type

Description

crawler_id

string

REQUIRED. Get from get_gravity_task_status

max_rows

int

Max rows to include. Default: 10000

email

string

Email for notification when ready

Example prompts:

  • "Build a dataset from my Bittensor crawler with 5000 rows"

  • "I have enough data, build the dataset now"


5. get_dataset_status - Check Build Progress & Download

Check dataset build progress and get download links when ready.

Parameters:

Parameter

Type

Description

dataset_id

string

REQUIRED. The dataset ID from build_dataset

Returns: Build status (10 steps), and when complete: download URLs for Parquet files

Example prompts:

  • "Is my dataset ready to download?"

  • "Get the download link for my Bittensor dataset"


6. cancel_gravity_task - Stop Data Collection

Cancel a running Gravity task.

Parameters:

Parameter

Type

Description

gravity_task_id

string

REQUIRED. The task ID to cancel


7. cancel_dataset - Cancel Build or Purge Dataset

Cancel a dataset build or purge a completed dataset.

Parameters:

Parameter

Type

Description

dataset_id

string

REQUIRED. The dataset ID to cancel/purge


Example Workflows

Quick Query (On-Demand)

User: "What's the sentiment about $TAO on Twitter today?"
→ Uses query_on_demand_data to fetch recent tweets
→ Returns up to 1000 results instantly

Large Dataset Collection (Gravity)

User: "I need to collect a week's worth of #AI tweets for analysis"

1. create_gravity_task → Returns gravity_task_id
2. get_gravity_task_status → Monitor progress, get crawler_ids
3. build_dataset → When ready, build the dataset
4. get_dataset_status → Get download URL for Parquet file

Example Prompts

On-Demand Queries

  • "What has the president of the U.S. been saying over the past week on X?"

  • "Fetch me information about what people are posting on r/politics today."

  • "Please analyze posts from @elonmusk for the last week."

  • "Get me 100 tweets about #Bittensor and analyze the sentiment"

Large-Scale Collection

  • "Create a gravity task to collect data about #AI from Twitter and r/MachineLearning from Reddit"

  • "Start a 7-day collection of $BTC tweets with keyword 'ETF'"

  • "Check how many records my gravity task has collected"

  • "Build a dataset with 10,000 rows from my crawler"


MIT License Made with love by the Macrocosmos team

Available Tools

7 tools
build_datasetA

Build a dataset from collected data before the 7-day task completion. Use this when you have enough data and don't want to wait for the full collection period.

WARNING: Building a dataset will STOP the crawler and de-register it from the network. The crawler will no longer collect new data after this operation.

Parameters:

  • crawler_id (str, REQUIRED): The ID of the crawler to build dataset from (Get this from get_gravity_task_status response - look for 'crawler_ids' field)

  • max_rows (int, default: 10000): Maximum number of rows to include in the dataset

  • email (str, optional): Email address for notification when dataset is ready

  • redirect_url (str, optional): URL to redirect to from the email notification

Returns:

  • dataset_id: Unique identifier to track the dataset build

  • Build status and progress information (10 steps total)

Example: build_dataset( crawler_id="crawler-0-multicrawler-9f518ae4-xxxx", max_rows=10000, email="user@example.com" )

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
max_rowsNo
crawler_idYes
redirect_urlNohttps://app.macrocosmos.ai/

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/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 explicitly discloses the critical side effect: building a dataset will stop the crawler, de-register it from the network, and prevent further data collection. It also sets expectations by describing the 10-step build progress.

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 well-structured and front-loaded: purpose, usage trigger, warning, parameter list, return values, and example. Every section adds necessary value, and the critical de-registration warning is placed prominently.

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 4-parameter mutation tool with no annotations, this description is complete. It explains when to use the tool, how to obtain the required parameter, what side effects to expect, what will be returned, and provides a runnable example. An agent has enough information to invoke the tool correctly and decide whether it is safe to proceed.

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 0%, so the description must document all parameters, and it fully does. It defines crawler_id, max_rows, email, and redirect_url with their types, defaults, and purposes, and even tells the agent to source crawler_id from get_gravity_task_status's 'crawler_ids' field. The example further clarifies usage.

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 states a specific action and resource: 'Build a dataset from collected data before the 7-day task completion.' It clearly differentiates this from sibling tools like get_dataset_status or cancel_dataset, and the purpose is immediately understandable.

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?

The description explicitly says when to use the tool: 'Use this when you have enough data and don't want to wait for the full collection period.' It does not name a specific alternative tool or state explicit when-not conditions, but the timing guidance and the warning about stopping the crawler provide solid usage context.

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

cancel_datasetB

Cancel a dataset build or purge a completed dataset.

Parameters:

  • dataset_id (str, REQUIRED): The ID of the dataset to cancel/purge

Returns:

  • Success or error message

Example: cancel_dataset(dataset_id="dataset-71e97cfa-xxxx-xxxx-xxxx-33cd91be9028")

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 disclosure. It mentions purge/cancel intent, but does not explain whether purge is irreversible, what permissions are required, what happens to an in-progress build, or other side effects. The generic 'Success or error message' return line adds little behavioral detail.

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 compact, front-loaded with the primary purpose, and organized into Parameters, Returns, and Example sections. There is no filler or redundant expansion beyond a helpful example.

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 one-parameter tool with an output schema, the core invocation is covered. However, because there are no annotations and the operation includes a destructive 'purge', the missing side-effect and cancellation-semantics context leaves a clear gap.

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 0%, but the description compensates by defining dataset_id with its type, required status, meaning, and a concrete example. This adds meaningful context beyond the raw 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 first line states a specific resource and actions: 'Cancel a dataset build or purge a completed dataset.' It clearly identifies the target as a dataset, though it does not explicitly contrast with sibling tools like cancel_gravity_task, so it stops short of 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 Guidelines3/5

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

Usage context is implied by the resource: use this when a dataset build needs cancellation or a completed dataset needs purging. However, there is no explicit when/when-not guidance or mention of alternatives such as build_dataset, get_dataset_status, or cancel_gravity_task.

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

cancel_gravity_taskA

Cancel a running Gravity task and stop data collection.

Parameters:

  • gravity_task_id (str, REQUIRED): The ID of the gravity task to cancel

Returns:

  • Success or error message

Example: cancel_gravity_task(gravity_task_id="multicrawler-9f518ae4-xxxx-xxxx-xxxx-8b73d7cd4c49")

ParametersJSON Schema
NameRequiredDescriptionDefault
gravity_task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It discloses the concrete effect 'stop data collection' and mentions success/error messages, but it does not cover idempotency, permissions, reversibility, whether already-completed tasks can be canceled, or what happens to data collected before cancellation.

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 compact and front-loaded with the core purpose. The parameter explanation, return line, and example each earn their place without redundancy or fluff.

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?

For a one-required-parameter cancellation tool, the description is nearly complete: it names the effect, documents the parameter, gives an example, and mentions the return type. It lacks only a small amount of behavioral context, such as whether cancellation preserves collected data or requires special permissions, but an agent has enough to invoke it 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?

The input schema has 0% description coverage, but the description documents the single parameter's purpose, marks it required, and provides a concrete example value. This fully compensates for the bare schema in this simple one-parameter case.

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 uses a specific verb ('Cancel') with a specific resource ('a running Gravity task') and adds the effect 'stop data collection.' It is clearly distinguishable from siblings like create_gravity_task and get_gravity_task_status at a glance.

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 phrase 'a running Gravity task' implies that this tool is for tasks currently in progress, but it does not explicitly say when to prefer this over cancel_dataset or when not to use it. No alternatives or exclusions are mentioned.

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

create_gravity_taskA

Create a Gravity task for large-scale data collection from X (Twitter) or Reddit. Use this for collecting large datasets over time (up to 7 days). For quick queries (up to 1000 results), use query_on_demand_data instead.

The task registers on the network within 20 minutes and collects data for 7 days. You'll receive an email notification when the dataset is ready for download.

Parameters:

  • tasks (List[dict], REQUIRED): List of task objects, each containing:

    • platform (str): 'x' or 'reddit'

    • topic (str): The hashtag/subreddit to monitor

      • For X: MUST start with '#' or '$' (e.g., '#ai', '$BTC') - plain keywords are rejected!

      • For Reddit: subreddit name (e.g., 'r/MachineLearning')

    • keyword (str, optional): Additional keyword filter within the topic

      • Filters posts to only those containing this keyword

      • Example: topic='#Bittensor', keyword='dTAO' -> only #Bittensor posts mentioning 'dTAO'

  • name (str, optional): Name for the task (helps organize multiple tasks)

  • email (str, optional): Email address for notification when dataset is ready

  • redirect_url (str, optional): URL to redirect to from the email notification

Returns:

  • gravity_task_id: Unique identifier to track and manage the task

Examples:

  1. Basic collection: create_gravity_task( tasks=[{"platform": "x", "topic": "#ai"}], name="AI Tweets" )

  2. With keyword filter: create_gravity_task( tasks=[{"platform": "x", "topic": "#Bittensor", "keyword": "dTAO"}], name="Bittensor dTAO mentions" )

  3. Multiple platforms: create_gravity_task( tasks=[ {"platform": "x", "topic": "#ai", "keyword": "LLM"}, {"platform": "reddit", "topic": "r/MachineLearning"} ], name="AI Data Collection", email="user@example.com" )

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
emailNo
tasksYes
redirect_urlNohttps://app.macrocosmos.ai/

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/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 important asynchronous behavior: the task registers within 20 minutes, collects data for 7 days, sends an email notification, and returns a gravity_task_id. It could also mention costs, cancellation, or failure handling, but the key lifecycle behavior is transparent.

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 well-structured and front-loaded: purpose, usage distinction, lifecycle, parameter details, returns, and examples. There is minor redundancy—'up to 7 days' appears twice and collection duration is restated—but overall each section earns its place and the examples are valuable.

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 complex asynchronous collection tool with no annotations, the description covers purpose, when to use it, parameter semantics, behavior after invocation, and return value. The output schema exists, so return details need no further expansion. No critical information is missing for selecting and invoking the tool correctly.

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 coverage is 0%, and the schema only describes tasks as an array of objects with additionalProperties true. The description fully compensates by documenting the task object structure, platform values ('x' or 'reddit'), topic constraints (#/$ prefix for X, r/ for Reddit), keyword filtering behavior, and all optional parameters with examples.

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 first sentence states a specific verb and resource: 'Create a Gravity task for large-scale data collection from X (Twitter) or Reddit.' It also differentiates this from query_on_demand_data by contrasting long-running collection (up to 7 days) with quick queries, so an agent can tell them apart immediately.

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?

Explicitly says when to use this tool: 'Use this for collecting large datasets over time (up to 7 days).' It also states an exclusion and routes to the alternative: 'For quick queries (up to 1000 results), use query_on_demand_data instead.' This is clear when/when-not guidance.

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

get_dataset_statusA

Get the status of a dataset build and download links when ready.

Parameters:

  • dataset_id (str, REQUIRED): The ID of the dataset to check

Returns:

  • Build status (Running, Completed, etc.)

  • Progress steps (10 total steps)

  • When completed: Download URLs for Parquet files

  • File metadata (size, row count, expiration date)

Example: get_dataset_status(dataset_id="dataset-71e97cfa-xxxx-xxxx-xxxx-33cd91be9028")

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of explaining behavior. It clearly describes progress steps, completion state, download URLs, and file metadata, giving a solid picture of how the tool behaves. It does not explicitly state that the operation is read-only or what happens if the build fails, but the status-oriented design is sufficiently transparent.

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 well organized with Purpose, Parameters, Returns, and Example sections. It is not overly long and each section adds useful information, though the Returns section partly restates the opening sentence about download links.

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 simple single-parameter status tool, the description covers the essential usage: the required parameter, the return values, and a full example. The existence of an output schema reduces the need to detail every field, and nothing critical is missing for correct invocation.

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?

The schema only provides the parameter name and type, but the description fully compensates by describing dataset_id as 'The ID of the dataset to check' and providing a concrete example. This makes the parameter's meaning and format clear despite 0% schema coverage.

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 uses a specific verb ('Get') with a clear resource ('dataset build') and explicitly includes download links. It distinguishes itself from sibling tools like get_gravity_task_status by focusing on dataset build status. The example reinforces the tool's purpose.

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 this tool is for checking build status and fetching download links, but it does not explicitly say when to use it versus alternatives like build_dataset, cancel_dataset, or get_gravity_task_status. The usage context is inferred rather than stated.

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

get_gravity_task_statusA

Get the status of a Gravity task and see how much data has been collected.

Parameters:

  • gravity_task_id (str, REQUIRED): The ID of the gravity task to check

  • include_crawlers (bool, default: True): Whether to include detailed crawler information Set to True to see records_collected and bytes_collected for each crawler

Returns:

  • Task status (Running, Completed, Pending, etc.)

  • Task name and start time

  • List of crawler IDs (needed for build_dataset)

  • When include_crawlers=True: records_collected, bytes_collected per crawler

Example: get_gravity_task_status(gravity_task_id="multicrawler-9f518ae4-xxxx-xxxx-xxxx-8b73d7cd4c49")

ParametersJSON Schema
NameRequiredDescriptionDefault
gravity_task_idYes
include_crawlersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/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 clearly indicates this is a read-style operation ('Get the status') and details the conditional behavior of include_crawlers. It doesn't mention auth, rate limits, or error cases, but for a simple status getter the disclosed behavior is sufficient.

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 well-organized with clear Parameters, Returns, and Example sections. Each section earns its place, and the example clarifies real usage without redundancy or fluff.

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?

Despite no annotations and a minimal schema, the description provides all necessary operational context: how to invoke it, what the include_crawlers flag changes, what output to expect, and how the result connects to build_dataset. An agent can confidently select and call it correctly.

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 0%, and the description fully compensates. It explains what gravity_task_id refers to, gives the default for include_crawlers, and states the concrete effect of setting it to True (seeing records_collected and bytes_collected per crawler).

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 specific verb ('Get'), a specific resource ('Gravity task'), and the key insight ('how much data has been collected'). It clearly distinguishes from siblings like get_dataset_status by focusing on Gravity task status.

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?

The description gives clear context by explaining what the tool returns, and even flags that crawler IDs are needed for build_dataset, implying workflow usage. However, it does not explicitly state when to prefer this tool over alternatives like get_dataset_status or how it relates to create_gravity_task/cancel_gravity_task.

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

query_on_demand_dataA

Fetch real-time social media data from X (Twitter) and Reddit through the Macrocosmos SN13 network. IMPORTANT: This tool requires 'source' parameter to be either 'X' or 'REDDIT' (case-sensitive). Parameters:

  • source (str, REQUIRED): Data platform - must be 'X' or 'REDDIT'

  • usernames (List[str], optional): Up to 5 usernames to monitor.

    • For X: '@' symbol is optional (e.g., ['elonmusk', '@spacex'] both work)

    • NOT available for Reddit

  • keywords (List[str], optional): Up to 5 keywords/hashtags to search

    • For X: any keywords or hashtags (e.g., ['AI', 'crypto', '#bitcoin'])

    • For Reddit: subreddit names (e.g., ['r/astronomy', 'space']) or 'r/all' for all subreddits

  • start_date (str, optional): Start date/datetime in YYYY-MM-DD or ISO format

    • Examples: '2024-04-01' or '2024-01-01T00:00:00Z'

    • Defaults to 24 hours ago from current time if not specified

  • end_date (str, optional): End date/datetime in YYYY-MM-DD or ISO format

    • Examples: '2024-04-25' or '2024-06-03T23:59:59Z'

    • Defaults to current time if not specified

  • limit (int, optional): Maximum number of results to return (range: 1-1000, default: 10)

  • keyword_mode (str, optional): How to match keywords - 'any' (default) or 'all'

    • 'any': returns posts matching ANY of the keywords

    • 'all': returns posts matching ALL of the keywords Default Behavior (when dates not specified): The tool searches the last 24 hours (from current time back to 24 hours ago). Usage Examples:

  1. Get recent tweets from specific users: query_on_demand_data(source='X', usernames=['@elonmusk', '@spacex'], limit=20)

  2. Search tweets by keywords in last 24 hours: query_on_demand_data(source='X', keywords=['AI', 'machine learning'], limit=30)

  3. Monitor specific users AND filter by keywords: query_on_demand_data(source='X', usernames=['@nasa'], keywords=['space', 'mars'], limit=20)

  4. Monitor Reddit subreddits: query_on_demand_data(source='REDDIT', keywords=['r/astronomy', 'space'], limit=50)

  5. Search across all of Reddit with date range: query_on_demand_data(source='REDDIT', keywords=['r/all', 'space'], start_date='2025-04-01', end_date='2025-04-02', limit=50)

  6. Strict keyword matching (requires ALL keywords): query_on_demand_data(source='X', keywords=['AI', 'machine learning'], keyword_mode='all', limit=30)

  7. Precise datetime range search: query_on_demand_data(source='X', keywords=['Bitcoin'], start_date='2024-06-01T00:00:00Z', end_date='2024-06-03T23:59:59Z', limit=100)

Returns: JSON object containing:

  • status: "success" or error information

  • data: Array of posts/tweets with full content, user information, engagement metrics, timestamps, platform-specific metadata, and media attachments

  • meta: Processing statistics (miners queried, response rates, items returned, etc.) Platform-Specific Notes:

  • X (Twitter): '@' symbol is optional for usernames

  • Reddit: Does NOT support username filtering, only subreddit/keyword searches

  • All timestamps returned in UTC format

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sourceYes
end_dateNo
keywordsNo
usernamesNo
start_dateNo
keyword_modeNoany

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and excels at it. It discloses default date behavior (last 24 hours), limit range and default, keyword_mode semantics, return envelope contents, UTC timestamps, and platform-specific constraints such as username filtering being unavailable for Reddit. No behavioral contradictions or hidden surprises remain.

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 well-organized and front-loaded with the most important constraint, but it is somewhat repetitive: the 'Default Behavior' section restates date defaults already given under start_date and end_date, and the examples are more numerous than strictly necessary. Still, each section has a clear purpose and the overall structure aids comprehension.

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 tool's moderate complexity, 7 parameters, no annotations, and 0% schema coverage, the description provides everything needed for correct invocation: required values, supported platforms, parameter semantics, default behavior, return format, and platform-specific limitations. The presence of an output schema further reduces the need to document return values in detail.

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 0%, but the description fully compensates by explaining every parameter: accepted values for source, username limits and @ handling, keyword interpretation per platform, date formats and defaults, limit range, and keyword_mode options. This goes far beyond the bare schema definitions.

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 identifies a specific action ('Fetch real-time social media data') and a specific resource ('X and Reddit through the Macrocosmos SN13 network'), and clarifies the exact data platforms involved. It is clearly distinguishable from the sibling tools, which all concern task/dataset creation and cancellation.

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?

The description gives strong usage context: required source values, case sensitivity, platform-specific capabilities, and multiple concrete invocation examples. It does not explicitly contrast this tool with alternatives, but the sibling tools are unrelated in function, so this is not a significant gap.

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. 7 tool updatesv0.2.2
    • First observedbuild_dataset
    • First observedcancel_dataset
    • First observedcancel_gravity_task
    • First observedcreate_gravity_task
    • First observedget_dataset_status
    • First observedget_gravity_task_status
    • First observedquery_on_demand_data

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

Most tools target distinct resources and actions clearly: on-demand query vs. Gravity task creation are separated by scale and use case, and status/cancel tools are split by resource type. The only mild ambiguity is between query_on_demand_data and create_gravity_task, but their descriptions explicitly clarify quick vs. large-scale collection.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (query_, create_, get_, build_, cancel_). The naming clearly indicates the action and the target resource, making the API predictable and easy to navigate.

Tool Count5/5

Seven tools is well-scoped for the two core workflows: on-demand queries and long-running Gravity data collection with dataset building. Each tool serves a distinct step in the lifecycle without redundancy or bloat.

Completeness4/5

The core lifecycle is covered: query, create task, check status, build dataset, check status, and cancel either operation. Minor gaps exist such as no listing of existing tasks/datasets and no way to retrieve a completed Gravity dataset directly without building it, but these are workable.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    An extensible Model Context Protocol server that provides standardized access to social platform data (currently Farcaster) and onchain data for LLMs.
    10
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI models and applications to interact directly with Twitter/X, providing capabilities to create posts, reply to tweets, retrieve user data, and manage account actions.
    13 npm
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol (MCP) server that provides tools for interacting with the SocialData API. This server allows you to fetch Twitter/X data, monitor user activity, and analyze social media engagement programmatically.
    7
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to semantically search and access read-only Reddit and X data through a hosted MCP server, with residential proxy crawling and no API credentials required.
    -