mcp-libraryofcongress
[npm]
[CI]
[license]
[MCP Registry]
[Glama]
[M8ven]
[LobeHub]
[Install in Cursor]
[Install in VS Code]
The Library of Congress is the national library of the
United States, and it publishes a large part of its holdings online: books,
photographs, maps, sound recordings, manuscripts, and the pages of American
newspapers going back to the eighteenth century. The newspaper pages have been
scanned and run through optical character recognition, so the words printed on
them can be searched. Curators also gather material into digital collections,
each described and published as a body of its own.
This server connects a chat client to that library. You can search the words
printed inside the newspapers, search the catalogue by title, creator, subject,
place or language, read one record with its rights statement and where the
original is held, and list the digital collections. It needs no API key and no
account.
Version française
Install
One-click install
[Install in Cursor]
[Install in VS Code]
Claude Code
Claude Desktop, Cursor, and any client using the standard config format
Node 24 or later is required, and no environment variable has to be set.
With Docker
-i keeps stdin open, which is where the protocol travels, and -t is left out
because a TTY rewrites the stream. The container needs outbound HTTPS to
www.loc.gov and chroniclingamerica.loc.gov, and nothing else: no volume, no
port, no credential.
Bundle, without npm
Download mcp-libraryofcongress-3.1.0.mcpb from
the latest release
and open it. A client that supports MCP bundles installs it on its own, with no
npm and no configuration file to edit. The bundle carries its dependencies, so
nothing is fetched at install time.
What you can ask
- "What did Oklahoma newspapers write about the 1907 statehood vote?"
- "Find me photographs of Chicago tenements before 1920."
- "Read that record and tell me who holds the original."
- "What digital collections are there on the Civil War?"
- "Can I reuse that photograph?"
The ordinary path runs from a search to a record: a row carries an identifier,
and get_item reads it.
Tools
search_newspapers
Searches the text of scanned newspaper pages, which came off the page through
optical character recognition.
In return: hits, each carrying identifier, which get_item takes;
title; creator, which is the library that contributed the scan; year;
page_number, the leaf within the issue; published_on; publication with the
years the paper ran; state; excerpts; and excerpt_kind.
excerpt_kind decides what an excerpt is worth. A passage is the text
around the words that matched, centred on them. A page_opening is the start of
the leaf, sent because the text the Library returned with the row stops before
those words appear: it does not carry the match, so quoting it quotes something
else, and source_url opens the leaf with the query applied. total counts
newspaper leaves, and it pages: it is never a count of how many times the words
occur.
search_items
Searches the catalogue, one kind of thing at a time.
In return: items, each carrying identifier, title, creator, year,
date as published, which is often a range, is_collection and source_url.
The Library keeps one catalogue per kind of thing, so a search without
media_type reads the general one, and total counts the records matching
there.
get_item
Reads one record. The heavier parts are asked for rather than served by default,
and a long description paginates.
In return: the record with its title, creator, year, date, format
and source_url, plus description, subjects, location, language,
part_of for the collections and divisions it sits in, repository naming where
the original is held, call_number and rights. A field the record leaves empty
is null. next_offset continues a long description and is null at the end.
An identifier can carry slashes: a single newspaper issue is named by its paper,
its date and its edition together.
list_collections
Lists the digital collections, bodies of material a curator chose, described and
published together.
In return: collections, each carrying identifier, the slug it is
addressed by; title; collection_filter, the wording search_items takes;
searchable_media_types; description; item_count; subjects; formats for
the kinds of thing it holds; and source_url. total counts the collections the
Library publishes, which is more than the number returned.
What scanned text is worth
The words inside a newspaper page came off the page through optical character
recognition, so an excerpt carries the misreadings of that process. It is served
as it was read rather than corrected. Quote it as scanned text, and link the page
so a reader can look at the leaf itself.
Rights
A record states its own rights in rights, and the Library's terms differ from
one deposit to the next. Read that statement before reusing anything, and repeat
it beside whatever is shown.
Configuration
Every variable is optional. Set them in the env block of your client config.
A value outside its range falls back to the default, and the reason is written to
stderr.
Errors
Every failure carries one of six codes, a message, and where it helps a hint
naming the next move.
As a library
The layer reading the Library is published on its own, with its pacing, its cache
and its errors, and with no protocol attached.
Each read answers { data, cached }, and throws an error carrying one of the six
codes. The floor between two requests holds here as well.
Pacing and attribution
The Library publishes a limit of 20 requests a minute for its API and 10 for the
site as a whole, and the lower of the two governs: requests go out one at a time
with at least six seconds between them, and the floor of three seconds holds
however the server is configured. The User-Agent always ends with the project
identity and an address where a person can be reached.
Every result carries the address of the page it was read from. The Library of
Congress is a public institution, and its records state their own rights.
This MCP server is an unofficial project, with no affiliation to the Library of
Congress.
Privacy
This server collects nothing about you and sends nothing to its author. It runs
on your machine, contacts www.loc.gov and chroniclingamerica.loc.gov and nothing else, holds its answers in memory
while it runs, and writes nothing to disk.
PRIVACY.md states what a request carries and which settings change
any of it.
Development
Tests run against generated fixtures and make no network request. The live suite,
npm run test:live, makes one request per route and runs nightly against the
Library itself.
Contributing
Bugs, questions and ideas belong in
the issue tracker.
Pull requests are welcome; opening an issue first helps agree on the shape of the
change. See CONTRIBUTING.md.
License
MIT, see LICENSE. The records belong to the Library of Congress and to
the depositors it names, under the rights each record states.
mcp-libraryofcongress (français)
English version
La Library of Congress est la bibliothèque nationale des
États-Unis, et elle publie en ligne une large part de ses fonds : livres,
photographies, cartes, enregistrements sonores, manuscrits, et les pages des
journaux américains depuis le dix-huitième siècle. Ces pages de journaux ont été
numérisées puis passées par la reconnaissance optique de caractères, si bien que
les mots qui y sont imprimés sont cherchables. Des conservateurs rassemblent
aussi des documents en collections numériques, chacune décrite et publiée comme
un ensemble à part entière.
Ce serveur relie un client de conversation à cette bibliothèque. On peut chercher
dans les mots imprimés à l'intérieur des journaux, chercher au catalogue par
titre, auteur, sujet, lieu ou langue, lire une notice avec ses conditions de
droits et le lieu où l'original est conservé, et lister les collections
numériques. Aucune clé d'API, aucun compte.
Installation
Installation en un clic
[Install in Cursor]
[Install in VS Code]
Claude Code
Claude Desktop, Cursor, et tout client au format de configuration standard
Node 24 ou plus récent est nécessaire, et aucune variable d'environnement n'est à
renseigner.
Avec Docker
-i garde l'entrée standard ouverte, qui est le canal du protocole, et -t est
omis parce qu'un TTY réécrit le flux. Le conteneur a besoin d'un accès HTTPS
sortant vers www.loc.gov et chroniclingamerica.loc.gov, et de rien d'autre :
aucun volume, aucun port, aucun identifiant.
Bundle, sans npm
Téléchargez mcp-libraryofcongress-3.1.0.mcpb depuis
la dernière publication
et ouvrez-le. Un client qui gère les bundles MCP l'installe seul, sans npm et
sans fichier de configuration à modifier. Le bundle emporte ses dépendances, donc
rien n'est téléchargé à l'installation.
Ce qu'on peut demander
- « Qu'ont écrit les journaux de l'Oklahoma sur le vote d'accession de 1907 ? »
- « Trouve-moi des photographies d'immeubles de rapport à Chicago avant 1920. »
- « Lis cette notice et dis-moi qui conserve l'original. »
- « Quelles collections numériques existent sur la guerre de Sécession ? »
- « Puis-je réutiliser cette photographie ? »
Le chemin ordinaire va d'une recherche à une notice : une ligne porte un
identifier, et get_item la lit.
Les outils
search_newspapers
Cherche dans le texte des pages de journaux numérisées, texte issu de la
reconnaissance optique de caractères.
En retour : hits, chacun portant identifier, que get_item reprend ;
title ; creator, qui est la bibliothèque ayant fourni la numérisation ;
year ; page_number, le feuillet dans le numéro ; published_on ;
publication avec les années de parution du journal ; state ; excerpts ; et
excerpt_kind.
excerpt_kind décide de ce que vaut un extrait. Un passage est le texte
autour des mots trouvés, centré sur eux. Un page_opening est le début du
feuillet, envoyé parce que le texte rendu par la bibliothèque avec la ligne
s'arrête avant que ces mots apparaissent : il ne porte pas la correspondance,
donc le citer cite autre chose, et source_url ouvre le feuillet avec la requête
appliquée. total compte des feuillets de journaux, et il pagine : ce n'est
jamais un compte du nombre de fois où les mots apparaissent.
search_items
Cherche au catalogue, un type de chose à la fois.
En retour : items, chacun portant identifier, title, creator, year,
date tel que publié, souvent un intervalle, is_collection et source_url. La
bibliothèque tient un catalogue par type de chose, donc une recherche sans
media_type lit le catalogue général, et total y compte les notices
correspondantes.
get_item
Lit une notice. Les parties lourdes se demandent au lieu d'être servies par
défaut, et une description longue se pagine.
En retour : la notice avec son title, creator, year, date, format
et source_url, plus description, subjects, location, language,
part_of pour les collections et divisions où elle se range, repository qui
nomme le lieu de conservation de l'original, call_number et rights. Un champ
que la notice laisse vide vaut null. next_offset poursuit une description
longue et vaut null à la fin. Un identifiant peut porter des barres obliques :
un numéro de journal est nommé par son titre, sa date et son édition ensemble.
list_collections
Liste les collections numériques, ensembles de documents qu'un conservateur a
choisis, décrits et publiés ensemble.
En retour : collections, chacune portant identifier, le slug qui
l'adresse ; title ; collection_filter, la formulation que search_items
reprend ; searchable_media_types ; description ; item_count ; subjects ;
formats pour les types de choses qu'elle contient ; et source_url. total
compte les collections que la bibliothèque publie, ce qui dépasse le nombre
rendu.
Ce que vaut un texte numérisé
Les mots contenus dans une page de journal sont issus de la reconnaissance
optique de caractères, donc un extrait porte les erreurs de lecture de ce
procédé. Il est servi tel qu'il a été lu plutôt que corrigé. Citez-le comme un
texte numérisé, et liez la page pour qu'un lecteur puisse regarder le feuillet
lui-même.
Les droits
Une notice énonce ses propres droits dans rights, et les conditions de la
bibliothèque diffèrent d'un dépôt à l'autre. Lisez cette mention avant toute
réutilisation, et redonnez-la à côté de ce qui est montré.
Configuration
Chaque variable est facultative. Elles se posent dans le bloc env de la
configuration du client.
Une valeur hors de sa plage retombe sur le défaut, et la raison est écrite sur la
sortie d'erreur.
Erreurs
Chaque échec porte un des six codes, un message, et quand cela aide une
indication du geste suivant.
Comme bibliothèque
La couche qui lit la bibliothèque est publiée seule, avec son rythme, son cache
et ses erreurs, sans protocole attaché.
Chaque lecture répond { data, cached }, et lève une erreur portant un des six
codes. Le plancher entre deux requêtes tient également ici.
Rythme et attribution
La bibliothèque publie une limite de 20 requêtes par minute pour son API et de 10
pour l'ensemble du site, et c'est la plus basse qui gouverne : les requêtes
partent une à une avec au moins six secondes entre elles, et le plancher de trois
secondes tient quelle que soit la configuration. Le User-Agent se termine
toujours par l'identité du projet et une adresse où joindre une personne.
Chaque résultat porte l'adresse de la page d'où il a été lu. La Library of
Congress est une institution publique, et ses notices énoncent leurs propres
droits.
Ce MCP est un projet non officiel, sans affiliation à la Library of Congress.
Confidentialité
Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur. Il tourne sur
votre machine, ne joint que www.loc.gov et chroniclingamerica.loc.gov, garde ses réponses en mémoire le temps qu'il
tourne, et n'écrit rien sur le disque. PRIVACY.md dit ce qu'une
requête emporte et quels réglages changent cela.
Développement
Les tests s'exécutent sur des fixtures engendrées et n'émettent aucune requête.
La suite en direct, npm run test:live, émet une requête par route et tourne
chaque nuit contre la bibliothèque elle-même.
Contribuer
Les anomalies, les questions et les idées ont leur place dans
le suivi d'incidents.
Les propositions de modification sont bienvenues ; ouvrir un ticket d'abord aide
à s'accorder sur la forme du changement. Voir CONTRIBUTING.md.
Licence
MIT, voir LICENSE. Les notices appartiennent à la Library of Congress
et aux déposants qu'elle nomme, sous les droits que chaque notice énonce.