Veris

io.github.jakeyoung1由 GitHub 账号 jakeyoung1 发布v0.3.1更新于 Oct 24, 2026

Provenance-first web + SEC EDGAR data for AI agents: every fact carries its verifiable source.

概览

AI 生成的概览

Veris 让助手进行带来源溯源的网页搜索与阅读,并查询 SEC EDGAR 文件、财务数据和变更监控,每条结果都附带可核验的来源信息。

可以做什么
搜索网页并以整洁的 Markdown 读取页面,附带发布时间、作者、规范网址和内容哈希等来源信息,或执行搜索加阅读的研究汇总并逐条标注引用。按股票代码、公司名或 CIK 查询 SEC EDGAR 文件,读取某份文件或某公司最新的指定表格,并获取营收、净利润、总资产、现金和稀释每股收益,每项数字都标明出自哪份文件。为公司文件或任意网址添加、删除和列出监控,并检查是否有新文件或页面变化。可选地发送新重要文件的邮件摘要,摘要中含原文引述。
适用场景
适合需要可引用、可判断新鲜度的网页内容的场景,也适合需要 SEC 权威公司文件和主要财务指标的场景。监控工具适合对文件或页面变化做定期跟踪。
运行要求
通过 npx 以 Node.js 包在本地运行,或自建 HTTP 服务器。无需账号。BRAVE_API_KEY 为可选的搜索密钥,未设置时回退到无需密钥的 DuckDuckGo;建议设置 SEC_USER_AGENT 以符合 SEC 公平访问要求。邮件摘要需要 ANTHROPIC_API_KEY 以及 VERIS_SMTP_URL、VERIS_MAIL_FROM、VERIS_MAIL_TO;HTTP 模式可使用 VERIS_API_KEYS 和 VERIS_RATE_LIMIT。
安装前请注意
邮件摘要会把文件内容发送给 Anthropic 做摘要,并通过你的 SMTP 账户发信,因此 VERIS_SMTP_URL 中的 SMTP 凭据属于敏感信息。若暴露 HTTP 服务器且未设置 VERIS_API_KEYS,端点将处于开放状态。监控会写入本地状态,只追加的来源账本会记录读取行为。搜索词和抓取的网址会发送给 Brave 或 DuckDuckGo 以及目标网站。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Veris,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

veris

[CI] [npm version] [license] · npx -y veris-mcp

Provenance-first web access for AI agents. Clean content plus verifiable source metadata, in one call.

Today an AI agent reading the web gets a wall of text. It does not get: when the page was published, whether the content changed since last time, who wrote it, the canonical source, or the license terms. veris attaches all of that to every read.

web_read("https://example.com/article")  → clean markdown  + { publishedAt, modifiedAt, author, canonicalUrl, contentHash, license, fetchedAt }

That metadata is not a nice-to-have. It is the foundation the rest of the AI-web economy needs: freshness, change-detection, citation, and — eventually — paying the people who wrote the content.


Why this exists

The web is being scraped by AI with no attribution and no payment. Publishers are responding by blocking bots and locking content. AI gets worse; publishers lose. The fix is a layer between agents and publishers that reads cleanly, tracks provenance, and (later) settles payment.

veris is the agent-side of that layer — the SDK every agent imports to consume the web responsibly. Think "Plaid for the AI web": you don't own the publishers, you own the integration developers reach for.

Roadmap (one codebase, three stages)

StageWhatStatus
1. Clean + provenancesearch / read / research with verifiable source metadata✅
2. Finance verticalSEC EDGAR filings with authoritative, official provenance✅
3. Settlementlicense-aware access + attribution ledger + payment intents✅ v0.3.0 (payments stubbed, no money moves)
3b. Live paymentsplug a provider (RSL license server / x402 / Stripe) into settlement.ts🔜

Stage 3: what v0.3.0 does

Every content read passes a policy gate first: web_read, web_research, finance_filing_read, URL watches (watch_manage refuses to add a URL it may not read; watch_check reports it as withheld and keeps the old baseline), and filing reads in veris-mcp digest. EDGAR index lookups use the SEC JSON API and are not page reads.

  1. robots.txt. Fetched per origin and matched for the VerisBot token (falls back to *), per RFC 9309: longest match wins, * and $ wildcards, missing file = allow, 5xx = disallow. A disallowed URL returns status: "blocked" with the exact rule (e.g. Disallow: /cgi-bin) and the page is never requested.
  2. RSL licenses. Discovered from robots.txt License: lines, <link rel="license" type="application/rsl+xml">, or inline <script type="application/rsl+xml">. The gate picks the <content> scope covering the URL and the license that permits ai-input use.
  3. Price. If the license charges (purchase, subscription, crawl, use), the tool returns status: "payment_required" with the terms, price, and the RSL document URL instead of content. When the license is declared in robots.txt, the page is not fetched at all. priceHint is filled only from a declared <amount>, copied verbatim. A paid license with no amount reports price: null; veris never estimates one.
  4. Ledger. Every read, block, and payment requirement is appended to ~/.veris/ledger.jsonl (override VERIS_LEDGER_FILE) with URL, content hash, timestamp, tool, and the full license record. Entries are hash-chained, so edits or deletions are detectable: veris-mcp ledger --verify. List with veris-mcp ledger [--kind read|blocked|payment_required|payment_intent] [--url U] [--since ISO] [--limit N].
  5. Settlement stub. A paid license also records a payment_intent entry (declared price, terms, license server). The default provider is none: status recorded, nothing charged, content withheld. A real provider implements PaymentProvider.authorize() in src/settlement.ts and registers with setPaymentProvider().

Every license field names its source (robotsUrl + robotsRule, rslUrl, price.source), so any verdict can be re-fetched and checked. Tool input schemas are unchanged from v0.2.

