Eldertongue

io.github.gowinder由 GitHub 帳號 gowinder 發布v1.0.0更新於 Nov 5, 2026

Old English dictionary over MCP: headwords, inflection tables, form ID, Beowulf citations.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取知識與記憶

概覽

AI 產生的概覽

唯讀的古英語辭典 MCP 服務:查詢詞條、輸出變格變化表、辨識屈折形式、由現代英語反查古英語,並找出《貝武夫》出處。

可以做什麼
  • 查詢古英語詞條,回傳義項、國際音標、音節、詞性、性別、變格或動詞類別與詞源
  • 輸出詞條完整的變格或動詞變化表,每個詞形都附錨點連結
  • 辨識任意屈折形式,列出可能的詞條及各自的語法解讀
  • 將現代英語單字對應到依分數排序的古英語候選詞,附釋義
  • 找出某詞條在《貝武夫》中出現的每一行,含行號、詩句原文與拼寫
適用情境
適合需要結構化、可引用的古英語資料時使用:為歷史文本加註或翻譯、核對詞形變化表、判斷某個屈折形式屬於哪個詞條,或引用某詞在《貝武夫》中的出處。若只是手動查一則釋義,直接開網站更快。
執行需求
遠端 Streamable HTTP 端點,不需在本機安裝任何東西。不需要 API 金鑰、權杖或帳號。需要能連上該託管服務的網路,用戶端須支援以 HTTP 連線的遠端 MCP 伺服器。
安裝前請注意
服務為唯讀,沒有寫入、上傳或帳號介面,請求也不會按使用者記錄。服務設有速率限制,批次或高頻用戶端應預期排隊,並在收到 429 時退避重試。辭典資料採 CC BY-SA 4.0 授權,引用結果時應附上回傳的頁面連結。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Eldertongue,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.gowinder%2Feldertongue/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "eldertongue": {
      "type": "http",
      "url": "https://eldertongue.com/mcp"
    }
  }
}

README

eldertongue — Old English dictionary MCP server

A remote Model Context Protocol server that gives LLM agents and editors read-only access to eldertongue.com, an Old English (Anglo-Saxon) dictionary built from Wiktionary data.

The dictionary covers roughly 14,000 headword pages, plus reverse Modern English → Old English lookup and a full Bēowulf verse index. This repository holds the public-facing documentation, client configuration samples, and an agent skill for the hosted MCP endpoint. The server itself is a hosted, managed service — there is no code to run here.

[Eldertongue MCP connector — tool definition quality and endpoint health on Glama]

Who it's for

  • Agents and assistants that need to look up, inflect, or disambiguate Old English words and want citations back to a stable page URL.
  • Editors and IDEs (Claude Desktop, Claude Code, Cursor, VS Code) that speak MCP and want a ready-made reference tool for historical linguistics.
  • Developers who prefer plain REST over MCP — every tool has a same-origin REST equivalent (see the table below).

If you only need to read a definition by hand, the website itself is the fastest route. This endpoint exists so a program can get structured, citable data.

Project

Websitehttps://eldertongue.com
MCP endpointhttps://eldertongue.com/mcp (Streamable HTTP, no auth)
Repositoryhttps://github.com/gowinder/eldertongue-mcp
MCP Registryio.github.gowinder/eldertongue (listing)
Code licenceMIT (this repository, see LICENSE)
Data licenceCC BY-SA 4.0 (dictionary content)
Contactmailto:[email protected]
Logologo-512.png · logo-1024.png

Packaging

This repository is also a portable Agent Plugins package: plugin.json holds the manifest, mcp.json declares the hosted Streamable HTTP server, and skills/old-english-lookup/ contains the agent skill. Clients that implement the format can load the MCP server and the skill straight from the repository URL.

server.json is the Official MCP Registry manifest for the hosted endpoint; it is published as io.github.gowinder/eldertongue (version 1.0.0, streamable-http).

