Private beta. Early API keys for agent builders, with a free daily sandbox allowance. Read the quickstart

MCP server

Give Claude Desktop, Cursor, Claude Code, Hermes or any MCP client the Lineage tools: search records about people who have died and get cited results.

There are two ways in. The remote server at https://api.lineage.rexstjohn.com/mcp speaks Streamable HTTP and takes your API key in the Authorization header; nothing to install. The stdio server, @lineage/mcp, runs on your machine for clients that start a local process. Both list the same tools and call the same endpoints, so the living-person gate, credits and rate limits are the same.

Cursor

Add this to ~/.cursor/mcp.json (or .cursor/mcp.json in a project), with your key in place of lin_sk_live_..., then reload. Cursor connects to the remote server directly.

{
  "mcpServers": {
    "lineage": {
      "url": "https://api.lineage.rexstjohn.com/mcp",
      "headers": {
        "Authorization": "Bearer lin_sk_live_..."
      }
    }
  }
}

Claude Desktop

Claude Desktop starts MCP servers as local processes. Build the stdio server once from a clone of the repo, then point Claude Desktop at it in claude_desktop_config.json (on macOS, ~/Library/Application Support/Claude/; on Windows, %APPDATA%\Claude\). Restart Claude Desktop and the Lineage tools appear in the tools menu.

git clone https://github.com/Verafyai/lineage-api.git
cd lineage-api
npm ci
npm run build:packages
{
  "mcpServers": {
    "lineage": {
      "command": "node",
      "args": [
        "/absolute/path/to/lineage-api/packages/mcp/dist/cli.js"
      ],
      "env": {
        "LINEAGE_API_KEY": "lin_sk_live_..."
      }
    }
  }
}

The packages are built and tested in the repo but not yet published to npm or PyPI. Until they are, run them from a clone of the repo, as shown below. The remote MCP server needs no install at all.

Claude Code

claude mcp add --transport http lineage https://api.lineage.rexstjohn.com/mcp --header "Authorization: Bearer $LINEAGE_API_KEY"

Hermes

Hermes reads MCP servers from mcp_servers in its config.yaml. Point it at the remote server:

mcp_servers:
  lineage:
    url: "https://api.lineage.rexstjohn.com/mcp"
    headers:
      Authorization: "Bearer lin_sk_live_..."

OpenClaw, Grok and OpenRouter models

OpenClaw uses the Lineage skill file instead of MCP; see the skills page. Grok, OpenRouter models and any OpenAI-compatible client take the same tools as function schemas from GET /v1/tools; see the tools page.

Tools

Every tool maps onto one endpoint in the API reference. Tools that start work (search_records, run_research) wait up to wait_seconds for the result, 60 by default, and otherwise return the id to read with get_search or get_run.

ToolEndpointCharges credits
search_recordsPOST /v1/searchesYes, see the description
get_recordGET /v1/records/{id}No
resolve_subjectPOST /v1/subjects:resolveYes, see the description
get_subjectGET /v1/subjects/{id}No
select_candidatePOST /v1/subjects/{id}:selectNo
check_vital_statusPOST /v1/subjects/{id}/vital-statusYes, see the description
run_researchPOST /v1/runsYes, see the description
get_runGET /v1/runs/{id}No
export_gedcomGET /v1/searches/{id}/exportNo
list_sourcesGET /v1/sourcesNo
get_sourceGET /v1/sources/{slug}No
list_modelsGET /v1/modelsNo
draft_contact_requestPOST /v1/contact-requestsNo
list_archivesGET /v1/archivesNo
get_keyGET /v1/keyNo

Try it

Ask: "Find records for Thomas Lincoln, 1778 to 1851, Kentucky and Illinois, and cite them." The agent calls search_records, waits for the quick search, and answers from records that each carry a citation URL. Ask for his children next and it follows a relative with from_record.

curl https://api.lineage.rexstjohn.com/mcp \
  -H "Authorization: Bearer $LINEAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Rules the tools follow

  • Searches about anyone who may be alive return living_person_blocked and cost 0 credits. Lineage researches someone only when a death date is on record, or a birth more than 110 years ago. A relative who may be alive comes back as { relation, living: true } with no name, dates or places.
  • Errors come back as tool errors with code, message, docs_url and fix, so the model can recover or explain.
  • When resolve_subject returns needs_input, the agent asks you the question. The tools never pick between close candidates.
  • The server is stateless: no sessions, no event stream on GET. Each POST carries the key.