Skip to main content
Glama

libofcongress-mcp-server

Server Details

Search LOC digital collections, Chronicling America newspapers (full OCR), and LC Subject Headings.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/libofcongress-mcp-server
GitHub Stars
5
Server Listing
@cyanheads/libofcongress-mcp-server

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource and action: browse_collections for curated collections, search_items for item discovery, search_newspapers for Chronicling America pages, search_subjects for LCSH headings, get_item for item metadata, and get_newspaper_page for page text. The descriptions explicitly cross-reference each other and clarify boundaries (e.g., is_item true/false, when to use search_newspapers vs search_items). No two tools appear to do the same thing.

Naming Consistency5/5

All six tools share the same libofcongress_ prefix and follow a strict verb_noun convention: browse_collections, get_item, get_newspaper_page, search_items, search_newspapers, search_subjects. There are no deviations or mixed conventions.

Tool Count5/5

Six tools is well-scoped for a read-only digital library API. Each tool covers a distinct facet (collections, items, newspapers, subjects, page text) with no redundancy, and the count is comfortably within the ideal 3-15 range.

Completeness4/5

The surface covers discovery, metadata retrieval, page-level text access, and subject vocabulary for a read-only LOC API, which is strong. Minor gaps exist, such as a direct tool to fetch a single collection's full metadata or to list all items in a collection without going through search, but agents can work around these via search filters and returned URLs.

Available Tools

6 tools
libofcongress_browse_collectionsBrowse LOC CollectionsA
Read-only
Inspect

List and browse Library of Congress curated digital collections. Returns collection names, descriptions, item counts, slugs, and URLs. Optionally filter by keyword. Collections are curated subsets of the digital holdings with specific focuses (e.g., "Civil War Glass Negatives", "Baseball Cards", "WPA Posters"). Use the returned URL to navigate directly to a collection on loc.gov.

NameRequiredDescriptionDefault
pageNo1-indexed page number for paginating results.
limitNoMaximum number of collections to return. Default 25. A page holds at most 100 collections: a larger limit (up to 1000) is served as a 100-collection page, and page then counts 100-collection pages.
queryNoOptional keyword to filter collections by name or description. Omit to list all collections.

Output Schema

NameRequiredDescription
pageNoCurrent 1-indexed page number.
errorNoPresent when the call failed. Absent on success.
pagesNoTotal number of pages available.
totalNoTotal number of matching collections across all pages.
noticeNoRecovery hint when results are empty or a page is out of range — suggests broadening the keyword or removing filters — plus disclosure of a capped limit. Absent on ordinary result pages.
has_nextNoTrue when more pages are available after this one.
totalCountNoTotal matching collections — mirrors output.total for agent reasoning.
collectionsNoLOC curated collections matching the keyword filter, or all collections when no keyword is specified.
effectiveLimitNoThe page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's main added value is the output shape and the URL navigation behavior. It does not mention pagination behavior beyond what the schema says or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and resource, then return fields, filtering, and navigation in logical order. Five sentences is slightly more than needed but each adds some value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values needn't be detailed, and the description covers purpose, filtering, and URL navigation. Minor gap is the absence of explicit sibling routing guidance, but overall adequate for a simple read-only listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are fully documented; the description only reinforces the optional keyword filter. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list/browse) and resource (LOC curated digital collections), and distinguishes it from search_items/search_newspapers siblings since this enumerates collections rather than items. The clarification that collections are curated subsets with examples makes the resource concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains how to filter optionally and that the returned URL navigates to loc.gov, but never explicitly states when to use this vs search_items or search_subjects. The sibling differentiation is implied by resource type, not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libofcongress_get_itemGet LOC ItemA
Read-only
Inspect

Retrieve the full metadata record for a specific LOC digital item. Returns the imprint (place, publisher, and date of publication), contributors, LCSH subject headings and the subject terms the search subject filter accepts, summary, languages, locations, rights information, physical description, call number, original and online formats, access restrictions, former catalog IDs, notes, and related items, plus the item's digital resources (each with its page count, representative image, PDF, and audio) and a window of its pages. Each page has a page_url and has_text; pass a page_url with has_text true to libofcongress_get_newspaper_page to read that page's text (newspaper, book, and manuscript pages alike). A long item lists 50 pages per call: continue with page_offset set to next_page_offset. Set include_files for each listed page's downloadable files (TIFF, JP2, JPEG sizes, text). Use after libofcongress_search_items on a result whose is_item is true. Pass the result id — a simple ID, an LCCN, or a slash-separated newspaper path — or a loc.gov item link (https://www.loc.gov/item/<id>/) or LCCN permalink (https://lccn.loc.gov/<lccn>), which is read as its id. Non-item results (is_item: false) — collections, exhibits, guides, newspaper pages, catalog.loc.gov records, hdl.loc.gov finding aids — have no item record and cannot be retrieved here.

NameRequiredDescriptionDefault
item_idYesLOC item id from a libofcongress_search_items result's "id" field (where is_item is true): a simple ID ("2009632251", "2005691065") or a slash-separated path for newspaper issues ("sn95047246/1935-09-05/ed-1"). A loc.gov item link is also read as its id: "https://www.loc.gov/item/2009632251/", http or without "www.", or "item/2009632251"; so is an LCCN permalink, as its normalized LCCN: "https://lccn.loc.gov/2005567251", http or without a scheme; "lccn.loc.gov/2005-568294" reads as 2005568294. Any other URL, such as a /resource/ page URL, is rejected.
page_limitNoPages to list. Default 50. A response lists at most 100 pages: a larger page_limit (up to 1000) is served as 100.
page_offsetNoIndex of the first page to list, 0-based across all of the item's resources. Default 0. Pass next_page_offset from the previous response to continue.
include_filesNoAlso list the download URLs of each listed page's files — every JPEG size, the JP2 and TIFF masters, OCR XML, and text files. Default false.

Output Schema

NameRequiredDescription
urlNoCanonical LOC item URL.
dateNoPublication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., "1936 Apr.", "1909-1911.", "1894", "1912-04-16"). Absent when LOC records only a coded value ("uuuu", "||||") or none.
errorNoPresent when the call failed. Absent on success.
notesNoDescriptive notes and annotations from catalogers.
pagesNoThe window of the item's pages starting at page_offset, across every resource in order. Empty when the item has no pages or page_offset is past the last page.
titleNoItem title.
noticeNoSet when page_offset is past the last page, or when page_limit was capped. Absent otherwise.
imprintNoImprint as LOC catalogs it: place, publisher, and date of publication (e.g., "New York : Werner School Book Company, c1900."), or a date alone on many photos and manuscripts ("1936 Apr."). Absent when LOC records none.
item_idNoLOC item ID: the input item_id, or the id read from the loc.gov item link or LCCN permalink passed as item_id.
summaryNoCataloger's abstract of the item's subject and historical context.
languagesNoLanguages of the item (e.g., "english").
locationsNoPlaces the item depicts or originates from (e.g., "united states").
resourcesNoThe item's digital resources, in LOC order. Empty when no digital surrogate exists.
former_idsNoSuperseded catalog identifiers or URLs this item was previously known by.
page_totalNoPages across all of the item's resources.
totalCountNoPages across all resources — mirrors output.page_total for agent reasoning.
call_numberNoLOC call number — the shelf location for requesting the physical original.
contributorsNoContributors, creators, or photographers as LOC catalogs them, role included (e.g., "Washington, George, 1732-1799 (Author)"). One person can appear once per role. Empty when LOC lists none.
related_itemsNoIDs or URLs of related LOC records for follow-up retrieval; a title stands in for a related record LOC gives neither for.
subject_termsNoSubject terms LOC indexes this item under: lowercase heading components without dates (e.g., "civil war", "united states"). Each is a value the libofcongress_search_items subject filter accepts.
online_formatsNoFormats the digitized surrogate is available in (e.g., "image").
next_page_offsetNopage_offset for the next window of pages. Absent when this window reaches the last page.
original_formatsNoMaterial types of the original (e.g., "photo, print, drawing").
subject_headingsNoLibrary of Congress Subject Headings (LCSH) assigned to this item, as cataloged (e.g., "United States--History--Civil War, 1861-1865"). Empty when the record carries none.
access_restrictedNoTrue when LOC restricts access to the original. Absent when upstream omits it.
effectivePageLimitNoThe page_limit actually served when page_limit exceeded the per-call cap of 100. Absent when page_limit was within the cap.
rights_informationNoRights and reproduction statement for this item.
physical_descriptionNoPhysical or technical description of the original item.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description adds genuinely new behavioral facts: a 50-page window per call, continuation via next_page_offset, the 100-page response cap regardless of page_limit, and the failure mode for non-item IDs. This is well beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then pagination mechanics, then the alternative tool, then exclusions. It is on the long side and the enumeration of returned fields partially duplicates the output schema, but nearly every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the return-field inventory is optional, yet the description still covers the two things an agent most needs to call correctly: pagination continuation and which IDs are valid vs. invalid. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself already documents the accepted ID formats (simple ID, newspaper path, loc.gov link, LCCN permalink) and the page_offset continuation contract, so the description largely restates it. It adds the useful framing that page_url + has_text can be handed to the newspaper-page tool, but that is response-side rather than parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and resource (full metadata record for a specific LOC digital item), and names the exact precondition that identifies valid inputs (is_item: true) while distinguishing itself from libofcongress_search_items and libofcongress_get_newspaper_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it after libofcongress_search_items on a result whose is_item is true, and enumerates the cases where it must NOT be used (collections, exhibits, guides, newspaper pages, catalog.loc.gov, hdl.loc.gov finding aids). It also routes the agent onward to libofcongress_get_newspaper_page with a concrete condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libofcongress_get_newspaper_pageGet Newspaper PageA
Read-only
Inspect

