{
  "data": {
    "tool": {
      "category": "data-providers",
      "endpoint": "https://proofite.com/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/proofite.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/proofite.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/proofite.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 5772,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 0
          },
          "findings": [
            {
              "rule": "TC24",
              "severity": "note",
              "message": "28 of 28 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:23:37Z",
        "count": 28,
        "schemaTokens": 5772,
        "status": "ok",
        "tools": [
          {
            "name": "get_briefing",
            "title": "Read the daily briefing",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "briefing_id": {
                  "description": "Specific briefing id (from list_briefings). Omit for the latest.",
                  "type": "string"
                },
                "include_markdown": {
                  "description": "Include the full text. Default true; set false for just the index.",
                  "type": "boolean"
                }
              },
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Read the daily briefing"
            }
          },
          {
            "name": "list_briefings",
            "title": "List past briefings",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "limit": {
                  "description": "How many, default 10",
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List past briefings"
            }
          },
          {
            "name": "get_information_diet",
            "title": "Read the information diet",
            "description": "Read 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, 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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Read the information diet"
            }
          },
          {
            "name": "list_sources",
            "title": "List information sources",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List information sources"
            }
          },
          {
            "name": "get_source",
            "title": "Inspect one source",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "source_id": {
                  "description": "Id from list_sources",
                  "type": "string"
                }
              },
              "required": [
                "source_id"
              ],
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Inspect one source"
            }
          },
          {
            "name": "get_podcast_episode",
            "title": "Get the podcast episode",
            "description": "Get 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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "briefing_id": {
                  "description": "Episode of a specific briefing. Omit for the latest.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Get the podcast episode"
            }
          },
          {
            "name": "list_read_later",
            "title": "List the read-later queue",
            "description": "List what is queued in the read-later inbox: links and forwarded emails that are guaranteed to be covered in the next briefing.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List the read-later queue"
            }
          },
          {
            "name": "list_deep_dives",
            "title": "List pending deep dives",
            "description": "List the deep-dive research requests waiting to be covered: topics the user asked the briefing to investigate with fresh web research.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "List pending deep dives"
            }
          },
          {
            "name": "get_account",
            "title": "Account and usage",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "openWorldHint": false,
              "readOnlyHint": true,
              "title": "Account and usage"
            }
          },
          {
            "name": "update_information_diet",
            "title": "Change how the briefing is written",
            "description": "Change 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).",
            "inputSchema": {
              "additionalProperties": false,
              "description": "Any subset of the settings.",
              "properties": {
                "avoid": {
                  "description": "cosa non vuole leggere mai",
                  "type": "string"
                },
                "chicca_enabled": {
                  "description": "nei giorni senza notizie, una storia vera dall'archivio",
                  "type": "boolean"
                },
                "depth": {
                  "description": "1 solo i fatti … 5 analisi e implicazioni",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                },
                "digest_days": {
                  "description": "giorni della settimana, ISO 1=lunedì … 7=domenica",
                  "items": {
                    "maximum": 7,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "type": "array"
                },
                "digest_enabled": {
                  "description": "ricevere o meno il briefing quotidiano",
                  "type": "boolean"
                },
                "digest_length": {
                  "description": "quanto deve essere lungo",
                  "enum": [
                    "short",
                    "medium",
                    "long",
                    "xlong",
                    "full"
                  ],
                  "type": "string"
                },
                "digest_time": {
                  "description": "orario di consegna, HH:MM nel fuso dell'utente",
                  "type": "string"
                },
                "email_digest_enabled": {
                  "description": "ricevere il briefing anche per email",
                  "type": "boolean"
                },
                "entry_mix": {
                  "description": "1 poche voci trattate a fondo … 5 tante voci brevi (la lunghezza totale non cambia)",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                },
                "interests": {
                  "description": "cosa seguire, in linguaggio naturale",
                  "type": "string"
                },
                "language": {
                  "description": "lingua del briefing e del podcast",
                  "enum": [
                    "it",
                    "en",
                    "es",
                    "de",
                    "fr"
                  ],
                  "type": "string"
                },
                "podcast_accento": {
                  "description": "accento della voce, per la lingua scelta: inglese us/gb/au/ie/in, spagnolo es/latam, francese fr/ca, tedesco de/at/ch (l'italiano non ha varianti)",
                  "enum": [
                    "us",
                    "gb",
                    "au",
                    "ie",
                    "in",
                    "es",
                    "latam",
                    "fr",
                    "ca",
                    "de",
                    "at",
                    "ch"
                  ],
                  "type": "string"
                },
                "podcast_enabled": {
                  "description": "generare anche l'episodio audio",
                  "type": "boolean"
                },
                "podcast_formato": {
                  "description": "show = due conduttori che si rispondono (il formato di casa); classico = una voce che legge il briefing",
                  "enum": [
                    "show",
                    "classico"
                  ],
                  "type": "string"
                },
                "podcast_minutes": {
                  "description": "durata desiderata dell'episodio",
                  "maximum": 20,
                  "minimum": 2,
                  "type": "integer"
                },
                "serper_enrich": {
                  "description": "arricchire il briefing con ricerche web fresche",
                  "type": "boolean"
                },
                "smalltalking_enabled": {
                  "description": "ogni giorno, in coda al briefing, due o tre storie brevi da raccontare",
                  "type": "boolean"
                },
                "stance": {
                  "description": "1 neutro … 5 l'editor si sbilancia",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                },
                "technicality": {
                  "description": "1 divulgativo … 5 da addetti ai lavori",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                },
                "timezone": {
                  "description": "fuso orario IANA (Europe/Rome)",
                  "type": "string"
                },
                "tone": {
                  "description": "come deve scrivere («diretto, zero fuffa»)",
                  "type": "string"
                },
                "weekly_recap_enabled": {
                  "description": "riepilogo settimanale di ciò che non è stato letto",
                  "type": "boolean"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Change how the briefing is written"
            }
          },
          {
            "name": "tune_topic",
            "title": "Tune one topic",
            "description": "Tune 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 of that WHOLE THEME gets reported (to follow one specific story, use rate_briefing_entry with \"follow\" on that entry). This is the precise instrument — for a vague comment like \"too much crypto lately\" use correct_briefing instead.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "action": {
                  "description": "What to change about it",
                  "enum": [
                    "more",
                    "less",
                    "more_technical",
                    "simpler",
                    "deeper",
                    "shorter",
                    "more_often",
                    "less_often",
                    "mute",
                    "unmute",
                    "follow",
                    "unfollow"
                  ],
                  "type": "string"
                },
                "topic": {
                  "description": "The topic, as it appears in get_information_diet or in a briefing entry (e.g. \"intelligenza artificiale\")",
                  "type": "string"
                }
              },
              "required": [
                "topic",
                "action"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Tune one topic"
            }
          },
          {
            "name": "correct_briefing",
            "title": "Correct the briefing in plain words",
            "description": "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\", \"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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "briefing_id": {
                  "description": "Which briefing the note refers to. Omit for the latest.",
                  "type": "string"
                },
                "entry_id": {
                  "description": "Optional: the specific story the note is about (entry id from get_briefing)",
                  "type": "string"
                },
                "note": {
                  "description": "What was wrong or what they want changed, in their own words",
                  "type": "string"
                }
              },
              "required": [
                "note"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Correct the briefing in plain words"
            }
          },
          {
            "name": "rate_briefing_entry",
            "title": "Rate one story",
            "description": "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 its topics. These apply to the topics of that story, so the next briefing weighs them differently. A story usually has several topics: pass `topics` to hit only some of them (e.g. \"less\" of \"demographics\" but not of \"japan\"). Sending the same signal again with different topics REPLACES the previous one: the topics you drop are restored, nothing is double-counted. \"follow\" is different: it pins THIS story — from then on every development of this specific story (and only of it) gets a full entry flagged as an update; \"unfollow\" releases it. Pinned stories are listed by get_information_diet.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "briefing_id": {
                  "description": "Which briefing. Omit for the latest.",
                  "type": "string"
                },
                "entry_id": {
                  "description": "Entry id from get_briefing",
                  "type": "string"
                },
                "signal": {
                  "description": "The signal to record",
                  "enum": [
                    "more",
                    "less",
                    "more_technical",
                    "simpler",
                    "deeper",
                    "shorter",
                    "more_often",
                    "less_often",
                    "mute",
                    "follow",
                    "unfollow"
                  ],
                  "type": "string"
                },
                "topics": {
                  "description": "Only these topics of the story (as listed by get_briefing). Omit to apply to all of its topics.",
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 5,
                  "type": "array"
                }
              },
              "required": [
                "entry_id",
                "signal"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Rate one story"
            }
          },
          {
            "name": "report_missing_story",
            "title": "Ask why a story was missing",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "briefing_id": {
                  "description": "Which briefing it was missing from. Omit for the latest.",
                  "type": "string"
                },
                "text": {
                  "description": "What story they expected, in their own words",
                  "type": "string"
                }
              },
              "required": [
                "text"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Ask why a story was missing"
            }
          },
          {
            "name": "set_learned_profile",
            "title": "Rewrite the learned profile",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "mode": {
                  "description": "Default append",
                  "enum": [
                    "append",
                    "replace"
                  ],
                  "type": "string"
                },
                "text": {
                  "description": "The profile text, or the line to add",
                  "type": "string"
                }
              },
              "required": [
                "text"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Rewrite the learned profile"
            }
          },
          {
            "name": "request_deep_dive",
            "title": "Queue a deep dive",
            "description": "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\".",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "query": {
                  "description": "The question or topic to research",
                  "type": "string"
                }
              },
              "required": [
                "query"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Queue a deep dive"
            }
          },
          {
            "name": "save_for_later",
            "title": "Save something into the next briefing",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "text": {
                  "description": "Alternative to url: a free-text note to keep",
                  "type": "string"
                },
                "title": {
                  "description": "Optional title for a text note",
                  "type": "string"
                },
                "url": {
                  "description": "The link to save",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Save something into the next briefing"
            }
          },
          {
            "name": "generate_briefing",
            "title": "Generate a briefing now",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Generate a briefing now"
            }
          },
          {
            "name": "create_source",
            "title": "Create a topic inbox",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "description": {
                  "description": "Optional brief: what the reader expects from this inbox and what to skip — the editor reads it at every briefing",
                  "type": "string"
                },
                "name": {
                  "description": "Short name, e.g. \"AI research\" or \"Local news\"",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Create a topic inbox"
            }
          },
          {
            "name": "update_source",
            "title": "Update a topic inbox",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "description": {
                  "description": "The inbox brief: what the reader expects from it and what to skip — the editor reads it at every briefing",
                  "type": "string"
                },
                "include_in_digest": {
                  "description": "false = keep collecting but leave it out of the briefing",
                  "type": "boolean"
                },
                "is_active": {
                  "description": "false = stop collecting entirely",
                  "type": "boolean"
                },
                "name": {
                  "description": "New name for the inbox",
                  "type": "string"
                },
                "priority": {
                  "description": "1 marginal … 5 always first",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                },
                "source_id": {
                  "description": "Id from list_sources",
                  "type": "string"
                },
                "technicality": {
                  "description": "Override just for this inbox",
                  "maximum": 5,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "required": [
                "source_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Update a topic inbox"
            }
          },
          {
            "name": "delete_source",
            "title": "Delete a topic inbox",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "source_id": {
                  "description": "Id from list_sources",
                  "type": "string"
                }
              },
              "required": [
                "source_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Delete a topic inbox"
            }
          },
          {
            "name": "add_feed",
            "title": "Add an RSS feed",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "source_id": {
                  "description": "Which inbox (from list_sources)",
                  "type": "string"
                },
                "url": {
                  "description": "Feed URL or plain site address, e.g. \"ilpost.it\"",
                  "type": "string"
                }
              },
              "required": [
                "source_id",
                "url"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Add an RSS feed"
            }
          },
          {
            "name": "remove_feed",
            "title": "Remove an RSS feed",
            "description": "Remove an RSS feed from a topic inbox. Already-collected content stays; nothing new arrives from it.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "feed_id": {
                  "description": "Id from get_source",
                  "type": "string"
                }
              },
              "required": [
                "feed_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Remove an RSS feed"
            }
          },
          {
            "name": "add_web_search",
            "title": "Monitor a web search",
            "description": "Monitor 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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "kind": {
                  "description": "Default news",
                  "enum": [
                    "news",
                    "search"
                  ],
                  "type": "string"
                },
                "query": {
                  "description": "The query, as you would type it into Google",
                  "type": "string"
                },
                "source_id": {
                  "description": "Which inbox (from list_sources)",
                  "type": "string"
                }
              },
              "required": [
                "source_id",
                "query"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Monitor a web search"
            }
          },
          {
            "name": "remove_web_search",
            "title": "Stop monitoring a search",
            "description": "Stop monitoring a standing web search: no new results from that query will reach the briefing. What it already collected stays where it is.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "search_id": {
                  "description": "Id from get_source",
                  "type": "string"
                }
              },
              "required": [
                "search_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false,
              "title": "Stop monitoring a search"
            }
          },
          {
            "name": "discover_sources",
            "title": "Find sources for a subject",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "description": {
                  "description": "What they want to follow, in plain words",
                  "type": "string"
                },
                "source_id": {
                  "description": "The inbox the proposals are for (its existing sources are excluded)",
                  "type": "string"
                }
              },
              "required": [
                "source_id",
                "description"
              ],
              "type": "object"
            },
            "annotations": {
              "openWorldHint": true,
              "readOnlyHint": true,
              "title": "Find sources for a subject"
            }
          },
          {
            "name": "import_opml",
            "title": "Import an OPML subscription file",
            "description": "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).",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "dry_run": {
                  "description": "true = only list what would be imported",
                  "type": "boolean"
                },
                "limit": {
                  "description": "Max feeds to add in this call (default 20 — big imports go in batches)",
                  "maximum": 40,
                  "minimum": 1,
                  "type": "integer"
                },
                "opml": {
                  "description": "The full OPML/XML file contents",
                  "type": "string"
                },
                "source_id": {
                  "description": "Which inbox to import into",
                  "type": "string"
                }
              },
              "required": [
                "source_id",
                "opml"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Import an OPML subscription file"
            }
          },
          {
            "name": "unsubscribe_newsletter",
            "title": "Unsubscribe from a newsletter",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "properties": {
                "newsletter_id": {
                  "description": "Id from get_source (newsletters)",
                  "type": "string"
                }
              },
              "required": [
                "newsletter_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false,
              "title": "Unsubscribe from a newsletter"
            }
          }
        ]
      },
      "name": "proofite",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "proofite-mcp",
          "version": "1.0.0",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/proofite.json",
      "popularity": {
        "githubStars": 0,
        "npmWeekly": 31
      },
      "registryName": "com.proofite/proofite",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://proofite.com/mcp"
        }
      ],
      "repository": "https://github.com/hanicker/proofite-mcp",
      "reviewed": false,
      "slug": "proofite",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.proofite/proofite",
      "summary": "Read your AI-written daily briefing and retune the filter behind it: feeds, newsletters, topics.",
      "updatedAt": "2026-08-17T09:59:35Z",
      "url": "https://www.anchorterminal.com/tools/proofite",
      "vendor": "proofite.com",
      "vendorUrl": "https://proofite.com/mcp",
      "version": "1.0.0",
      "websiteUrl": "https://proofite.com/mcp",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/proofite",
    "json": "https://www.anchorterminal.com/tools/proofite.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/proofite.md",
    "slim": "https://www.anchorterminal.com/tools/proofite.min.md"
  },
  "markdown": "# proofite\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by proofite.com (https://proofite.com/mcp)\n- Category: Data providers (https://www.anchorterminal.com/categories/data-providers.md)\n- Listed because: It's published in the registry under proofite.com, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Read your AI-written daily briefing and retune the filter behind it: feeds, newsletters, topics.\n\n## Facts\n\n- MCP registry: `com.proofite/proofite` 1.0.0\n- Endpoint: https://proofite.com/mcp (streamable HTTP)\n- Package: npm `proofite-mcp` (stdio)\n- Source: https://github.com/hanicker/proofite-mcp\n- Website: https://proofite.com/mcp\n- npm downloads a week: 31\n- GitHub stars: 0\n- Registry entry updated: 2026-08-17\n\n## Tools\n\n- Tools it lists (28, about 5,772 tokens of context, `tools/list` without credentials over MCP 2026-07-28, checked 2026-10-04 22:23 UTC):\n  - `get_briefing` (read-only): 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…\n  - `list_briefings` (read-only): 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…\n  - `get_information_diet` (read-only): Read everything that shapes what reaches this person: delivery schedule, length, technicality, depth, stance and tone, stated interests and no-go topics, the…\n  - `list_sources` (read-only): 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…\n  - `get_source` (read-only): 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…\n  - `get_podcast_episode` (read-only): Get 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…\n  - `list_read_later` (read-only): List what is queued in the read-later inbox: links and forwarded emails that are guaranteed to be covered in the next briefing.\n  - `list_deep_dives` (read-only): List the deep-dive research requests waiting to be covered: topics the user asked the briefing to investigate with fresh web research.\n  - `get_account` (read-only): 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…\n  - `update_information_diet` (writes): Change how and when the briefing reaches this person: delivery time and days, length, technicality, depth, stance, tone, stated interests and topics to avoid,…\n  - `tune_topic` (writes): Tune 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…\n  - `correct_briefing` (writes): 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…\n  - `rate_briefing_entry` (writes): 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 its topics. These…\n  - `report_missing_story` (writes): 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…\n  - `set_learned_profile` (writes): 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.…\n  - `request_deep_dive` (writes): 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…\n  - `save_for_later` (writes): 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,…\n  - `generate_briefing` (writes): 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…\n  - `create_source` (writes): 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…\n  - `update_source` (writes): 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…\n  - `delete_source` (writes): Permanently delete a topic inbox with all its feeds, searches and collected content. Irreversible: the dedicated email address stops working too. Prefer…\n  - `add_feed` (writes): 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,…\n  - `remove_feed` (writes): Remove an RSS feed from a topic inbox. Already-collected content stays; nothing new arrives from it.\n  - `add_web_search` (writes): Monitor 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…\n  - `remove_web_search` (writes): Stop monitoring a standing web search: no new results from that query will reach the briefing. What it already collected stays where it is.\n  - `discover_sources` (read-only): 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…\n  - `import_opml` (writes): Import subscriptions from another RSS reader (Feedly, Inoreader, FreshRSS, NetNewsWire) by passing the OPML file contents. Set dry_run true first to see what…\n  - `unsubscribe_newsletter` (writes): 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…\n- How its tools read to an agent (0 errors, 0 warnings, 1 note, about 5,772 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - note TC24 server: 28 of 28 tools have no outputSchema\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/proofite.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "proofite",
        "url": ""
      }
    ],
    "description": "proofite, an MCP server by proofite.com, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Read your AI-written daily briefing and retune the filter behind it: feeds, newsletters, topics.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "proofite",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/proofite",
    "published": "",
    "section": "indexed",
    "title": "proofite: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/tools/proofite"
  },
  "tokens": {
    "markdown": 1900,
    "slim": 1830
  },
  "version": 1
}