Tools

Web

ToolDoes
web_search(query, n?)Ranked results as structured JSON. Brave (with key) or keyless DuckDuckGo.
web_read(url, fresh?)URL → clean markdown + provenance block. 24h cache.
web_research(query, n?)Search + read top N + bundle with per-source citations.

Finance — SEC EDGAR (free, official, no API key)

ToolDoes
finance_filings(query, formType?, limit?)Ticker / name / CIK → recent SEC filings: form, official filing & report dates, accession, direct document URL.
finance_filing_read(url or query, formType?)Read a filing by URL, or auto-read the latest matching form for a company. Clean text + provenance.
finance_financials(query)Revenue, net income, total assets, cash, diluted EPS from SEC XBRL — each figure stamped with the exact filing it came from.

Why EDGAR first? Filings carry authoritative dates and identifiers straight from the SEC — provenance isn't guessed, it's official. Free, structured, no auth. One call gets an agent the latest 10-K with a verifiable source:

finance_filing_read({ query: "NVDA", formType: "10-K" })  → NVIDIA CORP — 10-K (filed 2026-02-25)    clean text + { source, filed date, contentHash, wordCount }

Watch — change detection & alerts

ToolDoes
watch_manage(action, target?, formType?)Add/remove/list watches: a company's SEC filings (ticker + optional form like 8-K) or any URL (content-hash watch).
watch_check()Check all watches; returns only what's NEW (new filings / changed pages) and rolls baselines forward. Run it on a schedule → alert feed.

Filings watches default to material forms only — 8-K, 10-K, 10-Q, 20-F, SC 13D/G, merger proxies, offerings, late-filing notices. Routine Form 4 / 13F-HR traffic is suppressed, because an alert feed nobody reads is worse than none. Pass formType: "ALL" to see everything, or a specific form to watch just that one.

Alerts by email (veris-mcp digest)

watch_check returns JSON to an MCP client. digest turns the same data into an email a human actually reads: it checks every watch, reads each new material filing, summarizes what changed, and delivers it.

bash
veris-mcp digest --dry-run          # print the digest, send nothingveris-mcp digest                    # check, summarize, emailveris-mcp digest --to [email protected]      # override recipientsveris-mcp mailtest                  # verify SMTP without sending

Every summary carries verbatim quotes from the filing, and each quote is checked against the source text before sending — quotes that can't be matched are flagged in the email rather than presented as fact. Filings longer than the character budget are marked as partially read; they are never silently truncated.

EnvDoes
ANTHROPIC_API_KEYEnables filing summaries. Without it, digests still send as raw filing notices.
VERIS_SUMMARY_MODELModel for summaries (default claude-opus-5).
VERIS_SUMMARY_CHAR_BUDGETChars of filing text summarized (default 250,000).
VERIS_SMTP_URLe.g. smtps://user:[email protected]:465
VERIS_MAIL_FROMe.g. "Veris Alerts <alerts@yourdomain>"
VERIS_MAIL_TOComma-separated default recipients.

Run it on a schedule for a live alert feed:

bash
*/15 * * * * ANTHROPIC_API_KEY=... VERIS_SMTP_URL=... veris-mcp digest

Install

bash
npx -y veris-mcp        # zero-install, always latest

Or from source:

bash
git clone https://github.com/jakeyoung1/veris && cd verisnpm install && npm run build

Optional env:

bash
export BRAVE_API_KEY=your_key                      # better search; https://search.brave.com/app/keysexport SEC_USER_AGENT="Your Name [email protected]"    # SEC fair-access policy (recommended)

Without a Brave key, search falls back to keyless DuckDuckGo automatically. SEC requires a Name email@domain style User-Agent — veris ships a default, but set your own contact.

Use in Claude Code

Add to your MCP config (.mcp.json):

json
{  "mcpServers": {    "veris": {      "command": "npx",      "args": ["-y", "veris-mcp"],      "env": { "BRAVE_API_KEY": "optional", "SEC_USER_AGENT": "Your Name [email protected]" }    }  }}

Restart Claude Code, then ask it to web_research something.

Remote server (HTTP)

Run veris as a remote MCP server (Streamable HTTP) and connect from any MCP client by URL:

bash
npx -y veris-mcp http                            # http://127.0.0.1:8787/mcpVERIS_HTTP_HOST=0.0.0.0 npx -y veris-mcp http    # expose it (put TLS in front)
EnvDoes
VERIS_PORT / PORTPort (default 8787)
VERIS_HTTP_HOSTBind host (default 127.0.0.1)
VERIS_API_KEYSComma-separated keys. If set, /mcp requires Authorization: Bearer <key> (or x-api-key). Unset = open.
VERIS_RATE_LIMITRequests/min/IP (default 60)

Self-hosting is free, forever. VERIS_API_KEYS exists so a hosted instance can be metered.

Docker

bash
docker build -t veris .docker run -p 8787:8787 veris

Works as-is on Fly.io / Render / Railway — anything that runs a Dockerfile.

Design notes

  • Provenance from raw HTML. We fetch the page ourselves and pull dates/author/canonical from <meta>, JSON-LD, and Open Graph before readability strips them.
  • Content hash. sha256 of extracted text — detects whether a page changed and enables dedupe across agents (the basis for a shared web index).
  • Provider interface. Swap search backends without touching tool code.
  • Cache + ledger. cache.ts keeps the keyed read cache and the append-only, hash-chained attribution ledger side by side.

License

MIT

来源:README.md,提交 84dc8eb

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

3
  1. v0.3.1最新Oct 10, 2026
  2. v0.3.0Oct 9, 2026
  3. v0.2.0Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分