# National Archives Catalog MCP

> National Archives Catalog MCP Server connects your AI agent directly to the US National Archives (NARA) collection. Search through millions of historical documents, photos, and records using natural language. You can retrieve metadata for specific IDs, search by user tags or comments, navigate record hierarchies, and even manage community contributions like adding a new tag or transcription.

## Overview
- **Category:** knowledge-management
- **Price:** Free
- **Tags:** historical-records, nara, archives, research, us-history

## Description

**WHO IT'S FOR:** The National Archives Catalog MCP Server connects your AI agent directly to the US National Archives (NARA) collection. You can search through millions of historical documents, photos, and records using natural language. It lets you retrieve metadata for specific IDs, track contributions made by others, navigate record relationships, and even manage community additions like creating a new tag or transcription.

**SEARCHING AND DISCOVERING RECORDS:**
You can find records across NARA using general keywords or URL parameters with **`search_records`**. If you're looking for something specific in the main body text, use **`search_records_by_text`**. To narrow it down to full transcriptions, run a search using **`search_records_by_transcription`**. You can also target records by community input: find items linked to a specific tag with **`search_records_by_tag`**, or limit your scope only to those records that mention a certain comment ID with **`search_records_by_comment`**. For the deepest dive, you can use **`search_contributions`** to query across all user input—tags, comments, and everything in between.

**MANAGING RELATIONSHIPS AND METADATA:**
You'll know exactly what belongs together. Use **`get_record_children`** to pull a list of immediate records that are related to a specific parent ID (NaId). You can pull usage statistics on contributions for any record using **`get_record_stats`**. To track down the details on one single tag, run **`get_tag`**, or see every tag currently applied to a record by calling **`get_tags_by_naid`**. You'll also get all tags assigned by a specific contributor user ID using **`get_tags_by_userid`**.

**ACCESSING COMMUNITY CONTRIBUTIONS:**
The system lets you track down every comment associated with one NaId via **`get_comments_by_naid`**, or check out the full history of comments made by a particular contributor using **`get_comments_by_userid`**. You can retrieve all contributions—including tags and comments—for both a specific record (**`get_contributions_by_target_naid`**) and a specific user (**`get_contributions_by_userid`**). For full transparency, you've got access to **`get_justifications`**, which retrieves the official reasons for any administrative action taken on records. You can also check what recent notifications are sitting in a user’s inbox using **`get_user_notifications`**.

**VIEWING TRANSCIPTIONS AND USER DATA:**
You'll get all transcriptions related to one record with **`get_transcriptions_by_naid`**, or see every transcription created by a specific contributor using **`get_transcriptions_by_userid`**. You can fetch the full text of a document using **`get_transcription`** and review its change log history via **`get_transcription_history`**. For user profiles, you can grab public data for one person with **`get_user`**, or pull details on multiple users at once using **`get_users`**, which filters by role or email.

**MODIFYING AND ADDING CONTENT:**
Want to contribute? You can add a brand new public comment to any record ID using **`create_comment`**. If you need to tweak that text later, use **`update_comment`**. To manage tags, you'll either **`create_tag`** or remove one using **`delete_tag`**. Similarly, if you find a document that needs transcribing, you can add the full text with **`create_transcription`**, and then modify it later with **`update_transcription`**. You also have tools to clean up contributions by deactivating multiple records inputs at once using **`delete_contributions`**.

**CLEANING UP AND DELETING:**
To remove a comment, you run **`delete_comment`**. If you need to take down a tag that was attached incorrectly, use **`delete_tag`**. You can also pull the list of all current announcements posted to the catalog using **`get_announcements`** or **`get_latest_announcements`**, and check out the general status metrics for any given NaId with **`get_record_stats`**.

## Tools

### create_comment
Adds a new public comment to any specific record ID.

### create_tag
Attaches a new organizational tag to a record.

### create_transcription
Adds a full text transcription of an archival document.

### delete_comment
Removes or deactivates an existing comment on a record.

### delete_contributions
Deactivates multiple user contributions at once.

### delete_tag
Removes or deactivates a specific tag from a record.

### fetch_coords
Pulls JSON data from an S3 link using a provided URL utility.

