Skip to main content
Glama

Trending products

trending_products
Read-onlyIdempotent

List the products that drew the most community reaction recently — use it to see what is trending among products launched since ChatGPT's release, or what is trending for a kind of tool (pass need). Ranked by a reaction index computed only from the sources' own numbers: for each source, a product's best number in the period (e.g. HN points, Product Hunt votes) is divided by that source's 10th best in the same period; a GitHub repository counts by the stars it gained beyond its own pace over the 28 days before, divided the same way; the values are added across sources, so 1 per source means a reaction as large as that source's 10th place. Tangerine Index does not rate products. period_days is 3, 7 (default), or 30; data refreshes once a day (as_of). Each result shows the reactions that counted, with each source's raw number.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "trending_products"
  }
}

Input Schema

NameRequiredDescriptionDefault
needNoOptional: narrow to products that do this, in short plain English, e.g. "coding agent"
formsNoOnly return products that have ALL of these forms. 'MCP Server': the product is an MCP server (listed in the MCP Registry, or its README has an MCP client config)
limitNoMaximum number of results (default 10)
open_sourceNotrue: only open-source products (GitHub repositories); false: only the others
period_daysNoLook at reactions posted in the last 3, 7 (default), or 30 days

Output Schema

NameRequiredDescriptionDefault
noteNo
as_ofYesWhen the data was last collected (ISO 8601, UTC). Updated once a day.
resultsYes
period_daysYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / github / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "archived": {
      -        "type": "boolean"
      -      },
      -      "repo": {
      -        "type": "string"
      -      },
      -      "stars": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "stars_as_of": {
      -        "description": "Date of the last daily star count, 'YYYY-MM-DD' (UTC). Counts refresh once a day",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "stars_gained_30d": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Stars gained in the 30 days up to stars_as_of"
      -      },
      -      "stars_gained_7d": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Stars gained in the 7 days up to stars_as_of (negative if lost). Null when the daily history is shorter"
      -      }
      -    },
      -    "required": [
      -      "repo",
      -      "stars",
      -      "archived"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "archived": {
      +        "type": "boolean"
      +      },
      +      "pushed_at": {
      +        "description": "Last push to any branch of the repository, ISO 8601 UTC, as GitHub reports it",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "repo": {
      +        "type": "string"
      +      },
      +      "stars": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "stars_as_of": {
      +        "description": "Date of the last daily star count, 'YYYY-MM-DD' (UTC). Counts refresh once a day",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "stars_gained_30d": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Stars gained in the 30 days up to stars_as_of"
      +      },
      +      "stars_gained_7d": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Stars gained in the 7 days up to stars_as_of (negative if lost). Null when the daily history is shorter"
      +      }
      +    },
      +    "required": [
      +      "repo",
      +      "stars",
      +      "archived"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / github / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "archived": {
      -        "type": "boolean"
      -      },
      -      "repo": {
      -        "type": "string"
      -      },
      -      "stars": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "repo",
      -      "stars",
      -      "archived"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "archived": {
      +        "type": "boolean"
      +      },
      +      "repo": {
      +        "type": "string"
      +      },
      +      "stars": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "stars_as_of": {
      +        "description": "Date of the last daily star count, 'YYYY-MM-DD' (UTC). Counts refresh once a day",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "stars_gained_30d": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Stars gained in the 30 days up to stars_as_of"
      +      },
      +      "stars_gained_7d": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Stars gained in the 7 days up to stars_as_of (negative if lost). Null when the daily history is shorter"
      +      }
      +    },
      +    "required": [
      +      "repo",
      +      "stars",
      +      "archived"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed6 schema fields changed
    • changedInput schema / properties / forms / description
      Previous value: -"Only return products that have ALL of these forms"New value: +"Only return products that have ALL of these forms. 'MCP Server': the product is an MCP server (listed in the MCP Registry, or its README has an MCP client config)"
    • changedInput schema / properties / forms / items / enum
      Previous value: -[
      -  "CLI",
      -  "Library",
      -  "Desktop",
      -  "Mobile",
      -  "Browser Extension",
      -  "Self-hosted"
      -]New value: +[
      +  "CLI",
      +  "Library",
      +  "Desktop",
      +  "Mobile",
      +  "Browser Extension",
      +  "Self-hosted",
      +  "MCP Server"
      +]
    • changedInput schema / properties / forms / maxItems
      Previous value: -6New value: +7
    • addedOutput schema / properties / results / items / properties / forms / description
      Added value: +"Product forms, any of: CLI, Library, Desktop, Mobile, Browser Extension, Self-hosted, MCP Server. More may be added."
    • removedOutput schema / properties / results / items / properties / forms / items / enum
      Removed value: -[
      -  "CLI",
      -  "Library",
      -  "Desktop",
      -  "Mobile",
      -  "Browser Extension",
      -  "Self-hosted"
      -]
    • changedOutput schema / properties / results / items / properties / usage / description
      Previous value: -"Ways to install or connect, matched by repository or domain: MCP servers, Homebrew, npm, PyPI, crates.io. Empty when none is known. No install commands; pick one from the registry."New value: +"Ways to install or connect, matched by repository, domain or MCP Registry namespace: MCP servers, Homebrew, npm, PyPI, crates.io. Empty when none is known. No install commands; pick one from the registry."
  4. Changed6 schema fields changed
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / results / items / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / results / items / properties / github / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "archived": {
      -        "type": "boolean"
      -      },
      -      "repo": {
      -        "type": "string"
      -      },
      -      "stars": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "repo",
      -      "stars",
      -      "archived"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "archived": {
      +        "type": "boolean"
      +      },
      +      "repo": {
      +        "type": "string"
      +      },
      +      "stars": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "repo",
      +      "stars",
      +      "archived"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / results / items / properties / reactions / items / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / results / items / properties / usage / items / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / results / items / properties / usage / items / properties / package / additionalProperties
      Previous value: -falseNew value: +{}
  5. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / reaction_index / description
      Previous value: -"Sum over sources of the product's best reaction in the period, each as the share (0–1) of that source's reactions from the last 14 days it beats"New value: +"Sum over sources of the product's best reaction in the period, each divided by that source's 10th best in the period (1 = as large as 10th place; no upper limit)"
  6. Changed2 schema fields changed
    • addedOutput schema / properties / results / items / properties / usage
      Added value: +{
      +  "description": "Ways to install or connect, matched by repository or domain: MCP servers, Homebrew, npm, PyPI, crates.io. Empty when none is known. No install commands; pick one from the registry.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "kind": {
      +        "description": "'mcp': MCP server in the official MCP Registry; 'brew'/'cask': Homebrew; 'npm', 'pypi', 'cargo': package",
      +        "enum": [
      +          "mcp",
      +          "brew",
      +          "cask",
      +          "npm",
      +          "pypi",
      +          "cargo"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Name in that registry, e.g. an npm package name or an MCP server name",
      +        "type": "string"
      +      },
      +      "package": {
      +        "additionalProperties": false,
      +        "description": "MCP only: package that runs the server locally, e.g. { type: 'npm', id: '@scope/server' }",
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "type": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type",
      +          "id"
      +        ],
      +        "type": "object"
      +      },
      +      "remote": {
      +        "description": "MCP only: remote (streamable HTTP or SSE) URL to connect to",
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "'company': matched by domain while the product is a page on its company's site, so it covers the whole company",
      +        "enum": [
      +          "product",
      +          "company"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Registry page, or for an MCP server its remote URL, website, or repository",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name",
      +      "url",
      +      "scope"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "summary",
      -  "url",
      -  "domain",
      -  "page_url",
      -  "forms",
      -  "open_source",
      -  "github",
      -  "link_status",
      -  "link_checked_at",
      -  "latest_reaction_at",
      -  "reaction_count",
      -  "reactions",
      -  "reaction_index"
      -]New value: +[
      +  "id",
      +  "name",
      +  "summary",
      +  "url",
      +  "domain",
      +  "page_url",
      +  "forms",
      +  "open_source",
      +  "github",
      +  "link_status",
      +  "link_checked_at",
      +  "latest_reaction_at",
      +  "reaction_count",
      +  "reactions",
      +  "usage",
      +  "reaction_index"
      +]
  7. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint, non-destructive), and the description goes well beyond them: it explains the reaction index formula, the 1-per-source baseline, the 28-day GitHub star pace adjustment, the allowed period_days values, and the daily refresh cadence. It even disclaims rating, which prevents misinterpretation. This is strong behavioral context, short only of return-shape detail, which the output schema already covers.

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

Conciseness3/5

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

Front-loaded with the action and its use case, which is correct, but the middle is a dense run-on explanation of the index formula spanning most of the text. Every part is informative, yet the formula could be tightened into shorter clauses so the practical calling details (period_days default, daily refresh) are not buried mid-sentence.

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?

Has an output schema, so return values are covered, and the description supplies the ranking semantics, freshness, and period constraints an agent needs to interpret results. It is complete for calling the tool; only a brief note on it being a no-filter-required ranked list (all parameters optional) would close the remaining 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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: why `need` exists (narrow to a kind of tool), the valid period_days set and default, and the ranking semantics that tie directly to filtering. It doesn't restate `forms`, `open_source`, or `limit`, keeping it above baseline without being exhaustive.

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

Purpose5/5

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

States a specific verb and resource ("List the products that drew the most community reaction recently") plus a two-part scope: overall trending since ChatGPT's release, or trending within a kind of tool via `need`. This distinguishes it clearly from search_products, similar_products, and get_product, which are lookup/similarity tools rather than a ranked reaction index.

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

Usage Guidelines4/5

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

Gives clear usage context (see what is trending overall, or trending for a category of tool) and notes `need` for narrowing, but never explicitly says when NOT to use it or names a sibling as the alternative for lookups. Enough to route an agent, though the absence of exclusions keeps it at 4.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources