quorum

Market evidence with receipts: every claim resolves to a real stored record you can fetch back.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
98%
Naming quality
88%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,040Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.81% 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": {
    "quorum": {
      "url": "https://quorum-api-j15n.onrender.com/mcp"
    }
  }
}

Remote endpoints

https://quorum-api-j15n.onrender.com/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪research_product(subject, terms)

Start collecting evidence on a product or topic from public sources. RETURNS AT ONCE: the harvest runs in the background, the first records land within a minute, and a full run takes minutes. Then call `search_evidence` or `category_warmth` for the same subject after about 30 seconds and keep calling while the counts grow; stop when they stop. Every receipt returned along the way is already a real record. Calling this twice for one subject joins the same run rather than starting another.

Input Schema

{
  "type": "object",
  "properties": {
    "subject": {
      "type": "string",
      "description": "A product name, a topic, or a product URL."
    },
    "terms": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "What to ask about: single concepts like \"sizing\", \"durability\". Optional."
    }
  },
  "required": [
    "subject"
  ]
}
🟢search_evidence(query, category, phrase, sources, excludeSources, ...)

Search the retained corpus for what people actually said about a product or topic. Returns how many independent records exist, across how many channels, whether that clears the corroboration threshold, and the loudest few quotes with their receipt ids. Costs nothing and touches no network.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "What to look for: \"sizing\", \"battery life\", \"runs small\"."
    },
    "category": {
      "type": "string",
      "description": "Optional. Narrow to one product category."
    },
    "phrase": {
      "type": "boolean",
      "description": "Optional. Match the words as one ordered phrase, no any word fallback. Build phrases from content words."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional. Only these sources (reddit, appstore, sec-edgar...)."
    },
    "excludeSources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional. Drop these sources, e.g. [\"sec-edgar\", \"cpsc\"] to drop the institutional records from a consumer question."
    },
    "sourceClasses": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "consumer_voice",
          "practitioner",
          "institutional"
        ]
      },
      "description": "Optional. Filter by what kind of speaker: consumer_voice (reddit, reviews...), practitioner (github...), institutional (regulators, filings)."
    },
    "after": {
      "type": "string",
      "description": "Optional. ISO date (2026-01-31): only records their authors wrote on or after it. Undated records sit inside no window."
    },
    "before": {
      "type": "string",
      "description": "Optional. ISO date: only records written on or before it."
    },
    "minChannels": {
      "type": "number",
      "description": "Optional. Demand at least this many distinct channels for a finding verdict. Can only demote."
    }
  },
  "required": [
    "query"
  ]
}
🟢get_receipt(receiptIds, full)

Resolve receipt ids to the real records behind them. This is how you CHECK a claim: if an id does not resolve, the claim citing it was not real. Takes one id or many. Long records are truncated with notice; pass full: true for complete text.

Input Schema

{
  "type": "object",
  "properties": {
    "receiptIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Receipt ids, as returned by any other tool. Up to 50."
    },
    "full": {
      "type": "boolean",
      "description": "Return complete record text with no truncation. Default false."
    }
  },
  "required": [
    "receiptIds"
  ]
}
🟢category_warmth(category)

How much is already held for a category, and therefore whether asking about it is instant and free or slow and expensive. Check this BEFORE starting a report. With no category it lists what is held, so orient here instead of guessing slugs.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "The category, for example \"running shoes\". Omit to list every held category."
    }
  }
}
🟢compare_formats(category)

Video versus static advertising for a category, computed from how long real ads actually ran rather than from opinion. Returns a verdict, its confidence, and the ads behind it.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "The product category."
    }
  },
  "required": [
    "category"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools