Skip to main content
Glama
mushfique-dgist

io.github.mushfique-dgist/vox-pop

Your LLM knows what textbooks say.This tells it what people actually think.

9 platforms • Semantic routing • LLM intelligence layer • Works without API keys

License: MIT Python 3.10+ MCP Compatible No Keys Required

Install • Quick Start • Platforms • How Routing Works • MCP Server • Claude Code Plugin • Roadmap


Why?

Without vox-pop

> How do I debloat my face?

Lymphatic drainage, reduce sodium,
cold compress, drink water,
sleep elevated...

(correct but soulless — same answer
 as every health blog since 2015)

With vox-pop

★ Searched: Reddit, 4chan /fit/, SE Fitness

Consensus (70%+ of threads):
 → Reduce sodium + 3L water/day
 → Sleep elevated on back

Controversial:
 → Gua sha: loved on Reddit,
   mocked on /fit/ as placebo

What actually worked:
 → "Cut dairy for 2 weeks — face
    visibly deflated" (847↑ r/SCA)
 → "Minox bloat is real, went away
    month 3" (/fit/, recurring)

⚠ Some suggestions are unvetted.

Related MCP server: reddit-search

Install

pip install vox-pop

That's it. All 9 platforms work with zero API keys. Optional LLM key unlocks smarter routing (see How Routing Works).

Quick Start

CLI — search all 9 platforms in one command:

vox-pop search "should I learn Rust or Go"

Perspective mode — see how opinions evolved over time:

vox-pop search "rust vs go" --perspective --platforms hackernews,reddit
## hackernews — Then vs Now

Historical (1+ year ago):
> "Rust vs. Go"
  — hackernews | +481 points | 580 replies | 2017-01-18

Recent (last 6 months):
> "Rust vs. Go: Memory Management"
  — hackernews | +2 points | 2025-11-15

## reddit — Then vs Now

Historical:
> "Experienced developer but total beginner in Rust..."
  — reddit | +124 points | 34 replies | 2025-03-14

Recent:
> "I rebuilt the same API in Java, Go, Kotlin, and Rust — here are the numbers"
  — reddit | +174 points | 59 replies | 2026-03-19

The shift tells a story: 2017 was a flame war. 2026 is domain-specific pragmatism.


Standard search — flat results from all platforms:

vox-pop search "should I learn Rust or Go" --limit 3
### hackernews (45 found)
> "I am a full stack TypeScript dev looking to broaden my skill set..."
  — hackernews | +78 points | 42 replies | by throwaway_dev
  Source: https://news.ycombinator.com/item?id=41907717

### 4chan /g/ (12 found)
> "Rust is a mass psychosis. Go is boring but you'll actually ship..."
  — 4chan /g/ | 129 replies | by Anonymous

### reddit (8 found)
> "After 2 years with both: Rust for systems, Go for services..."
  — reddit | +234 points | 87 replies | by senior_dev_42

Python — embed in your own tools:

import asyncio
from vox_pop.core import search_multiple, format_context, get_default_providers

async def main():
    results = await search_multiple(
        "best laptop for programming",
        providers=get_default_providers(),
    )
    print(format_context(results))

asyncio.run(main())

Platforms

No tokens, no OAuth, no rate-limit headaches. Status is measured, not aspirational — vox-pop platforms --check re-runs this against live endpoints.

Reddit and Lobsters are currently blocked. Both sit behind Anubis proof-of-work interstitials that serve a challenge page instead of content. This is not a configuration issue and no header change defeats it. Reddit support is being moved to the official OAuth API; Lobsters now reports the block explicitly rather than returning an empty result.

Platform

Status

Source

Time Filter

Threads

HN

HackerNews

Working

Algolia Search API

Yes

Yes

Reddit

Reddit

Blocked

Pullpush + Arctic Shift + Redlib fallback

Yes

—

4chan

4chan

Working

Official JSON API (since 2012)

—

Yes

SE

Stack Exchange

Working

Official API — 180+ communities

Yes

Yes

TG

Telegram

Recent only

Public channel web preview (t.me/s/)

—

—

Lobsters

Lobsters

Blocked

