mcp-libraryofcongress 2.1.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.0
4
+
5
+ - **This server now needs node 24 or later.** Node 20 reached its end of
6
+ support on 2026-04-30 and node 22 is no longer what this code is built and
7
+ typed against. That is what makes this a major version: an install on an
8
+ older node is refused rather than left to fail somewhere later.
9
+ - **Every refusal of an argument opens with `invalid_input`.** A value outside
10
+ its bounds, of the wrong type, or outside the set an argument reads used to
11
+ come back in the validator's own words, with no code to branch on.
12
+ - **A container image is published for each version**, on ghcr, for amd64 and
13
+ arm64. The readme carries the configuration that runs it.
14
+ - The published package carries its changelog, and the entry point it declares
15
+ for the package root now publishes its types.
16
+
17
+ ## 2.1.2
18
+
19
+ - A search the Library could not run is reported as a failure instead of as an
20
+ empty catalogue. Under load the site answers with a rendered page holding no
21
+ rows and a pagination block counting zero results, written in exactly the
22
+ words a search that genuinely matched nothing is written in: the collections
23
+ listing, which holds 584 collections and takes no query at all, came back as
24
+ `of: 0` beside an empty `results`, and the server published that as the
25
+ Library having gathered no collection. What separates the two is what the site
26
+ says about keeping the answer. A search it stands behind may be kept for a
27
+ day; the page it renders while its search is failing carries `no-cache` and a
28
+ lifetime of zero. A count of zero read off such a page is now `rate_limited`,
29
+ which says the site could not answer and says nothing about what the Library
30
+ holds. The catalogue, newspaper and collections searches all read their count
31
+ from that block, so all three are covered. A search that really matches
32
+ nothing still answers with a count of zero.
33
+ - The nightly live canary tells a contract that moved apart from a site that
34
+ could not answer. A route that came back rate limited, unreachable or out of
35
+ time leaves that case out of the run and names it on stderr, so only an answer
36
+ this server could not read fails the canary and opens an issue. Each assertion
37
+ states the field or the behaviour it holds the site to.
38
+
3
39
  ## 2.1.1
4
40
 
5
41
  - The README carries the same badge row as every server here: npm, CI, the
package/README.md CHANGED
@@ -5,8 +5,10 @@
5
5
  [![license](https://img.shields.io/npm/l/mcp-libraryofcongress.svg)](./LICENSE)
6
6
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-6E56CF)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.smeet666/mcp-libraryofcongress)
7
7
  [![Glama](https://glama.ai/mcp/servers/smeet666/mcp-libraryofcongress/badges/score.svg)](https://glama.ai/mcp/servers/smeet666/mcp-libraryofcongress)
8
+ [![M8ven](https://m8ven.ai/badge/mcp/smeet666-mcp-libraryofcongress-1rr3lc?variant=verified)](https://m8ven.ai/mcp/smeet666-mcp-libraryofcongress-1rr3lc)
8
9
  [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=libraryofcongress&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1saWJyYXJ5b2Zjb25ncmVzcyJdfQ%3D%3D)
9
10
  [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=libraryofcongress&config=%7B%22name%22%3A%22libraryofcongress%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-libraryofcongress%22%5D%7D)
11
+ <!-- m8ven-verify: 69c0541bf1d6a6e94b450b4d2b058659 -->
10
12
 
11
13
  An MCP server for the [Library of Congress](https://www.loc.gov). **Search the
12
14
  text scanned off digitised American newspaper pages**, search the catalogue by
@@ -41,7 +43,24 @@ claude mcp add libraryofcongress -- npx -y mcp-libraryofcongress
41
43
  }
42
44
  ```
43
45
 
44
- Node 20 or later.
46
+ ### With Docker
47
+
48
+ ```json
49
+ {
50
+ "mcpServers": {
51
+ "libraryofcongress": {
52
+ "command": "docker",
53
+ "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-libraryofcongress:3.0.0"]
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ `-i` keeps stdin open, which is where the protocol travels, and no `-t` is
60
+ passed: a TTY rewrites the stream and breaks it. The container needs outbound
61
+ HTTPS to `www.loc.gov` and `lccn.loc.gov`, and nothing else: no volume, no port, no environment variable, no credential.
62
+
63
+ Node 24 or later.
45
64
 
46
65
  **Bundle, without npm**
47
66
 
@@ -299,8 +318,11 @@ console.log(data.paging.resultCount, data.hits[0]?.sourceUrl);
299
318
  ## Troubleshooting
300
319
 
301
320
  **`rate_limited`.** The site asked this client to slow down, or this server was
302
- asked for more than its pacing allows. It says nothing about whether the Library
303
- holds what you asked for. Wait and ask again.
321
+ asked for more than its pacing allows. It also covers a search the site could
322
+ not run: it answers then with a page holding no rows and refuses to have that
323
+ page kept, and a count of nothing read off it would say the Library holds
324
+ nothing. It says nothing about whether the Library holds what you asked for.
325
+ Wait and ask again.
304
326
 
305
327
  **`parse_failure`.** A response arrived in a shape this server cannot read,
306
328
  which includes a long answer cut off in transit. It usually means a route
@@ -391,7 +413,25 @@ claude mcp add libraryofcongress -- npx -y mcp-libraryofcongress
391
413
  }
392
414
  ```
393
415
 
394
- Node 20 ou plus récent.
416
+ ### Avec Docker
417
+
418
+ ```json
419
+ {
420
+ "mcpServers": {
421
+ "libraryofcongress": {
422
+ "command": "docker",
423
+ "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-libraryofcongress:3.0.0"]
424
+ }
425
+ }
426
+ }
427
+ ```
428
+
429
+ `-i` garde l'entrée standard ouverte, qui est le canal du protocole, et aucun
430
+ `-t` n'est passé : un terminal réécrit le flux et le casse. Le conteneur a besoin
431
+ d'un accès HTTPS sortant vers `www.loc.gov` et `lccn.loc.gov`, et de rien d'autre :
432
+ aucun volume, aucun port, aucune variable d'environnement, aucun identifiant.
433
+
434
+ Node 24 ou plus récent.
395
435
 
396
436
  **Bundle, sans npm**
397
437
 
@@ -659,7 +699,10 @@ console.log(data.paging.resultCount, data.hits[0]?.sourceUrl);
659
699
  ## Dépannage
660
700
 
661
701
  **`rate_limited`.** Le site demande à ce client de ralentir, ou ce serveur a été
662
- sollicité au-delà de sa cadence. Cela ne dit rien de ce que la Library conserve.
702
+ sollicité au-delà de sa cadence. Ce code couvre aussi une recherche que le site
703
+ n'a pas pu exécuter : il répond alors par une page sans aucune ligne et refuse
704
+ qu'elle soit conservée, et un compte de zéro lu sur cette page affirmerait que
705
+ la Library ne conserve rien. Cela ne dit rien de ce que la Library conserve.
663
706
  Attendez et redemandez.
664
707
 
665
708
  **`parse_failure`.** Une réponse est arrivée dans une forme illisible pour ce