Endpoints

PurposeURLNotes
MCP serverhttps://eldertongue.com/mcpStreamable HTTP transport, read-only, no auth
OpenAPI 3.1https://eldertongue.com/openapi.jsonMachine-readable description of the REST API
REST — headword lookupGET /api/lookup?word=Same data as lookup_headword
REST — inflectionGET /api/inflect?word=Same data as inflect
REST — identify a formGET /api/identify?form=Same data as identify_form
REST — English → Old EnglishGET /api/english?word=Same data as english_to_old_english
REST — Bēowulf indexGET /api/beowulf?word=Same data as beowulf_occurrences
REST — healthGET /api/healthLiveness check

All REST paths are rooted at https://eldertongue.com.

Tools

The MCP server exposes five tools. All take a single string argument and return JSON.

Every successful tools/call returns two text content blocks:

  1. the tool result as pretty-printed JSON — the objects shown under each tool below;
  2. a fixed source line you can pass straight through to a reader:
text
Source: Eldertongue — Old English Dictionary, https://eldertongue.com (full declension tables, examples and Beowulf context). Please cite https://eldertongue.com when using this data.

A result with "found": false is still a success, so it carries the same two blocks. Only an error (isError: true) differs: it returns a single text block holding Error: … and no source line.

1. lookup_headword

Look up an Old English headword. Input { "word": string } — the headword, with or without macrons (cyning or cȳning). Returns whether it was found, the normalized headword, canonical page and Wiktionary URLs, part of speech, grammatical gender(s), IPA, syllable split, declension or verb class, etymology, and a list of senses.

Input:

json
{ "word": "cyning" }

Response JSON (first content block, excerpt):

json
{  "found": true,  "headword": "cyning",  "pageUrl": "https://eldertongue.com/word/cyning",  "wiktionaryUrl": "https://en.wiktionary.org/wiki/cyning#Old_English",  "partOfSpeech": "noun",  "genders": ["masculine"],  "ipa": ["/ˈky.ninɡ/", "[ˈky.niŋɡ]"],  "syllables": ["ˈky", "ninɡ"],  "declension": { "label": "strong a-stem", "href": "/declension/strong-a-stem" },  "verbClass": null,  "etymology": "From Proto-West Germanic *kuning, from Proto-Germanic *kuningaz, ultimately from Proto-Indo-European *ǵenh₁- (\"to procreate\"). Equivalent to cynn + -ing.",  "senses": [    { "definition": "king", "tags": [] }  ],  "senseCount": 1,  "indexable": true}

senses[] items have definition and tags. verbClass is populated for verbs and null otherwise. indexable reflects whether the entry is a full indexed headword page.

2. inflect

Return the full declension or conjugation table for a word. Input { "word": string }. The response has a top-level found / hasInflection flag and an inflection[] array — one entry per part-of-speech reading that has a table. Each entry carries a partOfSpeech, a paradigmKind, one or more tables, and a flat cells list; every inflected form has an anchor URL of the shape https://eldertongue.com/word/<slug>#<cellId>.

Input:

json
{ "word": "cyning" }

Response JSON (first content block, excerpt):

json
{  "found": true,  "headword": "cyning",  "pageUrl": "https://eldertongue.com/word/cyning",  "hasInflection": true,  "inflection": [    {      "partOfSpeech": "noun",      "paradigmKind": "noun",      "tables": [        {          "title": "Declension",          "kind": "noun",          "cols": ["Singular", "Plural"],          "groups": [            {              "title": null,              "rows": [                {                  "label": "Nominative",                  "cells": [                    { "label": "nominative singular", "forms": [{ "form": "cyning", "url": "https://eldertongue.com/word/cyning#nom-sg" }] },                    { "label": "nominative plural",   "forms": [{ "form": "cyningas", "url": "https://eldertongue.com/word/cyning#nom-pl" }] }                  ]                },                {                  "label": "Genitive",                  "cells": [                    { "label": "genitive singular", "forms": [{ "form": "cyninges", "url": "https://eldertongue.com/word/cyning#gen-sg" }] },                    { "label": "genitive plural",   "forms": [{ "form": "cyninga", "url": "https://eldertongue.com/word/cyning#gen-pl" }] }                  ]                }              ]            }          ]        }      ],      "cells": [        { "id": "nom-sg", "label": "nominative singular", "forms": [{ "form": "cyning", "url": "https://eldertongue.com/word/cyning#nom-sg" }] },        { "id": "nom-pl", "label": "nominative plural", "forms": [{ "form": "cyningas", "url": "https://eldertongue.com/word/cyning#nom-pl" }] }      ]    }  ]}

