Proofite

com.proofitePublished by proofite.comOfficial publisherv1.2.0Updated Nov 10, 2026

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

Overview

AI-generated overview

Reads a user's AI-written daily news briefing and retunes the sources, topics and settings behind it, including podcast episodes.

What you can do
  • Read briefings, past briefings, the information diet, topic inboxes and their feeds, read-later queue, deep dives, saved stories and account status
  • Adjust the briefing globally or per topic, correct it in plain language, rate individual stories, edit the learned profile, and follow or unfollow stories
  • Manage topic inboxes and their sources: create, update or delete inboxes, add or remove feeds and standing web searches, discover sources, import OPML, unsubscribe newsletters
  • Queue links for the next briefing, request or cancel deep dives, save or unsave stories, report missing stories and add proposed sources
  • Generate briefings and podcast episodes on demand, read episodes and transcripts…
When to use it
Use it when someone wants an assistant to read their Proofite briefing, quote or search it, or change what their news filter delivers — topics, depth, technicality, schedule, podcast settings — by talking instead of using the app.
Requirements
A Proofite account (free trial, no card). A Proofite API key created under Settings, Connections, sent as an Authorization bearer header for the remote endpoint or as PROOFITE_API_KEY for the npx stdio bridge. Network access to proofite.com.
Before you install
The key grants access to one person's account; read-only keys are supported and enforced, so prefer them where changes are not needed. Many tools write, delete or unsubscribe: deleting a topic inbox is irreversible, and unsubscribing newsletters acts on the sender's side. Generating briefings or podcast episodes costs real AI money. Sharing a briefing creates a public link until revoked. Changes apply from the next briefing.

Installation

In SourceWeft

  1. Open Proofite in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.proofite%2Fproofite/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "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

Source: README.md at commit a24c0e0

Tools

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.

Parametersbriefing_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.

Parameterslimitoffset

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.

Takes no parameters.

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.

Takes no parameters.

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.

Parameterssource_idrequired

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.

Parametersbriefing_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.

Parametersepisode_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.

Takes no parameters.

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.

Takes no parameters.

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.

Parameterslimitquery

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.

Takes no parameters.

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).

Parameterstoneavoiddepthstancelanguagetimezoneentry_mixinterestsdigest_daysdigest_timetechnicalitydigest_length+10 more

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.

Parameterstopicactionrequiredtopics

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.

Parametersnoterequiredentry_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.

Parameterssignalrequiredtopicsentry_idrequiredwithdrawbriefing_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.

Parametersstory_idrequired

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.

Parameterstextrequiredbriefing_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.

Parametersbriefing_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.

Parametersreport_idrequired

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.

Parametersmodetextrequired

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".

Parametersqueryrequired

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.

Parametersdeep_dive_idrequired

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.

Parametersurltexttitle

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.

Parametersentry_idrequiredbriefing_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.

Parametersentry_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.

Parameterspodcastbriefing_id

unshare_briefing

Revoke a shared link

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

Parametersbriefing_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.

Parametersbriefing_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.

Takes no parameters.

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.

Takes no parameters.

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.

Parametersnamerequireddescription

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.

Parametersnamepriorityis_activesource_idrequireddescriptiontechnicalityinclude_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.

Parameterssource_idrequired

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.

Parametersurlrequiredsource_idrequired

remove_feed

Remove an RSS feed

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

Parametersfeed_idrequired

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.

Parameterssource_idrequireddescriptionrequired

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).

Parametersopmlrequiredlimitdry_runsource_idrequired

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.

Parametersnewsletter_idrequired

Version history

2
  1. v1.2.0LatestOct 6, 2026
  2. v1.0.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Proofite integrations