Reads handwritten family letters in old scripts and translates them, with notes on what they meant.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The page's id, from read_letter, my_letters or get_reading
The question about the letter, in the person's words
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.
| Argument | Type | Description |
|---|---|---|
| page_id* | string | The page's id, from read_letter, my_letters or get_reading |
| question* | string | The question about the letter, in the person's words |
{
"type": "object",
"title": "ask_letterArguments",
"required": [
"page_id",
"question"
],
"properties": {
"page_id": {
"type": "string",
"title": "Page Id",
"description": "The page's id, from read_letter, my_letters or get_reading"
},
"question": {
"type": "string",
"title": "Question",
"maxLength": 500,
"minLength": 1,
"description": "The question about the letter, in the person's words"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| page_id* | string | The page's id, from read_letter or FamilyLore |
{
"type": "object",
"title": "get_readingArguments",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "string",
"title": "Page Id",
"description": "The page's id, from read_letter or FamilyLore"
}
}
}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.
No arguments.
{
"type": "object",
"title": "my_allowanceArguments",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many pages to list, newest first |
{
"type": "object",
"title": "my_lettersArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 8,
"maximum": 50,
"minimum": 1,
"description": "How many pages to list, newest first"
}
}
}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, and Yiddish. 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.
| Argument | Type | Description |
|---|---|---|
| year | any | The year it was written, if the person knows it roughly (1912 for 'about 1912') |
| photo | any | The photo of the page the person attached |
| page_id | any | A page already on FamilyLore that hasn't been read, from FamilyLore's own photo upload |
| language | any | 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. Leave it out and FamilyLore tells. |
| target_language | any | The language to translate it into: en (English), de (German), ru (Russian). English if left out. |
{
"type": "object",
"$defs": {
"OpenAIFile": {
"type": "object",
"title": "OpenAIFile",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"title": "File Id",
"description": "The file's id in the chat"
},
"file_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "File Name",
"default": null
},
"mime_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mime Type",
"default": null
},
"download_url": {
"type": "string",
"title": "Download Url",
"description": "The file's temporary download address"
}
},
"description": "A file the person attached in ChatGPT."
}
},
"title": "read_letterArguments",
"properties": {
"year": {
"anyOf": [
{
"type": "integer",
"maximum": 2100,
"minimum": 1500
},
{
"type": "null"
}
],
"title": "Year",
"default": null,
"description": "The year it was written, if the person knows it roughly (1912 for 'about 1912')"
},
"photo": {
"anyOf": [
{
"$ref": "#/$defs/OpenAIFile"
},
{
"type": "null"
}
],
"default": null,
"description": "The photo of the page the person attached"
},
"page_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Page Id",
"default": null,
"description": "A page already on FamilyLore that hasn't been read, from FamilyLore's own photo upload"
},
"language": {
"anyOf": [
{
"enum": [
"ru_uk",
"de_kurrent",
"yi"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Language",
"default": null,
"description": "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. Leave it out and FamilyLore tells."
},
"target_language": {
"anyOf": [
{
"enum": [
"en",
"de",
"ru"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Target Language",
"default": null,
"description": "The language to translate it into: en (English), de (German), ru (Russian). English if left out."
}
}
}Where a page's reading is, for FamilyLore's card while the page is read.
| Argument | Type | Description |
|---|---|---|
| page_id* | string | The page's id |
{
"type": "object",
"title": "reading_statusArguments",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "string",
"title": "Page Id",
"description": "The page's id"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| year | any | Letters nearest this year first |
| letter | any | A letter's id from this tool's list, such as de-1858-kilian, for that letter's whole reading |
| period | any | 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 | any | The handwriting: German Kurrent, Sütterlin, Russian, Ukrainian, Polish, English, Latin, Swedish, French, Hebrew |
| language | any | The letter's language: German, English, Latin, Russian, Polish, Ukrainian, Swedish, French, Hebrew |
{
"type": "object",
"title": "real_lettersArguments",
"properties": {
"year": {
"anyOf": [
{
"type": "integer",
"maximum": 2100,
"minimum": 1000
},
{
"type": "null"
}
],
"title": "Year",
"default": null,
"description": "Letters nearest this year first"
},
"letter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Letter",
"default": null,
"description": "A letter's id from this tool's list, such as de-1858-kilian, for that letter's whole reading"
},
"period": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Period",
"default": null,
"description": "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": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Script",
"default": null,
"description": "The handwriting: German Kurrent, Sütterlin, Russian, Ukrainian, Polish, English, Latin, Swedish, French, Hebrew"
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Language",
"default": null,
"description": "The letter's language: German, English, Latin, Russian, Polish, Ukrainian, Swedish, French, Hebrew"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| hand | any | The handwriting: Russian cursive, German Kurrent, Sütterlin, Hebrew cursive, American cursive |
| letter | any | The letter: as written (ѣ, G, ך), by name (yat, alef), or as transliterated |
{
"type": "object",
"title": "script_guideArguments",
"properties": {
"hand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Hand",
"default": null,
"description": "The handwriting: Russian cursive, German Kurrent, Sütterlin, Hebrew cursive, American cursive"
},
"letter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Letter",
"default": null,
"description": "The letter: as written (ѣ, G, ך), by name (yat, alef), or as transliterated"
}
}
}A one-time link where the person sends FamilyLore the photo of a page, for FamilyLore's card.
| Argument | Type | Description |
|---|---|---|
| year | any | The year it was written, if known |
| language | any | The letter's language, if known |
| target_language | any | The language to translate it into: en (English), de (German), ru (Russian). English if left out. |
{
"type": "object",
"title": "upload_slotArguments",
"properties": {
"year": {
"anyOf": [
{
"type": "integer",
"maximum": 2100,
"minimum": 1500
},
{
"type": "null"
}
],
"title": "Year",
"default": null,
"description": "The year it was written, if known"
},
"language": {
"anyOf": [
{
"enum": [
"ru_uk",
"de_kurrent",
"yi"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Language",
"default": null,
"description": "The letter's language, if known"
},
"target_language": {
"anyOf": [
{
"enum": [
"en",
"de",
"ru"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Target Language",
"default": null,
"description": "The language to translate it into: en (English), de (German), ru (Russian). English if left out."
}
}
}