_ registry / mcp streamable-http · checked 38m ago

proofite

https://proofite.com

Registry code: 75d4ec926fe60bda

api record

Proofite turns the sources a person chooses — newsletters, RSS feeds, monitored web searches, saved links — into one personal daily briefing, also available as a podcast.

This server is the control room for that: read what reached them (get_briefing), read the filter that decides what reaches them (get_information_diet), and change it.

endpoint
https://proofite.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is proofite live?
Yes — it answered the hub's last check (checked 38m ago). It answered 100% of checks over the last 30 days.
Is proofite free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does proofite have?
47 tools: get_briefing, list_briefings, get_information_diet, list_sources, get_source, get_podcast_episode, get_episode_transcript, list_read_later, ….
Is proofite safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 99.7%· all time 99.7%

latency
237ms

last good check

priced tools
0

of 47 tools

_ answered our checks, 90 days 330 checks · signed record
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
  • unknown → live
_ what it is for
used for
  • read a personal daily news briefing
  • add rss feeds to a briefing
  • tune briefing topics
  • generate a podcast episode of the briefing
takes → gives
text, web pages → text, audio
tools
7 reads18 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 47 tools
47 auth-required 47 of 47 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_briefing reads auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "briefing_id": {
          "type": "string",
          "description": "Specific briefing id (from list_briefings). Omit for the latest."
        },
        "include_markdown": {
          "type": "boolean",
          "description": "Include the full text. Default true; set false for just the index."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • list_briefings reads auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "How many, default 10"
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Skip the N most recent: use it to walk back through an archive longer than 50 (default 0)"
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • get_information_diet auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • list_sources reads auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • get_source auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id"
      ],
      "properties": {
        "source_id": {
          "type": "string",
          "description": "Id from list_sources"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • get_podcast_episode reads auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "briefing_id": {
          "type": "string",
          "description": "Episode of a specific briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 10 lines
  • get_episode_transcript reads auth-required 34d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "episode_id": {
          "type": "string",
          "description": "A specific episode (from get_podcast_episode). Wins over briefing_id."
        },
        "briefing_id": {
          "type": "string",
          "description": "The episode of a specific briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • list_read_later reads auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • list_inserts auth-required 6d ago

    The inserts: optional extra pages of the daily briefing that the person switches on one by one — weather for their city, their fantasy-football roster (Italian users), the stocks they hold, a daily rebus puzzle. Returns, in the person's language, each insert with what it does, whether it is on, its current configuration, the fields it needs (with types) and the AI levels it offers. Read this before configure_insert.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • get_insert auth-required 2d ago

    Everything about ONE insert (an optional extra page of the briefing; the list is in list_inserts), in the person's language: what it does and how it works, how often it shows up and where it sits in the briefing, its short guide, its data sources, the AI levels it offers, every configuration field with its options and its current value, and this person's state: on or off, configured or not, the level, the configuration summed up in a phrase, the link that opens it in the app. Use it to explain an insert or to prepare configure_insert.

    mcp-tool

    {
      "type": "object",
      "required": [
        "insert"
      ],
      "properties": {
        "insert": {
          "enum": [
            "meteo",
            "aria",
            "allerte",
            "valanghe",
            "cielo",
            "lanci",
            "terremoti",
            "emergenze",
            "primapagina",
            "agenda",
            "tendenze",
            "parole",
            "verifica",
            "addio",
            "cdm",
            "parlamento",
            "fuorisacco",
            "resume",
            "portaccanto",
            "rassegna",
            "borsa",
            "cambi",
            "cripto",
            "prezzo",
            "casa",
            "luce",
            "carburanti",
            "scadenze",
            "statoete",
            "richiami",
            "squadra",
            "campionato",
            "fantacalcio",
            "formula1",
            "motogp",
            "tennis",
            "basket",
            "pallavolo",
            "rugby",
            "nfl",
            "hockey",
            "golf",
            "sapere",
            "foto",
            "opera",
            "lingua",
            "corso",
            "serie",
            "musica",
            "podcast",
            "video",
            "rebus",
            "quiz",
            "parola",
            "cruciverba",
            "sudoku",
            "scacchi",
            "anno",
            "cronologia",
            "luogo",
            "almanacco",
            "feste",
            "viaggio",
            "volo",
            "citta",
            "eventi",
            "scioperi",
            "chicca",
            "smalltalking",
            "riepilogo"
          ],
          "type": "string",
          "description": "The insert id (from list_inserts)"
        }
      },
      "additionalProperties": false
    }
    arguments 85 lines
  • list_saved auth-required 34d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "How many to return (default 30)"
        },
        "query": {
          "type": "string",
          "description": "Optional: a word to search for"
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • get_account auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • list_features auth-required 2d ago

    What Proofite can do for this person, feature by feature and grouped by family (reading, listening, correcting, sharing…): for each feature a short explanation, its state for THIS account (on; off, with the setting that switches it on; or "not yet", with what has to happen first), a personal example from their own numbers when there is one, and the page of the app where it lives. Use it to answer "what can I do with Proofite?", "is X on?" or "why don't I see X?" before changing anything. The texts are in Italian, the language the app is written in: say them in the person's language. Settings change with update_information_diet, inserts with configure_insert.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "family": {
          "type": "string",
          "description": "Optional: only one family, by id (leggere = reading, ascoltare = listening, correggere = correcting, condividere = sharing; the full answer lists them all)"
        }
      },
      "additionalProperties": false
    }
    arguments 10 lines
  • tune_topic changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "action"
      ],
      "properties": {
        "topic": {
          "type": "string",
          "description": "One key: a topic as it appears in get_information_diet or in a briefing entry (e.g. \"intelligenza artificiale\", \"e:tesla\", \"c:auto\")"
        },
        "action": {
          "enum": [
            "more",
            "less",
            "more_technical",
            "simpler",
            "deeper",
            "shorter",
            "more_often",
            "less_often",
            "mute",
            "unmute",
            "follow",
            "unfollow"
          ],
          "type": "string",
          "description": "What to change about it"
        },
        "topics": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 4,
          "description": "Alternative to topic: labels to COMBINE with AND (e.g. [\"e:tesla\",\"f:soldi\"])"
        }
      },
      "additionalProperties": false
    }
    arguments 39 lines
  • rate_briefing_entry auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "entry_id",
        "signal"
      ],
      "properties": {
        "signal": {
          "enum": [
            "more",
            "less",
            "more_technical",
            "simpler",
            "deeper",
            "shorter",
            "more_often",
            "less_often",
            "mute",
            "follow",
            "unfollow"
          ],
          "type": "string",
          "description": "The signal to record"
        },
        "topics": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 6,
          "description": "Labels of this story to combine (AND), from `labels` in get_briefing — e.g. [\"e:tesla\"] for Tesla everywhere, [\"e:tesla\",\"f:soldi\"] for Tesla only about money. Omit for the whole story."
        },
        "entry_id": {
          "type": "string",
          "description": "Entry id from get_briefing"
        },
        "withdraw": {
          "type": "boolean",
          "description": "true = take back the signal of this kind previously given on this story (the topics it had touched are restored). With \"follow\" use \"unfollow\" instead."
        },
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 47 lines
  • request_deep_dive changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "The question or topic to research"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • cancel_deep_dive changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "deep_dive_id"
      ],
      "properties": {
        "deep_dive_id": {
          "type": "string",
          "description": "The request id, from list_deep_dives"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • unsave_entry changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "properties": {
        "entry_id": {
          "type": "string",
          "description": "Alternative: the entry id in its briefing"
        },
        "saved_id": {
          "type": "string",
          "description": "The id from list_saved"
        },
        "briefing_id": {
          "type": "string",
          "description": "With entry_id: which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • share_briefing changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "podcast": {
          "type": "boolean",
          "description": "Include the episode in the shared page (default: unchanged, initially false)"
        },
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • unshare_briefing changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "properties": {
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 10 lines
  • generate_podcast_episode changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 10 lines
  • generate_briefing changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • create_source auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Short name, e.g. \"AI research\" or \"Local news\""
        },
        "description": {
          "type": "string",
          "description": "Optional brief: what the reader expects from this inbox and what to skip — the editor reads it at every briefing"
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • add_feed changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Feed URL or plain site address, e.g. \"ilpost.it\""
        },
        "source_id": {
          "type": "string",
          "description": "Which inbox (from list_sources)"
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • remove_feed changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "feed_id"
      ],
      "properties": {
        "feed_id": {
          "type": "string",
          "description": "Id from get_source"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • discover_sources auth-required 35d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id",
        "description"
      ],
      "properties": {
        "source_id": {
          "type": "string",
          "description": "The inbox the proposals are for (its existing sources are excluded)"
        },
        "description": {
          "type": "string",
          "description": "What they want to follow, in plain words"
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • import_opml changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id",
        "opml"
      ],
      "properties": {
        "opml": {
          "type": "string",
          "description": "The full OPML/XML file contents"
        },
        "limit": {
          "type": "integer",
          "maximum": 40,
          "minimum": 1,
          "description": "Max feeds to add in this call (default 20 — big imports go in batches)"
        },
        "dry_run": {
          "type": "boolean",
          "description": "true = only list what would be imported"
        },
        "source_id": {
          "type": "string",
          "description": "Which inbox to import into"
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • unsubscribe_newsletter auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "newsletter_id"
      ],
      "properties": {
        "newsletter_id": {
          "type": "string",
          "description": "Id from get_source (newsletters)"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • get_page_help auth-required 2d ago

    Given a page of the Proofite app (the path from the address bar, like /app/digests, /app/edicola, /app/settings, or a full link), says what that page is, what can be done there and which features live on it, with their state for this person; on a briefing or an inbox it also says which one. Use it when the person asks "what is this?", "what can I do here?" or "where do I find X?" about the screen in front of them. The texts are in Italian, the language the app is written in: say them in the person's language. An unknown path gets the list of the pages that exist.

    mcp-tool

    {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "description": "The page: a path of the app (/app/settings, /settings) or a full link (https://proofite.com/app/digests/…)"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • list_deep_dives auth-required 35d ago

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

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • correct_briefing changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "note"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "What was wrong or what they want changed, in their own words"
        },
        "entry_id": {
          "type": "string",
          "description": "Optional: the specific story the note is about (entry id from get_briefing)"
        },
        "briefing_id": {
          "type": "string",
          "description": "Which briefing the note refers to. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • save_entry auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "entry_id"
      ],
      "properties": {
        "entry_id": {
          "type": "string",
          "description": "Entry id from get_briefing, or \"chicca\""
        },
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • set_learned_profile auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text"
      ],
      "properties": {
        "mode": {
          "enum": [
            "append",
            "replace"
          ],
          "type": "string",
          "description": "Default append"
        },
        "text": {
          "type": "string",
          "description": "The profile text, or the line to add"
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • unfollow_story auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "story_id"
      ],
      "properties": {
        "story_id": {
          "type": "string",
          "description": "The story id listed by get_information_diet"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • rate_insert auth-required never probed

    Leave feedback on one insert of the briefing for the people who build it: stars from 1 to 5 and/or a comment of up to 1000 characters, at least one of the two. Use it when the person judges an insert — "the weather page is great", "the quiz is too hard", "the stocks insert is missing my bank" — passing the insert id (see list_inserts), the stars if they gave a grade, and the comment in their own words. A second call within fifteen minutes completes or corrects the same feedback instead of adding another; later calls add a new one. Comments reach the founder; stars are read in aggregate. Returns the current average for that insert.

    mcp-tool

    {
      "type": "object",
      "required": [
        "insert"
      ],
      "properties": {
        "stars": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "The grade, 1 (poor) to 5 (excellent)"
        },
        "insert": {
          "enum": [
            "meteo",
            "aria",
            "allerte",
            "valanghe",
            "cielo",
            "lanci",
            "terremoti",
            "emergenze",
            "primapagina",
            "agenda",
            "tendenze",
            "parole",
            "verifica",
            "addio",
            "cdm",
            "parlamento",
            "fuorisacco",
            "resume",
            "portaccanto",
            "rassegna",
            "borsa",
            "cambi",
            "cripto",
            "prezzo",
            "casa",
            "luce",
            "carburanti",
            "scadenze",
            "statoete",
            "richiami",
            "squadra",
            "campionato",
            "fantacalcio",
            "formula1",
            "motogp",
            "tennis",
            "basket",
            "pallavolo",
            "rugby",
            "nfl",
            "hockey",
            "golf",
            "sapere",
            "foto",
            "opera",
            "lingua",
            "corso",
            "serie",
            "musica",
            "podcast",
            "video",
            "rebus",
            "quiz",
            "parola",
            "cruciverba",
            "sudoku",
            "scacchi",
            "anno",
            "cronologia",
            "luogo",
            "almanacco",
            "feste",
            "viaggio",
            "volo",
            "citta",
            "eventi",
            "scioperi",
            "chicca",
            "smalltalking",
            "riepilogo"
          ],
          "type": "string",
          "description": "The insert id"
        },
        "comment": {
          "type": "string",
          "maxLength": 1000,
          "description": "What they like, what is missing, in their words"
        }
      },
      "additionalProperties": false
    }
    arguments 96 lines
  • delete_source changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id"
      ],
      "properties": {
        "source_id": {
          "type": "string",
          "description": "Id from list_sources"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • configure_insert auth-required never probed

    Configure one insert of the briefing. Call list_inserts first: it returns, for each insert available to this person (language and country already applied), the config fields with their key, type and options. Pass the insert id and any subset of: enabled (true/false), level (one of the insert's AI levels: nessuno = data only, leggero = the podcast hosts mention it, medio = plus a short written comment), config (an object keyed by the field keys). Field types: "luoghi" takes city names as strings (e.g. {"citta": ["Verona"]}; resolved to coordinates here), "lista_testo" takes an array of strings or the pasted text under "<key>_testo", "titoli"/"squadra" take names as strings, "scelta" takes one option id, "scelta_multipla" an array of option ids, "testo" a string. Examples: meteo {"citta": ["Verona", "Milano"], "orizzonte": "weekend"}; fantacalcio {"rosa": ["Contini", "Milinkovic-Savic V."], "lega": "…"}; borsa {"titoli": ["Enel", "Nvidia"]}; rebus {"livello_gioco": "facile", "quando": "weekend"}. Switching on requires a valid configuration. Takes effect from the next briefing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "insert"
      ],
      "properties": {
        "level": {
          "enum": [
            "nessuno",
            "leggero",
            "medio"
          ],
          "type": "string",
          "description": "How much the AI talks about it, where the insert offers levels"
        },
        "config": {
          "type": "object",
          "description": "The insert's configuration (see the description)",
          "additionalProperties": true
        },
        "insert": {
          "enum": [
            "meteo",
            "aria",
            "allerte",
            "valanghe",
            "cielo",
            "lanci",
            "terremoti",
            "emergenze",
            "primapagina",
            "agenda",
            "tendenze",
            "parole",
            "verifica",
            "addio",
            "cdm",
            "parlamento",
            "fuorisacco",
            "resume",
            "portaccanto",
            "rassegna",
            "borsa",
            "cambi",
            "cripto",
            "prezzo",
            "casa",
            "luce",
            "carburanti",
            "scadenze",
            "statoete",
            "richiami",
            "squadra",
            "campionato",
            "fantacalcio",
            "formula1",
            "motogp",
            "tennis",
            "basket",
            "pallavolo",
            "rugby",
            "nfl",
            "hockey",
            "golf",
            "sapere",
            "foto",
            "opera",
            "lingua",
            "corso",
            "serie",
            "musica",
            "podcast",
            "video",
            "rebus",
            "quiz",
            "parola",
            "cruciverba",
            "sudoku",
            "scacchi",
            "anno",
            "cronologia",
            "luogo",
            "almanacco",
            "feste",
            "viaggio",
            "volo",
            "citta",
            "eventi",
            "scioperi",
            "chicca",
            "smalltalking",
            "riepilogo"
          ],
          "type": "string",
          "description": "The insert id"
        },
        "enabled": {
          "type": "boolean",
          "description": "Switch it on (true) or off (false)"
        }
      },
      "additionalProperties": false
    }
    arguments 103 lines
  • update_information_diet changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "properties": {
        "tone": {
          "type": "string",
          "description": "come deve scrivere («diretto, zero fuffa»)"
        },
        "avoid": {
          "type": "string",
          "description": "cosa non vuole leggere mai"
        },
        "depth": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "1 solo i fatti … 5 analisi e implicazioni"
        },
        "stance": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "1 neutro … 5 l'editor si sbilancia"
        },
        "language": {
          "enum": [
            "it",
            "en",
            "es",
            "de",
            "fr",
            "pt",
            "nl",
            "tr",
            "sv",
            "id",
            "zh"
          ],
          "type": "string",
          "description": "lingua del briefing e del podcast (codice ISO 639-1)"
        },
        "timezone": {
          "type": "string",
          "description": "fuso orario IANA (Europe/Rome)"
        },
        "entry_mix": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "1 poche voci trattate a fondo … 5 tante voci brevi (la lunghezza totale non cambia)"
        },
        "interests": {
          "type": "string",
          "description": "cosa seguire, in linguaggio naturale"
        },
        "digest_days": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 7,
            "minimum": 1
          },
          "description": "giorni della settimana, ISO 1=lunedì … 7=domenica"
        },
        "digest_time": {
          "type": "string",
          "description": "orario di consegna, HH:MM nel fuso dell'utente"
        },
        "technicality": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "1 divulgativo … 5 da addetti ai lavori"
        },
        "digest_length": {
          "enum": [
            "short",
            "medium",
            "long",
            "xlong",
            "full"
          ],
          "type": "string",
          "description": "quanto deve essere lungo"
        },
        "serper_enrich": {
          "type": "boolean",
          "description": "arricchire il briefing con ricerche web fresche"
        },
        "brevi_spiegate": {
          "type": "boolean",
          "description": "sotto ogni breve due o tre frasi di spiegazione (di cosa si tratta, perché conta); spento = una sola frase di perché"
        },
        "chicca_enabled": {
          "type": "boolean",
          "description": "nei giorni senza notizie, una storia vera dall'archivio (è l'inserto «chicca» dell'Edicola)"
        },
        "digest_enabled": {
          "type": "boolean",
          "description": "ricevere o meno il briefing quotidiano"
        },
        "podcast_accento": {
          "enum": [
            "us",
            "gb",
            "au",
            "ie",
            "in",
            "es",
            "latam",
            "fr",
            "ca",
            "br",
            "pt",
            "de",
            "at",
            "ch",
            null
          ],
          "type": [
            "string",
            "null"
          ],
          "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); null = automatico, abbinato alla lingua"
        },
        "podcast_enabled": {
          "type": "boolean",
          "description": "generare anche l'episodio audio"
        },
        "podcast_formato": {
          "enum": [
            "show",
            "classico"
          ],
          "type": "string",
          "description": "show = due conduttori che si rispondono (il formato di casa); classico = una voce che legge il briefing"
        },
        "podcast_minutes": {
          "type": "integer",
          "maximum": 20,
          "minimum": 2,
          "description": "durata desiderata dell'episodio"
        },
        "email_digest_enabled": {
          "type": "boolean",
          "description": "ricevere il briefing anche per email"
        },
        "smalltalking_enabled": {
          "type": "boolean",
          "description": "ogni giorno, in coda al briefing, due o tre storie brevi da raccontare (è l'inserto «smalltalking» dell'Edicola)"
        },
        "weekly_recap_enabled": {
          "type": "boolean",
          "description": "il riepilogo della settimana in fondo al briefing, il giorno scelto (è l'inserto «riepilogo» dell'Edicola)"
        }
      },
      "description": "Any subset of the settings.",
      "additionalProperties": false
    }
    arguments 158 lines
  • report_missing_story auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "description": "What story they expected, in their own words"
        },
        "briefing_id": {
          "type": "string",
          "description": "Which briefing it was missing from. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • list_missing_reports reads auth-required 34d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "briefing_id": {
          "type": "string",
          "description": "Which briefing. Omit for the latest."
        }
      },
      "additionalProperties": false
    }
    arguments 10 lines
  • add_proposed_source changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "report_id"
      ],
      "properties": {
        "report_id": {
          "type": "string",
          "description": "The investigation id, from list_missing_reports or the report_missing_story result"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • save_for_later changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "The link to save"
        },
        "text": {
          "type": "string",
          "description": "Alternative to url: a free-text note to keep"
        },
        "title": {
          "type": "string",
          "description": "Optional title for a text note"
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • resume_podcast changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • update_source auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "New name for the inbox"
        },
        "priority": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "1 marginal … 5 always first"
        },
        "is_active": {
          "type": "boolean",
          "description": "false = stop collecting entirely"
        },
        "source_id": {
          "type": "string",
          "description": "Id from list_sources"
        },
        "description": {
          "type": "string",
          "description": "The inbox brief: what the reader expects from it and what to skip — the editor reads it at every briefing"
        },
        "technicality": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "Override just for this inbox"
        },
        "include_in_digest": {
          "type": "boolean",
          "description": "false = keep collecting but leave it out of the briefing"
        }
      },
      "additionalProperties": false
    }
    arguments 41 lines
  • add_web_search auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_id",
        "query"
      ],
      "properties": {
        "kind": {
          "enum": [
            "news",
            "search"
          ],
          "type": "string",
          "description": "Default news"
        },
        "query": {
          "type": "string",
          "description": "The query, as you would type it into Google"
        },
        "source_id": {
          "type": "string",
          "description": "Which inbox (from list_sources)"
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • remove_web_search changes data auth-required never probed

    Stop monitoring a standing web search: no new results from that query will reach the briefing. What it already collected stays where it is.

    mcp-tool

    {
      "type": "object",
      "required": [
        "search_id"
      ],
      "properties": {
        "search_id": {
          "type": "string",
          "description": "Id from get_source"
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • search_briefings auth-required 46h ago

    Search the person's past daily briefings for a word or a phrase, in the titles and in the text of every story, newest first. Each result has the briefing id, date and title, the passage around the match and, when the match is inside a story, that story's entry id and headline, with the link that opens the briefing right there. Use it for "when did you tell me about X?" or "find that piece on Y", then read the briefing with get_briefing. The match is literal, with no synonyms: if nothing comes back, try a shorter word or another spelling. The reading list has its own search (list_saved).

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 30,
          "minimum": 1,
          "description": "How many briefings at most (default 10)"
        },
        "query": {
          "type": "string",
          "description": "The word or phrase to look for, at least two characters"
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 75d4ec926fe60bda.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/75d4ec926fe60bda/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/75d4ec926fe60bda/badge.svg)](https://brick.blue/agent/75d4ec926fe60bda?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.