TrendFlow

Google Trends data: interest over time, by region, related queries, and trending now.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
89%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,234Tokens (tool definitions)
~3.0 KBTypical response size
Significant attention impact (2.53% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "trendflow": {
      "url": "https://trendflow.mory.dev/mcp"
    }
  }
}

Remote endpoints

https://trendflow.mory.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_regions(country)

Returns the geo codes Google Trends accepts. With no argument it lists every country; given a country code it lists that country's sub-regions — US states, German states, UK nations — each as a code and a name. Any code returned here can be passed as the `region` argument of the other tools.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢search_topics(query)

Resolves a name — a company, product, person, technology, or concept — to its Google Trends topic id (`mid`), with a `type` field that distinguishes same-name entities such as Nike the company from Nike the goddess. A topic aggregates every spelling and translation of one concept, so it measures considerably more search activity than a literal phrase: the topic for "artificial intelligence" scores 62 where the literal string scores 1. The other TrendFlow tools accept a topic id anywhere they accept a keyword.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "A search term, or a topic id from search_topics (e.g. \"/m/0mkz\")."
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_interest_over_time(keywords, timeframe, region, category, searchProperty)

Get relative search interest for one or more terms over a historical period. Use this when the user asks how popular something is, whether it is rising or falling, or how several things compare — passing multiple keywords compares them on one scale. Values are normalized relative interest (0-100 within the result set), not absolute search volume.

Input Schema

