Skip to main content
Glama

internet-archive-mcp-server

Search Internet Archive Items

ia_search_items
Read-only

Search the Internet Archive library (40M+ items) using the Advanced Search (Solr) API. Filter by media type (texts, audio, movies, software, image, etc.), collection, creator, date range, and language. Sort by downloads (the default), date, title, or random. Supports pagination via page/rows. Returns identifiers, titles, creators (the first 10, with creator_count when a record lists more), media types, dates, download counts, collections (without fav- favorites lists), total_found, and current page/rows for pagination context. Use ia_get_item with a returned identifier to get full metadata and file manifests.

Input Schema

NameRequiredDescriptionDefault
pageNoPage number (1-indexed). Combine with rows for pagination. Advanced Search serves only the first 10,000 results, so page × rows ≤ 10,000 (page 50 at 200 rows, page 200 at 50).
rowsNoNumber of results per page (default 50). One call returns at most 200: on page 1 a larger value (up to 10,000) is served as 200 with a notice naming the next page; on later pages a value above 200 is rejected.
sortNoSort order in Solr format: a sortable field followed by asc or desc, e.g. "downloads desc", "date asc", "publicdate desc", "titleSorter asc", or "random". Default: "downloads desc". Advanced Search has no relevance sort. Except under random, results tied under the sort are ordered by identifier, so consecutive pages neither repeat nor skip an item.
queryYesSolr query string. Supports field prefixes such as title:"war and peace", creator:dickens, subject:history. Plain keywords search all fields. Put a URL in quotes. At most 2,047 characters, a limit the filters below also count toward.
creatorNoFilter by creator name, e.g. "Charles Dickens".
date_toNoInclusive end of date range: YYYY, YYYY-MM, or YYYY-MM-DD. A year or month ends on its last day; blank means no upper bound. Must be a real Gregorian date.
languageNoFilter by language code or name, e.g. "eng" or "English".
date_fromNoInclusive start of date range: YYYY, YYYY-MM, or YYYY-MM-DD. A year or month starts on its first day; blank means no lower bound. Must be a real Gregorian date.
mediatypeNoFilter by media type: texts, movies, audio, software, image, data, web, collection, etree (live concert recordings), or account. Case-insensitive; text, book, and books mean texts, movie, video, and videos mean movies, images means image, and collections means collection. Any other value is rejected.
collectionNoFilter to items within a specific collection identifier, e.g. "gutenberg" or "librivoxaudio".

Output Schema

NameRequiredDescriptionDefault
capNoThe per-call cap applied to rows (200).
pageNoCurrent page number (1-indexed).
rowsNoRows per page applied: the requested rows, or 200 when a larger value was capped.
errorNoPresent when the call failed. Absent on success.
itemsNoItems matching the search query.
shownNoNumber of items returned.
noticeNoGuidance when the page came back empty — nothing matched (naming the mediatype filter applied, if any), or the requested page is past the last page of results — or when rows was capped, naming the rows and page that continue.
truncatedNoTrue when rows above 200 was served at 200 and more results remain.
total_foundNoTotal number of matching items across all pages.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / date_from / description
      Previous value: -"Start of date range filter in YYYY-MM-DD format. Example: \"1900-01-01\"."New value: +"Inclusive start of date range: YYYY, YYYY-MM, or YYYY-MM-DD. A year or month starts on its first day; blank means no lower bound. Must be a real Gregorian date."
    • changedInput schema / properties / date_to / description
      Previous value: -"End of date range filter in YYYY-MM-DD format. Example: \"1999-12-31\"."New value: +"Inclusive end of date range: YYYY, YYYY-MM, or YYYY-MM-DD. A year or month ends on its last day; blank means no upper bound. Must be a real Gregorian date."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_mediatype`: mediatype is not an Internet Archive media type or one of its recognized spellings. `page_limit_exceeded`: page × rows exceeds 10,000, the last result Advanced Search serves. `rows_over_cap`: rows is above 200 on a page after the first. `invalid_query`: Advanced Search rejected the query syntax, an unquoted URL, the query length, or the sort field. `search_unavailable`: Advanced Search failed, rate-limited the request, returned an unreadable response, timed out, or could not be reached (network error). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: date_from or date_to is not a real Gregorian year, month, or date. `invalid_mediatype`: mediatype is not an Internet Archive media type or one of its recognized spellings. `page_limit_exceeded`: page × rows exceeds 10,000, the last result Advanced Search serves. `rows_over_cap`: rows is above 200 on a page after the first. `invalid_query`: Advanced Search rejected the query syntax, an unquoted URL, the query length, or the sort field. `search_unavailable`: Advanced Search failed, rate-limited the request, returned an unreadable response, timed out, or could not be reached (network error). Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_mediatype",
      -  "page_limit_exceeded",
      -  "rows_over_cap",
      -  "invalid_query",
      -  "search_unavailable"
      -]New value: +[
      +  "invalid_date_range",
      +  "invalid_mediatype",
      +  "page_limit_exceeded",
      +  "rows_over_cap",
      +  "invalid_query",
      +  "search_unavailable"
      +]
  2. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description goes further by disclosing real quirks: creators are truncated to the first 10 with creator_count, favorites lists are excluded from collections, and total_found/page/rows are returned for pagination context. The 10,000-result ceiling is left to the schema rather than surfaced here, a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and scale, then filters, sorting, pagination, and return shape in a logical order. Dense but nearly every clause carries information; the return-value inventory is the one part that partly duplicates the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, a full schema, annotations, and an output schema, the description covers everything an agent needs to call correctly: filtering dimensions, sort semantics, pagination model, what comes back, and the natural next tool. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter docs are already detailed (Solr syntax, date formats, mediatype aliases), so the schema carries the weight. The description adds only a high-level restatement of the filter and sort options, which is baseline-appropriate but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the Internet Archive library') plus the underlying API and scale (40M+ items). It also names the sibling it hands off to ('Use ia_get_item with a returned identifier'), so an agent can distinguish search from item retrieval without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the tool as a discovery step whose results feed ia_get_item for full metadata, and names the filter dimensions available. It doesn't state when to prefer it over ia_find_snapshots or ia_get_text, so sibling routing is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.