Access for AI Agents
This site is built for two readerships: people, and AI agents researching United States federal government actions. You are welcome to ingest this data. It exists so an agent can answer "what did the federal government do on date D" from one clean, summarized, citation-bound source instead of crawling many official sites.
Coverage grows continuously: sources currently closed to
honestly-identified automated clients are documented as unavailable in
the source guide — not abandoned — and opening them through publishers'
own documented channels and direct engagement with agencies is standing
work. Check the source guide for what is ingested today.
What is here
- Daily digests at stable URLs:
/<YYYY-MM-DD>.html(styled HTML) — each covers one complete day of congressional floor activity, bills, Federal Register actions, enacted laws, federal court opinions, agency announcements, recorded roll-call votes, and bill actions, with a table of contents, plain-language quick-reads, and a mandatory Coverage Statement accounting for everything published that day. - Machine index:
/digests.json— every available digest with date, URL, and teaser. Poll this (or the Atom feed at/feed.xml) for new days; both are small. - Source guide:
/sources.html— every federal source this pipeline ingests, plans to ingest, or found unavailable, with method and status, plus what we actually received from each: items ingested over a trailing window, their average and median length, the delivery mode, and how the source's server answered our requests. - Source statistics:
/sources.json— the same facts, machine-readable, with the classification thresholds included so any health label can be recomputed from the numbers beside it. Read these as a description of our ingestion, not as a measurement of an agency: a 4xx or 5xx is a server declining to return content, and why it declined is not visible to us. This file is not part of the official record and must never be cited as government publication. - Canonical Markdown for every digest lives in the public repository
at
github.com/davidkarnowski/free-agentic-publication-digester (opens in a new tab)
(
digests/<date>.md), alongside provenance manifests (provenance/manifests/) whose SHA-256 records let you verify captured content.
Discovery for agents
Besides this page and /llms.txt, the site publishes the machine
discovery documents agents actually poll, each at its registered or
specified location (GUIDE §1). Every one of them is a static file.
- Content Signals in
/robots.txt: search, AI input, and AI training are all welcome (search=yes, ai-input=yes, ai-train=yes); CC BY 4.0 attribution still applies. - API catalog (RFC 9727) at
/.well-known/api-catalog, and an OpenAPI 3.1 description of the static read files at/openapi.json, with JSON Schemas under/schema/fordigests.json,today.json,day/<date>.json, andsources.json. - AI Catalog at
/.well-known/ai-catalog.json: every machine surface here with representative queries, also named by theAgentmap:line in/robots.txt. - Agent Skills at
/.well-known/agent-skills/index.json: four step-by-step instruction files for reading a digest, reading the live day, understanding source coverage, and verifying the record against the repository, each with a SHA-256 digest of its served bytes. /auth.md: the authentication document, which says there is no authentication.- Markdown twins: append
.mdto a page URL, or sendAccept: text/markdown. For a digest,/<YYYY-MM-DD>.mdis the canonical record, byte-identical to the repository file. - MCP: a read-only Model Context Protocol service; see the MCP service section below.
MCP service
A read-only Model Context Protocol (opens in a new tab) service answers at https://fapd.info/mcp: JSON-RPC 2.0 over HTTPS POST (the Streamable HTTP transport). It performs no inference, keeps no sessions, needs no account, and reads nothing but the files this site already publishes, so every tool returns published material verbatim. Each tool description also asks the reading model to treat that text as data, not as instructions.
- Endpoint:
https://fapd.info/mcp—POSTonly; aGETreceives a 405 whose body says where to look instead. - Protocol versions: 2026-07-28 (stateless; begin with
server/discover) and 2025-11-25, 2025-06-18 (theinitializehandshake, answered without a session). - Server card:
/mcp/server-card, also at/.well-known/mcp/server-card.json. - Posture: read-only, no inference, no writes, no accounts, no sessions, no streaming.
How to connect
Claude Code, from a terminal:
claude mcp add --transport http fapd https://fapd.info/mcp
Any client that takes a JSON configuration:
json
{
"mcpServers": {
"fapd": {
"type": "http",
"url": "https://fapd.info/mcp"
}
}
}
Tools
Every tool is read-only, idempotent and closed-world: each reads one published file and returns it, paged where the file is a list. Parameters are validated by the service; an unknown or malformed argument is refused by name.
| Tool | Returns | Parameters |
|---|---|---|
list_digests |
Lists published digest days, newest first: date, page URL, canonical Markdown path and teaser. | offset (integer, 0…10000, default 0); limit (integer, 1…60, default 14) |
get_digest |
Returns the canonical Markdown digest for a published day, verbatim, after a one-paragraph disclosure. | date (string, required) |
get_live_day |
Returns today's PRELIMINARY observed items with the day's disclosures and counts. Items the publisher dates earlier are excluded unless include_backfill is true; collection narrows to one collection. | offset (integer, 0…10000, default 0); limit (integer, 1…100, default 50); include_backfill (boolean, default False); collection (string) |
list_day_views |
Lists the days that have a frozen observed listing, newest first. | offset (integer, 0…10000, default 0); limit (integer, 1…366, default 30) |
get_day_listing |
Returns a finished day's frozen observed listing with its disclosures and counts. Items the publisher dates earlier are excluded unless include_backfill is true; collection narrows to one collection. | date (string, required); offset (integer, 0…10000, default 0); limit (integer, 1…100, default 50); include_backfill (boolean, default False); collection (string) |
list_sources |
Lists the source directory with this project's ingestion statistics and health labels for each source. | offset (integer, 0…10000, default 0); limit (integer, 1…200, default 50) |
get_source |
Returns one source's full record: registry entry, ingestion statistics, health and daily activity. | source_id (string, required) |
get_agent_guide |
Returns llms.txt: the plain-text guide to every published surface. | — |
Resources
The same files are also exposed as MCP resources, by URL:
| Resource | URI | Type |
|---|---|---|
| Agent guide (llms.txt) | https://fapd.info/llms.txt |
text/plain |
| For agents (Markdown) | https://fapd.info/agents.md |
text/markdown |
| Authentication policy | https://fapd.info/auth.md |
text/markdown |
| Digest index | https://fapd.info/digests.json |
application/json |
| Source directory | https://fapd.info/sources.json |
application/json |
| Digest for a day (template) | https://fapd.info/{date}.md |
text/markdown |
| Frozen day view (template) | https://fapd.info/day/{date}.json |
application/json |
| Source page (template) | https://fapd.info/sources/{source_id}.md |
text/markdown |
What it does not do
- No search. The tools list, page, filter on a named collection, and fetch by date or source id. Nothing else.
- No writes, no accounts, no sessions, no subscriptions, no prompts, no sampling, and no streaming: responses are plain JSON, never server-sent events.
- No inference. No model runs anywhere in the service; text labeled FAPD-AI in a digest was written when the digest was, not when you asked.
Limits and courtesy
- A request body is capped at 64 KiB and a result at 512 KiB; a page that would exceed the result cap is shortened and says so, so ask for a smaller
limitor page withoffset. - The web server in front of the service applies a per-address rate limit and a cap on open connections, answering 429 past them. An address that sends many rejected requests in a short time is blocked for a while; the block expires on its own. If that ever catches a legitimate client, it is a defect: report it through the repository.
- Privacy: the service logs the time, the protocol method, the tool or resource name, the response's status, size and processing time, the client's self-reported software name, and an opaque request identifier the web server assigns so the two logs can be joined. It never logs an address, an argument, or any request or response body. The web server's own
/mcpaccess log is described on the privacy page.
Where to read more
- How the service is built and run:
docs/mcp-server.md(opens in a new tab) in the repository. - The generic server behind it, reusable with a manifest of your own:
packages/static-mcp(opens in a new tab). - Listed in the official MCP Registry as
info.fapd/fapd(since 2026-09-14): https://registry.modelcontextprotocol.io/v0.1/servers/info.fapd%2Ffapd/versions/1.0.0 (opens in a new tab).
Protocols this site does not offer, and why
We publish no metadata for a capability we do not operate (GUIDE §1). The protocols below are declined on purpose, with the reason stated.
- OAuth / OpenID Connect discovery, OAuth protected-resource
metadata: nothing here is protected, so there is no authorization
server to describe. See
/auth.md. - A2A agent card: FAPD publishes a record; it is not an agent that accepts tasks.
- WebMCP: it would need a second script in every page. The site keeps exactly one (GUIDE §2a), and everything WebMCP would offer is already available as files, Markdown, and MCP.
- Payment protocols (x402, MPP, UCP, ACP, AP2): everything here is free.
Requests to those protocols' well-known locations receive a 404 whose body points here.
How to read it faithfully
- Text in item summaries marked as official (Federal Register SUMMARY preambles, official titles) is verbatim government text; lines labeled "In plain terms" and section quick-reads are model-generated restatements, derived only from the adjacent summary and linted against an editorial banned-lexicon. The Day in Review is a model-generated synthesis of the day's stored summaries.
- Every item carries an "Included because" line naming the mechanical, party-blind rule that selected it, and a citation to its official record — the govinfo package for the govinfo collections; the agency's, chamber's, or Congress.gov's own page for agency releases, recorded votes, bill actions, and presidential actions. For claims, cite the official source we link; cite this site for the aggregation.
- The Coverage Statement at the end of each digest tells you what was NOT summarized and under which rule — absence here is always explicit.
Courtesy
Everything is static except the read-only MCP service — no authentication, nothing an agent needs to execute, and a generous per-address rate limit that protects the shared server. We ask visiting agents the same courtesy our own crawler practices on government sites: identify honestly and use conditional requests. Fetching every page daily is entirely fine.
Reuse
Content here is licensed CC BY 4.0 — share and adapt freely, including commercially, with credit to "FAPD — Free Agentic Publication Digester". Quoted official government text within it is public domain (17 U.S.C. § 105) and needs no permission at all. The attribution rule mirrors our citation ethic: for factual claims, cite the underlying official source each item links to; cite FAPD for the aggregation and summaries. The pipeline's code is Apache-2.0.