Retrieve the full text of one LOC page — a historical newspaper page, or a book or manuscript page — or, with match, only the passages around your search terms, with its publication metadata: for newspapers the title, issue date, place of publication, indexed states, and edition; for every page its sequence, the page count, and the item_title and item_id of the issue, book, or manuscript it belongs to — pass item_id to libofcongress_get_item to list every page of the item. Pass the url field from a libofcongress_search_newspapers result, or a pages[].page_url from libofcongress_get_item (has_text true), or a Chronicling America page link (…/ed-N/seq-M/) — do not construct this URL manually. A dense newspaper page runs to 50,000 characters: to find the article a search hit on, pass the search query as match and read the passages around it rather than the whole page. The text is OCR, or for some manuscripts a volunteer transcription; OCR quality varies by digitization batch and era, and 19th-century and degraded materials may contain fragmented text, garbled words, and line-break artifacts that are surfaced as-is. When a page exists but has no digitized text, ocr_available is false and ocr_text is empty — this is a data property, not an error.

NameRequiredDescriptionDefault
matchNoReturn the passages around these terms instead of the whole page — pass the query you gave libofcongress_search_newspapers (e.g., titanic, or "the titanic" iceberg); the q= in a search result url is not read as match. Words separated by spaces are separate terms, any of which matches; a double-quoted span is one phrase. Each matches case-insensitively as literal text, with line breaks read as spaces; OCR misreads are not repaired. When set, ocr_text is empty, matches holds up to 10 passages of about 300 characters either side of each occurrence — when they need more, occurrences of the rarest terms come first, so a common word only fills the slots left — and match_count counts every occurrence. Omit match for the whole page. Up to 200 characters; blank is ignored.
page_urlYesA LOC page URL: the url field from a libofcongress_search_newspapers result (e.g., "https://www.loc.gov/resource/sn83045462/1905-03-15/ed-1/?sp=1"), or a pages[].page_url from libofcongress_get_item for a newspaper, book, or manuscript page (e.g., "https://www.loc.gov/resource/mss93930.mss93930-001/?sp=3"). Also accepted: the same /resource/ URL over http or without "www.", a newspaper page path ending /ed-N/seq-M/, and a Chronicling America page link (`chroniclingamerica.loc.gov/lccn/<lccn>/<date>/ed-N/seq-M/`); each is read as its https://www.loc.gov/resource/…/?sp=M page. Pass the value as returned — do not construct page URLs.

Output Schema

NameRequiredDescription
dateNoIssue publication date (YYYY-MM-DD).
errorNoPresent when the call failed. Absent on success.
noticeNoSet when ocr_available is true but the page's text came back empty, saying why: the text service did not answer this call (retry), its answer could not be read as text (retrying will not help), or the page's text is empty — a blank page, including one LOC sends as the placeholder [NO TEXT AVAILABLE FOR THIS PAGE]. Distinguishes these from a genuinely image-only page (where ocr_available is false), which carries no notice. With match set on a page that has text, set instead when nothing matched or when some occurrences fall outside the passages returned — those are read on the whole page, by calling again without match. Absent otherwise.
statesNoEvery US state LOC indexes this newspaper title under (e.g., ["georgia", "south carolina"]), in LOC order — possibly more than the state of publication. Absent when LOC lists no state.
editionNoEdition number of the issue (e.g., "1"). Absent when LOC gives none.
item_idNoID of the item this page belongs to: the newspaper issue (e.g., "sn83030214/1912-04-16/ed-1"), book, or manuscript volume (e.g., "mm77093930"). Pass it to libofcongress_get_item to list every page of the item, each with its page_url and has_text — for an article continued on a later page, or the next page of a book. Absent when LOC names no item.
matchesNoPresent only when match is set: passages of the page text around the occurrences of the match terms, in page order — about 300 characters either side of each occurrence, overlapping passages merged up to 1,200 characters, never overlapping, at most 10, chosen around the rarest terms first when more would be needed. Empty when nothing matched or the page has no text.
ocr_textNoFull plain text of this page: OCR, or for some manuscripts a volunteer transcription. Empty string when match is set (read matches instead), when ocr_available is false, or when the page is blank or its text could not be retrieved (see notice). May contain fragmented words, line-break artifacts, and misspellings inherent to historical OCR — do not attempt to repair.
page_urlNoThe LOC resource URL for this page, in the https://www.loc.gov/resource/…?sp=N form the input was read as.
sequenceNoPage sequence number within the issue, volume, or folder.
item_titleNoTitle of the item this page belongs to, on every page type: the book or manuscript title, or for a newspaper page the issue title with place and date (e.g., "New-York tribune (New York [N.Y.]), April 16, 1912"). Absent when LOC gives none.
match_countNoPresent only when match is set: occurrences of every match term on the page, including those beyond the passages returned. 0 when nothing matched or the page has no text.
ocr_availableNoTrue when LOC lists OCR or transcribed text for this page, even if the text it returns is empty (see notice). False for image-only pages where no text has been produced.
segment_countNoNumber of pages in the issue, volume, or folder. Absent when LOC gives none.
newspaper_titleNoTitle of the newspaper publication. Absent when LOC gives none.
place_of_publicationNoWhere the newspaper was published, as LOC catalogs it (e.g., "Charleston, S.C."). Absent when LOC gives none.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses the 50,000-character page size and the match workaround, that text is OCR or volunteer transcription with batch-/era-dependent quality artifacts, and crucially that ocr_available=false with empty ocr_text is a data property rather than an error. These are exactly the failure modes an agent would otherwise misread.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and nearly every clause carries information (metadata fields, URL sources, OCR caveats), so little is filler. It is, however, a single very dense em-dash chain that is harder to parse than a two- or three-sentence split would be, and the 'do not construct this URL manually' point is stated twice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing (so return values need not be explained), the description still maps the metadata an agent will get and covers the edge cases that matter: empty-but-valid pages, OCR degradation, and match truncation to ~300-char passages with match_count. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters already carry rich inline docs, including the page_url source forms and the match passage mechanics. The description's parameter guidance largely restates the schema (URL sourcing, don't construct manually), adding little that isn't already structured. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and resource (one LOC page), and immediately delimits variants: a newspaper/page vs. book/manuscript page, and full text vs. match passages. It also names the sibling tools it works alongside (libofcongress_search_newspapers, libofcongress_get_item), so an agent can place it precisely in the family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given: pass page_url from a search_newspapers result or a pages[].page_url from get_item, use match for pinpointing an article on a dense page, and omit it for the whole page. It also states the negative case ('do not construct this URL manually') and points to libofcongress_get_item for listing an item's pages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libofcongress_search_itemsSearch LOC ItemsA
Read-only
Inspect

