Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

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.

+34 this week 79 Trust /100
Trust breakdown (6 categories)

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
Install

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

# add to Claude Code
claude mcp add smeet666-mcp-archiveorg -- npx -y mcp-archiveorg
# add to Codex CLI
codex mcp add smeet666-mcp-archiveorg -- npx -y mcp-archiveorg
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "smeet666-mcp-archiveorg": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-archiveorg"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add smeet666-mcp-archiveorg --command npx --arg -y --arg mcp-archiveorg
# ~/.hermes/config.yaml
mcp_servers:
  smeet666-mcp-archiveorg:
    command: "npx"
    args: ["-y", "mcp-archiveorg"]
// mcp.json
{
  "mcpServers": {
    "smeet666-mcp-archiveorg": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-archiveorg"
      ]
    }
  }
}
Changelog

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.

Diagnostics

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
MCP tools · 6 exposed · ~2,122 tokens

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.

Tool Tokens
get_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.

NameTypeReqDescription
file_formatstringKeep only files of this format, such as 'PDF' or 'MP3'. Matched case-insensitively.
identifierstringyesArchive 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_charsinteger
max_filesintegerCeiling on files returned.
sectionsarrayWhich parts to return. Each one beyond 'basic' adds to the size of the answer.
NameTypeReqDescription
collectionsarrayyesCollections the item sits in.
dateyes
descriptionyes
file_countintegeryesFiles the item holds, whatever this answer returned.
filesarray
full_metadataobject
itemobjectyes
languageyes
license_urlyesTerms the uploader attached, when they attached any.
notesarrayyes
publisheryes
total_bytesyes

No examples provided.

get_snapshot ~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.

NameTypeReqDescription
atstringDate to aim for, as YYYY-MM-DD or a full ISO 8601 timestamp. Omit for the newest capture.
urlstringyesAddress to look up, such as 'lemonde.fr' or a full URL.
NameTypeReqDescription
notesarrayyes
requested_atyes
requested_urlstringyes
snapshotobjectyes

No examples provided.

list_snapshots ~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.

NameTypeReqDescription
cursorstringThe 'next_cursor' from a previous answer. Omit to start at the oldest capture.
limitintegerCaptures to return.
urlstringyesAddress to look up.
NameTypeReqDescription
firstyesEarliest capture in this answer, not in the whole history.
lastyesLatest capture in this answer, not in the whole history.
next_cursoryesPass back as 'cursor' to read the window after this one. Null at the end of the history.
notesarrayyes
returnedintegeryesCaptures in this answer.
snapshotsarrayyes
urlstringyes

No examples provided.

search_books ~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.

NameTypeReqDescription
languagestringThree-letter code of the language, such as 'eng' or 'fre'.
limitinteger
pageinteger
pages_maxintegerLongest acceptable work. The count is a median across editions.
pages_minintegerShortest acceptable work.
personstringWho the work is about, such as 'Napoleon'.
placestringWhere the work is set, such as 'Shanghai'.
querystringTitle or author, as free text. Optional when a criterion below is given.
sortstring'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…
subjectstringWhat the work is catalogued under, such as 'grief' or 'spy stories'. Also carries prizes and lists, such as 'Booker Prize'.
timestringThe period the work treats, such as '20th century'.
year_fromintegerEarliest first publication.
year_tointegerLatest first publication.
NameTypeReqDescription
booksarrayyes
notesarrayyes
pageintegeryes
queryyesThe free text the caller sent, as it was sent. Null when the search was made of criteria alone.
searched_forstringyesWhat this answer answers, in words: the free text and every criterion applied.
totalintegeryesWorks matching, not the number returned.

No examples provided.

search_inside ~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.

NameTypeReqDescription
limitintegerMatches to return.
max_excerpt_charsintegerBudget 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_matchintegerPassages to keep per match. The index finds several in a long work, and the later ones rarely say anything the first did not.
pageintegerWhich page of matches, from 1. Paging stops at 100.
querystringyesWords or a quoted phrase, such as '"call me ishmael"'.
NameTypeReqDescription
hitsarrayyes
notesarrayyes
pageintegeryes
querystringyes
totalintegeryesDocuments that match, not the number returned and not a count of occurrences. Raise 'page' to read further into it.

No examples provided.

search_items ~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.

NameTypeReqDescription
limitinteger
media_typestringNarrow to one kind of thing. Strongly recommended.
pageinteger
querystringyesWords to look for in titles, creators and descriptions.
sortstring'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_fromintegerEarliest year, inclusive, on the record's declared date, which carries no era.
year_tointegerLatest year, inclusive, on the record's declared date, which carries no era.
NameTypeReqDescription
itemsarrayyes
notesarrayyes
pageintegeryes
querystringyes
totalintegeryesItems matching across the catalogue, not the number returned.

No examples provided.