{
  "type": "object",
  "properties": {
    "keywords": {
      "minItems": 1,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "1-5 search terms. Pass several to compare them against each other. Accepts topic ids from search_topics (e.g. \"/m/0mkz\") as well as literal phrases."
    },
    "timeframe": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "now 1-H",
            "now 4-H",
            "now 1-d",
            "now 7-d",
            "today 1-m",
            "today 3-m",
            "today 12-m",
            "today 5-y",
            "all"
          ]
        },
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{4}-\\d{2}-\\d{2}$"
        }
      ],
      "description": "Time range. A preset, or a custom range as two ISO dates: \"2023-01-01 2023-06-30\". The range also sets granularity — hourly ranges return minute-level points and \"all\" returns monthly ones, so a long range cannot show a short spike."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    },
    "category": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991,
      "description": "Google Trends category id to restrict the query to; 0, the default, is every category. Narrowing disambiguates a word with several meanings without needing a topic id."
    },
    "searchProperty": {
      "type": "string",
      "enum": [
        "",
        "images",
        "news",
        "youtube",
        "froogle"
      ],
      "description": "Which Google surface to measure: empty for web search, or images, news, youtube, or froogle (Shopping). These are separate indexes, so values from different properties are not comparable to each other."
    }
  },
  "required": [
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_interest_by_region(keyword, resolution, region, timeframe, category, ...)

Break down search interest for one term by geography. Use this when the user asks where something is popular, or wants a regional or city-level comparison. Values are normalized relative interest (0-100 within the result set).

Input Schema

{
  "type": "object",
  "properties": {
    "keyword": {
      "type": "string",
      "minLength": 1,
      "description": "A search term, or a topic id from search_topics (e.g. \"/m/0mkz\")."
    },
    "resolution": {
      "type": "string",
      "enum": [
        "COUNTRY",
        "REGION",
        "CITY"
      ],
      "description": "Geographic granularity of the breakdown."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    },
    "timeframe": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "now 1-H",
            "now 4-H",
            "now 1-d",
            "now 7-d",
            "today 1-m",
            "today 3-m",
            "today 12-m",
            "today 5-y",
            "all"
          ]
        },
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{4}-\\d{2}-\\d{2}$"
        }
      ],
      "description": "Time range. A preset, or a custom range as two ISO dates: \"2023-01-01 2023-06-30\". The range also sets granularity — hourly ranges return minute-level points and \"all\" returns monthly ones, so a long range cannot show a short spike."
    },
    "category": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991,
      "description": "Google Trends category id to restrict the query to; 0, the default, is every category. Narrowing disambiguates a word with several meanings without needing a topic id."
    },
    "searchProperty": {
      "type": "string",
      "enum": [
        "",
        "images",
        "news",
        "youtube",
        "froogle"
      ],
      "description": "Which Google surface to measure: empty for web search, or images, news, youtube, or froogle (Shopping). These are separate indexes, so values from different properties are not comparable to each other."
    }
  },
  "required": [
    "keyword"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_related_queries(keyword, region, timeframe, category, searchProperty)

Find the top and rising searches related to a term. Use this for keyword discovery, SEO and content research, and spotting breakout queries. `top` is ranked by volume; `rising` is ranked by growth, where "Breakout" means growth too large to measure.

Input Schema

{
  "type": "object",
  "properties": {
    "keyword": {
      "type": "string",
      "minLength": 1,
      "description": "A search term, or a topic id from search_topics (e.g. \"/m/0mkz\")."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    },
    "timeframe": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "now 1-H",
            "now 4-H",
            "now 1-d",
            "now 7-d",
            "today 1-m",
            "today 3-m",
            "today 12-m",
            "today 5-y",
            "all"
          ]
        },
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{4}-\\d{2}-\\d{2}$"
        }
      ],
      "description": "Time range. A preset, or a custom range as two ISO dates: \"2023-01-01 2023-06-30\". The range also sets granularity — hourly ranges return minute-level points and \"all\" returns monthly ones, so a long range cannot show a short spike."
    },
    "category": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991,
      "description": "Google Trends category id to restrict the query to; 0, the default, is every category. Narrowing disambiguates a word with several meanings without needing a topic id."
    },
    "searchProperty": {
      "type": "string",
      "enum": [
        "",
        "images",
        "news",
        "youtube",
        "froogle"
      ],
      "description": "Which Google surface to measure: empty for web search, or images, news, youtube, or froogle (Shopping). These are separate indexes, so values from different properties are not comparable to each other."
    }
  },
  "required": [
    "keyword"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_trending_now(region, backend, limit)

Lists the searches surging right now in a country, for questions about what is spiking without a term being named, and for news and real-time context. The `backend` parameter selects the source: "rpc" returns around 50 entries with growth percentages and a relative volume index; "rss" returns 10 entries together with the news articles behind each one; "auto" tries rpc and falls back to rss.

Input Schema

{
  "type": "object",
  "properties": {
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    },
    "backend": {
      "type": "string",
      "enum": [
        "auto",
        "rpc",
        "rss"
      ],
      "description": "Source to use. \"rpc\" returns ~50 items with growth percentages; \"rss\" returns 10 with the news articles behind each trend; \"auto\" tries rpc then falls back to rss."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Maximum number of results to return."
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢research_trend(keyword, region)

Returns a full picture of one term in a single call: interest over time, where it is most searched, and the queries people search alongside it. Suited to open-ended research on a topic rather than one narrow question. Each section is fetched independently, so a partial result is normal: any section that fails carries an `error` instead of data and the rest still returns.

Input Schema

{
  "type": "object",
  "properties": {
    "keyword": {
      "type": "string",
      "minLength": 1,
      "description": "A search term, or a topic id from search_topics (e.g. \"/m/0mkz\")."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    }
  },
  "required": [
    "keyword"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢research_bulk(topics, region)

Researches up to 10 topics in a single call, each with the same full picture as `research_trend`: interest over time, where it is most searched, and related queries. Each topic is looked up on its own scale, so they are not comparable to one another. Use this when you need data across many topics — a long or rich research pass — instead of one tool call per topic. Each section is fetched independently, so a partial result is normal: any section that fails carries an `error` instead of data and the rest still returns.

Input Schema

{
  "type": "object",
  "properties": {
    "topics": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "1-10 topics (terms or topic ids) to research. Each is looked up on its own scale, so they are not comparable to one another. Use this to gather data across many topics in one call instead of one tool call per topic."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "",
            "US",
            "GB",
            "DE",
            "FR",
            "IT",
            "ES",
            "CA",
            "AU",
            "JP",
            "IN",
            "BR",
            "MX",
            "NL",
            "SE",
            "PL",
            "TR"
          ]
        },
        {
          "type": "string",
          "pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
        },
        {
          "type": "string",
          "pattern": "^\\d{3}$"
        }
      ],
      "description": "Country code such as \"US\", \"GB\", \"TH\"; a sub-region such as \"US-CA\"; or a US metro code such as \"807\". Empty string means worldwide."
    }
  },
  "required": [
    "topics"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools