Verum Signal MCP Server

Verum Signal MCP Server

An MCP server that exposes Verum Signal's public API to LLM agents, enabling retrieval of outlet credibility scores, recent claims, and debate verdicts. Requires self-hosting with a Verum Signal API key.

Category
访问服务器

README

Verum Signal MCP Server

An MCP server exposing Verum Signal's public API to LLM agents. Self-hosted. Requires a Verum Signal API key.

What the tools do

Tool Returns Explicitly does NOT
get_outlet_score An outlet's credibility score (0-100), tier, and verdict-count breakdown. Return the reasoning behind any verdict.
list_recent_claims Recent claims, optionally filtered by outlet, verdict, or claim origin, in recency order. Perform text search. It is not a search tool. It was renamed from search_claims precisely because it never searched.
get_debate_verdicts All claims from a political debate, with speaker attribution and verdicts. Paginates automatically to completeness. Truncate silently. If a debate is large enough to hit an internal safety cap, the response includes an explicit truncated: true flag rather than quietly returning a partial result.
list_debates Available debates with claim counts, dates, and status. Include the actual claims or verdicts from each debate — call get_debate_verdicts for that.
get_api_status Corpus-level statistics: total claims, total outlets tracked, methodology version in effect, last refresh time. Include per-outlet or per-claim detail — call get_outlet_score or list_recent_claims for that.

Full parameter schemas are in the tool definitions themselves (mcp_server.py), and are also what any MCP client will show you directly — this table is a summary, not the source of truth.

The data boundary

FAQ 06 promises verdict reasoning is not available through the API, and that promise is kept structurally: the underlying SELECT statements never fetch verdict_summary, evidence_sources, priority_score, or verification_attempts, and the sync layer that populates the API's cache never populates those fields either. It isn't a filter applied after the fact — the data simply isn't in what this server can reach.

What this server sends out: an authenticated GET request to api.verumsignal.com (or an operator-configured VS_API_BASE) for each tool call.

What it sends back to the calling agent: whatever that API call returns — scores, verdicts, claims, debate data, corpus statistics.

What it never touches: this server makes no network connections to anything other than the configured API host, reads and writes no local files, and includes no telemetry or analytics of any kind. Its entire dependency footprint is three lines of Python standard library (json, os, sys, urllib) — nothing else is imported, and nothing else runs.

Key handling

VS_API_KEY is read from the environment (os.environ.get("VS_API_KEY", "")) and is never hardcoded. The server has no logging of any kind — no log calls exist anywhere in it — and both of its exception-handling paths only stringify the exception object itself, never any variable that could contain the key. There is no code path by which the key can reach output, a log, or a file.

You can provide the key two ways:

  1. In the MCP client's config file, as shown below. Once you do this, that config file contains a live credential and should be protected the same way you'd protect any other secret file (restricted permissions, not committed to version control, etc.).
  2. As an ambient environment variable, set by your shell, your OS's secrets manager, or however your team manages credentials — since the server reads from the environment regardless of where that environment variable was set. If your security team has a preference here, this is almost always it.

Key rotation is manual. There is no self-service key issuance or rotation endpoint today. To get or rotate a key, contact Verum Signal directly.

Install & config

Requires Python 3.9+ and no third-party dependencies.

  1. Clone this repo:
   git clone https://github.com/brittbart/verumsignal-mcp.git
  1. No dependency install step is needed — the server uses only the Python standard library.
  2. Add this to your MCP client's config (this example is for Claude Desktop's claude_desktop_config.json):
{
  "mcpServers": {
    "verum-signal": {
      "command": "python3",
      "args": ["/absolute/path/to/mcp_server.py"],
      "env": { "VS_API_KEY": "vs_live_..." }
    }
  }
}

Verify it works: ask your agent for an outlet's credibility score — for example, "what's the credibility score for nytimes.com?" A correctly-wired server returns a real number between 0 and 100, a tier, and a breakdown of verdict counts. If instead you see an authentication error, double check the key; if you see a connection error, confirm outbound HTTPS access to api.verumsignal.com is permitted from wherever the server runs.

Rate limits & quota

Your API key's tier governs what you get:

Tier Requests/minute Calls/month
Starter 60 5,000
Pro 180 50,000
Enterprise Custom Custom

Every tool response includes a _quota field showing your remaining budget on both dimensions (e.g. rate_limit_remaining, monthly_quota_remaining) — an agent can check this before deciding whether to make another call, rather than finding out by hitting a 429.

One honest note on the rate limiter's behavior: it enforces a fixed one-minute wall-clock window, not a true sliding window. In practice this means a burst of requests spanning a minute boundary could very briefly exceed the nominal per-minute rate — the same tradeoff GitHub's and Stripe's own rate limiters make, in exchange for the limiter being atomic and not serializing requests against each other. It's bounded and it isn't a defect, but if you're measuring the limiter precisely, you should hear this from us first.

Versioning

This server is at v0.1.0 — an honest version number for a closed-beta artifact, not inflated to suggest more maturity than it has. It targets API version v1, and the methodology version currently in effect is v1.6. See CHANGELOG.md for version history.

Known limitations

Stated plainly, because you'll find these anyway and it's better to hear them from us first:

  • No text search. list_recent_claims filters by outlet, verdict, and claim origin — it does not search claim text or topics. Server-side search is a known gap.
  • No verdict reasoning. This is a deliberate boundary, not a missing feature — see "The data boundary" above.
  • Key rotation is manual. No self-service issuance or rotation exists yet.
  • Data freshness: the underlying API's cache refreshes every 5 minutes. This server's data is exactly as fresh as that cache — no fresher, no staler.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选