lobste.rs JSON API + search scraping

Yes

—

Lemmy

Lemmy

Working

Public REST API — federated instances

Yes

Yes

LW

LessWrong

Working

GraphQL API

Yes

Yes

Forums

XenForo Forums

Flaky

HTML scraping (Head-Fi, AnandTech, etc.)

—

—

How Routing Works

Queries can be anything — a single word, a paragraph, an essay-length D&D rules question. vox-pop understands them all through a four-tier routing system:

User query: "i was looking into a solid laptop for linux
             something from hp, what would a savvy person pick"
                                    │
    ┌───────────────────────────────▼──────────────────────────────┐
    │  Tier 1: MCP Hints                                           │
    │  Calling LLM provides routing_hints directly                 │
    │  (skips all other tiers)                                     │
    ├──────────────────────────────────────────────────────────────┤
    │  Tier 2: LLM Query Rewrite          ← like Perplexity        │
    │  Cheap LLM call rewrites query to search-optimized form      │
    │  "hp laptop linux compatibility" + routes to communities     │
    │  Supports: Anthropic, OpenAI, Ollama (local/free)            │
    ├──────────────────────────────────────────────────────────────┤
    │  Tier 3: Semantic Embeddings         ← free, no API key      │
    │  FastEmbed (33MB model) understands meaning, not keywords    │
    │  Dynamic catalog: 77 4chan boards + 180 SE sites + static    │
    │  "contradictory spell behaviour" → SE:rpg, r/DnD, /tg/       │
    ├──────────────────────────────────────────────────────────────┤
    │  Tier 4: Broad Defaults                                      │
    │  Search popular destinations everywhere                      │
    └──────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
    Routes to: r/buildapc, r/linux, r/hardware │ /g/
               SE:hardwarerecs, SE:askubuntu │ lemmy:linux@lemmy.ml

Tier 2 works like Perplexity/ChatGPT Search — the LLM rewrites your conversational query into a clean search string and picks the right communities. Set any of these env vars to enable:

ANTHROPIC_API_KEY=...   # Uses Claude Haiku (~$0.0003/query)
OPENAI_API_KEY=...      # Uses GPT-4o Mini
OLLAMA_HOST=...         # Uses local Ollama (free)

Tier 3 runs entirely locally with zero API keys. A 33MB embedding model understands that "contradictory spell behaviour on a creature" means tabletop RPG rules — zero shared keywords needed. On first run, it fetches all 4chan boards and Stack Exchange sites dynamically, embeds everything, and caches to disk.

Cold start

Warm start

Singleton

Tier 3 timing

~7s

~1.3s

instant

No configuration needed. If an LLM key is set, Tier 2 is used. Otherwise Tier 3 handles it. If fastembed isn't installed, Tier 4 (broad search) still works.

Query

Routes to

"best hp laptop for linux"

r/buildapc, r/linux, r/hardware, /g/, SE:hardwarerecs, SE:askubuntu

"contradictory spell effects on a creature"

r/dndnext, r/DnD, /tg/, SE:rpg

"best mechanical keyboard for programming"

r/MechanicalKeyboards, /g/, SE:hardwarerecs

"what are the risks of yield farming"

r/CryptoCurrency, SE:tezos, telegram:ethereum

"how to make authentic kimchi jjigae"

r/Cooking, /ck/

MCP Server

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

{
  "mcpServers": {
    "vox-pop": {
      "command": "python",
      "args": ["-m", "vox_pop.server"]
    }
  }
}

Your LLM gets four tools:

Tool

What it does

search_opinions

Search all platforms for opinions on a topic

search_opinions_perspective

Then vs Now — historical + recent opinions side by side

get_thread_opinions

Dive into a specific thread's comments

list_available_platforms

Check what's available and healthy

The routing_hints parameter lets the calling LLM specify exactly where to search:

routing_hints: "reddit:MechanicalKeyboards,4chan:g,stackexchange:hardwarerecs"

When no hints are provided, the routing system handles it automatically.

Claude Code Plugin

claude plugin add /path/to/vox-pop

The skill auto-triggers when your question would benefit from real opinions. Just ask naturally:

> "What do people think about living in Berlin?"    → activates
> "Should I use Next.js or Remix?"                  → activates
> "Best gym routine for beginners?"                 → activates
> "What's the capital of France?"                   → does not activate

Manual search: /vox-search "your query"

Architecture

┌──────────────────────────────────────────────────────────┐
│  Layer 3: Claude Code / MCP Client                       │
│  Auto-triggering skill + /vox-search                     │
├──────────────────────────────────────────────────────────┤
│  Layer 2: MCP Server                                     │
│  search_opinions · perspectives · threads · list         │
├──────────────────────────────────────────────────────────┤
│  Layer 1: Python Library                                 │
│  ┌────────────────────────────────────────────────────┐  │
│  │  Smart Router (4-tier)                             │  │
│  │  MCP hints → LLM rewrite → FastEmbed → broad      │  │
│  └────────────────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────────────────┐  │
│  │  9 Providers with fallback chains                  │  │
│  │  HN · Reddit · 4chan · SE · Telegram               │  │
│  │  Lobsters · Lemmy · LessWrong · XenForo Forums     │  │
│  └────────────────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────────────────┐  │
│  │  Dynamic Catalog                                   │  │
│  │  77 4chan boards + 180 SE sites fetched from APIs   │  │
│  │  + 120 static destinations · cached to disk         │  │
│  └────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────┘

Each provider implements automatic fallback — if one source is down, the next is tried. Reddit alone has three fallback sources (Pullpush → Arctic Shift → Redlib).

Roadmap

Version

Status

What

v0.1

Shipped

5 providers (HN, Reddit, 4chan, SE, Telegram), MCP server, Claude Code plugin

v0.2

Current

9 providers, 4-tier smart routing, LLM query rewriting, FastEmbed semantic routing, dynamic catalog

v0.3

In progress

Reddit via official OAuth API — replaces the blocked Redlib path

v0.4

Not started

Regional — DC Inside (Korea), Naver, 5ch (Japan)

Contributing

New provider?          → Subclass Provider in src/vox_pop/providers/base.py
New routing destination → Add to DESTINATIONS in router.py (one line)
Dynamic catalog source → Add a _fetch_*_destinations() function in router.py
Better LLM prompt?     → Improve _LLM_SYSTEM in router.py
Multilingual support?  → Swap FastEmbed model to bge-m3 in SemanticRouter
Dead instance?         → Open an issue with the instance URL
Regional platform?     → DC Inside, Naver, 5ch, VK, Bilibili — all welcome

Security

Data access

Public data only — official APIs and public web endpoints. No login-wall scraping.

Credentials

Zero stored. Optional LLM keys passed via env vars at runtime, never written to disk.

LLM routing

When ANTHROPIC_API_KEY or OPENAI_API_KEY is set, your query text (up to 4000 chars) is sent to the respective LLM API for routing only. No queries are sent externally without an explicit API key. Without keys, routing runs entirely locally via FastEmbed.

Rate limits

Respected per-platform. Built-in concurrency guards.

User-Agent

Transparent: vox-pop/0.2 in all requests.

Caching

API responses (7 days) and embeddings cached locally at ~/.cache/vox-pop/. No data sent to third parties. Embeddings stored as JSON, no serialization dependencies.

PII

Author names from public posts included for attribution only. Never stored beyond the response.


vox populi, vox dei the voice of the people is the voice of god

MIT License

Available Tools

4 tools
get_thread_opinionsB

Get all opinions/comments from a specific thread.

