FamilyLore
REMOTE · FAMILYLORE.AI
Reads handwritten family letters in old scripts and translates them, with notes on what they meant.
Available components
Last scanned (15 hours ago)
Scores higher than 68% of remote servers
Reachable. Last reached 6 Nov 2026.
Category Documents and Files
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. How we score → Why this is hard to score →
Endpoint Security74
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- 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. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability85
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 1618 tokens (~101/item across 16 items; 9 tools + 7 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
- Supports UI / widget rendering.Pass
Checks we ran (14)
- TLS certificate
- Authorization
- HTTPS
- HSTS header
- DNSSEC
- Transport
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
- Capabilities
Does not apply to this hosted endpoint (2)
- Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
- Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
The score does not measure everything. What the score does not measure →
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.
- 6 Nov 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 5 Nov 26 +1
- “read_letter” reworded the description of “target_language” cosmetic
- “upload_slot” reworded the description of “target_language” cosmetic
2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 3 Nov 26 +1
- Tool “read_letter” rewrote its description, which is the text the model reads security
- “read_letter” reworded the description of “language” cosmetic
- 1 Nov 26 +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.
- 30 Oct 26 +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.
- 29 Oct 26 0
- Stability: unverified → 0.03 ▲ functional
- 28 Oct 26 73
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 6 Nov 2026 · Probed https://familylore.ai/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=familylore.ai | CN=YE2,O=Let's Encrypt,C=US | 3 Nov 2026 | 1 Feb 2027 | ECDSA 256 | ECDSA-SHA384 | 515331049f7effff77ab0ab9dd890604024 |
| SANs: *.familylore.ai, familylore.ai | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of familylore.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | Trust anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | DS published | 1814, 3799 | 8, 8 | Verified |
| familylore.ai. | No DS | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://familylore.ai/mcp | Verified | 200 | |
| http (plaintext) | http://familylore.ai/mcp | HTTPS enforced | 301 | https://familylore.ai/mcp |
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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ask_letter Ask the letter ~141
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.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | yes | The page's id, from read_letter, my_letters or get_reading |
| question | string | yes | The question about the letter, in the person's words |
| Name | Type | Req | Description |
|---|---|---|---|
| allowance | – | – | Pages left, as the Account page counts them |
| answer | string | yes | 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 | yes | False when the letter doesn't say |
| lines | array | – | The letter's lines the answer rests on |
| page_id | string | yes | – |
| page_url | string | yes | The page on familylore.ai |
| question | string | yes | – |
No examples provided.
get_reading A letter's reading ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | yes | The page's id, from read_letter or FamilyLore |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | The page's id on FamilyLore |
| page_url | string | yes | The page on familylore.ai |
| read_on | – | – | The date FamilyLore read it |
| right_to_left | boolean | – | – |
| status | string | yes | 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 |
No examples provided.
my_allowance My allowance ~52
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| allowance | – | – | None when the account's pages aren't counted |
No examples provided.
my_letters My letters ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many pages to list, newest first |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
No examples provided.
read_letter Read a letter ~345
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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') |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | The page's id on FamilyLore |
| page_url | string | yes | The page on familylore.ai, with the person's other pages |
| status | string | yes | 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 |
No examples provided.
reading_status Reading progress ~38
Where a page's reading is, for FamilyLore's card while the page is read.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | yes | The page's id |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | The page's id on FamilyLore |
| page_url | string | yes | The page on familylore.ai |
| read_on | – | – | The date FamilyLore read it |
| right_to_left | boolean | – | – |
| status | string | yes | 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 |
No examples provided.
real_letters Real letters, 1758–1943 ~312
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| first_year | integer | yes | The year of the shelf's earliest letter |
| languages | array | yes | The shelf's languages, for the next question |
| last_year | integer | yes | The year of the shelf's latest letter |
| letters | array | yes | The matching letters; with a letter id, that one letter |
| periods | array | yes | The shelf's periods, for the next question |
| reading | – | – | With a letter id: its whole reading |
| scripts | array | yes | The shelf's scripts, for the next question |
| shelf_size | integer | yes | – |
| shelf_url | string | yes | – |
No examples provided.
script_guide Script guide: old handwriting, letter by letter ~239
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| alphabet | array | yes | With a hand and no letter: its letters, in order |
| candidates | array | yes | When the question fits more than one letter: each of them |
| guide_url | string | yes | – |
| hand | – | – | The hand that letter, or the alphabet, is in |
| hands | array | yes | 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) |
No examples provided.
upload_slot Send a photo ~104
A one-time link where the person sends FamilyLore the photo of a page, for FamilyLore's card.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| expires_at | string | yes | When the link stops working (UTC) |
| link | string | yes | Where the person sends the photo: once, before expires_at |
| page_id | string | yes | The page the photo becomes; get_reading shows its reading |
No examples provided.
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.
remote · familylore.ai
claude mcp add --transport http ai-familylore-familylore 'https://familylore.ai/mcp'
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.