libofcongress-mcp-server
An MCP server that enables agents to search Library of Congress digital collections, browse Chronicling America newspapers with full OCR text, and look up LC Subject Headings. It supports STDIO or Streamable HTTP transports and provides tools for searching items, retrieving metadata, searching newspapers, and browsing curated collections.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://libofcongress.caseyjhand.com/mcpWhat its tools do
6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search LOC digital collections by keyword with format, date range, subject, location, and collection filters.
- Retrieve full metadata for a specific LOC digital item including imprint, contributors, subjects, and rights.
- Search historical newspaper pages in the Chronicling America corpus with OCR text excerpts.
- Search Library of Congress Subject Headings (LCSH) by keyword.
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- libofcongress-mcp-server 0.6.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 6 advertised
- Resources
- 1 advertised
- Resource templates
- 2 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
libofcongress_search_items — Search LOC Items
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. Non-item resources include collections, exhibit and research-guide pages, newspaper pages, catalog.loc.gov records, and hdl.loc.gov finding aids. When page_url is present, pass it to libofcongress_get_newspaper_page, optionally using the search query as match; its item_id identifies the issue. A link_notice warns that a retired catalog URL no longer opens its record; otherwise follow a non-item url. 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-indexed page number for paginating results."
},
"sort": {
"enum": [
"relevance",
"date",
"date_desc"
],
"type": "string",
"default": "relevance",
"description": "Result order: relevance (default), date (oldest first), or date_desc (newest first). Uses LOC catalog dates and upstream ordering."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 1000,
"minimum": 1,
"description": "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."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Full-text search across metadata and available descriptive text. Use \"*\" to match all records within the applied filters; relevance order can differ from a queryless LOC browse."
},
"format": {
"enum": [
"photo",
"map",
"newspaper",
"manuscript",
"audio",
"film",
"book",
"notated-music"
],
"type": "string",
"description": "Material type filter. Options: photo, map, newspaper, manuscript, audio, film, book, notated-music. Omit to search all formats."
},
"subject": {
"type": "string",
"description": "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."
},
"date_end": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "End year for date filter, inclusive (e.g., 1930). Omit to run through the current year."
},
"location": {
"type": "string",
"description": "Geographic location filter (e.g., \"oklahoma\", \"washington d.c.\"). Lowercase, matches LOC location facets; location_facets (include_facets) lists values for a search."
},
"date_start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Start year for date filter, inclusive (e.g., 1920). Omit for no lower bound."
},
"include_facets": {
"type": "boolean",
"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."
},
"collection_slug": {
"type": "string",
"description": "Scope the search to one curated collection. Pass a slug exactly as returned by libofcongress_browse_collections to libofcongress_search_items.collection_slug (e.g., \"aaron-copland\") — slugs are not derivable from the collection title. Combine with format to filter material type; use query \"*\" to browse every matching record. Omit to search all of LOC."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"items",
"total",
"page",
"pages",
"has_next",
"effectiveSort",
"effectiveQuery",
"totalCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "number",
"description": "Current 1-indexed page number."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_date_range",
"collection_not_found",
"rate_limit_exceeded",
"server_busy",
"request_timed_out",
"upstream_unavailable"
],
"description": "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. `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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"is_item",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "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. Use page_url for newspaper pages, heed link_notice for retired links, and otherwise follow url."
},
"url": {
"type": "string",
"description": "Original LOC result URL, preserved even when retired; read link_notice before following it."
},
"date": {
"type": "string",
"description": "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."
},
"title": {
"type": "string",
"description": "Item title."
},
"format": {
"type": "string",
"description": "Material format (e.g., photo, map, manuscript, collection)."
},
"is_item": {
"type": "boolean",
"description": "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. Use page_url for newspaper pages, heed link_notice for retired links, and otherwise follow url. Always present on every result."
},
"page_url": {
"type": "string",
"description": "Recognized newspaper page URL: pass to libofcongress_get_newspaper_page as page_url, optionally with this search query as match. That tool returns item_id for the issue."
},
"description": {
"type": "string",
"description": "Brief description or summary."
},
"link_notice": {
"type": "string",
"description": "Warning that a retired catalog URL no longer opens its record; no replacement record URL is known."
}
},
"description": "A single LOC item summary.",
"additionalProperties": false
},
"description": "Item summaries matching the search query and filters."
},
"pages": {
"type": "number",
"description": "Total 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)."
},
"total": {
"type": "number",
"description": "Total number of matching items across all pages."
},
"notice": {
"type": "string",
"description": "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."
},
"has_next": {
"type": "boolean",
"description": "True when a retrievable next page follows this one. Never promises a page past LOC's ~100,000-item retrieval ceiling."
},
"totalCount": {
"type": "number",
"description": "Total matching items across all pages — mirrors output.total for agent reasoning."
},
"effectiveSort": {
"enum": [
"relevance",
"date",
"date_desc"
],
"type": "string",
"description": "Applied LOC result order, including empty and out-of-range pages."
},
"effectiveLimit": {
"type": "number",
"description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap."
},
"effectiveQuery": {
"type": "string",
"description": "The query as submitted to the LOC API, after trimming."
},
"subject_facets": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "Matching items carrying this subject term."
},
"value": {
"type": "string",
"description": "The subject term, as the subject filter accepts it."
}
},
"description": "One subject facet value.",
"additionalProperties": false
},
"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."
},
"location_facets": {
"type": "array",
"items": {
"type": "object",
"required": [
"value",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "Matching items carrying this location term."
},
"value": {
"type": "string",
"description": "The location term, as the location filter accepts it."
}
},
"description": "One location facet value.",
"additionalProperties": false
},
"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."
},
"effectiveSubjectTerms": {
"type": "array",
"items": {
"type": "string"
},
"description": "The subject terms the subject filter was sent as, all required to match. Absent when no subject filter was given."
},
"effectiveCollectionSlug": {
"type": "string",
"description": "The collection the search was scoped to, after trimming. Absent when the search covered all of LOC."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}libofcongress_get_item — Get LOC Item
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"item_id"
],
"properties": {
"item_id": {
"type": "string",
"minLength": 1,
"description": "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."
},
"page_limit": {
"type": "integer",
"default": 50,
"maximum": 1000,
"minimum": 1,
"description": "Pages to list. Default 50. A response lists at most 100 pages: a larger page_limit (up to 1000) is served as 100."
},
"page_offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 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."
},
"include_files": {
"type": "boolean",
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"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"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"type": "string",
"description": "Canonical LOC item URL."
},
"date": {
"type": "string",
"description": "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."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_item_id",
"item_not_found",
"rate_limit_exceeded",
"server_busy",
"request_timed_out",
"upstream_unavailable"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Descriptive notes and annotations from catalogers."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page_url",
"has_text"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"description": "Download URL; its extension names the format."
},
"description": "Download URLs of the page's files: JPEG sizes, JP2 and TIFF masters, OCR XML, text. Present only when include_files is true."
},
"has_text": {
"type": "boolean",
"description": "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."
},
"page_url": {
"type": "string",
"description": "LOC page URL. Pass to libofcongress_get_newspaper_page to read its text when has_text is true."
}
},
"description": "One page of the item.",
"additionalProperties": false
},
"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."
},
"title": {
"type": "string",
"description": "Item title."
},
"notice": {
"type": "string",
"description": "Set when page_offset is past the last page, or when page_limit was capped. Absent otherwise."
},
"imprint": {
"type": "string",
"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."
},
"item_id": {
"type": "string",
"description": "LOC item ID: the input item_id, or the id read from the loc.gov item link or LCCN permalink passed as item_id."
},
"summary": {
"type": "string",
"description": "Cataloger's abstract of the item's subject and historical context."
},
"languages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Languages of the item (e.g., \"english\")."
},
"locations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Places the item depicts or originates from (e.g., \"united states\")."
},
"resources": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"page_count"
],
"properties": {
"pdf": {
"type": "string",
"description": "PDF of the whole resource. Absent when LOC gives none."
},
"url": {
"type": "string",
"description": "LOC resource URL; its pages are this URL plus ?sp=N."
},
"audio": {
"type": "string",
"description": "Audio stream (MP3) of a sound recording. Absent when LOC gives none."
},
"image": {
"type": "string",
"description": "Representative image URL. Absent when LOC gives none."
},
"page_count": {
"type": "number",
"description": "Pages (file groups) in this resource."
}
},
"description": "One digital resource of the item, such as a photo, a volume, or a recording.",
"additionalProperties": false
},
"description": "The item's digital resources, in LOC order. Empty when no digital surrogate exists."
},
"former_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Superseded catalog identifiers or URLs this item was previously known by."
},
"page_total": {
"type": "number",
"description": "Pages across all of the item's resources."
},
"totalCount": {
"type": "number",
"description": "Pages across all resources — mirrors output.page_total for agent reasoning."
},
"call_number": {
"type": "string",
"description": "LOC call number — the shelf location for requesting the physical original."
},
"contributors": {
"type": "array",
"items": {
"type": "string"
},
"description": "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."
},
"related_items": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs or URLs of related LOC records for follow-up retrieval; a title stands in for a related record LOC gives neither for."
},
"subject_terms": {
"type": "array",
"items": {
"type": "string"
},
"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."
},
"online_formats": {
"type": "array",
"items": {
"type": "string"
},
"description": "Formats the digitized surrogate is available in (e.g., \"image\")."
},
"next_page_offset": {
"type": "number",
"description": "page_offset for the next window of pages. Absent when this window reaches the last page."
},
"original_formats": {
"type": "array",
"items": {
"type": "string"
},
"description": "Material types of the original (e.g., \"photo, print, drawing\")."
},
"subject_headings": {
"type": "array",
"items": {
"type": "string"
},
"description": "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."
},
"access_restricted": {
"type": "boolean",
"description": "True when LOC restricts access to the original. Absent when upstream omits it."
},
"effectivePageLimit": {
"type": "number",
"description": "The page_limit actually served when page_limit exceeded the per-call cap of 100. Absent when page_limit was within the cap."
},
"rights_information": {
"type": "string",
"description": "Rights and reproduction statement for this item."
},
"physical_description": {
"type": "string",
"description": "Physical or technical description of the original item."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}libofcongress_search_newspapers — Search Historical Newspapers
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, indexed state/province, 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-indexed page number for paginating results."
},
"sort": {
"enum": [
"relevance",
"date",
"date_desc"
],
"type": "string",
"default": "relevance",
"description": "Result order: relevance (default), date (oldest first), or date_desc (newest first). Uses LOC catalog dates and upstream ordering."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 1000,
"minimum": 1,
"description": "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."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Keyword search across OCR text and newspaper metadata."
},
"state": {
"type": "string",
"description": "Filter by LOC's State/Province facet: a full indexed name (e.g., \"oklahoma\", \"piedmont\") or a supported US 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_end": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "A year, e.g., 1912."
},
{
"type": "string",
"pattern": "^(\\d{4})(?:-(\\d{1,2})(?:-(\\d{1,2}))?)?$",
"description": "A date: \"YYYY\", \"YYYY-MM\", or \"YYYY-MM-DD\", e.g., \"1912-04-16\"."
},
{
"type": "string",
"const": ""
}
],
"description": "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."
},
"date_start": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "A year, e.g., 1912."
},
{
"type": "string",
"pattern": "^(\\d{4})(?:-(\\d{1,2})(?:-(\\d{1,2}))?)?$",
"description": "A date: \"YYYY\", \"YYYY-MM\", or \"YYYY-MM-DD\", e.g., \"1912-04-16\"."
},
{
"type": "string",
"const": ""
}
],
"description": "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."
},
"newspaper_title": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"items",
"total",
"page",
"pages",
"has_next",
"effectiveSort",
"effectiveQuery",
"totalCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "number",
"description": "Current 1-indexed page number."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_date",
"invalid_date_range",
"rate_limit_exceeded",
"server_busy",
"request_timed_out",
"upstream_unavailable"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"title"
],
"properties": {
"url": {
"type": "string",
"description": "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."
},
"date": {
"type": "string",
"description": "Issue publication date."
},
"title": {
"type": "string",
"description": "Page or issue title."
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every State/Province facet value 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 none."
},
"description": {
"type": "string",
"description": "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."
},
"newspaper_title": {
"type": "string",
"description": "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."
}
},
"description": "A single newspaper page search result.",
"additionalProperties": false
},
"description": "Newspaper page results matching the search query and filters."
},
"pages": {
"type": "number",
"description": "Total 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)."
},
"total": {
"type": "number",
"description": "Total number of matching newspaper pages in the result set."
},
"notice": {
"type": "string",
"description": "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."
},
"has_next": {
"type": "boolean",
"description": "True when a retrievable next page follows this one. Never promises a page past LOC's ~100,000-item retrieval ceiling."
},
"totalCount": {
"type": "number",
"description": "Total matching newspaper pages — mirrors output.total for agent reasoning."
},
"effectiveSort": {
"enum": [
"relevance",
"date",
"date_desc"
],
"type": "string",
"description": "Applied LOC result order, including empty and out-of-range pages."
},
"effectiveLimit": {
"type": "number",
"description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap."
},
"effectiveQuery": {
"type": "string",
"description": "The keyword query as submitted to the Chronicling America API, after trimming."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}libofcongress_get_newspaper_page — Get Newspaper Page
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"page_url"
],
"properties": {
"match": {
"type": "string",
"maxLength": 200,
"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."
},
"page_url": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"page_url",
"ocr_text",
"ocr_available"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"description": "Issue publication date (YYYY-MM-DD)."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_page_url",
"page_not_found",
"rate_limit_exceeded",
"server_busy",
"request_timed_out",
"upstream_unavailable"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "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."
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every state or province LOC indexes this newspaper title under (e.g., [\"georgia\", \"south carolina\"]), in LOC order — possibly more than the place of publication. Absent when LOC lists none."
},
"edition": {
"type": "string",
"description": "Edition number of the issue (e.g., \"1\"). Absent when LOC gives none."
},
"item_id": {
"type": "string",
"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."
},
"matches": {
"type": "array",
"items": {
"type": "string"
},
"description": "Present when match is set and text retrieval did not fail: 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. Absent when retrieval failed and matches are unknown; see notice."
},
"ocr_text": {
"type": "string",
"description": "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."
},
"page_url": {
"type": "string",
"description": "The LOC resource URL for this page, in the https://www.loc.gov/resource/…?sp=N form the input was read as."
},
"sequence": {
"type": "number",
"description": "Page sequence number within the issue, volume, or folder."
},
"item_title": {
"type": "string",
"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."
},
"match_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Present when match is set and text retrieval did not fail: occurrences of every match term on the page, including those beyond the passages returned. 0 when nothing matched or the page has no text. Absent when retrieval failed and the count is unknown; see notice."
},
"ocr_available": {
"type": "boolean",
"description": "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."
},
"segment_count": {
"type": "number",
"description": "Number of pages in the issue, volume, or folder. Absent when LOC gives none."
},
"newspaper_title": {
"type": "string",
"description": "Title of the newspaper publication. Absent when LOC gives none."
},
"place_of_publication": {
"type": "string",
"description": "Where the newspaper was published, as LOC catalogs it (e.g., \"Charleston, S.C.\"). Absent when LOC gives none."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}libofcongress_search_subjects — Search LC Subject Headings
Search Library of Congress Subject Headings (LCSH) by keyword. Returns authorized subject headings and their URIs in a stable paged order, promoting an exact match from the first 50 results to the start; 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 1000,
"minimum": 1,
"description": "Maximum number of subject headings to return. Default 10. A call returns at most 250 headings; a larger limit (up to 1000) returns up to 250."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Keyword or partial subject heading to search for (e.g., \"civil war\", \"immigration\", \"jazz\")."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740741,
"minimum": 0,
"description": "Zero-based position in the matching headings. Continue with next_offset from the previous response."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"subjects",
"total",
"effectiveQuery"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The heading limit applied to this response."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"request_timed_out",
"upstream_unavailable"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Number of subject headings returned in this response."
},
"total": {
"type": "number",
"description": "Number of subject headings returned."
},
"notice": {
"type": "string",
"description": "Continuation instructions, a past-end or no-match recovery hint, and disclosure of a capped limit. Absent on an uncapped final page."
},
"subjects": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"uri"
],
"properties": {
"uri": {
"type": "string",
"description": "Stable LOC URI identifying this subject heading in the authority file."
},
"label": {
"type": "string",
"description": "Standardized LCSH heading — use this exact string in the libofcongress_search_items subject filter."
}
},
"description": "A single LCSH subject heading record.",
"additionalProperties": false
},
"description": "A page of matching LCSH headings in the same order across offsets and limits. An exact match from the initial 50 entries is promoted to the start. To see how many LOC items carry a heading, pass its label as the libofcongress_search_items subject filter and read total."
},
"truncated": {
"type": "boolean",
"description": "True when another page follows. Continue with next_offset to see the remaining headings."
},
"next_offset": {
"type": "number",
"description": "Zero-based position to request next. Absent on the final or past-end page."
},
"effectiveLimit": {
"type": "number",
"description": "The heading count actually applied when limit exceeded the per-call cap of 250. Absent when limit was within the cap."
},
"effectiveQuery": {
"type": "string",
"description": "The query as submitted to the id.loc.gov subject suggest endpoint, after trimming."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}libofcongress_browse_collections — Browse LOC Collections
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"). Pass a returned slug to libofcongress_search_items.collection_slug to search within it; use query "*" to browse matching records, optionally with format, date and sort filters. Use the returned URL to navigate directly to a collection on loc.gov.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-indexed page number for paginating results."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 1000,
"minimum": 1,
"description": "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."
},
"query": {
"type": "string",
"description": "Optional keyword to filter collections by name or description. Omit to list all collections."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"collections",
"total",
"page",
"pages",
"has_next",
"totalCount"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "number",
"description": "Current 1-indexed page number."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"rate_limit_exceeded",
"server_busy",
"request_timed_out",
"upstream_unavailable"
],
"description": "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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"pages": {
"type": "number",
"description": "Total number of pages available."
},
"total": {
"type": "number",
"description": "Total number of matching collections across all pages."
},
"notice": {
"type": "string",
"description": "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."
},
"has_next": {
"type": "boolean",
"description": "True when more pages are available after this one."
},
"totalCount": {
"type": "number",
"description": "Total matching collections — mirrors output.total for agent reasoning."
},
"collections": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"title",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Collection URL on loc.gov."
},
"slug": {
"type": "string",
"description": "Collection URL slug — pass unchanged to libofcongress_search_items.collection_slug to search within this collection."
},
"title": {
"type": "string",
"description": "Collection name."
},
"item_count": {
"type": "number",
"description": "Approximate number of items in this collection. Omitted when unavailable."
},
"description": {
"type": "string",
"description": "Description of the collection's scope and contents."
}
},
"description": "A single LOC curated digital collection.",
"additionalProperties": false
},
"description": "LOC curated collections matching the keyword filter, or all collections when no keyword is specified."
},
"effectiveLimit": {
"type": "number",
"description": "The page size actually served when limit exceeded the per-call cap of 100. Absent when limit was within the cap."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}Prompts
0 advertised
Resources
1 advertised
libofcongress-guide
Follow collection, item, and page identifiers with libofcongress_* tools. Use for historical newspaper research, collection browsing, subject-led discovery, and reading book or manuscript pages when OCR availability and search coverage affect the conclusion.
skill://libofcongress-guide/SKILL.mdloc-item — LOC Item
LOC digital item metadata by ID. Returns the same full record as libofcongress_get_item with its default page window: the first 50 pages, without per-page files. When next_page_offset is present, call libofcongress_get_item with page_offset to list the rest. Item IDs with internal slashes (newspaper pages) are written with their slashes intact: libofcongress://item/sn95047246/1935-09-05/ed-1. Use libofcongress_search_items to discover item IDs first.
libofcongress://item/{+item_id}io.modelcontextprotocol/skills
skill://{+path}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
- 2026-11-09: 2 of 2 checks answered
- 2026-11-10: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 560 ms
- 95th percentile latency
- 560 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 560 ms · metadata changed · 6 tool(s), 1 resource(s), 2 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http libofcongress-mcp-server-caseyjhand https://libofcongress.caseyjhand.com/mcpCodex
codex mcp add libofcongress-mcp-server-caseyjhand --url https://libofcongress.caseyjhand.com/mcpCursor
{
"mcpServers": {
"libofcongress-mcp-server-caseyjhand": {
"url": "https://libofcongress.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"libofcongress-mcp-server-caseyjhand": {
"type": "streamableHttp",
"url": "https://libofcongress.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"libofcongress-mcp-server-caseyjhand": {
"type": "http",
"url": "https://libofcongress.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http libofcongress-mcp-server-caseyjhand https://libofcongress.caseyjhand.com/mcpClaude Desktop
https://libofcongress.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"libofcongress-mcp-server-caseyjhand": {
"serverUrl": "https://libofcongress.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like libofcongress-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.