### get_announcements
Retrieves a list of all current announcements posted to the catalog.

### get_comment
Fetches the full details for one specific comment using its ID.

### get_comments_by_naid
Retrieves all comments associated with a single record's National Archives Identifier.

### get_comments_by_userid
Gets all comments made by a specific contributor user ID.

### get_contributions_by_target_naid
Retrieves all contributions associated with one record's NaId.

### get_contributions_by_userid
Gets all historical contributions made by a specific user ID.

### get_justifications
Retrieves a list of official justifications for administrative actions taken on records.

### get_latest_announcements
Fetches active announcements currently posted to the catalog system.

### get_record_children
Finds and retrieves all immediate child records belonging to a specified parent ID (NaId).

### get_record_stats
Retrieves usage statistics on user contributions for a specific record.

### get_tag
Fetches the details of one single tag by its ID.

### get_tags_by_naid
Retrieves all tags currently applied to a specific record's NaId.

### get_tags_by_userid
Gets all tags that have been assigned by a particular contributor user ID.

### get_transcription_history
Retrieves a history log of changes made to a transcription.

### get_transcription
Fetches the full text transcription for one specific document by its ID.

### get_transcriptions_by_naid
Gets all transcriptions associated with a single record's NaId.

### get_transcriptions_by_userid
Retrieves all transcriptions created by a specific contributor user ID.

### get_user_notifications
Retrieves a list of recent notifications assigned to a specific user.

### get_user
Pulls public profile data for any specified user account.

### get_users
Gets public profile data for multiple users, filterable by criteria like email or role.

### search_comments
Searches the entire catalog database specifically for comment text and metadata.

### search_contributions
Performs a broad search across all user contributions, tags, and comments.

### search_records_by_comment
Narrows down record searches by specific comment text or ID.

### search_records_by_contribution
Finds records that are related to a user's contribution (tag, comment, etc.).

### search_records_by_tag
Searches for all records that carry a specific tag.

### search_records_by_text
Performs general keyword searches across the record's main body text.

### search_records_by_transcription
Finds records that contain specific keywords within their full transcriptions.

### search_records
Searches for records using general URL parameters or keywords.

### search_tags
Searches the tag index to find tags matching certain criteria.

### search_transcriptions
Searches the transcription data for specific keywords or phrases.

### update_comment
Modifies an existing comment on a record with new text.

### update_transcription
Adds or modifies the content of an existing transcription.

### update_user
Modifies public profile information for a specific user account.

## Prompt Examples

**Prompt:** 
```
Search for records related to the 'Apollo 11 mission'.
```

**Response:** 
```
I've found several records. The most prominent is the 'Apollo 11 Flight Plan' (NaId: 594912). Would you like to see its metadata or check for related children records?
```

**Prompt:** 
```
Get the immediate children of parent record 573036.
```

**Response:** 
```
Retrieving children for NaId 573036... I found several items including 'Logbook of the USS Constitution' and 'Correspondence files'. Which one should I inspect further?
```

**Prompt:** 
```
Find all tags associated with record NaId 123456.
```

**Response:** 
```
I've retrieved the tags for NaId 123456. Current tags include: 'World War II', 'Naval Intelligence', and 'Pacific Theater'. Would you like to add a new tag to this record?
```

## Capabilities

### Search Historical Records
Find records across NARA using general text, tags (`search_records_by_tag`), transcriptions, or comments.

### Manage Record Relationships
Determine which related items belong to a parent record by calling `get_record_children`.

### Handle Community Contributions
Search, create, or delete tags and comments added by the public community (e.g., using `create_comment` or `search_tags`).

### Retrieve Specific Metadata
Get detailed information, status metrics, and descriptive data for a given National Archives Identifier.

### Modify Record Data
Add new content like comments (`create_comment`) or transcriptions to existing records within the catalog.

## Use Cases

### Tracing a Family Line Through Metadata
A genealogist finds an old record but needs more context. Instead of manually checking related folders, they ask their agent to 'What other records are related to NaId 573036?' The agent runs `get_record_children`, providing immediate links like the 'Logbook of the USS Constitution' and 'Correspondence files', solving the structural problem.