Search the Library of Congress digital collections by keyword. Optionally filter by material format (photos, maps, newspapers, audio, etc.), date range, subject heading, or geographic location, or scope the search to a single curated collection with collection_slug. Returns item summaries with titles, dates, descriptions, LOC IDs, and format tags. Each result carries is_item: pass the id of a result where is_item is true to libofcongress_get_item for full metadata; results where is_item is false are non-item resources (collections, exhibit and research-guide pages, newspaper-page results, catalog.loc.gov records, hdl.loc.gov finding aids) with no item record — open their url instead. Use libofcongress_search_subjects to find an LCSH heading for the subject filter. To discover the subject and location values the filters accept for a search, set include_facets to get its top subject_facets and location_facets.

NameRequiredDescriptionDefault
pageNo1-indexed page number for paginating results.
limitNoResults per page. Default 25. A page holds at most 100 results: a larger limit (up to 1000) is served as a 100-result page, and page then counts 100-result pages.
queryYesFull-text search across metadata and available descriptive text.
formatNoMaterial type filter. Options: photo, map, newspaper, manuscript, audio, film, book, notated-music. Omit to search all formats.
subjectNoSubject filter: an LCSH heading from libofcongress_search_subjects (e.g., "World War, 1939-1945", "United States--History--Civil War, 1861-1865") or a subject term from subject_facets (include_facets) or libofcongress_get_item subject_terms (e.g., "world war"). LOC indexes headings by their parts, so the value is split at "--" into lowercase terms with dates dropped, and an item must carry every term.
date_endNoEnd year for date filter, inclusive (e.g., 1930). Omit to run through the current year.
locationNoGeographic location filter (e.g., "oklahoma", "washington d.c."). Lowercase, matches LOC location facets; location_facets (include_facets) lists values for a search.
date_startNoStart year for date filter, inclusive (e.g., 1920). Omit for no lower bound.
include_facetsNoAlso return subject_facets and location_facets: LOC's top subject and location terms across every match, with counts — the values the subject and location filters accept. Default false: facets add time to each search, so request them when you need filter values to narrow by.
collection_slugNoScope the search to one curated collection. Use a slug exactly as returned by libofcongress_browse_collections (e.g., "aaron-copland") — slugs are not derivable from the collection title. Cannot be combined with format; omit format and read each result's format field instead. Omit to search all of LOC.

Output Schema

NameRequiredDescription
pageNoCurrent 1-indexed page number.
errorNoPresent when the call failed. Absent on success.
itemsNoItem summaries matching the search query and filters.
pagesNoTotal retrievable pages. For result sets larger than LOC will page through (~100,000 items) this is capped, and a notice discloses how to reach the rest (partition by date/subject/location).
totalNoTotal number of matching items across all pages.
noticeNoRecovery hint when results are empty or a page is out of range — echoes applied filters, subject terms and location included, and suggests how to broaden — plus disclosure of a capped limit or of the retrieval ceiling. Absent on ordinary result pages.
has_nextNoTrue when a retrievable next page follows this one. Never promises a page past LOC's ~100,000-item retrieval ceiling.
totalCountNoTotal matching items across all pages — mirrors output.total for agent reasoning.
effectiveLimitNoThe page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.
effectiveQueryNoThe query as submitted to the LOC API, after trimming.
subject_facetsNoLOC's top subject terms across every item matching this search (up to 10), most frequent first. Pass a value as the subject filter to narrow the search. Present only when include_facets is true; empty when LOC reports none.
location_facetsNoLOC's top location terms across every item matching this search (up to 10), most frequent first. Pass a value as the location filter to narrow the search. Present only when include_facets is true; empty when LOC reports none.
effectiveSubjectTermsNoThe subject terms the subject filter was sent as, all required to match. Absent when no subject filter was given.
effectiveCollectionSlugNoThe collection the search was scoped to, after trimming. Absent when the search covered all of LOC.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare only readOnlyHint and openWorldHint; the description goes well beyond them by disclosing the is_item routing contract, the concrete non-item resource types (collections, exhibit/research-guide pages, newspaper pages, catalog.loc.gov records, hdl.loc.gov finding aids), and the cost tradeoff that facets add time to each search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and primary filters are front-loaded, then routing rules and facet guidance follow in a logical order with no filler. The long parenthetical enumerating non-item resource types is dense but earns its place by telling the agent what to do with those results.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, mixed-result search tool with an output schema already present, the description covers everything an agent needs to act: filter sourcing, facet discovery, the collection_slug/format conflict, and how to dispatch each result type. Return-value shape is left to the output schema, which is correct.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema does not: the subject value is split at "--" into lowercase terms with dates dropped and an item must carry every term, and collection_slug must be a slug from libofcongress_browse_collections because it is not derivable from a title. It stops short of explaining limit/page interaction, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource pair ("Search the Library of Congress digital collections by keyword") and immediately enumerates the filter axes available. It explicitly names the sibling tools it routes to (libofcongress_get_item, libofcongress_search_subjects) and distinguishes itself from them, so an agent can place it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing: pass is_item=true ids to libofcongress_get_item, open url for is_item=false resources, use libofcongress_search_subjects to source an LCSH heading, and set include_facets to discover subject/location filter values. It also states a hard exclusion — collection_slug cannot be combined with format — which is exactly the kind of constraint that prevents a failed call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libofcongress_search_newspapersSearch Historical NewspapersA
Read-only
Inspect

Search historical newspaper pages in the Chronicling America corpus. Returns matching pages with the opening of each page's OCR text (~500 characters), publication title, date, the states LOC indexes the title under, and the page URL needed for libofcongress_get_newspaper_page. Filters by keyword, date range, US state, and newspaper title. The excerpt is the page's first lines, not the text around the match: to read where the query occurs, call libofcongress_get_newspaper_page with the returned url field and this query as its match, which returns the passages around each occurrence; omit match for the full page text. OCR quality varies: 19th-century and degraded materials may contain fragmented or garbled text.

NameRequiredDescriptionDefault
pageNo1-indexed page number for paginating results.
limitNoResults per page. Default 25. A page holds at most 100 results: a larger limit (up to 1000) is served as a 100-result page, and page then counts 100-result pages.
queryYesKeyword search across OCR text and newspaper metadata.
stateNoFilter to newspapers LOC indexes under this US state: the full state name (e.g., "oklahoma", "new york") or its two-letter postal code (e.g., "OK", "NY"), case-insensitive. Use "district of columbia" (or "DC") for Washington, D.C.; "washington" means Washington state. City and county names match nothing.
date_endNoEnd of the date filter, inclusive, in the same forms as date_start (e.g., 1920 or "1912-04-16"). A year or month ends on its last day, so "1912-04" runs through April 30. Omit to run through the current year.
date_startNoStart of the date filter, inclusive: an integer year (e.g., 1900) or a "YYYY", "YYYY-MM", or "YYYY-MM-DD" string (e.g., "1912-04-15"); month and day may be one or two digits. A year or month starts on its first day. Omit for no lower bound.
newspaper_titleNoFilter to one newspaper. Pass the newspaper_title value of a libofcongress_search_newspapers result exactly (case-insensitive), e.g., "new-york tribune (new york [n.y.]) 1866-1924" — the full catalog title with place and run. A shortened title such as "New-York Tribune" matches nothing.

Output Schema

