io.github.smeet666/mcp-archiveorg
NPM · MCP-ARCHIVEORG · 2 COMPONENTS · SCANNED AUG 12
Search inside digitised books, browse the Internet Archive catalogue and read Wayback captures.
Available components
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. How we score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to smeet666/mcp-archiveorg). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 2 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability60
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2441 tokens (~406/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 86% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · mcp-archiveorg
claude mcp add smeet666-mcp-archiveorg -- npx -y mcp-archiveorg
codex mcp add smeet666-mcp-archiveorg -- npx -y mcp-archiveorg
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"smeet666-mcp-archiveorg": {
"type": "local",
"command": [
"npx",
"-y",
"mcp-archiveorg"
],
"enabled": true
}
}
} openclaw mcp add smeet666-mcp-archiveorg --command npx --arg -y --arg mcp-archiveorg
mcp_servers:
smeet666-mcp-archiveorg:
command: "npx"
args: ["-y", "mcp-archiveorg"] {
"mcpServers": {
"smeet666-mcp-archiveorg": {
"command": "npx",
"args": [
"-y",
"mcp-archiveorg"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 11 Aug 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 9 Aug 26 +1
- Schema quality: 369 → 406 ▼ functional
- Package version: 1.4.0 → 1.5.0 functional
- 8 Aug 26 +1
- Package version: 1.3.0 → 1.4.0 functional
- Package version: 1.2.0 → 1.3.0 functional
- 7 Aug 26 +5
- Known CVEs: partial → pass ▲ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Security disclosure: fail → unverified ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Security disclosure: fail → pass ▲ functional
- Dependency health: partial → 0.85 functional
- Package version: 1.2.0 → 1.3.0 functional
- 6 Aug 26 +26
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- MCP protocol: unverified → pass ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Schema quality: excellent functional
- First check of Schema quality: fail functional
- First check of Tool coverage: 86 functional
- First check of Schema quality: fail functional
- First check of Tool coverage: 100 functional
- 5 Aug 26 45
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 12 Aug 2026 · Analysed npm/mcp-archiveorg@1.5.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | smeet666/mcp-archiveorg |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/smeet666/mcp-archiveorg/.github/workflows/publish.yml@refs/tags/v1.5.0 |
| Rekor log index | 2397760897 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:e3c76ea193df4c9cc779e0fdd6ced8d062cfe8f4ae8946b1d9916fb61360972a731cafe5879ffbd345df8243d266045e3f8a9ec03e6623f75220e7730 |
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
get_item Read an item ~237
Read one Internet Archive item by its identifier, as returned by search_items or search_inside. Sections are opt-in: 'basic' is the default and covers what a description needs. 'files' lists the downloadable files, which on a scanned film or book run to dozens of derivatives, so filter by format when a particular one is wanted. 'full_metadata' returns every field the Archive publishes for the item, which is large and rarely needed. 'file_count' and 'total_bytes' are always reported, whether or not the file list was asked for.
| Name | Type | Req | Description |
|---|---|---|---|
| file_format | string | – | Keep only files of this format, such as 'PDF' or 'MP3'. Matched case-insensitively. |
| identifier | string | yes | Archive identifier, such as 'nasa'. It is the last part of an item's address rather than the address itself, and it is matched exactly, capitals included. |
| max_description_chars | integer | – | – |
| max_files | integer | – | Ceiling on files returned. |
| sections | array | – | Which parts to return. Each one beyond 'basic' adds to the size of the answer. |
| Name | Type | Req | Description |
|---|---|---|---|
| collections | array | yes | Collections the item sits in. |
| date | – | yes | – |
| description | – | yes | – |
| file_count | integer | yes | Files the item holds, whatever this answer returned. |
| files | array | – | – |
| full_metadata | object | – | – |
| item | object | yes | – |
| language | – | yes | – |
| license_url | – | yes | Terms the uploader attached, when they attached any. |
| notes | array | yes | – |
| publisher | – | yes | – |
| total_bytes | – | yes | – |
No examples provided.
get_snapshot Read a page as it was ~180
Find the Wayback Machine capture of a web page closest to a given date. Give 'at' to ask for a moment in time; leave it out for the most recent capture. The answer always states 'days_from_requested', because the closest capture can be years away from the date asked for: read it before describing what the page said on that date. It also states the address the capture is of, which the Wayback Machine can resolve to a neighbouring form of the one asked about. This finds the capture and links to it. It does not return the page's contents.
| Name | Type | Req | Description |
|---|---|---|---|
| at | string | – | Date to aim for, as YYYY-MM-DD or a full ISO 8601 timestamp. Omit for the newest capture. |
| url | string | yes | Address to look up, such as 'lemonde.fr' or a full URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| notes | array | yes | – |
| requested_at | – | yes | – |
| requested_url | string | yes | – |
| snapshot | object | yes | – |
No examples provided.
list_snapshots List captures of a page ~279
List Wayback Machine captures of a web page, oldest first, with the dates they were taken. Answers how long a page has been archived and how often, which get_snapshot cannot. A capture whose content repeats the row before it is left out of the index answer. The index also holds one site under several addresses at once, such as its www form, its https form and a form carrying credentials, and returns them interleaved, so two consecutive rows can differ because the address differs rather than because the page did. Every row names the address it captured; read that before counting the captures of any one of them. A capture records when the crawler came, not when the page changed: the change happened somewhere between two dates. This route is slow, tens of seconds on a heavily archived address, and it is paged for that reason. To walk further back, pass the 'next_cursor' from the previous answer as 'cursor'. The index counts rows rather than positions, so there is no page number and no arithmetic to do: a null 'next_cursor' means the end of what it holds.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | The 'next_cursor' from a previous answer. Omit to start at the oldest capture. |
| limit | integer | – | Captures to return. |
| url | string | yes | Address to look up. |
| Name | Type | Req | Description |
|---|---|---|---|
| first | – | yes | Earliest capture in this answer, not in the whole history. |
| last | – | yes | Latest capture in this answer, not in the whole history. |
| next_cursor | – | yes | Pass back as 'cursor' to read the window after this one. Null at the end of the history. |
| notes | array | yes | – |
| returned | integer | yes | Captures in this answer. |
| snapshots | array | yes | – |
| url | string | yes | – |
No examples provided.
search_books Search works and editions ~646
Find a book on Open Library, the Internet Archive's catalogue of works, either by name or by description. Pass 'query' when you know what you are looking for: a title, an author. Free text matches parts of words and reads titles and authors together, so a name also finds works by authors whose name merely contains it: read 'authors' on each row before treating a result as that author's work. Pass the criteria instead when you do not, and they combine: 'subject' for what a work is catalogued under, 'place' for where it is set, 'time' for the period it treats, 'person' for who it is about, plus ranges on the year of first publication and on the page count. 'sort' by rating or by readers answers 'what is worth reading', which relevance alone does not. 'first_published_year' is the year Open Library derives from its edition records, and a reissue or a mistyped edition can put it centuries from the real date; 'newest' and 'oldest' rank on that field, so the rows carrying the doubtful years lead the order. Answers who wrote a book, when it first appeared and how many editions exist, which the item catalogue describes poorly because it holds one upload at a time. 'archive_identifiers' lists up to 3 scans of the work: pass one to get_item, or use it to read the book itself. 'scan_count' says how many the work has. A scan is one edition, and a work first printed centuries ago is often held only as a later reissue or a translation, so read the scan's own record before dating what it holds. Use this to identify a work, and search_inside to find a phrase within one.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Three-letter code of the language, such as 'eng' or 'fre'. |
| limit | integer | – | – |
| page | integer | – | – |
| pages_max | integer | – | Longest acceptable work. The count is a median across editions. |
| pages_min | integer | – | Shortest acceptable work. |
| person | string | – | Who the work is about, such as 'Napoleon'. |
| place | string | – | Where the work is set, such as 'Shanghai'. |
| query | string | – | Title or author, as free text. Optional when a criterion below is given. |
| sort | string | – | 'rating' is how readers scored it, 'readers' is how many recorded reading it, and both answer a question relevance cannot. 'newest' and 'oldest' rank on 'first_published_year', which the index takes… |
| subject | string | – | What the work is catalogued under, such as 'grief' or 'spy stories'. Also carries prizes and lists, such as 'Booker Prize'. |
| time | string | – | The period the work treats, such as '20th century'. |
| year_from | integer | – | Earliest first publication. |
| year_to | integer | – | Latest first publication. |
| Name | Type | Req | Description |
|---|---|---|---|
| books | array | yes | – |
| notes | array | yes | – |
| page | integer | yes | – |
| query | – | yes | The free text the caller sent, as it was sent. Null when the search was made of criteria alone. |
| searched_for | string | yes | What this answer answers, in words: the free text and every criterion applied. |
| total | integer | yes | Works matching, not the number returned. |
No examples provided.
search_inside Search inside scanned pages ~406
Search the text inside digitised books, newspapers and documents on the Internet Archive. 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. Put a phrase in double quotes to hold the words together in that order. The index folds accents, case and punctuation before it matches, so the letters are not held: a quoted "bûcher" comes back on pages printing Bücher and Bucher. Read an excerpt before repeating a quoted query as the spelling a page carries. Without quotes the words are matched separately, which finds far more. 'total' counts the documents 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 phrase occurs. The index reports no page number, so a match names the item and the passage, never a leaf. Follow source_url and search the item to find where the passage sits. When 'inside_container' is true the passage came from a document bundled inside the item, and the title, creator and year describe the container rather than the text that matched: read 'matched_file' for what actually holds it. Use search_items or search_books instead when looking for a work by its title, author or subject.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Matches to return. |
| 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. The index finds several in a long work, and the later ones rarely say anything the first did not. |
| page | integer | – | Which page of matches, from 1. Paging stops at 100. |
| query | string | yes | Words or a quoted phrase, such as '"call me ishmael"'. |
| Name | Type | Req | Description |
|---|---|---|---|
| hits | array | yes | – |
| notes | array | yes | – |
| page | integer | yes | – |
| query | string | yes | – |
| total | integer | yes | Documents that match, not the number returned and not a count of occurrences. Raise 'page' to read further into it. |
No examples provided.
search_items Search the catalogue ~374
Search the Internet Archive catalogue: films, books, recordings, images, software and datasets. This matches titles, creators and descriptions, so a compilation whose notes mention a name ranks alongside that person's own work: read 'creator' on each row before treating a result as theirs. It does not read the contents of a scan; use search_inside for a phrase within a book. Set 'media_type' whenever the kind of thing is known, because one title exists across several media and mixing them makes a result list unreadable. 'oldest', 'newest', 'year_from' and 'year_to' all read one field: the date a depositor typed into the record. An item with no date carries a placeholder the index sorts as a real one, a date written as a fragment is filed at the year that fragment reads as, and the field holds no era, so a Babylonian tablet of 1712 BCE answers a search of 1700 to 1750. Read an order or a range as a statement about that field. Every row carries an 'identifier', which get_item takes.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| media_type | string | – | Narrow to one kind of thing. Strongly recommended. |
| page | integer | – | – |
| query | string | yes | Words to look for in titles, creators and descriptions. |
| sort | string | – | 'downloads' surfaces what people actually read, which relevance alone often buries. 'oldest' and 'newest' rank on a declared date, not on when a thing was made. |
| year_from | integer | – | Earliest year, inclusive, on the record's declared date, which carries no era. |
| year_to | integer | – | Latest year, inclusive, on the record's declared date, which carries no era. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| notes | array | yes | – |
| page | integer | yes | – |
| query | string | yes | – |
| total | integer | yes | Items matching across the catalogue, not the number returned. |
No examples provided.