Skip to main content
Glama
ball2jh

fold3-com-mcp

by ball2jh

fold3-com-mcp

An MCP server for Fold3, Ancestry's military-records site. It covers:

  • search across service records, pension files, muster rolls, draft cards, casualty lists, census and newspapers;

  • reading files, pages, index records, census lines and memorials;

  • browsing a collection's tree;

  • full-resolution page images.

It calls the site's own services from Node. It signs in through the Ancestry session that ancestry-com-mcp already saved (Fold3's "Sign in with Ancestry"), so there is no browser or password. It is read-only.

Tools

Tool

Actions

What for

fold3_search

search, facets

Hits with their type, collection, index fields and matched values; facet counts to choose filters.

fold3_record

get

A FILE (index fields, every page's image id, access, citation), IMAGE, INDEX_RECORD, SUB_IMAGE (a census line) or MEMORIAL (facts and linked Ancestry records).

fold3_collection

list, get, browse

Find collections, read one (access level, NARA publication), and walk its browse tree (state › surname › given name › file).

fold3_download

image, file

Page images at full resolution (stitched from the viewer's tiles), inline or to disk; a whole file to a directory with a SHA-256 manifest.

fold3_session

status, login

Whether the session is signed in and what the account may open.

fold3_raw_request

get, post

Read-only requests to Fold3's services, and POST only to the search.

What the search does, and why (each point checked against live counts; see docs/endpoints.md):

  • Person dates use the person fields. birthYear, deathYear and serviceYear map to date.vital.birth, date.vital.death and date.military. Fold3's generic date filter matches collection date spans: a 1775-2019 gravesite index matches any year. That filter is offered as coverageYear and described as such.

  • name matches every name indexed in a file, witnesses included; matched shows why a hit came back.

  • [Blank] index fields are dropped. Fold3 lists every field of a collection's schema on every record.

  • /record/ URLs are resolved by their slug. Index records and census lines share ids (61017601 is both).

Access: searching and index data need no subscription. Images need an account that may view the collection. The user's account (linked to their Ancestry login) is a Fold3 non-subscriber, so PUBLIC collections (the War of 1812 pension files, among others) open and SUBSCRIBER ones say they need a subscription.

Related MCP server: X Browser MCP

Setup

Requirements: Node 26+ (runs TypeScript directly) and pnpm; no browser.

pnpm install

.mcp.json:

{ "mcpServers": { "fold3": { "command": "node", "args": ["/path/to/fold3-com-mcp/src/server.ts"],
  "env": { "ANCESTRY_SESSION_FILE": "/path/to/ancestry-com-mcp/.session.json", "FOLD3_SESSION_FILE": "/path/to/fold3-com-mcp/.session.json" } } } }
  • ANCESTRY_SESSION_FILE (default ~/Projects/ancestry-com-mcp/.session.json) is only read, never written.

  • FOLD3_SESSION_FILE (default .session.json in this checkout, mode 600, git-ignored) keeps the Fold3 cookies.

  • FOLD3_MIN_INTERVAL_MS (default 250) spaces requests.

Tests

  • pnpm test: unit tests on recorded responses (test/fixtures, re-recorded with node scripts/record-fixtures.ts, which strips tokens and the account id). No network.

  • pnpm mcp-test: live, over stdio. It calls every action and error path, checks sizes, and downloads a few pages to a temp directory. It also runs a count comparison for every search filter: a real value must narrow the total and a nonsense value must give about zero.

  • pnpm typecheck.

Caveats

  • Fold3's index is transcribed by volunteers and staff. Read the images for anything that matters, and cite the file (fold3_record get returns a citation for a FILE).

  • A search reaches only its first 10,000 hits and returns at most 50 per call.

  • A full-resolution page is 20 to 60 tiles, so it takes several seconds. fold3_download file fetches at most 40 pages per call and keeps pages already on disk.

Available Tools

6 tools
fold3_collectionFold3 collectionsA
Read-onlyIdempotent

Fold3's collections ("titles", about 1,000). Actions:

  • list: collections whose title contains all the given words (name), with record counts, e.g. name "1812 pension" or "Confederate Tennessee".

  • get: one collection (needs collectionId): full title, description, source and NARA publication/catalog numbers, access level (free or subscription), record count, browse levels.

  • browse: walk a collection's browse tree (needs collectionId; path = labels chosen so far). War of 1812 Pension Files: [] → states, ["South Carolina"] → surnames, ["South Carolina","Hunt"] → given names, ["South Carolina","Hunt","Joseph"] → the file(s) with ids. Levels list up to 5,000 entries; contains narrows a long level.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNolist: words in the collection title
pathNobrowse: the labels chosen so far, top level first, e.g. ["South Carolina","Hunt"]
countNolist/browse: items per call (list default 50, browse default 100)
startNoPaging offset: index of the first item to return (default 0)
actionYeslist · get · browse
containsNobrowse: only entries whose label contains this text
collectionIdNoget/browse: collection id, e.g. "761"

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral detail beyond that: record counts for list, returned fields for get, browse-level limits up to 5,000 entries, and the narrowing effect of the contains parameter. No contradictions with annotations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into a compact bullet list with no wasted words. Each action gets a focused line, examples are embedded efficiently, and the browse-tree traversal example communicates a complex idea in a concise form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three actions and seven parameters, the description covers the main behaviors, parameter relationships, and return highlights well. It could be slightly more complete by explicitly noting pagination semantics for list versus browse, but the schema already documents start and count, so the description is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parameter semantics: it maps actions to their required parameters, explains path as labels chosen so far, and gives concrete examples such as name="1812 pension" and path=["South Carolina","Hunt"]. This goes beyond the schema's isolated property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (Fold3 collections) and enumerates three concrete actions: list, get, and browse. Each action is tied to a clear verb and resource, and the examples make it easy to tell this tool apart from siblings like fold3_search or fold3_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for each action, including which parameters each action needs and illustrative use cases. It does not explicitly name sibling tools or state when not to use this tool, but the action-specific guidance leaves little ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fold3_downloadDownload Fold3 imagesA
Idempotent

Fetch Fold3 page images at up to full resolution (stitched from the viewer's tiles; the site's own download is capped at 1600 px). Actions:

  • image: one page (needs imageId, from fold3_record get or a hit's imageId). Without outPath it is returned inline for reading, scaled to maxSide (default 1600); with outPath the full resolution is written unless maxSide is given.

  • file: the pages of a multi-page file (needs fileId and outDir), written as page-01.jpg, page-02.jpg, … with a manifest.json (ids, sizes, SHA-256). Pages already on disk are kept. At most 40 pages per call (a full-resolution page takes several seconds); continue with start. Works for collections this account may view (free ones such as the War of 1812 pensions); it signs in through Ancestry by itself when needed, and says so when a collection needs a subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNofile: pages to fetch in this call (default and max 40)
startNofile: first page to fetch, counting from 0 (default 0)
actionYesimage · file
fileIdNofile: file id (a FILE hit's id)
outDirNofile: absolute directory for the pages and manifest.json
imageIdNoimage: page image id
maxSideNoScale so the longer side is at most this many pixels (inline default 1600; files and outPath default to full resolution)
outPathNoimage: absolute path to write the JPEG to

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false, and the description adds valuable behavioral context: it stitches from viewer's tiles, the site's own download is capped at 1600 px, pages already on disk are kept, and it signs in through Ancestry by itself when needed. It also discloses that full-resolution pages take several seconds and that at most 40 pages per call. This goes beyond the annotations and helps the agent anticipate side effects and performance. A small gap: it doesn't explicitly state what happens if a page fails mid-download, but overall strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear intro, bullet-like action breakdown, and a final note on access. It is somewhat long but every sentence carries useful information. The front-loading of the main purpose and the action list helps an agent quickly parse it. Slight verbosity in the access note could be trimmed, but it's justified for transparency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters, no output schema, and moderate complexity (two actions, continuation, resolution scaling), the description covers the essential context: what each action does, required parameters, defaults, limits, and access behavior. It doesn't describe the exact structure of manifest.json beyond listing ids, sizes, SHA-256, but that is likely sufficient for an agent to proceed. The lack of an output schema is partially compensated by the description's detail on return behavior (inline vs file writing).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds meaning by explaining the relationship between parameters (e.g., image needs imageId, file needs fileId and outDir, maxSide default behavior differs for inline vs outPath, start for continuation). This is more than the schema alone provides, though the schema already covers the basics. A 4 is appropriate because the description enriches parameter semantics without being redundant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches Fold3 page images at up to full resolution, and distinguishes the two actions (image vs file) with their required parameters. It also differentiates from siblings by mentioning it is the download tool, while siblings like fold3_search, fold3_record, fold3_collection, fold3_session, and fold3_raw_request serve other purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use the image action (one page, needs imageId) and when to use the file action (multi-page file, needs fileId and outDir). It also notes the 40-page limit and the start parameter for continuation, and mentions that it works for collections the account may view, with subscription requirements disclosed. This is strong guidance for an agent to select the correct action and parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fold3_raw_requestRaw Fold3 requestA
Read-onlyIdempotent

A read-only request to Fold3's own services for data the other tools lack: GET any path under /fold31/, /fold31-search/, /fold31-image-data/, /fold31-index-record/, /fold31-memorial/, or POST a DocumentQuery to /fold31-search/doc-search. docs/endpoints.md lists the useful paths. Prefer the other tools: their results are projected to fit and their filters are checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNopost: the DocumentQuery JSON
pathNoService path, e.g. /fold31/api/publication/pub/761
actionYesget · post (search only)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive, so the bar is lower. The description adds behavioral detail beyond annotations: it lists allowed endpoint prefixes and the POST DocumentQuery action, and implies that raw requests bypass the filtering/projection of the other tools, which is important context for safe use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose is front-loaded, and the routing advice ('prefer other tools') follows logically. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a raw-access fallback with open-world semantics and no output schema, the description covers the essential usage constraints (allowed paths, methods, documentation reference, and the caveat about raw results). An agent can safely decide when to call this tool and how to construct a request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all parameters described), so baseline is 3. The description adds meaning beyond the schema: it explains that POST is used for a DocumentQuery, ties the path to specific prefixes, and implies that body is only for POST, which complements the schema's brief descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('request'), resource (Fold3 services), and allowed paths/methods. Clearly distinguishes from siblings by saying it provides 'data the other tools lack' and explicitly naming the alternative tools in the preference note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Prefer the other tools' and explains why (projected results, checked filters), indicating when NOT to use this tool. Also points to docs/endpoints.md for useful paths, giving an actionable guide for correct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fold3_recordRead a Fold3 recordA
Read-onlyIdempotent

Read one Fold3 document. Action get: needs id + type (as a search hit reports them) or url (a fold3.com /file/, /image/, /record/ or /memorial/ page).

  • FILE: title, collection and its access, index fields ("[Blank]" fields dropped), page count, every page's imageId, whether this account may view it, and a citation. Long files page with start/count.

  • IMAGE: the page's title, file, index fields, size and whether it is viewable.

  • INDEX_RECORD / SUB_IMAGE: the index fields; a SUB_IMAGE (a person's line on a census page) names its imageId and line.

  • MEMORIAL: facts, stories, and the Ancestry records Fold3 linked (collectionId + recordId for ancestry_record get). Images themselves come from fold3_download.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoDocument id from a search hit (with type)
urlNoA fold3.com page URL instead of id + type
typeNoThe hit's type; ids of different types can collide
countNoFILE: pages to list (default 200)
startNoPaging offset: index of the first item to return (default 0)
actionYesget

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag the operation as read-only, idempotent, and non-destructive, and the description adds rich behavioral detail beyond that: FILE paging behavior, dropped '[Blank]' fields, per-page imageId exposure, account-level viewability, and MEMORIAL's linked Ancestry records. This gives an agent an accurate model of what the tool actually returns and how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then uses a clean bullet structure to cover each type without redundancy. Every sentence and bullet earns its place; the length is justified by the tool's five distinct record types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining return behavior, and it does so thoroughly for every type. It also covers input alternatives, paging, and the boundary with fold3_download. An agent has enough information to select the correct parameters and interpret each record type's response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes every parameter at 100% coverage, but the description adds meaningful semantics beyond those descriptions: id+type can be replaced by url, type values map to different response shapes, SUB_IMAGE returns imageId and line, and MEMORIAL provides collectionId + recordId for ancestry_record. This materially helps an agent construct correct calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource pair, 'Read one Fold3 document,' and immediately distinguishes the supported variants (FILE, IMAGE, INDEX_RECORD, SUB_IMAGE, MEMORIAL). It is specific and differentiates from siblings like fold3_download by stating images themselves come from that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains the input modes ('id + type' or 'url') and routes image retrieval to fold3_download with an explicit statement: 'Images themselves come from fold3_download.' It does not exhaustively enumerate when not to use other siblings such as fold3_search or fold3_session, but the intended usage context is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fold3_sessionFold3 sessionA
Idempotent

The Fold3 sign-in. status: whether the saved session is signed in, the account's status (subscriber or not) and premium access. login: sign in through the Ancestry session that ancestry-com-mcp saved (Fold3's own "Sign in with Ancestry"); no browser or password, but it needs a valid Ancestry session (ancestry_session status). Downloads sign in by themselves when needed, so login is rarely called directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesstatus · login

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds context: login uses the saved Ancestry session, has no browser or password interaction, and status reports signed-in status, account type, and premium access. This goes beyond the annotations by explaining the mechanism and prerequisites, though it doesn't detail failure modes or side effects of repeated logins.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise and front-loaded with the core purpose. It explains both actions and provides a critical usage note without redundancy. Minor inefficiency: the phrase 'The Fold3 sign-in' could be more precise, but overall it's well-structured and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a session-management tool with a single parameter, the description covers the essential return values for status, the login mechanism, and the prerequisite. It does not have an output schema, but it adequately describes what the agent can expect. The note about login being rarely called directly fills a practical gap. Some detail about error handling or idempotency confirmation is absent but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only lists the enum values 'status' and 'login' with a terse description. The description enriches these by defining exactly what status returns (signed-in status, account subscription level, premium access) and what login does (signs in via Ancestry session). Since schema coverage is 100% but the enum descriptions are minimal, the description adds meaningful semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states that this tool manages the Fold3 session, covering 'status' and 'login' actions. It clearly differentiates from sibling tools like fold3_search and fold3_download by focusing on session state rather than data retrieval or downloads. While the opening phrase 'The Fold3 sign-in' is a bit noun-like, the subsequent explanation makes the purpose explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Downloads sign in by themselves when needed, so login is rarely called directly,' which tells the agent when not to call login. It also specifies that login requires a valid Ancestry session (via ancestry_session status), giving a clear precondition. This directly addresses when to use status versus login and when to avoid the tool altogether.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedfold3_collection
    • First observedfold3_download
    • First observedfold3_raw_request
    • First observedfold3_record
    • First observedfold3_search
    • First observedfold3_session

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation4/5

The six tools are mostly distinct: search, record, collection, download, session, and raw request each target a different concern. Some overlap exists between fold3_record and fold3_download (both handle images), and fold3_raw_request could duplicate the others, but the descriptions clarify boundaries.

Naming Consistency4/5

All tools use a consistent fold3_ prefix with a noun indicating the resource (search, record, collection, download, session, raw_request). The pattern is predictable, though fold3_raw_request is slightly less verb-like than the others.

Tool Count5/5

Six tools is well-scoped for a domain-specific server covering search, retrieval, browsing, downloading, session management, and a fallback raw request. Each tool has a clear purpose and the count feels appropriate.

Completeness4/5

The server covers the core workflow: search, inspect records, browse collections, download images, and manage session. Minor gaps exist (e.g., no explicit way to list all collections or handle saved records), but the raw request tool fills edge cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search FamilySearch's Family Tree, view person details, explore ancestors and descendants, and search historical records using browser session authentication.
    5 npm
    3
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Enables browser-based Twitter/X research and account workflows through a signed-in browser, supporting search, timeline/profile reads, saved searches, snapshot exports, and prepared account actions without requiring an X developer API key.
    25
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to the Internet Archive's Wayback Machine and catalog, enabling retrieval of archived web captures, snapshot metadata, and catalog search.
    BSD 3-Clause
  • A
    license
    A
    quality
    B
    maintenance
    Enables direct interaction with FamilySearch.org's shared Family Tree and historical records, including reading and adding people, facts, relationships, sources, notes, memories, record search, and image downloads, without needing a browser.
    9
    MIT