{"name":"io.github.cyanheads/libofcongress-mcp-server","slug":"cyanheads-libofcongress-mcp-server","title":null,"description":"Search LOC digital collections, Chronicling America newspapers (full OCR), and LC Subject Headings.","url":"https://mcp.market/server/cyanheads-libofcongress-mcp-server","rating":null,"grade":"A","score":93,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":27,"stars":4,"forks":1,"downloads_week":null,"last_push_at":"2026-09-19T12:21:00.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/cyanheads/libofcongress-mcp-server","website":null,"version":"0.2.18","remotes":[{"type":"streamable-http","url":"https://libofcongress.caseyjhand.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/libofcongress-mcp-server","version":"0.2.18","runtimeHint":"bun","transport":{"type":"stdio"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:stdio","type":"positional"}],"environmentVariables":[{"description":"User-Agent header sent with LOC API requests. LOC recommends a descriptive value for polite access.","format":"string","default":"libofcongress-mcp-server/0.2.18","name":"LOC_USER_AGENT"},{"description":"Delay in milliseconds between LOC API requests to stay under the 20 req/min rate limit.","format":"string","default":"3100","name":"LOC_REQUEST_DELAY_MS"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"},{"description":"HTTP session mode: auto, stateful, or stateless.","format":"string","default":"stateless","name":"MCP_SESSION_MODE"}]},{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/libofcongress-mcp-server","version":"0.2.18","runtimeHint":"bun","transport":{"type":"streamable-http","url":"http://localhost:3010/mcp"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:http","type":"positional"}],"environmentVariables":[{"description":"User-Agent header sent with LOC API requests. LOC recommends a descriptive value for polite access.","format":"string","default":"libofcongress-mcp-server/0.2.18","name":"LOC_USER_AGENT"},{"description":"Delay in milliseconds between LOC API requests to stay under the 20 req/min rate limit.","format":"string","default":"3100","name":"LOC_REQUEST_DELAY_MS"},{"description":"The hostname for the HTTP server.","format":"string","default":"127.0.0.1","name":"MCP_HTTP_HOST"},{"description":"The port to run the HTTP server on.","format":"string","default":"3010","name":"MCP_HTTP_PORT"},{"description":"The endpoint path for the MCP server.","format":"string","default":"/mcp","name":"MCP_HTTP_ENDPOINT_PATH"},{"description":"Authentication mode to use: 'none', 'jwt', or 'oauth'.","format":"string","default":"none","name":"MCP_AUTH_MODE"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"},{"description":"HTTP session mode: auto, stateful, or stateless.","format":"string","default":"stateless","name":"MCP_SESSION_MODE"}]}],"tools":[{"name":"libofcongress_browse_collections","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Optional keyword to filter collections by name or description. Omit to list all collections.","type":"string"},"limit":{"default":25,"description":"Maximum number of collections to return. Default 25, max 100.","type":"integer","minimum":1,"maximum":100},"page":{"default":1,"description":"1-indexed page number for paginating results.","type":"integer","minimum":1,"maximum":9007199254740991}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"libofcongress_get_item","description":"Retrieve the full metadata record for a specific LOC digital item. Returns contributors, subjects, summary, languages, locations, rights information, physical description, call number, original and online formats, access restrictions, former catalog IDs, notes, related items, and links to digital resources (TIFF, JPEG, PDF) for items with digital surrogates. Use after libofcongress_search on a result whose is_item is true. Pass the result id verbatim — it may be a simple ID or a slash-separated newspaper path; do not prepend the loc.gov URL. Non-item results (is_item: false) — collections, exhibits, guides, newspaper pages — have no item record and cannot be retrieved here.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"item_id":{"type":"string","minLength":1,"description":"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."}},"required":["item_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"libofcongress_get_newspaper_page","description":"Retrieve the full OCR text of a specific historical newspaper page along with publication metadata. Pass the url field from a libofcongress_search_newspapers result — do not construct this URL manually. OCR quality varies by digitization batch and era: 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"page_url":{"type":"string","description":"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."}},"required":["page_url"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"libofcongress_search","description":"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) with no item record — open their url instead. Use libofcongress_search_subjects first to find the exact LCSH heading spelling before applying a subject filter.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Full-text search across metadata and available descriptive text."},"format":{"description":"Material type filter. Options: photo, map, newspaper, manuscript, audio, film, book, notated-music. Omit to search all formats.","type":"string","enum":["photo","map","newspaper","manuscript","audio","film","book","notated-music"]},"date_start":{"description":"Start year for date filter, inclusive (e.g., 1920). Omit for no lower bound.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"date_end":{"description":"End year for date filter, inclusive (e.g., 1930). Omit for no upper bound.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"description":"Subject heading filter. Use the exact label from libofcongress_search_subjects results for best precision. Example: \"World War, 1939-1945\".","type":"string"},"location":{"description":"Geographic location filter (e.g., \"oklahoma\", \"washington d.c.\"). Lowercase, matches LOC location facets.","type":"string"},"collection_slug":{"description":"Scope 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.","type":"string"},"limit":{"default":25,"description":"Results per page. Default 25, max 100.","type":"integer","minimum":1,"maximum":100},"page":{"default":1,"description":"1-indexed page number for paginating results.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"libofcongress_search_newspapers","description":"Search historical newspaper pages in the Chronicling America corpus. Returns matching pages with OCR text excerpts (~500 characters), publication title, date, state, and the page URL needed for libofcongress_get_newspaper_page. Filters by keyword, date range, US state, and newspaper title. The OCR excerpts are sufficient for relevance assessment — call libofcongress_get_newspaper_page with the returned url field to read the full page text. OCR quality varies: 19th-century and degraded materials may contain fragmented or garbled text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Keyword search across OCR text and newspaper metadata."},"date_start":{"description":"Start year for date filter, inclusive (e.g., 1900). Omit for no lower bound.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"date_end":{"description":"End year for date filter, inclusive (e.g., 1920). Omit for no upper bound.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"state":{"description":"Filter to newspapers published in this US state. Use the full state name, lowercase (e.g., \"oklahoma\", \"new york\").","type":"string"},"newspaper_title":{"description":"Filter to a specific newspaper by title (partial match accepted).","type":"string"},"limit":{"default":25,"description":"Results per page. Default 25, max 100.","type":"integer","minimum":1,"maximum":100},"page":{"default":1,"description":"1-indexed page number for paginating results.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"libofcongress_search_subjects","description":"Search Library of Congress Subject Headings (LCSH) by keyword. Returns controlled-vocabulary subject labels and their URIs. Use the returned label as the subject filter in libofcongress_search — LCSH uses precise, standardized terms that differ from natural language (e.g., \"World War, 1939-1945\" not \"World War II\"; \"Photography, Aerial\" not \"Aerial photography\"). Running this tool before a subject-filtered libofcongress_search dramatically improves result quality.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Keyword or partial subject heading to search for (e.g., \"civil war\", \"immigration\", \"jazz\")."},"limit":{"default":10,"description":"Maximum number of subject headings to return. Default 10, max 50.","type":"integer","minimum":1,"maximum":50}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}}],"scan":{"score":93,"grade":"A","scanned_at":"2026-09-19T15:56:47.110Z","report":{"scannerVersion":"0.1.3","scannedAt":"2026-09-19T15:56:47.151Z","components":{"code":{"score":25,"max":25,"notes":["30 source files scanned","30 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 373ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://libofcongress.caseyjhand.com/mcp","reachable":true,"authRequired":false,"latencyMs":373,"serverInfo":{"name":"libofcongress-mcp-server","version":"0.2.18"}}],"packages":[{"registryType":"npm","identifier":"@cyanheads/libofcongress-mcp-server","version":"0.2.18","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T12:22:03.838Z","repositoryUrl":"git+https://github.com/cyanheads/libofcongress-mcp-server.git"},{"registryType":"npm","identifier":"@cyanheads/libofcongress-mcp-server","version":"0.2.18","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T12:22:03.838Z","repositoryUrl":"git+https://github.com/cyanheads/libofcongress-mcp-server.git"}],"repo":{"found":true,"owner":"cyanheads","repo":"libofcongress-mcp-server","archived":false,"pushedAt":"2026-09-19T12:21:00Z","stars":4,"forks":1,"openIssues":7,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10339515?v=4","ownerCreatedAt":"2014-12-29T13:01:12Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/10339515?v=4&s=128","source":"github"},"presence":{"stars":4,"forks":1,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-09-19T12:21:00.000Z","score":27}}}},"grade_history":[],"reviews":[]}