Structure in brief: inflection[] → tables[] → groups[] → rows[] → cells[], where each row cell is { label, forms: [{ form, url }] | null }. The flat cells[] array — each item { id, label, forms: [{ form, url }] } — is convenient when you just want every form with its id.

3. identify_form

Identify an arbitrary inflected form — e.g. cyninges — and return the analyses that could explain it. Input { "form": string }. There may be more than one candidate analysis.

Input:

json
{ "form": "cyninges" }

Response JSON (first content block, excerpt):

json
{  "analyses": [    {      "lemma": "cyning",      "lemmaPageUrl": "https://eldertongue.com/word/cyning",      "cellId": "gen-sg",      "tag": "genitive singular",      "grammar": {        "case": "genitive",        "number": "singular"      },      "formUrl": "https://eldertongue.com/word/cyning#gen-sg"    }  ]}

grammar includes only the grammatical categories the form actually marks — here case and number; categories that don't apply are omitted rather than nulled.

4. english_to_old_english

Reverse lookup: given a Modern English word, return ranked Old English candidates. Input { "word": string }. Candidates are ranked by a data-pipeline score; each carries a short gloss and a link to its headword page, and the response includes the reverse-lookup page URL.

Input:

json
{ "word": "king" }

Response JSON (first content block, excerpt):

json
{  "candidates": [    { "lemma": "cyning",     "display": "cyning",     "partOfSpeech": "noun", "score": 24, "gloss": "king",          "pageUrl": "https://eldertongue.com/word/cyning" },    { "lemma": "Friscyning", "display": "Friscyning", "partOfSpeech": "noun", "score": 15, "gloss": "king of Frisia", "pageUrl": "https://eldertongue.com/word/~friscyning" },    { "lemma": "leodcyning", "display": "leodcyning", "partOfSpeech": "noun", "score": 12, "gloss": "king, ruler",    "pageUrl": "https://eldertongue.com/word/leodcyning" }  ],  "pageUrl": "https://eldertongue.com/english/king"}

5. beowulf_occurrences