NameRequiredDescription
pageNoCurrent 1-indexed page number.
errorNoPresent when the call failed. Absent on success.
itemsNoNewspaper page results matching the search query and filters.
pagesNoTotal retrievable pages. For result sets larger than LOC will page through (~100,000 pages) this is capped, and a notice discloses how to reach the rest (partition by date/state).
totalNoTotal number of matching newspaper pages in the result set.
noticeNoRecovery hint when results are empty or a page is out of range — echoes applied filters and suggests how to broaden — plus disclosure of a capped limit or of the retrieval ceiling. Absent on ordinary result pages.
has_nextNoTrue when a retrievable next page follows this one. Never promises a page past LOC's ~100,000-item retrieval ceiling.
totalCountNoTotal matching newspaper pages — mirrors output.total for agent reasoning.
effectiveLimitNoThe page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.
effectiveQueryNoThe keyword query as submitted to the Chronicling America API, after trimming.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only readOnlyHint and openWorldHint, and the description adds substantially more: it enumerates the returned fields, warns that the ~500-char excerpt is the page opening rather than text around the match, and flags that 19th-century/degraded OCR may be fragmented or garbled. These are behavioral traits an agent cannot derive from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and returns before the routing advice and the OCR caveat, and each sentence carries distinct information. It runs long at roughly five sentences, but nothing is redundant with the structured fields except the brief filter enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description supplies the practical context an agent needs: what the excerpt actually is, how to follow up for in-context text, and the OCR reliability caveat. Filtering, pagination, and return shape are all accounted for across description, schema, and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (state matching rules, date forms, exact newspaper_title, page/limit pagination) is already fully documented in the schema. The description only restates that filtering exists by keyword, date range, state, and title, adding no syntax or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (historical newspaper pages in the Chronicling America corpus), and explicitly distinguishes itself from libofcongress_get_newspaper_page by naming that sibling and its role. An agent can tell it apart from the other search/browse siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use libofcongress_get_newspaper_page with the returned url field and the same query as match to see passages around the hit, or omit match for full page text. It also explains why this tool's excerpt is insufficient for that purpose, so the when-to-use-this vs. when-to-use-the-alternative decision is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

libofcongress_search_subjectsSearch LC Subject HeadingsA
Read-only
Inspect

Search Library of Congress Subject Headings (LCSH) by keyword. Returns authorized subject headings and their URIs, ranked by relevance with a heading that exactly matches the query first; a partial word with no keyword match returns the headings that begin with it. Use the returned label as the subject filter in libofcongress_search_items — LCSH uses precise, standardized terms that differ from natural language (e.g., "World War, 1939-1945" not "World War II"; "Aerial photography" not "Photography, Aerial"). Running this tool before a subject-filtered libofcongress_search_items dramatically improves result quality.

NameRequiredDescriptionDefault
limitNoMaximum number of subject headings to return. Default 10. A call returns at most 50 headings; a larger limit (up to 1000) returns up to 50.
queryYesKeyword or partial subject heading to search for (e.g., "civil war", "immigration", "jazz").

Output Schema

