# io.github.Embassy-of-the-Free-Mind/source-library (npm · @source-library/mcp-server)

Search 22,000+ rare pre-modern texts with AI English translations, summaries, and 73K+ images.

- Trust score: 67/100 (medium)
- Change this week: +25
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@source-library/mcp-server`: 67/100 (this document), [markdown](https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server.md), [page](https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@source-library/mcp-server`
- Version: `4.3.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 35 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2893 tokens (~263/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add embassy-of-the-free-mind-source-library -- npx -y @source-library/mcp-server
```

### Codex

```bash
codex mcp add embassy-of-the-free-mind-source-library -- npx -y @source-library/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "embassy-of-the-free-mind-source-library": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@source-library/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add embassy-of-the-free-mind-source-library --command npx --arg -y --arg @source-library/mcp-server
```

### Hermes

```yaml
mcp_servers:
  embassy-of-the-free-mind-source-library:
    command: "npx"
    args: ["-y", "@source-library/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "embassy-of-the-free-mind-source-library": {
      "command": "npx",
      "args": [
        "-y",
        "@source-library/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 66, +10)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [functional regression] Maintenance: pass → unverified
- [functional regression] License: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional] Licence: MIT

### 2026-08-01 (score 56, +25)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Dependency health: partial → unverified
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-31 (score 31, +16)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 15, −62)

- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-29 (score 77, +35)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-27 (score 42)

First indexed and scored.

## MCP tools (11)

### `search_library` (~244 tokens)

Full-text search across Source Library's 22,000+ rare historical books. Searches titles, authors, translations, and OCR text. Returns matching books and page snippets with citation URLs. ORIENTATION HINT: when the user has named a specific author or work, call get_book directly (or list_books to find the ID first) — the AI-generated book summary is usually the right first answer and saves repeated passage hunting.

Input parameters:

- `has_doi` (boolean): Only return books with DOIs
- `has_translation` (boolean): Only return books with translations
- `language` (string): Filter by original language (e.g., 'Latin', 'German', 'Greek', 'Sanskrit')
- `limit` (number): Maximum results (default 10, max 100)
- `offset` (number): Pagination offset (default 0)
- `query` (string, required): Search query (searches titles, authors, translations, OCR text)
- `sort` (string): Sort order (default: relevance)
- `year_from` (number): Filter by publication year (start, inclusive)
- `year_to` (number): Filter by publication year (end, inclusive)

### `list_books` (~191 tokens)

Browse the catalog by metadata — filter by author/title fragment, language, category, or translation recency. Returns books with title, author, language, year, page counts, and translation progress. Use this to discover WHAT EXISTS by an author or in a tradition before searching content; for content matches (passages on a topic) use search_translations or search_concept.

Input parameters:

- `category` (string): Filter by category
- `language` (string): Filter by language (e.g., 'Latin', 'German', 'Greek')
- `limit` (number): Maximum results (default 100, max 200)
- `search` (string): Filter by title or author (diacritic-insensitive, e.g., 'bohme' matches 'Böhme')
- `skip` (number): Pagination offset (default 0)
- `sort` (string): Sort order (default: recent-translation)

### `search_translations` (~251 tokens)

Search inside translated page text across the entire library. THE tool for sweeping across many books for evidence on a theme. Unlike search_library (which matches titles/authors), this searches inside the actual text. Returns passage snippets with page numbers, book info, and citation URLs. ORIENTATION HINT: if the user has named a specific author or work, prefer get_book first — every book has an AI-generated summary + chapter outline that is usually the right first read. Use search_translations when looking for evidence across multiple books. (Also available as 'search_passages'.)

Input parameters:

- `book_id` (string): Search within a specific book only
- `language` (string): Filter by book's original language (e.g., 'Latin', 'German', 'Greek')
- `limit` (number): Maximum results (default 20, max 50)
- `query` (string, required): Search query — searches inside page translations and OCR text (e.g., 'divine providence', 'philosopher stone', 'harmony of the spheres')
- `year_from` (number): Filter by publication year (start, inclusive)
- `year_to` (number): Filter by publication year (end, inclusive)

### `search_concept` (~346 tokens)

Conceptual / semantic passage search across the whole library. Use when the modern term won't literally appear in historical texts — e.g. "distributed cognition" maps to passages about active intellect, art of memory, wax tablet metaphors; "social contract" maps to pre-Hobbesian discussions of consent and authority. Ranks passages by cosine similarity on Gemini embeddings, so paraphrases and conceptually adjacent phrasings match even when no keyword overlaps. ORIENTATION HINT: if the user named a specific author or work, prefer get_book first — semantic search is expensive and best reserved for cross-corpus discovery. Prefer search_translations for literal phrases or distinctive single terms; use search_concept when the concept matters more than the wording. Similarity calibration: 0.70+ strong match, 0.55–0.70 worth reading but verify, below 0.55 mostly conceptual drift.

Input parameters:

- `language` (string): Filter by original language (e.g., Latin, German, Greek, Arabic, Chinese, Sanskrit, Hebrew, Persian, Tibetan). Use this filter when you want passages from a specific tradition — unfiltered English qu…
- `limit` (number): Max passages (default 15, max 50)
- `query` (string, required): A concept or natural-language description — full sentences are fine. Unlike search_translations, this does NOT require words that appear in the corpus.
- `year_from` (number): Filter by publication year (start, inclusive)
- `year_to` (number): Filter by publication year (end, inclusive)

### `search_within_book` (~77 tokens)

Search inside a specific book's pages (OCR and translations). Returns matching pages with snippets and citation URLs. Use after finding a book to locate specific passages.

Input parameters:

- `book_id` (string, required): The book ID to search within
- `query` (string, required): Search query — finds matches in both original text (OCR) and English translations

### `get_book` (~112 tokens)

Get a book's AI-generated summary, chapter list, index stats, edition metadata, DOI, page counts, and processing status. THIS IS THE RIGHT FIRST CALL whenever the user has named a specific author or work — the summary is typically a multi-paragraph orientation covering the book's argument, structure, and significance, often answering the question without any further searching. Pair with get_book_text to read selected chapters, or search_within_book to locate passages inside it.

Input parameters:

- `book_id` (string, required): The book ID

### `get_book_text` (~411 tokens)

READ A BOOK — start here. Preferred: use 'chapter' param to read one chapter at a time (includes page markers like [Page 42] for citation). Or use page ranges (from/to) for focused reading. Call get_book first to see the chapter list. TRUNCATION: the response always includes truncated: true/false. When truncated=true, the truncation_note field gives the exact next from/to values to call — this means content was cut short by a page-budget limit, NOT that the book ended. An AI agent MUST NOT infer end-of-book from pages_returned alone; always check truncated first. Budget limits apply to anonymous callers (~50 pages per 24h); sign in at sourcelibrary.org/auth/signin or get an API key at sourcelibrary.org/developers for higher limits.

Input parameters:

- `book_id` (string, required): The book ID
- `chapter` (number): Chapter index (0-based). Returns chapter text with embedded [Page N] markers for citation. Preferred over from/to. If the chapter has multiple parts, returns part 1 — check parts_total in response.
- `content` (string): Which text to return: 'ocr' (original), 'translation' (English), or 'both' (default)
- `format` (string): Response format: 'json' (structured, default) or 'plain' (concatenated text with page markers)
- `from` (number): Start page number (inclusive). Use with to for explicit page ranges. If the response has truncated=true, use the next from/to from truncation_note.
- `include_metadata` (boolean): Include page-level metadata (model, language, page_type, columns)
- `part` (number): Part number (1-based) for large chapters split into multiple parts.
- `to` (number): End page number (inclusive). Recommended chunk size: 50 pages. If the response has truncated=true, use the next from/to from truncation_note.

### `get_quote` (~87 tokens)

Get the exact translated text of a single page for quoting. Returns the full translation, original OCR text, and a formatted citation. ALWAYS use this tool before putting text in quotation marks — copy the exact text from the response. Do not paraphrase or reconstruct from memory.

Input parameters:

- `book_id` (string, required): The book ID or slug
- `page` (number, required): Page number to quote from

### `search_images` (~498 tokens)

Search the visual collection: 50,000+ illustrations extracted from book pages PLUS 23,000+ standalone artworks (paintings, frescoes, prints, sculptures from Met, Rijksmuseum, Wikimedia, NGA). Filter by type, subject, figure, symbol, year, book, or text query. Each result has a `source` field — `gallery` (illustration in a book) or `artwork` (standalone museum work). Use `type=painting` or `type=fresco` to find standalone works; `type=woodcut`, `type=engraving`, `type=emblem` etc. surface mostly book illustrations. The `source` parameter narrows the search: 'all' (default), 'gallery' (illustrations only), or 'artworks' (standalone works only).

Input parameters:

- `book_id` (string): Only return images from a specific book or artwork id
- `figure` (string): Figure depicted (e.g., 'Mercury', 'philosopher', 'king')
- `limit` (number): Maximum results to return (default 20, max 50)
- `min_quality` (number): Minimum gallery quality score 0-1 (default 0.5). Applies to gallery illustrations only.
- `query` (string): Text search across descriptions, subjects, figures, titles, and artists (e.g., 'ouroboros', 'Raphael fresco', 'Botticelli')
- `source` (string): Which collection to search. 'all' (default) returns both illustrations and standalone artworks, interleaved. 'gallery' = book illustrations only. 'artworks' = standalone paintings/prints/sculptures o…
- `subject` (string): Subject filter (e.g., 'alchemy', 'astronomy', 'anatomy')
- `symbol` (string): Symbol depicted (e.g., 'ouroboros', 'caduceus', 'sun')
- `type` (string): Image type. For book illustrations: woodcut, engraving, emblem, diagram, frontispiece, portrait, illustration, map, chart, decorative, musical_score, symbol. For standalone artworks: painting, drawin…
- `year_from` (number): Filter by publication year (start)
- `year_to` (number): Filter by publication year (end)

### `check_duplicate` (~173 tokens)

Check if a book already exists in Source Library before importing. Uses 4-tier matching: source fingerprint, title+author normalization, keyword search, and semantic similarity. Returns confidence level, matches with URLs, and a suggestion (safe to import / review matches / likely duplicate). Use this BEFORE every import to avoid duplicates.

Input parameters:

- `author` (string): Author name (any format: 'First Last', 'Last, First', etc.)
- `ia_id` (string): Internet Archive identifier (optional, for exact fingerprint match)
- `language` (string): Language hint for semantic search (optional)
- `manifest` (string): IIIF manifest URL (optional, for exact fingerprint match)
- `title` (string, required): Book title (original language or English)
- `year` (string): Publication year (optional, for context)

### `submit_feedback` (~108 tokens)

Submit feedback, bug reports, feature requests, or comments to the Source Library team. Messages go directly to the maintainers.

Input parameters:

- `email` (string): Your email for follow-up (optional)
- `message` (string, required): Your feedback, bug report, or feature request (2-5000 characters)
- `name` (string): Your name (optional)
- `page` (string): Related page URL or path (optional, e.g., 'https://sourcelibrary.org/book/...')

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server#diagnostics

## Score history

- 2026-08-03: 67
- 2026-08-02: 66
- 2026-08-01: 56
- 2026-07-31: 31
- 2026-07-30: 15
- 2026-07-29: 77
- 2026-07-28: 42
- 2026-07-27: 42

## Links

- npm package: https://www.npmjs.com/package/@source-library/mcp-server
- Socket report: https://socket.dev/npm/package/@source-library/mcp-server
- Repository: https://github.com/Embassy-of-the-Free-Mind/sourcelibrary-v2
- Changelog RSS feed: https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/embassy-of-the-free-mind-source-library/source-library-mcp-server