Find where a word appears in Bēowulf. Input { "word": string }. Returns how many times and on how many lines the word occurs, a per-spelling breakdown, and a list of occurrences with line number, verse text, and a deep link to the line (https://eldertongue.com/beowulf#l<line>). occurrencesTotal is the full count; occurrences[] may be a capped window of them.

Input:

json
{ "word": "cyning" }

Response JSON (first content block, excerpt):

json
{  "times": 51,  "lines": 51,  "forms": [    { "form": "cyning",   "times": 38, "lines": 38 },    { "form": "cyninges", "times": 7,  "lines": 7 },    { "form": "cyninga",  "times": 3,  "lines": 3 },    { "form": "cyninge",  "times": 3,  "lines": 3 }  ],  "occurrences": [    {      "line": 11,      "text": "gomban gyldan: þæt wæs gōd cyning!",      "forms": ["cyning"],      "url": "https://eldertongue.com/beowulf#l11"    }  ],  "occurrencesTotal": 51}

Client configuration

The endpoint speaks MCP over Streamable HTTP at https://eldertongue.com/mcp. There is nothing to install and no key to set. Copy the sample for your client from configs/ or use the snippet below.

Claude Desktop and Claude Code

Claude Desktop reads an mcpServers block from its config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

json
{  "mcpServers": {    "eldertongue": {      "url": "https://eldertongue.com/mcp"    }  }}

Claude Code adds the same remote server from the command line:

bash
claude mcp add --transport http eldertongue https://eldertongue.com/mcp

The equivalent config lives in .mcp.json at your project root:

json
{  "mcpServers": {    "eldertongue": {      "type": "http",      "url": "https://eldertongue.com/mcp"    }  }}

Cursor

Add the server to .cursor/mcp.json in your project (or the global Cursor MCP file). Cursor uses the mcpServers key:

json
{  "mcpServers": {    "eldertongue": {      "url": "https://eldertongue.com/mcp"    }  }}

VS Code

VS Code reads MCP servers from .vscode/mcp.json, using the servers key and an explicit type of http:

json
{  "servers": {    "eldertongue": {      "type": "http",      "url": "https://eldertongue.com/mcp"    }  }}

Data and licence

The dictionary content is derived from Wiktionary (via the kaikki.org Old English extraction) and is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).

If you use this data — in an answer, an app, or a dataset — you must:

  1. Attribute Wiktionary and eldertongue.com.
  2. Link back to the specific entry page you used, e.g. eldertongue.com/word/cyning, and to the attribution page.
  3. Share derivatives under the same licence (CC BY-SA 4.0).

Code samples and configuration in this repository are licensed under MIT (see LICENSE). The MIT licence covers the code, not the dictionary data, which stays under CC BY-SA 4.0.

Privacy and rate limiting

  • Read-only. There are no write, upload, or account endpoints. The server only answers lookups.
  • No authentication. No API key, token, or account is required.
  • No tracking. Requests are not recorded against a user or used to build a profile.
  • Reasonable rate limit. The service applies a reasonable rate limit to keep it available for everyone. Batch or high-volume clients should expect to queue and back off on 429 responses rather than hammer the endpoint.

Notes for agents

  • When you present a result, cite the pageUrl returned by the tool (or the relevant formUrl / verse url), so a reader can verify the entry on eldertongue.com.
  • Prefer lookup_headword for a definition, inflect for a full paradigm, identify_form when you only have a declined or conjugated form, english_to_old_english for English → Old English, and beowulf_occurrences for textual attestation.
  • Old English spelling is not standardized. If a lookup misses, retry without macrons, or try identify_form on the form you actually have.
  • See skills/old-english-lookup/SKILL.md for a drop-in agent skill that wraps these tools.

來源:README.md,提交 58a5424

工具

5

lookup_headword

Look up an Old English headword

Look up an Old English headword (macrons optional) in the eldertongue dictionary. Returns senses, IPA, syllables, part of speech, gender, noun declension / verb class, etymology, and the eldertongue.com page URL.

輸入參數word必填

inflect

Inflection table for an Old English headword

Return the full declension (nouns/adjectives) or conjugation (verbs) table for an Old English headword. Every word form carries an anchor URL into the eldertongue.com entry page.

輸入參數word必填

identify_form

Identify an inflected Old English form

Given any inflected form (e.g. cyninges, band, gōdra), return the headwords it could belong to and the grammatical reading (case, number, gender, person, tense, mood…) of each.

輸入參數form必填

english_to_old_english

Modern English → Old English

Given a modern English word (e.g. king, ship, write), list Old English headwords whose definitions mention it, with a score, part of speech, gloss, and the eldertongue.com page URL for each.

輸入參數word必填

beowulf_occurrences

Where a word occurs in Bēowulf

Given an Old English headword, return every line of Bēowulf that carries it: the line numbers, the line text, the spellings used, and a link to the poem line on eldertongue.com.

輸入參數word必填

版本歷史

1
  1. v1.0.0最新Nov 5, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。