# io.github.smeet666/mcp-libraryofcongress (mcpb · mcp-libraryofcongress-2.1.0.mcpb)

Search inside scanned US newspapers and browse the Library of Congress catalogue. No API key.

- Trust score: 40/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-12

## Components

- mcpb · `mcp-libraryofcongress-2.1.0.mcpb`: 40/100 (this document), [markdown](https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib.md), [page](https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib)
- npm · `mcp-libraryofcongress`: 79/100, [markdown](https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/mcp-libraryofcongress.md), [page](https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/mcp-libraryofcongress)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/smeet666/mcp-libraryofcongress/releases/download/v2.1.0/mcp-libraryofcongress-2.1.0.mcpb`
- Version: `2.1.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-12.

- **Supply Chain Security**: 13/100
  - Malware scan not yet available for this package.
  - Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
  - No install/post-install scripts declared.
  - Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2171 tokens (~542/item across 4 items; 4 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 93% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

- Download bundle: `https://github.com/smeet666/mcp-libraryofcongress/releases/download/v2.1.0/mcp-libraryofcongress-2.1.0.mcpb`

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-11 (score 40, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-09 (score 38)

First indexed and scored.

## MCP tools (4)

### `search_newspapers` (~629 tokens)

Search inside scanned newspaper pages

Search the text inside digitised American newspaper pages held by the Library of Congress. This reads what optical recognition took off the scanned pages, so it finds a phrase that appears nowhere in a title or a catalogue record. Double quotes change how the Library matches the words, and it decides what they mean: a page can come back carrying the words apart or in another order rather than the phrase as written. What the quotes do to the number of matching pages varies from one query to the next, so run the search both ways rather than expecting either form to return more. 'total' counts the pages that match, and they page: ask for page 2, 3 and so on to see beyond the first answer. It is not a count of how many times the words occur. Each match names the newspaper, the date, the leaf of the issue and the state it was published in, and 'source_url' opens that leaf with the query applied. 'location' keeps to papers published in one state, 'publication' to a single paper, and 'year_from' with 'year_to' to a span of years. A filter matching nothing is dropped and the answer says so. Every match carries 'excerpt_kind', and the excerpts are labelled with it in the text. A 'passage' is the text around the words that matched. A 'page_opening' is the start of the page, sent because the text the Library returned with the row stops before those words appear, so it does not carry the match and quoting it quotes something else. Use search_items instead when looking for a work by its title, creator or subject.

Input parameters:

- `limit` (integer): Matches to return.
- `location` (string): The state a paper was published in, written as the Library writes it: 'new york', 'district of columbia'. It is the value 'state' carries on the matches this tool returns.
- `max_excerpt_chars` (integer): Budget for one passage. Read it together with 'max_excerpts_per_match': the size of the answer is the product of the two and the number of matches.
- `max_excerpts_per_match` (integer): Passages to keep per match. A page holding the words several times yields several, and the later ones rarely say anything the first did not.
- `page` (integer): Which page of matches, from 1.
- `publication` (string): One newspaper, named with its town and the years it ran: 'new-york tribune (new york [n.y.]) 1866-1924'. Take the wording from 'publication' on a match here, or from a title in search_items with medi…
- `query` (string, required): Words or a quoted phrase, such as '"cure for influenza"'. The index reads the text off the pages themselves and holds single characters, so a query of one character is a query it answers.
- `year_from` (integer): Earliest year, inclusive.
- `year_to` (integer): Latest year, inclusive.

Output parameters:

- `hits` (array)
- `notes` (array)
- `page` (integer)
- `query` (string)
- `total` (integer): Newspaper pages that match, not the number returned and not a count of occurrences. Raise 'page' to read further into it.

### `search_items` (~502 tokens)

Search the catalogue

Search the Library of Congress catalogue: books, photographs, maps, recordings, films, manuscripts, sheet music and newspaper titles. 'media_type' is required, because the Library keeps a separate catalogue for each kind of thing. This matches titles, creators and catalogue descriptions. It does not read the text inside a scan; use search_newspapers for a phrase printed on a newspaper page. Filters take the words the Library itself uses: 'subject' and 'location' as the rows here spell them, 'language' written in English, 'collection' as list_collections reports it under 'collection_filter'. A filter matching nothing is set aside and the search asked again without it; the answer names what was dropped, and the count it reports is then the unfiltered search's. By default only material with a digitised copy is returned; set 'online_only' to false to take in records the Library holds on a shelf alone. A row carries an 'identifier' get_item takes when it names a record. A row that is a collection the Library gathered names no record: 'is_collection' is true there, 'identifier' is null, and 'source_url' opens the collection.

Input parameters:

- `collection` (string): A collection, named exactly as list_collections reports it under 'collection_filter'.
- `language` (string): A language, written in English: 'english'.
- `limit` (integer)
- `location` (string): A place, such as 'oklahoma'.
- `media_type` (string, required): Which catalogue to search: books, photos, maps, audio, film-and-videos, manuscripts, notated-music or newspapers. 'newspapers' holds the papers themselves; a phrase printed on a page belongs in searc…
- `online_only` (boolean): Keep to material with a digitised copy. Set false to include shelf-only records.
- `page` (integer)
- `query` (string, required): Words to look for in titles, creators and catalogue descriptions. The catalogue index holds no word of a single letter, so at least one word has to run to two letters or more, unless it is written in…
- `sort` (string): Order of the results.
- `subject` (string): A subject heading, such as 'crime'.
- `year_from` (integer): Earliest year, inclusive.
- `year_to` (integer): Latest year, inclusive.

Output parameters:

- `items` (array)
- `notes` (array)
- `page` (integer)
- `query` (string)
- `total` (integer): Records matching across this catalogue for the search the rows come from, not the number returned. A filter that matched nothing is set aside, and this then counts the search without it, which the no…

### `get_item` (~313 tokens)

Read a record

Read one Library of Congress record by its identifier, as returned by search_items or search_newspapers. An identifier can carry slashes: a single newspaper issue is named by its paper, its date and its edition together. Sections are opt-in: 'basic' is the default and covers what a description needs. 'date' carries only the precision the record's own words support, and 'date_stated' repeats those words, which can be a span of years the record was filed at the opening of. Where the Library has established no date it files the record under a cataloguing code, which 'date_code' carries while 'date' and 'year' stay null. 'citations' returns the ready-made citations the Library publishes for the record. 'resources' lists the served copies, such as page images and downloadable files. 'full_metadata' returns every field the Library publishes for the record, which is large and rarely needed. A long description paginates: when 'next_offset' is not null, call again with 'offset' set to it.

Input parameters:

- `identifier` (string, required): Record identifier, such as '2017645459' or 'sn83045462/1929-02-03/ed-1'.
- `max_description_chars` (integer): Characters of the description to return in one call.
- `offset` (integer): Where to resume the description.
- `sections` (array): Which parts to return. Each one beyond 'basic' adds to the size of the answer.

Output parameters:

- `call_number`
- `citations` (object)
- `description`
- `full_metadata` (object)
- `item` (object)
- `language` (array)
- `location` (array)
- `next_offset`: Pass as 'offset' to read the rest of the description. Null when it ends here.
- `notes` (array)
- `notes_on_record` (array): Notes the Library published about the record itself, less any whose words the description already carries. The Library assembles the description of some records out of these notes, and those records…
- `offset` (integer)
- `part_of` (array): Collections and divisions the record sits in.
- `repository`: Where the original is held.
- `resources` (array)
- `rights`: What the Library says about reuse. Null when it says nothing, which is not permission.
- `subjects` (array)

### `list_collections` (~230 tokens)

List the digital collections

List the digital collections of the Library of Congress: bodies of material a curator chose, described and published together. Use it to see what is there before searching, since a collection names a corpus that a query would have to guess at. 'collection_filter' on each row is the wording search_items takes as its 'collection' argument, and 'searchable_media_types' names the catalogues that filter can be sent to. A collection whose 'searchable_media_types' is empty gathers a kind of thing the catalogue search is not divided into, such as web archives; set 'searchable_only' to leave those out. 'item_count' is how many records the collection gathers, which is the size of the corpus rather than the number of rows here.

Input parameters:

- `limit` (integer): Collections to return.
- `max_description_chars` (integer): Budget for one collection's description.
- `page` (integer): Which page of collections, from 1.
- `searchable_only` (boolean): Keep only the collections whose formats name a media_type, which are the ones search_items can be asked for.

Output parameters:

- `collections` (array)
- `notes` (array)
- `page` (integer)
- `total` (integer): Collections the Library publishes, not the number returned.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib#diagnostics

## Score history

- 2026-08-12: 40
- 2026-08-11: 40
- 2026-08-10: 38
- 2026-08-09: 38

## Links

- Repository: https://github.com/smeet666/mcp-libraryofcongress
- Changelog RSS feed: https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib.xml
- Changelog JSON feed: https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib.json
- HTML version of this page: https://verifymcp.io/servers/smeet666-mcp-libraryofcongress/https-github-com-smeet666-mcp-libraryofcongress-releases-download-v2-1-0-mcp-lib