Args: platform: Platform name (hackernews, reddit, 4chan, stackexchange) thread_id: The thread/post ID on that platform limit: Max comments to return (default 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
platformYes
thread_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, the description carries the full burden of behavioral disclosure. It does reveal the default limit and platform choices, but it is internally inconsistent: 'Get all opinions/comments' conflicts with 'max comments to return (default 20)'. It also omits pagination, ordering, error behavior, and authentication needs.

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 well-structured: a one-sentence purpose followed by a clean parameter list. Every sentence adds value with no fluff or repetition of schema fields.

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?

The description covers the core parameters and basic purpose adequately, and an output schema exists to explain return values. However, the 'all vs. limit' ambiguity and lack of usage routing or behavior notes leave the agent with meaningful gaps about how to invoke it correctly in a workflow.

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%, so the description must compensate, and it does. It provides allowed platform values, defines thread_id as 'the thread/post ID on that platform', and explains limit semantics with a default. This adds meaningful meaning beyond the bare schema types.

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 uses a specific verb and resource: 'Get all opinions/comments from a specific thread.' It clearly indicates the tool fetches thread comments rather than searching, which partially distinguishes it from the search_opinions siblings, though it does not explicitly name them.

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

Usage Guidelines3/5

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

Usage is implied rather than explicit: the tool is for when you have a known platform and thread_id and want its comments. It does not state when to avoid this tool or when to prefer search_opinions or search_opinions_perspective, leaving some inference to the agent.

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

list_available_platformsA

List all available opinion platforms and their capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/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 states the tool lists platforms and their capabilities, implying a read-only operation with no side effects. However, it does not explicitly confirm read-only behavior, disclose any rate limits, or mention whether the results are static or dynamic. The description is adequate but not rich in 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?

A single concise sentence that states the purpose clearly. It is front-loaded with the action and resource, and there is zero filler. The description is optimally brief while being informative.

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?

The tool has no parameters and an output schema exists, so the description does not need to explain return values. The purpose is fully specified and there are no missing details that would prevent an agent from using it correctly. It is complete for such a simple tool.

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 tool has zero parameters, so the baseline is 4. The description adds nothing about parameters, but none are needed. The schema is empty, so there is no parameter information to clarify. The baseline of 4 is appropriate because no parameter guidance is required.

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 verb 'List', the resource 'opinion platforms', and includes the qualifier 'and their capabilities' which distinguishes it from the sibling search tools. It is unambiguous and specific enough to differentiate from search_opinions and get_thread_opinions without opening any schema.

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 provides clear context that this is a discovery tool for enumerating platforms. It does not explicitly mention when to use it vs. alternatives, but the purpose is self-evident and the sibling tools are all search/retrieval operations, making this the obvious choice for listing platforms. No exclusions are needed for such a simple tool.

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

search_opinionsA

Search for real public opinions across multiple platforms.

Args: query: What to search for (e.g. "best laptop for programming") platforms: Comma-separated platform names, or "auto" for all. Available: hackernews, reddit, 4chan, stackexchange, telegram, lobsters, lemmy, lesswrong, forums limit: Max results per platform (default 5). routing_hints: Optional. Comma-separated platform:destination pairs specifying which communities/boards to search. This dramatically improves result quality. Format: "reddit:subreddit,4chan:board,stackexchange:site,telegram:channel, lemmy:community,forums:forum_id" Examples: "reddit:fitness,reddit:loseit,4chan:fit,lemmy:fitness@lemmy.world" "reddit:MechanicalKeyboards,4chan:g,forums:headfi" "reddit:berlin,reddit:germany,4chan:int,lemmy:asklemmy@lemmy.ml" "stackexchange:stackoverflow,reddit:programming,lemmy:programming@programming.dev" Forum IDs: headfi, anandtech If empty, destinations are auto-detected from the query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
platformsNoauto
routing_hintsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It provides meaningful behavioral detail: search covers multiple platforms, 'auto' resolves to all platforms, empty routing_hints trigger auto-detection from the query, and routing_hints can dramatically improve result quality. It stops short of discussing limits, error behavior, or latency, but these are secondary for a search tool and the output schema covers return shape.

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 front-loaded with a one-sentence purpose, then organized into clear argument docs. The routing_hints section is lengthy but earns its length with format specs, multiple concrete examples, and special-case values. There is no filler or repetition of schema defaults.

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?

The description covers all four parameters, available platform values, routing_hints syntax and examples, and the auto-detection behavior. Since an output schema exists, the return format does not need to be spelled out. An agent has enough information to select, parameterize, and invoke this 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 description coverage is 0%, so the description must compensate fully — and it does. It explains the query with an example, enumerates all available platforms, specifies the default for limit, and gives a thorough breakdown of routing_hints including format, multiple examples, supported forum IDs, and fallback behavior. This is exactly the kind of parameter documentation an agent needs.

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 opens with a clear verb and resource: 'Search for real public opinions across multiple platforms.' This distinguishes the basic action from a vague or tautological statement. However, it does not explicitly differentiate this tool from its siblings like search_opinions_perspective or get_thread_opinions, so it falls just 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 Guidelines2/5

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

The description gives detailed invocation guidance, but it never states when to choose this tool over the sibling tools or when not to use it. There are no mentions of search_opinions_perspective, get_thread_opinions, or list_available_platforms, and no context about which use cases each sibling serves. The usage context is only implicit in the tool's purpose.

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

search_opinions_perspectiveA

Search for opinions with a Then vs Now perspective.

Returns both historical (1+ year old) and recent (last 6 months) opinions side by side, showing how public sentiment has evolved.

Works best with HackerNews, Reddit, and Stack Exchange which support time filtering. 4chan and Telegram return current data only.

Args: query: What to search for platforms: Comma-separated platform names, or "auto" for all limit: Max results per time period per platform (default 5) routing_hints: Optional. Comma-separated platform:destination pairs specifying which communities/boards to search. Format: "reddit:subreddit,4chan:board,stackexchange:site,telegram:channel" If empty, destinations are auto-detected from the query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
platformsNoauto
routing_hintsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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 does this well by specifying the time windows (1+ year old vs. last 6 months), the platform-dependent behavior, and the side-by-side output structure. It does not mention rate limits or auth, but for a read-only search tool this is not a significant gap.

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, front-loaded with purpose and expected results, and includes a compact Args block. Some default values from the schema are repeated, which is mildly redundant, but every sentence contributes useful information about behavior or parameters.

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 4-parameter search tool with an output schema, this description covers the key aspects an agent needs: time-window semantics, platform-specific caveats, parameter formats, and routing behavior. It does not explicitly explain when to prefer this tool over the sibling search_opinions, but the core calling context is complete.

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 compensate, and it does thoroughly. Each parameter is explained with meaningful detail: platforms supports 'auto', limit is scoped as 'per time period per platform', and routing_hints includes a concrete format with examples. This adds substantial value beyond the bare property names in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Search for opinions with a Then vs Now perspective,' and then explains the concrete output: historical and recent opinions shown side by side. This clearly distinguishes it from the sibling search_opinions tool, which presumably lacks the temporal comparison angle.

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?

It gives useful context on when the tool works well ('Works best with HackerNews, Reddit, and Stack Exchange') and explicitly notes platform limitations ('4chan and Telegram return current data only'). It does not explicitly compare itself to sibling tools like get_thread_opinions, but it provides clear operational guidance for using the tool effectively.

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. 4 tool updatesv0.2.1
    • First observedget_thread_opinions
    • First observedlist_available_platforms
    • First observedsearch_opinions
    • First observedsearch_opinions_perspective

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation3/5

search_opinions and search_opinions_perspective overlap heavily in purpose, differing only in the time-comparison angle. An agent may struggle to decide which to call for a given query, though get_thread_opinions and list_available_platforms are clearly distinct.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern (search, get, list). search_opinions_perspective is slightly awkward compared to a cleaner alternative like search_opinions_trend, but the pattern remains readable and predictable.

Tool Count5/5

Four tools is a well-scoped set for a focused opinion-search server. Each tool serves a meaningful purpose without redundancy or bloat.

Completeness4/5

The surface covers the core lifecycle of searching and retrieving opinions: generic search, time-perspective search, thread detail fetching, and platform discovery. A minor gap is the lack of a direct 'get opinion by ID' operation, but it's not essential for the server's purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to browse Reddit, search posts, analyze user activity, and fetch comments without requiring API keys. Features smart caching, clean data responses, and optional authentication for higher rate limits.
    5
    1,355 npm
    835
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching Reddit posts, fetching subreddit content, and retrieving post comments without requiring an API key. It uses public JSON endpoints to provide seamless access to Reddit data for LLM-based applications.
    8 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to search, browse, and analyze Reddit in real-time via web scraping, including subreddit browsing, post comments, and business opportunity scoring.
    9
    1
    MIT