NameRequiredDescription
capNoThe heading limit applied to this response.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of subject headings returned in this response.
totalNoNumber of subject headings returned.
noticeNoRecovery hint when no heading matched; how many headings matched when more exist than this response holds; disclosure of a capped limit. Absent when every matching heading was returned.
subjectsNoLCSH subject headings matching the query, ordered by relevance, an exact match first. To see how many LOC items carry a heading, pass its label as the libofcongress_search_items subject filter and read total.
truncatedNoTrue when more headings match than this response holds. Refine the query to see others, or raise limit when it is below 50.
effectiveLimitNoThe heading count actually applied when limit exceeded the per-call cap of 50. Absent when limit was within the cap.
effectiveQueryNoThe query as submitted to the id.loc.gov subject suggest endpoint, after trimming.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description goes further than the structured data by disclosing ranking behavior (exact match first), fallback behavior for partial words, and the shape of the result (headings plus URIs). It omits any note on the 50-result cap, but that ceiling is carried in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then ranking behavior, then the cross-tool workflow. Dense and mostly waste-free, though the closing sentence about improving result quality partly restates the earlier instruction to use the label as a filter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter lookup tool with an output schema, an explicit safety annotation set, and a fully described schema, the description supplies everything an agent needs: what it returns, how results are ordered, and how they feed a sibling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the limit cap and the query semantics. The description reinforces query intent with example terms but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search Library of Congress Subject Headings (LCSH) by keyword') and immediately characterizes the return (authorized headings and URIs). An agent can distinguish it from libofcongress_search_items, which searches items rather than the heading vocabulary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to run this before a subject-filtered libofcongress_search_items and to feed the returned label in as the subject filter. It names the alternative tool and the condition that selects it, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedlibofcongress_get_item6 fields changed
      • changedInput schema / properties / item_id / description
        Previous value: -"LOC item id from a libofcongress_search_items result's \"id\" field (where is_item is true): a simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper issues (\"sn95047246/1935-09-05/ed-1\"). A loc.gov item link is also read as its id: \"https://www.loc.gov/item/2009632251/\", http or without \"www.\", or \"item/2009632251\". Any other URL, such as a /resource/ page URL, is rejected."New value: +"LOC item id from a libofcongress_search_items result's \"id\" field (where is_item is true): a simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper issues (\"sn95047246/1935-09-05/ed-1\"). A loc.gov item link is also read as its id: \"https://www.loc.gov/item/2009632251/\", http or without \"www.\", or \"item/2009632251\"; so is an LCCN permalink, as its normalized LCCN: \"https://lccn.loc.gov/2005567251\", http or without a scheme; \"lccn.loc.gov/2005-568294\" reads as 2005568294. Any other URL, such as a /resource/ page URL, is rejected."
      • changedOutput schema / properties / date / description
        Previous value: -"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"1936 Apr.\", \"1909-1911.\", \"1894\", \"1912-04-16\")."New value: +"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"1936 Apr.\", \"1909-1911.\", \"1894\", \"1912-04-16\"). Absent when LOC records only a coded value (\"uuuu\", \"||||\") or none."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_item_id`: item_id is neither a LOC item ID nor a loc.gov /item/ link: a URL on another loc.gov path (such as a /resource/ page URL) or another host, or text with characters or segments no LOC ID has. `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_item_id`: item_id is not a LOC item ID, a loc.gov /item/ link, or an lccn.loc.gov permalink to an LCCN: a URL on another loc.gov or lccn.loc.gov path (such as a /resource/ page URL) or another host, an LCCN that does not normalize to up to three lowercase letters and 8 or 10 digits, or text with characters or segments no LOC ID has. `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / imprint
        Added value: +{
        +  "description": "Imprint as LOC catalogs it: place, publisher, and date of publication (e.g., \"New York : Werner School Book Company, c1900.\"), or a date alone on many photos and manuscripts (\"1936 Apr.\"). Absent when LOC records none.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / item_id / description
        Previous value: -"LOC item ID: the input item_id, or the id read from the loc.gov item link passed as item_id."New value: +"LOC item ID: the input item_id, or the id read from the loc.gov item link or LCCN permalink passed as item_id."
      • changedOutput schema / properties / pages / items / properties / has_text / description
        Previous value: -"True when LOC holds OCR or transcribed text for this page."New value: +"True when LOC lists an OCR or transcribed text file for this page. A blank page can have one: LOC's blank-page placeholder, which libofcongress_get_newspaper_page returns as empty text."
    • Changedlibofcongress_get_newspaper_page8 fields changed
      • addedInput schema / properties / match
        Added value: +{
        +  "description": "Return the passages around these terms instead of the whole page — pass the query you gave libofcongress_search_newspapers (e.g., titanic, or \"the titanic\" iceberg); the q= in a search result url is not read as match. Words separated by spaces are separate terms, any of which matches; a double-quoted span is one phrase. Each matches case-insensitively as literal text, with line breaks read as spaces; OCR misreads are not repaired. When set, ocr_text is empty, matches holds up to 10 passages of about 300 characters either side of each occurrence — when they need more, occurrences of the rarest terms come first, so a common word only fills the slots left — and match_count counts every occurrence. Omit match for the whole page. Up to 200 characters; blank is ignored.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedOutput schema / properties / item_id
        Added value: +{
        +  "description": "ID of the item this page belongs to: the newspaper issue (e.g., \"sn83030214/1912-04-16/ed-1\"), book, or manuscript volume (e.g., \"mm77093930\"). Pass it to libofcongress_get_item to list every page of the item, each with its page_url and has_text — for an article continued on a later page, or the next page of a book. Absent when LOC names no item.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / item_title
        Added value: +{
        +  "description": "Title of the item this page belongs to, on every page type: the book or manuscript title, or for a newspaper page the issue title with place and date (e.g., \"New-York tribune (New York [N.Y.]), April 16, 1912\"). Absent when LOC gives none.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / match_count
        Added value: +{
        +  "description": "Present only when match is set: occurrences of every match term on the page, including those beyond the passages returned. 0 when nothing matched or the page has no text.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / matches
        Added value: +{
        +  "description": "Present only when match is set: passages of the page text around the occurrences of the match terms, in page order — about 300 characters either side of each occurrence, overlapping passages merged up to 1,200 characters, never overlapping, at most 10, chosen around the rarest terms first when more would be needed. Empty when nothing matched or the page has no text.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Set when ocr_available is true but ocr_text is empty, saying why: the text service did not answer this call (retry), its answer could not be read as text (retrying will not help), or the page's text is empty. Distinguishes these from a genuinely image-only page (where ocr_available is false). Absent when text was returned or the page has none."New value: +"Set when ocr_available is true but the page's text came back empty, saying why: the text service did not answer this call (retry), its answer could not be read as text (retrying will not help), or the page's text is empty — a blank page, including one LOC sends as the placeholder [NO TEXT AVAILABLE FOR THIS PAGE]. Distinguishes these from a genuinely image-only page (where ocr_available is false), which carries no notice. With match set on a page that has text, set instead when nothing matched or when some occurrences fall outside the passages returned — those are read on the whole page, by calling again without match. Absent otherwise."
      • changedOutput schema / properties / ocr_available / description
        Previous value: -"True when LOC holds OCR or transcribed text for this page. False for image-only pages where no text has been produced."New value: +"True when LOC lists OCR or transcribed text for this page, even if the text it returns is empty (see notice). False for image-only pages where no text has been produced."
      • changedOutput schema / properties / ocr_text / description
        Previous value: -"Full plain text of this page: OCR, or for some manuscripts a volunteer transcription. Empty string when ocr_available is false, or when the text could not be retrieved (see notice). May contain fragmented words, line-break artifacts, and misspellings inherent to historical OCR — do not attempt to repair."New value: +"Full plain text of this page: OCR, or for some manuscripts a volunteer transcription. Empty string when match is set (read matches instead), when ocr_available is false, or when the page is blank or its text could not be retrieved (see notice). May contain fragmented words, line-break artifacts, and misspellings inherent to historical OCR — do not attempt to repair."
    • Changedlibofcongress_search_items3 fields changed
      • changedOutput schema / properties / items / items / properties / date / description
        Previous value: -"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"c1915 Feb. 19.\", \"1912\")."New value: +"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"c1915 Feb. 19.\", \"1912\"). Absent when LOC records only a coded value (\"uuuu\", \"||||\") or none."
      • changedOutput schema / properties / items / items / properties / id / description
        Previous value: -"LOC identifier for this result. When is_item is true, pass it to libofcongress_get_item for full metadata. When is_item is false it is a non-item resource (a collection, exhibit, guide, or newspaper page), not a get_item input — open url instead."New value: +"LOC identifier for this result: an item ID, or the bare LCCN of a record whose url is an lccn.loc.gov permalink. When is_item is true, pass it to libofcongress_get_item for full metadata. When is_item is false it is a non-item resource (a collection, exhibit, guide, newspaper page, catalog.loc.gov record, or hdl.loc.gov finding aid), not a get_item input — open url instead."
      • changedOutput schema / properties / items / items / properties / is_item / description
        Previous value: -"True when this result is a catalog item whose id resolves through libofcongress_get_item. False for collections, exhibits, research guides, newspaper pages, and other non-item results, which have no get_item record — follow url instead. Always present on every result."New value: +"True when this result is a catalog item whose id resolves through libofcongress_get_item, including records LOC links by an lccn.loc.gov permalink. False for collections, exhibits, research guides, newspaper pages, catalog.loc.gov records, hdl.loc.gov finding aids, and other non-item results, which have no get_item record — follow url instead. Always present on every result."
    • Changedlibofcongress_search_newspapers2 fields changed
      • changedOutput schema / properties / items / items / properties / description / description
        Previous value: -"OCR text excerpt (~500 chars) for relevance assessment."New value: +"Opening of the page's OCR text (~500 chars): the page's first lines, not the text around the match. Pass the query as match to libofcongress_get_newspaper_page for the passages around it."
      • changedOutput schema / properties / items / items / properties / url / description
        Previous value: -"LOC resource URL for this page — pass to libofcongress_get_newspaper_page to get full OCR text."New value: +"LOC resource URL for this page — pass to libofcongress_get_newspaper_page for its full OCR text, or with the query as match for the passages around it."
  2. 6 tool updates
    • Changedlibofcongress_browse_collections6 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of collections to return. Default 25, max 100."New value: +"Maximum number of collections to return. Default 25. A page holds at most 100 collections: a larger limit (up to 1000) is served as a 100-collection page, and page then counts 100-collection pages."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +1000
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "rate_limit_exceeded",
        -  "server_busy",
        -  "request_timed_out"
        -]New value: +[
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery hint when results are empty or a page is out of range — suggests broadening the keyword or removing filters. Absent on successful result pages."New value: +"Recovery hint when results are empty or a page is out of range — suggests broadening the keyword or removing filters — plus disclosure of a capped limit. Absent on ordinary result pages."
    • Changedlibofcongress_get_item19 fields changed
      • addedInput schema / properties / include_files
        Added value: +{
        +  "default": false,
        +  "description": "Also list the download URLs of each listed page's files — every JPEG size, the JP2 and TIFF masters, OCR XML, and text files. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / item_id / description
        Previous value: -"LOC item id from a libofcongress_search_items result's \"id\" field (where is_item is true). A simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper pages (\"sn95047246/1935-09-05/ed-1\"). Pass the id verbatim; do not prepend the loc.gov URL or an \"item/\" prefix."New value: +"LOC item id from a libofcongress_search_items result's \"id\" field (where is_item is true): a simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper issues (\"sn95047246/1935-09-05/ed-1\"). A loc.gov item link is also read as its id: \"https://www.loc.gov/item/2009632251/\", http or without \"www.\", or \"item/2009632251\". Any other URL, such as a /resource/ page URL, is rejected."
      • addedInput schema / properties / page_limit
        Added value: +{
        +  "default": 50,
        +  "description": "Pages to list. Default 50. A response lists at most 100 pages: a larger page_limit (up to 1000) is served as 100.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page_offset
        Added value: +{
        +  "default": 0,
        +  "description": "Index of the first page to list, 0-based across all of the item's resources. Default 0. Pass next_page_offset from the previous response to continue.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "item_id",
        -      "title",
        -      "contributors",
        -      "subject_headings",
        -      "notes",
        -      "languages",
        -      "locations",
        -      "former_ids",
        -      "original_formats",
        -      "online_formats",
        -      "resource_links",
        -      "related_items",
        -      "url"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "item_id",
        +      "title",
        +      "contributors",
        +      "subject_headings",
        +      "subject_terms",
        +      "notes",
        +      "languages",
        +      "locations",
        +      "former_ids",
        +      "original_formats",
        +      "online_formats",
        +      "resources",
        +      "pages",
        +      "page_total",
        +      "related_items",
        +      "url",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / date / description
        Previous value: -"Publication or creation date."New value: +"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"1936 Apr.\", \"1909-1911.\", \"1894\", \"1912-04-16\")."
      • addedOutput schema / properties / effectivePageLimit
        Added value: +{
        +  "description": "The page_limit actually served when page_limit exceeded the per-call cap of 100. Absent when page_limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_item_id`: item_id is neither a LOC item ID nor a loc.gov /item/ link: a URL on another loc.gov path (such as a /resource/ page URL) or another host, or text with characters or segments no LOC ID has. `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "item_not_found",
        -  "rate_limit_exceeded",
        -  "server_busy",
        -  "request_timed_out"
        -]New value: +[
        +  "invalid_item_id",
        +  "item_not_found",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / item_id / description
        Previous value: -"LOC item ID as resolved by the service (matches the input item_id)."New value: +"LOC item ID: the input item_id, or the id read from the loc.gov item link passed as item_id."
      • addedOutput schema / properties / next_page_offset
        Added value: +{
        +  "description": "page_offset for the next window of pages. Absent when this window reaches the last page.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Set when page_offset is past the last page, or when page_limit was capped. Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / page_total
        Added value: +{
        +  "description": "Pages across all of the item's resources.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / pages
        Added value: +{
        +  "description": "The window of the item's pages starting at page_offset, across every resource in order. Empty when the item has no pages or page_offset is past the last page.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One page of the item.",
        +    "properties": {
        +      "files": {
        +        "description": "Download URLs of the page's files: JPEG sizes, JP2 and TIFF masters, OCR XML, text. Present only when include_files is true.",
        +        "items": {
        +          "description": "Download URL; its extension names the format.",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "has_text": {
        +        "description": "True when LOC holds OCR or transcribed text for this page.",
        +        "type": "boolean"
        +      },
        +      "page_url": {
        +        "description": "LOC page URL. Pass to libofcongress_get_newspaper_page to read its text when has_text is true.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "page_url",
        +      "has_text"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / resource_links
        Removed value: -{
        -  "description": "URLs to downloadable digital files (TIFF, JPEG, PDF). Empty when no digital surrogate exists.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / properties / resources
        Added value: +{
        +  "description": "The item's digital resources, in LOC order. Empty when no digital surrogate exists.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One digital resource of the item, such as a photo, a volume, or a recording.",
        +    "properties": {
        +      "audio": {
        +        "description": "Audio stream (MP3) of a sound recording. Absent when LOC gives none.",
        +        "type": "string"
        +      },
        +      "image": {
        +        "description": "Representative image URL. Absent when LOC gives none.",
        +        "type": "string"
        +      },
        +      "page_count": {
        +        "description": "Pages (file groups) in this resource.",
        +        "type": "number"
        +      },
        +      "pdf": {
        +        "description": "PDF of the whole resource. Absent when LOC gives none.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "LOC resource URL; its pages are this URL plus ?sp=N.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "page_count"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / subject_headings / description
        Previous value: -"LCSH subject headings assigned to this item."New value: +"Library of Congress Subject Headings (LCSH) assigned to this item, as cataloged (e.g., \"United States--History--Civil War, 1861-1865\"). Empty when the record carries none."
      • addedOutput schema / properties / subject_terms
        Added value: +{
        +  "description": "Subject terms LOC indexes this item under: lowercase heading components without dates (e.g., \"civil war\", \"united states\"). Each is a value the libofcongress_search_items subject filter accepts.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Pages across all resources — mirrors output.page_total for agent reasoning.",
        +  "type": "number"
        +}
    • Changedlibofcongress_get_newspaper_page9 fields changed
      • changedInput schema / properties / page_url / description
        Previous value: -"The url field from a libofcongress_search_newspapers result (e.g., \"https://www.loc.gov/resource/sn83045462/1905-03-15/ed-1/seq-1/\"). Always pass the value directly from search results — do not construct or modify this URL."New value: +"A LOC page URL: the url field from a libofcongress_search_newspapers result (e.g., \"https://www.loc.gov/resource/sn83045462/1905-03-15/ed-1/?sp=1\"), or a pages[].page_url from libofcongress_get_item for a newspaper, book, or manuscript page (e.g., \"https://www.loc.gov/resource/mss93930.mss93930-001/?sp=3\"). Also accepted: the same /resource/ URL over http or without \"www.\", a newspaper page path ending /ed-N/seq-M/, and a Chronicling America page link (`chroniclingamerica.loc.gov/lccn/<lccn>/<date>/ed-N/seq-M/`); each is read as its https://www.loc.gov/resource/…/?sp=M page. Pass the value as returned — do not construct page URLs."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_page_url`: page_url does not begin with https://www.loc.gov/resource/. `page_not_found`: The URL does not resolve to a valid LOC newspaper page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_url`: page_url is not one LOC page: neither a loc.gov /resource/ URL nor a Chronicling America page link ending /ed-N/seq-M/. `page_not_found`: The URL does not resolve to a LOC page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_page_url",
        -  "page_not_found",
        -  "rate_limit_exceeded",
        -  "server_busy",
        -  "request_timed_out"
        -]New value: +[
        +  "invalid_page_url",
        +  "page_not_found",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Set when ocr_available is true but ocr_text is empty — the page has digitized OCR, but the text service did not return it this call. Distinguishes a transient retrieval miss from a genuinely image-only page (where ocr_available is false). Absent when OCR text was returned or the page has no OCR."New value: +"Set when ocr_available is true but ocr_text is empty, saying why: the text service did not answer this call (retry), its answer could not be read as text (retrying will not help), or the page's text is empty. Distinguishes these from a genuinely image-only page (where ocr_available is false). Absent when text was returned or the page has none."
      • changedOutput schema / properties / ocr_available / description
        Previous value: -"True when digitized OCR text exists for this page. False for image-only digitization batches where OCR has not been applied."New value: +"True when LOC holds OCR or transcribed text for this page. False for image-only pages where no text has been produced."
      • changedOutput schema / properties / ocr_text / description
        Previous value: -"Full plain-text OCR content for the page. Empty string when ocr_available is false. May contain fragmented words, line-break artifacts, and misspellings inherent to historical OCR — do not attempt to repair."New value: +"Full plain text of this page: OCR, or for some manuscripts a volunteer transcription. Empty string when ocr_available is false, or when the text could not be retrieved (see notice). May contain fragmented words, line-break artifacts, and misspellings inherent to historical OCR — do not attempt to repair."
      • changedOutput schema / properties / page_url / description
        Previous value: -"The LOC resource URL for this newspaper page."New value: +"The LOC resource URL for this page, in the https://www.loc.gov/resource/…?sp=N form the input was read as."
      • changedOutput schema / properties / segment_count / description
        Previous value: -"Number of pages in the issue. Absent when LOC gives none."New value: +"Number of pages in the issue, volume, or folder. Absent when LOC gives none."
      • changedOutput schema / properties / sequence / description
        Previous value: -"Page sequence number within the issue."New value: +"Page sequence number within the issue, volume, or folder."
    • Changedlibofcongress_search_items14 fields changed
      • changedInput schema / properties / date_end / description
        Previous value: -"End year for date filter, inclusive (e.g., 1930). Omit for no upper bound."New value: +"End year for date filter, inclusive (e.g., 1930). Omit to run through the current year."
      • addedInput schema / properties / include_facets
        Added value: +{
        +  "default": false,
        +  "description": "Also return subject_facets and location_facets: LOC's top subject and location terms across every match, with counts — the values the subject and location filters accept. Default false: facets add time to each search, so request them when you need filter values to narrow by.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Results per page. Default 25, max 100."New value: +"Results per page. Default 25. A page holds at most 100 results: a larger limit (up to 1000) is served as a 100-result page, and page then counts 100-result pages."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +1000
      • changedInput schema / properties / location / description
        Previous value: -"Geographic location filter (e.g., \"oklahoma\", \"washington d.c.\"). Lowercase, matches LOC location facets."New value: +"Geographic location filter (e.g., \"oklahoma\", \"washington d.c.\"). Lowercase, matches LOC location facets; location_facets (include_facets) lists values for a search."
      • changedInput schema / properties / subject / description
        Previous value: -"Subject heading filter. Use the exact label from libofcongress_search_subjects results for best precision. Example: \"World War, 1939-1945\"."New value: +"Subject filter: an LCSH heading from libofcongress_search_subjects (e.g., \"World War, 1939-1945\", \"United States--History--Civil War, 1861-1865\") or a subject term from subject_facets (include_facets) or libofcongress_get_item subject_terms (e.g., \"world war\"). LOC indexes headings by their parts, so the value is split at \"--\" into lowercase terms with dates dropped, and an item must carry every term."
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / effectiveSubjectTerms
        Added value: +{
        +  "description": "The subject terms the subject filter was sent as, all required to match. Absent when no subject filter was given.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `incompatible_filters`: format and collection_slug were both supplied; each selects a different LOC endpoint, so only one can apply. `collection_not_found`: collection_slug does not resolve to a LOC collection. Reported on page 1; a later page gets the out-of-range notice, since LOC answers both cases the same way there. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end, or date_start is given alone and is later than the current year. `incompatible_filters`: format and collection_slug were both supplied; each selects a different LOC endpoint, so only one can apply. `collection_not_found`: collection_slug does not resolve to a LOC collection. Reported on page 1; a later page gets the out-of-range notice, since LOC answers both cases the same way there. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_date_range",
        -  "incompatible_filters",
        -  "collection_not_found",
        -  "rate_limit_exceeded",
        -  "server_busy",
        -  "request_timed_out"
        -]New value: +[
        +  "invalid_date_range",
        +  "incompatible_filters",
        +  "collection_not_found",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / items / items / properties / date / description
        Previous value: -"Publication or creation date."New value: +"Publication or creation date as LOC catalogs it: free text, a year, or a full date (e.g., \"c1915 Feb. 19.\", \"1912\")."
      • addedOutput schema / properties / location_facets
        Added value: +{
        +  "description": "LOC's top location terms across every item matching this search (up to 10), most frequent first. Pass a value as the location filter to narrow the search. Present only when include_facets is true; empty when LOC reports none.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One location facet value.",
        +    "properties": {
        +      "count": {
        +        "description": "Matching items carrying this location term.",
        +        "type": "number"
        +      },
        +      "value": {
        +        "description": "The location term, as the location filter accepts it.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "value",
        +      "count"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery hint when results are empty or a page is out of range — echoes applied filters and suggests how to broaden. Absent on successful result pages."New value: +"Recovery hint when results are empty or a page is out of range — echoes applied filters, subject terms and location included, and suggests how to broaden — plus disclosure of a capped limit or of the retrieval ceiling. Absent on ordinary result pages."
      • addedOutput schema / properties / subject_facets
        Added value: +{
        +  "description": "LOC's top subject terms across every item matching this search (up to 10), most frequent first. Pass a value as the subject filter to narrow the search. Present only when include_facets is true; empty when LOC reports none.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One subject facet value.",
        +    "properties": {
        +      "count": {
        +        "description": "Matching items carrying this subject term.",
        +        "type": "number"
        +      },
        +      "value": {
        +        "description": "The subject term, as the subject filter accepts it.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "value",
        +      "count"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedlibofcongress_search_newspapers19 fields changed
      • addedInput schema / properties / date_end / anyOf
        Added value: +[
        +  {
        +    "description": "A year, e.g., 1912.",
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "description": "A date: \"YYYY\", \"YYYY-MM\", or \"YYYY-MM-DD\", e.g., \"1912-04-16\".",
        +    "pattern": "^(\\d{4})(?:-(\\d{1,2})(?:-(\\d{1,2}))?)?$",
        +    "type": "string"
        +  },
        +  {
        +    "const": "",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / date_end / description
        Previous value: -"End year for date filter, inclusive (e.g., 1920). Omit for no upper bound."New value: +"End of the date filter, inclusive, in the same forms as date_start (e.g., 1920 or \"1912-04-16\"). A year or month ends on its last day, so \"1912-04\" runs through April 30. Omit to run through the current year."
      • removedInput schema / properties / date_end / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / date_end / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / date_end / type
        Removed value: -"integer"
      • addedInput schema / properties / date_start / anyOf
        Added value: +[
        +  {
        +    "description": "A year, e.g., 1912.",
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "description": "A date: \"YYYY\", \"YYYY-MM\", or \"YYYY-MM-DD\", e.g., \"1912-04-16\".",
        +    "pattern": "^(\\d{4})(?:-(\\d{1,2})(?:-(\\d{1,2}))?)?$",
        +    "type": "string"
        +  },
        +  {
        +    "const": "",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / date_start / description
        Previous value: -"Start year for date filter, inclusive (e.g., 1900). Omit for no lower bound."New value: +"Start of the date filter, inclusive: an integer year (e.g., 1900) or a \"YYYY\", \"YYYY-MM\", or \"YYYY-MM-DD\" string (e.g., \"1912-04-15\"); month and day may be one or two digits. A year or month starts on its first day. Omit for no lower bound."
      • removedInput schema / properties / date_start / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / date_start / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / date_start / type
        Removed value: -"integer"
      • changedInput schema / properties / limit / description
        Previous value: -"Results per page. Default 25, max 100."New value: +"Results per page. Default 25. A page holds at most 100 results: a larger limit (up to 1000) is served as a 100-result page, and page then counts 100-result pages."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +1000
      • changedInput schema / properties / newspaper_title / description
        Previous value: -"Filter to a specific newspaper by title (partial match accepted)."New value: +"Filter to one newspaper. Pass the newspaper_title value of a libofcongress_search_newspapers result exactly (case-insensitive), e.g., \"new-york tribune (new york [n.y.]) 1866-1924\" — the full catalog title with place and run. A shortened title such as \"New-York Tribune\" matches nothing."
      • changedInput schema / properties / state / description
        Previous value: -"Filter to newspapers published in this US state. Use the full state name, lowercase (e.g., \"oklahoma\", \"new york\")."New value: +"Filter to newspapers LOC indexes under this US state: the full state name (e.g., \"oklahoma\", \"new york\") or its two-letter postal code (e.g., \"OK\", \"NY\"), case-insensitive. Use \"district of columbia\" (or \"DC\") for Washington, D.C.; \"washington\" means Washington state. City and county names match nothing."
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date`: date_start or date_end names no calendar day: a month outside 01-12, or a day past the end of its month (e.g., \"1912-02-30\"). `invalid_date_range`: date_start is later than date_end, or date_start is given alone and is later than the current year. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress could not be reached, or answered with an error status, a bot challenge or other HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_date_range",
        -  "rate_limit_exceeded",
        -  "server_busy",
        -  "request_timed_out"
        -]New value: +[
        +  "invalid_date",
        +  "invalid_date_range",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / items / items / properties / newspaper_title / description
        Previous value: -"Newspaper publication title."New value: +"The newspaper's full catalog title with place and run (e.g., \"the seattle star (seattle, wash.) 1899-1947\"). Pass it unchanged as newspaper_title to search only this paper."
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery hint when results are empty or a page is out of range — echoes applied filters and suggests how to broaden. Absent on successful result pages."New value: +"Recovery hint when results are empty or a page is out of range — echoes applied filters and suggests how to broaden — plus disclosure of a capped limit or of the retrieval ceiling. Absent on ordinary result pages."
    • Changedlibofcongress_search_subjects10 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of subject headings to return. Default 10, max 50."New value: +"Maximum number of subject headings to return. Default 10. A call returns at most 50 headings; a larger limit (up to 1000) returns up to 50."
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +1000
      • changedOutput schema / properties / cap / description
        Previous value: -"The limit applied to this response — maximum headings the API will return."New value: +"The heading limit applied to this response."
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The heading count actually applied when limit exceeded the per-call cap of 50. Absent when limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / effectiveQuery / description
        Previous value: -"The keyword query as submitted to the id.loc.gov suggest endpoint, after trimming."New value: +"The query as submitted to the id.loc.gov subject suggest endpoint, after trimming."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `request_timed_out`: The Library of Congress subject heading service did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `request_timed_out`: The Library of Congress subject heading service did not respond within the 50-second request budget. `upstream_unavailable`: The Library of Congress subject heading service could not be reached, or answered with an error status, an HTML page, or an unreadable response instead of its JSON. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "request_timed_out"
        -]New value: +[
        +  "request_timed_out",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery hint when results are empty, or when the upstream candidate cap under-filled the request. Distinguishes \"exhausted by ranking\" (retry with a more specific query) from \"no LCSH coverage\", and suggests inverted-form strategies. Absent when the full requested set was returned."New value: +"Recovery hint when no heading matched; how many headings matched when more exist than this response holds; disclosure of a capped limit. Absent when every matching heading was returned."
      • changedOutput schema / properties / subjects / description
        Previous value: -"LCSH subject headings matching the query, ordered by relevance. To see how many LOC items carry a heading, pass its label as the libofcongress_search_items subject filter and read total."New value: +"LCSH subject headings matching the query, ordered by relevance, an exact match first. To see how many LOC items carry a heading, pass its label as the libofcongress_search_items subject filter and read total."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when results were capped at the requested limit. Increase limit or refine the query to surface additional headings."New value: +"True when more headings match than this response holds. Refine the query to see others, or raise limit when it is below 50."
  3. 7 tool updates
    • Changedlibofcongress_browse_collections2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out"
        +]
    • Changedlibofcongress_get_item3 fields changed
      • changedInput schema / properties / item_id / description
        Previous value: -"LOC item id from a libofcongress_search result's \"id\" field (where is_item is true). A simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper pages (\"sn95047246/1935-09-05/ed-1\"). Pass the id verbatim; do not prepend the loc.gov URL or an \"item/\" prefix."New value: +"LOC item id from a libofcongress_search_items result's \"id\" field (where is_item is true). A simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper pages (\"sn95047246/1935-09-05/ed-1\"). Pass the id verbatim; do not prepend the loc.gov URL or an \"item/\" prefix."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `item_not_found`: No item exists for the given ID. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "item_not_found",
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "item_not_found",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out"
        +]
    • Changedlibofcongress_get_newspaper_page2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_page_url`: page_url does not begin with https://www.loc.gov/resource/. `page_not_found`: The URL does not resolve to a valid LOC newspaper page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_url`: page_url does not begin with https://www.loc.gov/resource/. `page_not_found`: The URL does not resolve to a valid LOC newspaper page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_page_url",
        -  "page_not_found",
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "invalid_page_url",
        +  "page_not_found",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out"
        +]
    • Removedlibofcongress_search
    • Addedlibofcongress_search_items
    • Changedlibofcongress_search_newspapers2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. `server_busy`: More Library of Congress requests are queued on this server than can start within this call's time budget. `request_timed_out`: The Library of Congress did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_date_range",
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "invalid_date_range",
        +  "rate_limit_exceeded",
        +  "server_busy",
        +  "request_timed_out"
        +]
    • Changedlibofcongress_search_subjects4 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `request_timed_out`: The Library of Congress subject heading service did not respond within the 50-second request budget. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "request_timed_out"
        +]
      • changedOutput schema / properties / subjects / description
        Previous value: -"LCSH subject headings matching the query, ordered by relevance. To see how many LOC items carry a heading, pass its label as the libofcongress_search subject filter and read total."New value: +"LCSH subject headings matching the query, ordered by relevance. To see how many LOC items carry a heading, pass its label as the libofcongress_search_items subject filter and read total."
      • changedOutput schema / properties / subjects / items / properties / label / description
        Previous value: -"Standardized LCSH heading — use this exact string in the libofcongress_search subject filter."New value: +"Standardized LCSH heading — use this exact string in the libofcongress_search_items subject filter."
  4. 5 tool updates
    • Changedlibofcongress_get_item3 fields changed
      • changedInput schema / properties / item_id / description
        Previous value: -"LOC item id from a libofcongress_search result's \"id\" field (where is_item is true). A simple ID (\"2009632251\", \"loc.pnp.ppmsc.02404\") or a slash-separated path for newspaper pages (\"sn95047246/1935-09-05/ed-1\"). Pass the id verbatim; do not prepend the loc.gov URL or an \"item/\" prefix."New value: +"LOC item id from a libofcongress_search result's \"id\" field (where is_item is true). A simple ID (\"2009632251\", \"2005691065\") or a slash-separated path for newspaper pages (\"sn95047246/1935-09-05/ed-1\"). Pass the id verbatim; do not prepend the loc.gov URL or an \"item/\" prefix."
      • changedOutput schema / properties / contributors / description
        Previous value: -"Names of contributors, creators, or photographers."New value: +"Contributors, creators, or photographers as LOC catalogs them, role included (e.g., \"Washington, George, 1732-1799 (Author)\"). One person can appear once per role. Empty when LOC lists none."
      • changedOutput schema / properties / related_items / description
        Previous value: -"IDs or URLs of related LOC items for follow-up retrieval."New value: +"IDs or URLs of related LOC records for follow-up retrieval; a title stands in for a related record LOC gives neither for."
    • Changedlibofcongress_get_newspaper_page9 fields changed
      • changedOutput schema / properties / date / description
        Previous value: -"Issue publication date."New value: +"Issue publication date (YYYY-MM-DD)."
      • changedOutput schema / properties / edition / description
        Previous value: -"Edition or publication context identifier."New value: +"Edition number of the issue (e.g., \"1\"). Absent when LOC gives none."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `page_not_found`: The URL does not resolve to a valid LOC newspaper page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_url`: page_url does not begin with https://www.loc.gov/resource/. `page_not_found`: The URL does not resolve to a valid LOC newspaper page resource. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "page_not_found",
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "invalid_page_url",
        +  "page_not_found",
        +  "rate_limit_exceeded"
        +]
      • changedOutput schema / properties / newspaper_title / description
        Previous value: -"Title of the newspaper publication."New value: +"Title of the newspaper publication. Absent when LOC gives none."
      • addedOutput schema / properties / place_of_publication
        Added value: +{
        +  "description": "Where the newspaper was published, as LOC catalogs it (e.g., \"Charleston, S.C.\"). Absent when LOC gives none.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / segment_count
        Added value: +{
        +  "description": "Number of pages in the issue. Absent when LOC gives none.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / state
        Removed value: -{
        -  "description": "State where the newspaper was published.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / states
        Added value: +{
        +  "description": "Every US state LOC indexes this newspaper title under (e.g., [\"georgia\", \"south carolina\"]), in LOC order — possibly more than the state of publication. Absent when LOC lists no state.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedlibofcongress_search2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `incompatible_filters`: format and collection_slug were both supplied; each selects a different LOC endpoint, so only one can apply. `collection_not_found`: collection_slug does not resolve to a LOC collection. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `incompatible_filters`: format and collection_slug were both supplied; each selects a different LOC endpoint, so only one can apply. `collection_not_found`: collection_slug does not resolve to a LOC collection. Reported on page 1; a later page gets the out-of-range notice, since LOC answers both cases the same way there. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "incompatible_filters",
        -  "collection_not_found",
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "invalid_date_range",
        +  "incompatible_filters",
        +  "collection_not_found",
        +  "rate_limit_exceeded"
        +]
    • Changedlibofcongress_search_newspapers4 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_start is later than date_end. `rate_limit_exceeded`: LOC API rate limit exceeded; requests are blocked for approximately 1 hour. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "rate_limit_exceeded"
        -]New value: +[
        +  "invalid_date_range",
        +  "rate_limit_exceeded"
        +]
      • removedOutput schema / properties / items / items / properties / state
        Removed value: -{
        -  "description": "State where the newspaper was published.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / items / items / properties / states
        Added value: +{
        +  "description": "Every US state LOC indexes this newspaper title under (e.g., [\"georgia\", \"south carolina\"]), in LOC order. A title indexed against its circulation area lists several, so no entry is necessarily the place of publication — libofcongress_get_newspaper_page returns place_of_publication. Absent when LOC lists no state.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedlibofcongress_search_subjects2 fields changed
      • changedOutput schema / properties / subjects / description
        Previous value: -"LCSH subject headings matching the query, ordered by relevance."New value: +"LCSH subject headings matching the query, ordered by relevance. To see how many LOC items carry a heading, pass its label as the libofcongress_search subject filter and read total."
      • removedOutput schema / properties / subjects / items / properties / count
        Removed value: -{
        -  "description": "Approximate number of LOC items carrying this heading. Omitted when unavailable.",
        -  "type": "number"
        -}
  5. 6 tool updates
    • First observedlibofcongress_browse_collections
    • First observedlibofcongress_get_item
    • First observedlibofcongress_get_newspaper_page
    • First observedlibofcongress_search
    • First observedlibofcongress_search_newspapers
    • First observedlibofcongress_search_subjects

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables full-text search of digitized historical U.S. newspapers from the Library of Congress Chronicling America collection, returning publication metadata and page-scan image URLs with filters for date range and state.
    425 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables Claude to search, browse, and read more than 20 million digitized historical US newspaper pages from the Library of Congress's Chronicling America archive, covering the 1700s through 1963. Queries can be filtered by date range, state, newspaper, or front pages only, and results include full OCR text with citations and links back to each scan and PDF.
    4
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.