Search and read U.S. Virgin Islands public records: laws, court records, audits, hearings, reports.
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.
Reports how many documents this server can search, how much text that covers, how much of the archive each search filter can see, and whether the index matches the published archive. Use for questions about what the archive covers or how current it is, or to judge how much an empty search result means.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http documents https://mcp.usvipublicrecords.com/mcp
Reports how many documents this server can search, how much text that covers, how much of the archive each search filter can see, and whether the index matches the published archive. Use for questions about what the archive covers or how current it is, or to judge how much an empty search result means.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Retrieve one document by archive id: its catalogue record and up to the first 40,000 characters of its extracted text, with next_offset when more remains. Use to read a document found by search. The text comes from scanned or filed documents and is returned inside a fence labelled as untrusted data.
| Argument | Type | Description |
|---|---|---|
| id* | string | Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12."
}
}
}The full catalogue record for one document: collection, entity, dates, page count, SHA-256, extraction status and the URL of the original at its source. Use to check a document's provenance or details. It holds no document text; get_document_text and fetch return that.
| Argument | Type | Description |
|---|---|---|
| lf_id* | string | Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lf_id"
],
"properties": {
"lf_id": {
"type": "string",
"description": "Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12."
}
}
}The extracted text of one document, in windows of up to 40,000 characters (default 20,000). Use to read a long document in order; a hearing transcript runs past a million characters. Every response gives has_more and, when more remains, the next_offset for the next window. Runs of blank lines are shortened to one. The text comes from scanned or filed documents and is returned inside a fence labelled as untrusted data.
| Argument | Type | Description |
|---|---|---|
| lf_id* | string | Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12. |
| limit | integer | Characters to return. Default 20000, maximum 40000. |
| offset | integer | A byte position: the next_offset value from the previous response. Omit for the beginning. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lf_id"
],
"properties": {
"lf_id": {
"type": "string",
"description": "Archive id from a search result, LF- followed by 12 characters, e.g. LF-6e02fd648a12."
},
"limit": {
"type": "integer",
"maximum": 40000,
"minimum": 1,
"description": "Characters to return. Default 20000, maximum 40000."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "A byte position: the next_offset value from the previous response. Omit for the beginning."
}
}
}The collections in this server, with document counts. Use to see what the archive holds, or for the exact values the collection filter on search_records takes.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Find U.S. Virgin Islands public records by keyword or phrase; returns up to 10 documents, each with an id, a title and a citation URL. Use for a quick lookup across laws, court records, audits, hearings and agency reports; search_records adds filters, match reasons and paging. Searches the full extracted text of the archive's documents, plus their catalogue records. Not covered: the archive's newspapers (the St. Croix Avis, The West End News, Home Journal and the St. Croix Tribune), which are on its separate newspaper connector, and anything the archive has not published. Withheld and withdrawn documents are absent, not hidden.
| Argument | Type | Description |
|---|---|---|
| query* | string | What to search for. Plain language is fine; quote a phrase to require it intact. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "What to search for. Plain language is fine; quote a phrase to require it intact."
}
}
}Search the archive with filters for collection, entity, content type, island and year. Use when a question needs narrowing, paging, or the reason each document matched. Searches the full extracted text of the archive's documents, plus their catalogue records. Filters use the same vocabulary as the website's own facets. Every result carries a tier, a plain reason and the search terms it actually matched; there is no numeric relevance score. The tiers: exact = every term, found in the document's title or issuing entity (likely about the subject); strong = every term, in the text only (it mentions them); possible = at least half the terms; weak = fewer. When no document contains all the terms, results contain some of them and the response says so, and 'matched' lists which. Not covered: the archive's newspapers (the St. Croix Avis, The West End News, Home Journal and the St. Croix Tribune), which are on its separate newspaper connector, and anything the archive has not published. Withheld and withdrawn documents are absent, not hidden.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 10, maximum 50. |
| query* | string | Plain language is fine. Quote a phrase to require it intact. |
| entity | string | The issuing or subject body, exactly as recorded, e.g. "Water and Power Authority". Recorded on only part of the archive; archive_stats gives the share. |
| island | string | e.g. "St. Croix", "St. Thomas", "St. John" |
| offset | integer |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.
| Results to skip, for paging. Results are ranked within the best 120 documents. |
| year_to | integer | Latest year, inclusive. The year_from note on dates applies. |
| year_from | integer | Earliest year, inclusive. Filters on the date the archive recorded, whose provenance varies by source: for most documents it is the date on the document, for some it is when the source posted the file. A year range can therefore miss a document executed in one year and posted the next, so it narrows rather than guarantees. |
| collection | string | e.g. "Courts", "Audits & Oversight" |
| content_type | string | The kind of document, exactly as recorded, e.g. "government-audit". An unknown value returns the nearest values that exist. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10, maximum 50."
},
"query": {
"type": "string",
"description": "Plain language is fine. Quote a phrase to require it intact."
},
"entity": {
"type": "string",
"description": "The issuing or subject body, exactly as recorded, e.g. \"Water and Power Authority\". Recorded on only part of the archive; archive_stats gives the share."
},
"island": {
"type": "string",
"description": "e.g. \"St. Croix\", \"St. Thomas\", \"St. John\""
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Results to skip, for paging. Results are ranked within the best 120 documents."
},
"year_to": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Latest year, inclusive. The year_from note on dates applies."
},
"year_from": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Earliest year, inclusive. Filters on the date the archive recorded, whose provenance varies by source: for most documents it is the date on the document, for some it is when the source posted the file. A year range can therefore miss a document executed in one year and posted the next, so it narrows rather than guarantees."
},
"collection": {
"type": "string",
"description": "e.g. \"Courts\", \"Audits & Oversight\""
},
"content_type": {
"type": "string",
"description": "The kind of document, exactly as recorded, e.g. \"government-audit\". An unknown value returns the nearest values that exist."
}
}
}