# FamilyLore (remote · familylore.ai)

Reads handwritten family letters in old scripts and translates them, with notes on what they meant.

- Trust score: 77/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- remote · `familylore.ai`: 77/100 (this document), [markdown](https://verifymcp.io/servers/ai-familylore-familylore/familylore.md), [page](https://verifymcp.io/servers/ai-familylore-familylore/familylore)

## Channel facts

- Endpoint: `https://familylore.ai/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.7.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-11-06.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1618 tokens (~101/item across 16 items; 9 tools + 7 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 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.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

## Install

### How do I install the FamilyLore MCP server?

FamilyLore is a hosted endpoint at https://familylore.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http ai-familylore-familylore 'https://familylore.ai/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "ai-familylore-familylore": {
      "url": "https://familylore.ai/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ai-familylore-familylore": {
      "type": "http",
      "url": "https://familylore.ai/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.ai-familylore-familylore]
url = "https://familylore.ai/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-familylore-familylore": {
      "type": "remote",
      "url": "https://familylore.ai/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-familylore-familylore --url 'https://familylore.ai/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ai-familylore-familylore:
    url: "https://familylore.ai/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "ai-familylore-familylore": {
      "Transport": "http",
      "Url": "https://familylore.ai/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-familylore-familylore -t streamable-http -u 'https://familylore.ai/mcp'
```

### Other

```json
{
  "mcpServers": {
    "ai-familylore-familylore": {
      "type": "http",
      "url": "https://familylore.ai/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-11-06 (score 77, 0)

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

### 2026-11-05 (score 77, +1)

- [cosmetic] “read_letter” reworded the description of “target_language”
- [cosmetic] “upload_slot” reworded the description of “target_language”

### 2026-11-03 (score 76, +1)

- [security] Tool “read_letter” rewrote its description, which is the text the model reads
- [cosmetic] “read_letter” reworded the description of “language”

### 2026-11-01 (score 75, +1)

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

### 2026-10-30 (score 74, +1)

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

### 2026-10-29 (score 73, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-28 (score 73)

First indexed and scored.

## MCP tools (9)

### `real_letters` (~312 tokens)

Real letters, 1758–1943

FamilyLore's shelf of 16 real handwritten letters from 1758 to 1943, each with FamilyLore's reading: the transcription in the original script, an English translation, and notes on what the letter meant at the time. Use this when someone wants to see a real historical letter: one written in a given script (such as Kurrent, Sütterlin or old Russian cursive), in a given language, from a period or near a year, or the full reading of one of these letters. Without a letter id it lists the matching letters; with one it returns that letter's reading. Do not use it to read a letter or photo the person has: these are fixed example letters only.

Input parameters:

- `language`: The letter's language: German, English, Latin, Russian, Polish, Ukrainian, Swedish, French, Hebrew
- `letter`: A letter's id from this tool's list, such as de-1858-kilian, for that letter's whole reading
- `period`: I · The age of the quill (1750–1800); II · Emancipations and emigrations (1830–1866); III · The long 19th century ends (1875–1914); IV · Field post (1914–1945)
- `script`: The handwriting: German Kurrent, Sütterlin, Russian, Ukrainian, Polish, English, Latin, Swedish, French, Hebrew
- `year`: Letters nearest this year first

Output parameters:

- `first_year` (integer): The year of the shelf's earliest letter
- `languages` (array): The shelf's languages, for the next question
- `last_year` (integer): The year of the shelf's latest letter
- `letters` (array): The matching letters; with a letter id, that one letter
- `periods` (array): The shelf's periods, for the next question
- `reading`: With a letter id: its whole reading
- `scripts` (array): The shelf's scripts, for the next question
- `shelf_size` (integer)
- `shelf_url` (string)

### `script_guide` (~239 tokens)

Script guide: old handwriting, letter by letter

FamilyLore's guide to the 137 letters of five old handwriting styles: Russian cursive, German Kurrent, Sütterlin, Hebrew cursive, American cursive. For one letter: how it was written (its forms, with images), what to look for, the letters it is mistaken for and how to tell them apart, and printed copybook plates where FamilyLore has them. Use this when someone asks how a letter was written in one of these hands, what an old letter shape is, or why two letters look alike; give the letter as written ("ѣ", "G"), by its name ("yat") or as transliterated, and the hand if known. With only a hand it returns that hand's alphabet. Do not use it to read a letter or photo the person has: it explains the alphabets only.

Input parameters:

- `hand`: The handwriting: Russian cursive, German Kurrent, Sütterlin, Hebrew cursive, American cursive
- `letter`: The letter: as written (ѣ, G, ך), by name (yat, alef), or as transliterated

Output parameters:

- `alphabet` (array): With a hand and no letter: its letters, in order
- `candidates` (array): When the question fits more than one letter: each of them
- `guide_url` (string)
- `hand`: The hand that letter, or the alphabet, is in
- `hands` (array): The five hands, for the next question
- `letter`: The letter asked for, when the question fits one
- `unknown_letter`: The letter asked for, when nothing in the guide fits it (in the hand asked, or in any)

### `read_letter` (~345 tokens)

Read a letter

Read a photo of an old handwritten letter, postcard or document with FamilyLore: the transcription in its own script, a translation and notes on what it meant then. Use it when the person attaches a photo of a handwritten page and asks what it says. It reads pre-1918 Russian and Ukrainian cursive, German Kurrent and Sütterlin, Yiddish, and old English cursive. It needs the person's FamilyLore account and uses one page of the account's allowance. It starts the reading and answers at once with the page id; a reading takes about a minute and a half. If the photo can't be attached here, call it without one: it answers with a one-time link where the person sends the photo to FamilyLore, and the page id to pass to get_reading once they have.

Input parameters:

- `language`: The letter's language, if the person says it or it is plain: ru_uk = Russian or Ukrainian, de_kurrent = German (Kurrent or Sütterlin), yi = Yiddish, en = English (old cursive). Leave it out and Famil…
- `page_id`: A page already on FamilyLore that hasn't been read, from FamilyLore's own photo upload
- `photo`: The photo of the page the person attached
- `target_language`: The language to translate it into: en (English), de (German), ru (Russian), pl (Polish), it (Italian), fr (French), uk (Ukrainian). English if left out.
- `year`: The year it was written, if the person knows it roughly (1912 for 'about 1912')

Output parameters:

- `allowance`: Pages left, as the Account page counts them
- `converted_from_heic` (boolean): The photo was an iPhone HEIC, read as a JPEG
- `link_expires_at`: When upload_link stops working (UTC)
- `page_id` (string): The page's id on FamilyLore
- `page_url` (string): The page on familylore.ai, with the person's other pages
- `status` (string): reading: started (about a minute and a half); read: the page already has its reading; waiting_for_photo: the person sends the photo at upload_link, then FamilyLore reads it
- `upload_link`: waiting_for_photo: where the person sends the photo, once

### `get_reading` (~105 tokens)

A letter's reading

The reading of a page in the person's FamilyLore account: the transcription in its own script with the words FamilyLore was unsure of marked, the translation, notes on what it meant, how sure the reading is, and the page's link. Use it with the page id read_letter answered, to show the reading once it is done or to see whether it is still being read.

Input parameters:

- `page_id` (string, required): The page's id, from read_letter or FamilyLore

Output parameters:

- `confidence`: How sure the reading is, 0 to 1
- `elapsed_s`: While transcribing: seconds since the reading started
- `expected_s`: While transcribing: how long readings in this language usually take, in seconds
- `language`: The letter's language
- `language_code`: Its code, for a card to name it in the host's language
- `notes` (array): What it meant: FamilyLore's notes, every one
- `page_id` (string): The page's id on FamilyLore
- `page_url` (string): The page on familylore.ai
- `read_on`: The date FamilyLore read it
- `right_to_left` (boolean)
- `status` (string): not_started, reading (about a minute and a half), read, failed or cancelled
- `step`: While reading: transcribing the handwriting, translating it, or checking the notes once it is translated
- `sure`
- `sure_steps`: How sure, in steps of 5
- `title`
- `transcription`: As written, in the letter's own script
- `translation`
- `translation_language`
- `translation_language_code`
- `unsure_word_indexes` (array): The words the reading was unsure of, as positions in the transcription's words split on white space
- `unsure_words` (integer): How many words the reading was unsure of

### `reading_status` (~38 tokens)

Reading progress

Where a page's reading is, for FamilyLore's card while the page is read.

Input parameters:

- `page_id` (string, required): The page's id

Output parameters:

- `confidence`: How sure the reading is, 0 to 1
- `elapsed_s`: While transcribing: seconds since the reading started
- `expected_s`: While transcribing: how long readings in this language usually take, in seconds
- `language`: The letter's language
- `language_code`: Its code, for a card to name it in the host's language
- `model_context`: Once read: the reading as text, for the card to give the assistant (ui/update-model-context)
- `notes` (array): What it meant: FamilyLore's notes, every one
- `page_id` (string): The page's id on FamilyLore
- `page_url` (string): The page on familylore.ai
- `read_on`: The date FamilyLore read it
- `right_to_left` (boolean)
- `status` (string): not_started, reading (about a minute and a half), read, failed or cancelled
- `step`: While reading: transcribing the handwriting, translating it, or checking the notes once it is translated
- `sure`
- `sure_steps`: How sure, in steps of 5
- `title`
- `transcription`: As written, in the letter's own script
- `translation`
- `translation_language`
- `translation_language_code`
- `unsure_word_indexes` (array): The words the reading was unsure of, as positions in the transcription's words split on white space
- `unsure_words` (integer): How many words the reading was unsure of

### `my_letters` (~88 tokens)

My letters

The pages in the person's FamilyLore account, newest first: each letter's title, language, the date it was added, whether it has been read, and its page id. Use it when the person asks about letters they have read on FamilyLore; pass a page id to get_reading for that letter's reading.

Input parameters:

- `limit` (integer): How many pages to list, newest first

Output parameters:

- `letters` (array): Newest first
- `library_url` (string): Every page in the account, on familylore.ai
- `more` (boolean): Whether the account may have more pages than are listed here

### `ask_letter` (~141 tokens)

Ask the letter

Ask FamilyLore a question about one page in the person's account: what a phrase meant then, who someone was, what the letter says about something. The answer comes with the letter's lines it rests on, or says that the letter doesn't say. Use it with a page id from read_letter, my_letters or get_reading, once the page has been read. Questions the reading already answers (who is named, what the translation says) need no call.

Input parameters:

- `page_id` (string, required): The page's id, from read_letter, my_letters or get_reading
- `question` (string, required): The question about the letter, in the person's words

Output parameters:

- `allowance`: Pages left, as the Account page counts them
- `answer` (string): FamilyLore's answer, in the language the page is translated into
- `asked_on`: The day FamilyLore answered, Pacific time (yyyy-mm-dd)
- `context`: What it meant then, when FamilyLore adds it
- `letter_says` (boolean): False when the letter doesn't say
- `lines` (array): The letter's lines the answer rests on
- `page_id` (string)
- `page_url` (string): The page on familylore.ai
- `question` (string)

### `my_allowance` (~52 tokens)

My allowance

How many pages the person's FamilyLore account has left to read: today for a free account, this month otherwise, and when more come. Reading a page in the chat uses the same allowance as on the site.

Output parameters:

- `allowance`: None when the account's pages aren't counted

### `upload_slot` (~104 tokens)

Send a photo

A one-time link where the person sends FamilyLore the photo of a page, for FamilyLore's card.

Input parameters:

- `language`: The letter's language, if known
- `target_language`: The language to translate it into: en (English), de (German), ru (Russian), pl (Polish), it (Italian), fr (French), uk (Ukrainian). English if left out.
- `year`: The year it was written, if known

Output parameters:

- `expires_at` (string): When the link stops working (UTC)
- `link` (string): Where the person sends the photo: once, before expires_at
- `page_id` (string): The page the photo becomes; get_reading shows its reading

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/ai-familylore-familylore/familylore#diagnostics

## Score history

- 2026-11-06: 77
- 2026-11-05: 77
- 2026-11-04: 76
- 2026-11-03: 76
- 2026-11-02: 75
- 2026-11-01: 75
- 2026-10-31: 74
- 2026-10-30: 74
- 2026-10-29: 73
- 2026-10-28: 73

## Common questions

### What is the FamilyLore MCP server?

FamilyLore is an MCP server listed in the public MCP registry as ai.familylore/familylore. Reads handwritten family letters in old scripts and translates them, with notes on what they meant. This page covers its hosted endpoint (https://familylore.ai/mcp).

### Is the FamilyLore MCP server safe to use?

FamilyLore scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the FamilyLore MCP server expose?

FamilyLore exposes 9 tools: real_letters, script_guide, read_letter, get_reading, reading_status, and 4 more. Their descriptions and schemas cost roughly 1,424 tokens of context every time the server is loaded.

### Does the FamilyLore MCP server require authentication?

No. We connected to FamilyLore without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the FamilyLore MCP server still maintained?

FamilyLore is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the FamilyLore MCP server?

VerifyMCP ran 14 checks on FamilyLore, covering TLS certificate, Authorization, HTTPS, HSTS header and 10 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://familylore.ai/mcp
- Website: https://familylore.ai/
- Changelog RSS feed: https://verifymcp.io/servers/ai-familylore-familylore/familylore.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-familylore-familylore/familylore/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/ai-familylore-familylore/familylore.json
- HTML version of this page: https://verifymcp.io/servers/ai-familylore-familylore/familylore
