Proofite

com.proofite由 proofite.com 发布官方发布者v1.2.0更新于 Nov 10, 2026

Read your AI-written daily briefing and retune the filter behind it: feeds, newsletters, topics.

已验证Streamable HTTP可网页运行效率与工作流网页搜索与抓取媒体与设计

概览

AI 生成的概览

读取用户由 AI 撰写的每日新闻简报,并调整其背后的信息源、主题与设置,包括播客节目。

可以做什么
  • 读取简报、历史简报、信息饮食、主题收件箱及其订阅源、稍后读队列、深度调研、收藏故事与账户状态
  • 全局或按主题调整简报,用自然语言纠正简报,对单条故事评分,编辑已学习画像,关注或取消关注故事
  • 管理主题收件箱及其来源:创建、修改或删除收件箱,增删 RSS 源与常驻网页搜索,发现来源,导入 OPML,退订新闻邮件
  • 把链接加入下一期简报,请求或取消深度调研,收藏或取消收藏故事,报告缺失故事并添加建议来源
  • 按需生成简报与播客节目,读取节目与文字稿,恢复已暂停的播客,以及分享或取消分享简报
适用场景
当用户希望助手阅读其 Proofite 简报、引用或检索简报内容,或通过对话而非应用界面改变新闻筛选结果(主题、深度、技术程度、推送时间、播客设置)时使用。
运行要求
需要 Proofite 账户(可免费试用,无需信用卡)。需在设置中的 Connections 创建 Proofite API 密钥:远程端点以 Authorization 的 Bearer 头传递,npx stdio 桥接则以 PROOFITE_API_KEY 环境变量传递。需要访问 proofite.com 的网络连接。
安装前请注意
密钥可访问单个用户的账户;支持并强制只读密钥,无需修改时应优先使用。许多工具会写入、删除或退订:删除主题收件箱不可恢复,退订新闻邮件会在发件方生效。生成简报或播客节目会产生真实 AI 费用。分享简报会创建公开链接,直至被撤销。更改从下一期简报起生效。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Proofite,将其添加到工作区。
  2. 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/com.proofite%2Fproofite/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "proofite": {
      "type": "http",
      "url": "https://proofite.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

Proofite MCP server

Give your AI assistant the keys to your information diet.

Proofite turns the sources you choose — newsletters, RSS feeds, monitored web searches, saved links — into one personal briefing every morning, written by AI and available as a podcast. This MCP server lets any agent read that briefing and, more importantly, retune the filter behind it: what gets in, how deep, how technical, how often, and what never appears again.

It is the same server the product uses for its own voice mode, so it is not a demo surface: it is how Proofite is driven.

you   → "too much crypto this week, and go deeper on the EU regulation"agent → correct_briefing(note: "…")        → topic weights adjusted, depth raised, deep dive queued        → tomorrow's briefing is different

Install

Remote (recommended). Streamable HTTP, no install. Create a key in Proofite under Settings → Connections, then:

bash
claude mcp add --transport http proofite https://proofite.com/mcp \  --header "Authorization: Bearer pfk_live_…"

Or in any client that reads a JSON config:

json
{  "mcpServers": {    "proofite": {      "type": "http",      "url": "https://proofite.com/mcp",      "headers": { "Authorization": "Bearer pfk_live_…" }    }  }}

stdio bridge, for clients that do not speak HTTP yet:

json
{  "mcpServers": {    "proofite": {      "command": "npx",      "args": ["-y", "proofite-mcp"],      "env": { "PROOFITE_API_KEY": "pfk_live_…" }    }  }}

Tools

ToolWhat it does
get_briefingreadRead the user's personal AI-written news briefing (daily digest) in full markdown: every story selected today from their newsletters, RSS feeds and monitored web searches, with sources. Returns the latest briefing by default, or a specific one by id or date. Also returns an index of entry ids, needed to rate or correct individual stories.
list_briefingsreadList the user's past daily briefings (most recent first) with date, title, number of stories and whether an episode exists. Use it to find the id of a specific day before reading or correcting it.
get_information_dietreadRead everything that shapes what reaches this person: delivery schedule, length, technicality, depth, stance and tone, stated interests and no-go topics, the profile the system has learned about them, and the per-topic preferences built from their feedback (affinity, muted, followed). This is the full picture of their news filter — read it before changing anything.
list_sourcesreadList the topic inboxes this person feeds their briefing with: each one has a dedicated email address for newsletter subscriptions, plus RSS feeds and monitored web searches. Shows how much each produced recently, its priority and whether it is included in the briefing.
get_sourcereadInspect one topic inbox in detail: every RSS feed (with its health and last fetch), every monitored web search, X/Twitter profiles, and the newsletters currently arriving at its dedicated address. Use it before removing or reorganising anything.
get_podcast_episodereadGet the audio episode generated from a briefing: a private podcast narrated in the user's language, with a playable URL and the show notes listing every source. Returns the latest episode by default.
list_read_laterreadList what is queued in the read-later inbox: links and forwarded emails that are guaranteed to be covered in the next briefing.
list_deep_divesreadList the deep-dive research requests waiting to be covered: topics the user asked the briefing to investigate with fresh web research.
get_accountreadAccount status: plan, whether the briefing is currently running, when the next one is due, how many sources and stories are in the system, and the AI cost accrued this month.
update_information_dietwriteChange how and when the briefing reaches this person: delivery time and days, length, technicality, depth, stance, tone, stated interests and topics to avoid, language, timezone, podcast and email delivery. Pass only the keys you want to change. Read get_information_diet first — these are global settings, not per-topic ones (for a single topic use tune_topic).
tune_topicwriteTune how a single topic is treated in future briefings: more or less of it, more or less technical, deeper or shorter, more or less often, muted entirely, or followed so every development gets reported. This is the precise instrument — for a vague comment like "too much crypto lately" use correct_briefing instead.
correct_briefingwriteTell the briefing what was wrong with it, in plain language — "too much crypto and not enough on the EU regulation", "keep it shorter", "explain the technical parts more simply", "follow this story". An AI editor reads the note against the actual briefing and turns it into concrete adjustments: topic preferences, settings, deep-dive requests. This is the main way a person retunes their news feed by talking.
rate_briefing_entrywriteGive a precise up/down signal on one story of a briefing: more like this, less like this, more technical, simpler, deeper, shorter, follow it, or mute its topics. Applies to the topics of that story, so the next briefing weighs them differently.
set_learned_profilewriteRead or rewrite the free-text profile the briefing uses to know who this person is — their work, projects, recurring interests, what they already know. Appending is usually better than replacing: pass mode "append" to add a line.
request_deep_divewriteAsk the next briefing to investigate a topic properly, with fresh web research: it will include a mini-dossier with sources. Use it whenever the person says "I want to know more about X" or "keep digging on this".
save_for_laterwritePut a link or a note into the read-later queue: whatever lands there is guaranteed to be covered in the next briefing. The page is fetched and its text stored, so it can be summarised even if the site later blocks access.
generate_briefingwriteGenerate a briefing immediately instead of waiting for the scheduled time, using everything collected so far. Costs real AI money and takes a couple of minutes, so use it only when explicitly asked. Returns the id to poll with get_briefing.
create_sourcewriteCreate a new topic inbox: a themed container with its own dedicated email address (subscribe newsletters to it), which can hold RSS feeds and monitored web searches. This is how you add a whole new subject to someone's information diet.
update_sourcewriteChange a topic inbox: rename it, change its description, raise or lower its priority in the briefing, set a per-inbox technicality level, temporarily exclude it from the briefing or pause it entirely.
delete_sourcewritePermanently delete a topic inbox with all its feeds, searches and collected content. Irreversible: the dedicated email address stops working too. Prefer update_source with is_active false when in doubt.
add_feedwriteAdd an RSS/Atom feed to a topic inbox. You can pass the site address instead of the feed URL — the server fetches the page and discovers the feed. If it fails, the reason is precise (blocked by the site, gone, unreadable) so it can be reported honestly.
remove_feedwriteRemove an RSS feed from a topic inbox. Already-collected content stays; nothing new arrives from it.
add_web_searchwriteMonitor a Google query every day and feed the results into a topic inbox: the standing-search way to follow a company, a person, a law or a niche subject that has no RSS feed. kind "news" watches the news index, "search" the whole web.
remove_web_searchwriteStop monitoring a standing web search: no new results from that query will reach the briefing. What it already collected stays where it is.
discover_sourcesreadDescribe a subject in plain words and get back real, working sources for it: RSS feeds validated live by the server (dead ones are dropped before you see them), web searches worth monitoring, and newsletters worth subscribing to. Nothing is added — it returns proposals to pass to add_feed / add_web_search.
import_opmlwriteImport subscriptions from another RSS reader (Feedly, Inoreader, FreshRSS, NetNewsWire) by passing the OPML file contents. Set dry_run true first to see what is in it and what is already present; then run it for real to add them (they are validated one by one, and the ones that fail come back with the reason).
unsubscribe_newsletterwriteUnsubscribe from a newsletter arriving in one of the inboxes. When the sender supports one-click unsubscribe the server does it directly; otherwise it returns the URL a human has to open, and says so honestly.

It also exposes resources (proofite://briefing/latest, proofite://diet, proofite://sources) and two prompts (tune-my-feed, catch-me-up).

Notes that matter

  • Keys can be read-only, and the server enforces it: a read-only key cannot change a setting however convincingly it is asked. Create one per client, revoke individually.
  • Changes apply from the next briefing, never retroactively.
  • Scoped to one account. The key identifies a person; the server has no way to reach anyone else's information.
  • Protocol. Streamable HTTP. Speaks the 2026-07-28 revision (stateless, per-request _meta, mirrored Mcp-Method / Mcp-Name headers, server/discover) and the older initialize handshake used by most clients today — it detects which era you speak from your first request.

Requirements

A Proofite account — free trial, no card. The briefing, the podcast and this server are the same product seen from three sides.

Links

  • proofite.com/mcp — live documentation, generated from the server's own tool registry
  • proofite.com — what Proofite is
  • https://proofite.com/.well-known/mcp.json — machine-readable manifest

MIT © Nicola Moretti mcp-name: com.proofite/proofite

来源:README.md,提交 a24c0e0

工具

40

get_briefing

Read the daily briefing

Read the user's personal AI-written news briefing (daily digest) in full markdown: every story selected today from their newsletters, RSS feeds and monitored web searches, with sources. Returns the latest briefing by default, or a specific one by id or date. Also returns an index of entry ids, needed to rate or correct individual stories.

输入参数briefing_idinclude_markdown

list_briefings

List past briefings

List the user's past daily briefings (most recent first) with date, title, number of stories and whether an episode exists. Use it to find the id of a specific day before reading or correcting it.

输入参数limitoffset

get_information_diet

Read the information diet

Read everything that shapes what reaches this person: delivery schedule, length, technicality, depth, stance, tone and entry mix, podcast format (two-host show or single voice), voice accent and whether the podcast is auto-paused, stated interests and no-go topics, the profile the system has learned about them, the per-topic preferences built from their feedback (affinity, muted, followed themes) and the specific stories they pinned with "follow" (every development of those gets reported). This is the full picture of their news filter — read it before changing anything.

无需输入参数。

list_sources

List information sources

List the topic inboxes this person feeds their briefing with: each one has a dedicated email address for newsletter subscriptions, plus RSS feeds and monitored web searches. Shows how much each produced recently, its priority and whether it is included in the briefing.

无需输入参数。

get_source

Inspect one source

Inspect one topic inbox in detail: every RSS feed (with its health and last fetch), every monitored web search, X/Twitter profiles, and the newsletters currently arriving at its dedicated address. Use it before removing or reorganising anything.

输入参数source_id必填

get_podcast_episode

Get the podcast episode

Get the audio episode generated from a briefing: a private podcast in the user's language — by default a show with two hosts who talk the news through, or a single voice in the classic format — with a playable URL, the private RSS feed URL and the show notes listing every source. Returns the latest episode by default. For the words themselves use get_episode_transcript.

输入参数briefing_id

get_episode_transcript

Read the episode text

The full text of a podcast episode, word for word: the script the voices read. In the two-host show it comes as "Name: line" turns; in the classic format as plain paragraphs. Use it when the person wants a passage quoted, a point the hosts made that the written briefing does not have, or to search what was said. Latest episode by default.

输入参数episode_idbriefing_id

list_read_later

List the read-later queue

List what is queued in the read-later inbox: links and forwarded emails that are guaranteed to be covered in the next briefing, and — apart — the stories the person deferred to a later day ("snoozed"), which wait until their date.

无需输入参数。

list_deep_dives

List pending deep dives

List the deep-dive research requests waiting to be covered: topics the user asked the briefing to investigate with fresh web research.

无需输入参数。

list_saved

List the reading list

The reading list: stories the person saved from their briefings (including the "chicca", the archive story of quiet days), newest first, each with the briefing it came from. Pass `query` to search them by any word — title, text, topics, briefing title. To add or remove: save_entry, unsave_entry.

输入参数limitquery

get_account

Account and usage

Account status: plan, whether the briefing is currently running, when the next one is due, how many sources and stories are in the system, and the AI cost accrued this month.

无需输入参数。

update_information_diet

Change how the briefing is written

Change how and when the briefing reaches this person: delivery time and days, length, technicality, depth, stance, tone, entry mix (few deep stories vs many short ones), stated interests and topics to avoid, language, timezone; the podcast (on/off, minutes, two-host show or single voice, voice accent), email delivery, the weekly recap, the chicca on quiet days, the smalltalking stories, web enrichment. Pass only the keys you want to change. Read get_information_diet first — these are global settings, not per-topic ones (for a single topic use tune_topic).

输入参数toneavoiddepthstancelanguagetimezoneentry_mixinterestsdigest_daysdigest_timetechnicalitydigest_length另有 10 个

tune_topic

Tune one topic

Tune how a single topic — or a COMBINATION of labels — is treated in future briefings: more or less of it, more or less technical, deeper or shorter, more or less often, muted entirely, or followed so every development of that WHOLE THEME gets reported (to follow one specific story, use rate_briefing_entry with "follow" on that entry). `topic` is one key: a free tag ("intelligenza artificiale") or a typed label (e:tesla, c:auto, f:soldi); `topics` instead is a list of labels combined with AND ("e:tesla"+"f:soldi" = Tesla only when about money — Tesla alone stays as it is). This is the precise instrument — for a vague comment like "too much crypto lately" use correct_briefing instead.

输入参数topicaction必填topics

correct_briefing

Correct the briefing in plain words

Tell the briefing what was wrong with it, in plain language — "too much crypto and not enough on the EU regulation", "keep it shorter", "explain the technical parts more simply". An AI editor reads the note against the actual briefing and turns it into concrete adjustments: topic preferences, settings (technicality, depth, length, podcast minutes, tone), deep-dive requests. This is the main way a person retunes their news feed by talking. To pin ONE story so its developments get reported, pass its entry_id with the note, or use rate_briefing_entry with "follow": a note without entry_id can only follow a whole theme.

输入参数note必填entry_idbriefing_id

rate_briefing_entry

Rate one story

Give a precise up/down signal on one story of a briefing: more like this, less like this, more technical, simpler, deeper, shorter, or mute. A story carries typed labels (see `labels` in get_briefing): e:<who or what> (e:tesla), c:<field, its world> (c:auto), f:<angle> (f:soldi = money) and free tags. `topics` chooses the LEVEL: one label = broad ("less of Tesla, everywhere"); several labels = narrow, they are COMBINED with AND ("less of Tesla + soldi" = Tesla only when the story is about money; Tesla alone and money stories of others are untouched). Omit `topics` for the whole story (all its labels together, the narrowest level). Sending the same signal again with different topics REPLACES the previous one. "follow" is different: it pins THIS story — every development of it (and only of it) gets a full entry; "unfollow" releases it. `withdraw: true` takes a signal back.

输入参数signal必填topicsentry_id必填withdrawbriefing_id

unfollow_story

Stop following a story

Release a pinned story by its id (from get_information_diet → followed_stories), so its developments stop getting a dedicated entry. Works even when the briefing it came from is gone — rate_briefing_entry "unfollow" needs the briefing, this does not.

输入参数story_id必填

report_missing_story

Ask why a story was missing

The reader expected a story and the briefing did not have it. Describe it in their words; the editor investigates their own sources of the last days, today's briefing, their preferences and a web search, and answers with a verdict: it was in the briefing, none of their sources carried it (and proposes the missing source), it was dropped because of a preference (and corrects it), it was seen but undervalued, or it could not be found. Topics get followed so similar stories do not slip again; a deep-dive may be queued for the next briefing. Five per day.

输入参数text必填briefing_id

list_missing_reports

List the "why wasn't I told" investigations

The investigations opened with report_missing_story on a briefing: what was asked, the verdict, the explanation, the signals applied and — when none of the person's sources carried the story — the source proposed, with whether it was already added. Latest briefing by default.

输入参数briefing_id

add_proposed_source

Add the source an investigation proposed

When report_missing_story found that none of the person's sources carried the story, it proposed one. This adds that proposed feed to the inbox it indicated — the same tap the reader has under the briefing. Idempotent: adding twice says it was already added.

输入参数report_id必填

set_learned_profile

Rewrite the learned profile

Read or rewrite the free-text profile the briefing uses to know who this person is — their work, projects, recurring interests, what they already know. Appending is usually better than replacing: pass mode "append" to add a line.

输入参数modetext必填

request_deep_dive

Queue a deep dive

Ask the next briefing to investigate a topic properly, with fresh web research: it will include a mini-dossier with sources. Use it whenever the person says "I want to know more about X" or "keep digging on this".

输入参数query必填

cancel_deep_dive

Cancel a queued deep dive

Remove a deep-dive request that is still waiting (ids from list_deep_dives). One already covered in a briefing cannot be cancelled.

输入参数deep_dive_id必填

save_for_later

Save something into the next briefing

Put a link or a note into the read-later queue: whatever lands there is guaranteed to be covered in the next briefing. The page is fetched and its text stored, so it can be summarised even if the site later blocks access.

输入参数urltexttitle

save_entry

Save a story to the reading list

Keep one story of a briefing in the reading list (list_saved): a snapshot that survives even if the briefing is deleted. entry_id "chicca" saves the chicca — the archive story of quiet days — when the briefing has one. Saving again only refreshes the date.

输入参数entry_id必填briefing_id

unsave_entry

Remove a story from the reading list

Take a story out of the reading list, by its saved id (from list_saved) or by briefing + entry id.

输入参数entry_idsaved_idbriefing_id

share_briefing

Share a briefing with a link

Create (or read) the public link of a briefing: a cleaned-up read-only copy — no personal "why this matters to you" notes, no name. The podcast episode comes along only if `podcast` is true: the hosts greet the reader by name, so that is the reader's call. Idempotent: calling again returns the same link; unshare_briefing revokes it.

输入参数podcastbriefing_id

unshare_briefing

Revoke a shared link

Revoke the public link of a briefing: the page and its audio stop answering immediately.

输入参数briefing_id

generate_podcast_episode

Generate the episode of a briefing now

Make (or remake) the podcast episode of a briefing right away — the latest by default. Takes a few minutes (script, then voices); poll with get_podcast_episode. Asking for an episode is a listening signal: it also lifts the automatic pause. Costs real AI money, so only when asked.

输入参数briefing_id

resume_podcast

Resume the podcast after the automatic pause

The podcast pauses itself when nobody listens for a while (no episodes get made; the setting podcast_enabled stays true). This lifts the pause: from tomorrow the episode comes back every morning. get_information_diet and get_account say whether it is paused.

无需输入参数。

generate_briefing

Generate a briefing now

Generate a briefing immediately instead of waiting for the scheduled time, using everything collected so far. Costs real AI money and takes a couple of minutes, so use it only when explicitly asked. Returns the id to poll with get_briefing.

无需输入参数。

create_source

Create a topic inbox

Create a new topic inbox: a themed container with its own dedicated email address (subscribe newsletters to it), which can hold RSS feeds and monitored web searches. This is how you add a whole new subject to someone's information diet.

输入参数name必填description

update_source

Update a topic inbox

Change a topic inbox: rename it, change its description, raise or lower its priority in the briefing, set a per-inbox technicality level, temporarily exclude it from the briefing or pause it entirely.

输入参数namepriorityis_activesource_id必填descriptiontechnicalityinclude_in_digest

delete_source

Delete a topic inbox

Permanently delete a topic inbox with all its feeds, searches and collected content. Irreversible: the dedicated email address stops working too. Prefer update_source with is_active false when in doubt.

输入参数source_id必填

add_feed

Add an RSS feed

Add an RSS/Atom feed to a topic inbox. You can pass the site address instead of the feed URL — the server fetches the page and discovers the feed. If it fails, the reason is precise (blocked by the site, gone, unreadable) so it can be reported honestly.

输入参数url必填source_id必填

remove_feed

Remove an RSS feed

Remove an RSS feed from a topic inbox. Already-collected content stays; nothing new arrives from it.

输入参数feed_id必填

discover_sources

Find sources for a subject

Describe a subject in plain words and get back real, working sources for it: RSS feeds validated live by the server (dead ones are dropped before you see them), web searches worth monitoring, and newsletters worth subscribing to. Nothing is added — it returns proposals to pass to add_feed / add_web_search.

输入参数source_id必填description必填

import_opml

Import an OPML subscription file

Import subscriptions from another RSS reader (Feedly, Inoreader, FreshRSS, NetNewsWire) by passing the OPML file contents. Set dry_run true first to see what is in it and what is already present; then run it for real to add them (they are validated one by one, and the ones that fail come back with the reason).

输入参数opml必填limitdry_runsource_id必填

unsubscribe_newsletter

Unsubscribe from a newsletter

Unsubscribe from a newsletter arriving in one of the inboxes. When the sender supports one-click unsubscribe the server does it directly; otherwise it returns the URL a human has to open, and says so honestly.

输入参数newsletter_id必填

版本历史

2
  1. v1.2.0最新Oct 6, 2026
  2. v1.0.0Sep 16, 2026

评分

已满足适用检查项的 100%

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

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Proofite 集成