### Correlating Tags Across Eras
A historian is studying military records. They ask their agent to find all documents tagged 'Pacific Theater'. The agent executes `search_records_by_tag`, pulling up a focused list of relevant documents from across different collections, saving hours of manual filtering.

### Updating Research Notes Collaboratively
A researcher finds key details in an old document. Instead of emailing someone to write notes, they ask their agent to 'Add a comment saying this record relates to the treaty signing.' The agent uses `create_comment`, instantly logging the finding directly onto the official record.

### Pinpointing Specific Evidence in Transcriptions
You suspect an old diary mentions a specific person's name. You use your agent to run `search_records_by_transcription` with that name. The server returns all records—regardless of their primary subject matter—that contain that exact text, solving the deep-search problem.

## Benefits

- You don't have to manually click through different sections. Instead, you ask your agent to 'Find all records tagged World War II,' and the `search_records_by_tag` tool returns everything instantly.
- Need to know what a record is related to? Use `get_record_children` to automatically pull up immediate connected files without guessing which folder they're in. It maps the structure for you.
- Community data is now searchable. You can use `search_records_by_comment` to find records based on specific notes or opinions added by other researchers, not just the original content.
- Managing contributions is simple. Instead of finding a record and then navigating to its details page to add a tag, you run `create_tag` directly in your chat workflow.
- Transcription review is faster than ever. You can use `search_records_by_transcription` to pull up documents based on keywords found only in the handwritten transcriptions.

## How It Works

The bottom line is that your AI client handles all the complex API calls; you just ask it what history you're looking for.

1. Subscribe to the National Archives Catalog server and supply your NARA API Key.
2. Your AI client sends a request (e.g., 'Find all tags for record NaId 12345').
3. The agent executes the necessary tool (`get_tags_by_naid`) and returns structured, usable historical data to you.

## Frequently Asked Questions

**How do I find related records using the National Archives Catalog MCP Server? Using `get_record_children`?**
Use `get_record_children` and provide the parent record's NaId. This tool retrieves all immediate files that are structurally linked to that main item, giving you a complete view of the related collection.

**Can I search for records by tags using National Archives Catalog MCP Server? Using `search_records_by_tag`?**
Yes. Running `search_records_by_tag` lets you pull up every record that has a specific tag applied, no matter how far apart those records are in the physical archives.

**What if I only know part of a handwritten note? Can I use National Archives Catalog MCP Server? Using `search_records_by_transcription`?**
You can. The `search_records_by_transcription` tool searches records using keywords found specifically within the full text transcriptions, not just the main record description.

**How do I find all contributions by a specific user on National Archives Catalog MCP Server? Using `get_contributions_by_userid`?**
Pass the contributor's user ID to `get_contributions_by_userid`. This retrieves every piece of work they've added—tags, comments, or data—across all records.

**What credentials do I need when setting up the National Archives Catalog using `get_user`?**
You'll need an active NARA API Key. You must provide this key during initial server setup so your agent can authenticate requests and retrieve public user data.

**If I use `delete_comment`, is the comment permanently removed from the record?**
No, it typically deactivates or removes the contribution marker. The system keeps a history of deleted contributions for auditing purposes, so you won't lose the metadata.

**How do I use `search_records_by_comment` if I only know general keywords?**
You search records by providing keywords, names, or dates found within the comment body. This pulls records based on community discussions rather than just official metadata.

**What does `get_record_stats` provide for a specific National Archives Identifier (NaId)?**
It gives you metrics like the total count of tags, comments, and contributions linked to that record. This is useful for understanding how much community interaction exists.

**Can I search for records specifically by the text in their transcriptions?**
Yes. Use the `search_records_by_transcription` tool. This is particularly useful for handwritten documents that have been digitized and transcribed by volunteers.

**How do I see the individual items within a larger archival series?**
Use the `get_record_children` tool with the parent `NaId`. This will list the immediate sub-records or files contained within that specific collection or series.

**Can I contribute to the archives by adding tags via the AI?**
Yes, the `create_tag` tool allows you to add descriptive tags to a record using its National Archives Identifier (NaId), helping improve searchability for the community.