ipums-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ipums-mcpsearch for income variables in 2022 ACS"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π IPUMS MCP
A Model Context Protocol (MCP) server that exposes the IPUMS API as tools for LLM clients. Supports IPUMS microdata collections (USA, CPS, IPUMSI, etc.) and NHGIS aggregate/GIS data. Includes tools for browsing metadata, submitting and downloading extracts, generating reproducible R/Python code, and producing formatted citations.
π Prerequisites
Node.js 18+
Any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Windsurf, etc.)
Related MCP server: census-mcp-server
π οΈ Installation
1. Clone and build
git clone https://github.com/hesscl/ipums-mcp
cd ipums-mcp
npm install
npm run build2. Configure your MCP client
All MCP clients use the same server entry point β only the config file location differs. Set IPUMS_API_KEY as an environment variable; never hard-code it.
The server command is always:
node /absolute/path/to/ipums-mcp/dist/index.jsClaude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ipums": {
"command": "node",
"args": ["/absolute/path/to/ipums-mcp/dist/index.js"],
"env": { "IPUMS_API_KEY": "your-key-here" }
}
}
}Restart Claude Desktop after saving.
Claude Code (CLI)
claude mcp add ipums node /absolute/path/to/ipums-mcp/dist/index.js \
-e IPUMS_API_KEY=your-key-hereOr add manually to .claude/settings.json:
{
"mcpServers": {
"ipums": {
"command": "node",
"args": ["/absolute/path/to/ipums-mcp/dist/index.js"],
"env": { "IPUMS_API_KEY": "your-key-here" }
}
}
}Cursor / Windsurf
Add to your editor's MCP settings (typically under Settings β MCP or a mcp.json file):
{
"mcpServers": {
"ipums": {
"command": "node",
"args": ["/absolute/path/to/ipums-mcp/dist/index.js"],
"env": { "IPUMS_API_KEY": "your-key-here" }
}
}
}Other MCP clients
Any client that supports the MCP stdio transport works. Provide:
Command:
nodeArgs:
["/absolute/path/to/ipums-mcp/dist/index.js"]Env:
IPUMS_API_KEY=your-key-here
π§ Tools
𧬠Microdata (USA, CPS, IPUMSI, ACS, NHIS, MEPS, β¦)
Tool | Description |
| Search the offline variable database by name, label, group, or sample (no API key needed) |
| List available samples for a collection (use to find sample IDs by year/survey) |
| List recent extracts for a collection |
| Get status and download links for an extract |
| Submit a new extract request |
| Poll until extract completes, with automatic bail-out for large extracts |
| Download completed extract files to disk, with SHA-256 verification |
| Generate reproducible R (ipumsr) or Python (ipumspy) code for an extract |
Variable search
microdata_search_variables queries a local database of 827 harmonized IPUMS USA variables scraped from usa.ipums.org β no API key or network request needed.
Each result includes:
nameβ variable mnemonic (e.g.INCTOT)labelβ short description (e.g."Total personal income")typeβ"H"(household-level) or"P"(person-level)groupsβ thematic category (e.g."Person: Income")samplesβ representative IPUMS USA sample IDs where the variable is available (e.g.["us2024a", "us2023a", ..., "us1850a"])
Filter by any combination of query, type, group, and sample:
microdata_search_variables({ query: "income", type: "P", sample: "us2024a" })
microdata_search_variables({ group: "Education" })
microdata_search_variables({ query: "veteran", sample: "us1990a" })The
samplesfield lists the representative display columns from usa.ipums.org β a subset of all available samples. Cross-reference withmicrodata_list_samplesfor the complete list.
Create extract
Samples and variables use array syntax:
{
"collection": "usa",
"dataFormat": "csv",
"dataStructure": { "rectangular": { "on": "P" } },
"description": "2022 ACS veterans",
"samples": [{ "id": "us2022a" }],
"variables": [
{ "name": "VETSTAT" },
{ "name": "AGE" },
{ "name": "SEX" },
{ "name": "STATEFIP" }
]
}The server converts these to the keyed-object format the IPUMS API v2 requires.
The response includes a size advisory based on samples Γ variables to help decide whether to poll immediately or check back later:
Complexity | Advisory |
β€ 200 | Small β |
β€ 2,000 | Medium β consider asking the user (3β15 min) |
> 2,000 | Large β recommend checking back with |
Wait for extract
microdata_wait_for_extract defaults to a 90-second timeout. If the extract is still processing when the timeout is reached, the tool returns early with:
{
"status": "still_processing",
"message": "Extract 42 is still queued after 90s (6 check(s)). Ask the user if they would like to wait longer, or tell them to check back later using: microdata_get_extract({ collection: \"usa\", extractNumber: 42 })",
"extract": { ... }
}This keeps the conversation responsive β the user gets the extract number and can ask to resume polling or check back manually at their convenience. Pass a higher timeoutSeconds only if the user explicitly agrees to wait.
Download a completed extract
{
"collection": "usa",
"extractNumber": 42,
"outputDir": "/data/ipums",
"fileTypes": ["data", "ddiCodebook"]
}Available fileTypes: data, ddiCodebook, basicCodebook, rCommandFile, spssCommandFile, stataCommandFile, stsCommandFile, sasCommandFile.
Note: The IPUMS API returns
stsCommandFile(notstataCommandFile) for Stata syntax files in some collections. Include both if unsure.
Returns { downloaded: [...], errors: [...] }. Each entry includes localPath, bytes, and sha256Verified.
πΊοΈ NHGIS (Aggregate & GIS Data)
Tool | Description |
| Search all datasets by keyword (name, census group, description) |
| Search data tables by keyword, optionally scoped to a dataset |
| Search all time series tables by keyword |
| Browse available datasets (paginated) |
| Get tables and geographic levels for a dataset |
| List all data tables (paginated) |
| Get variables in a data table |
| List time series tables (paginated) |
| Get detail for a time series table |
| List available shapefiles |
| List recent NHGIS extracts |
| Get NHGIS extract status and download links |
| Submit a new NHGIS extract |
| Generate reproducible R (ipumsr) or Python (ipumspy) code for an NHGIS extract |
Table search
Three tools enable natural-language discovery of NHGIS data, complementing the nhgis_list_* and nhgis_get_* tools:
nhgis_search_datasets β fetches all ~253 datasets in one call and returns those matching the keyword in their name, group (e.g. "2020 Census", "2019 ACS"), or description. Best first step when you know a topic or census year.
nhgis_search_time_series_tables β fetches all ~400 time series tables (which span multiple census years with consistent geographic definitions) and filters by keyword in name or description. Ideal for longitudinal analysis.
nhgis_search_data_tables β searches source data tables by keyword against description and universe:
With
datasetparameter: fetches all tables for that dataset comprehensively.Without
dataset: scans the first 2,500 tables across all datasets (limited coverage β see note in response).
Recommended workflow:
nhgis_search_datasets("poverty")
β pick a dataset (e.g. "2019_ACS5a")
nhgis_get_dataset("2019_ACS5a")
β confirm available tables and geographic levels
nhgis_search_data_tables("poverty", dataset="2019_ACS5a")
β pick a table (e.g. "B17001")
nhgis_create_extract(...)
nhgis_extract_to_code(...)
β generate R/Python code to reproduce the extractThe NHGIS public API does not support server-side filtering. The search tools fetch full metadata pages and filter client-side.
π Reproducibility & Citation
Three tools close the loop between "I pulled this data via AI" and "here's the exact code to pull it again."
Tool | Description |
| Generate R or Python code to reproduce a microdata extract |
| Generate R or Python code to reproduce an NHGIS extract |
| Return a formatted citation template with authors, DOI, and official citation link |
Code generation
After submitting or retrieving an extract, call microdata_extract_to_code (or nhgis_extract_to_code) to get ready-to-run code:
microdata_extract_to_code({ collection: "usa", extractNumber: 42, language: "both" })R output (ipumsr):
library(ipumsr)
extract <- define_extract_usa(
samples = c("us2022a"),
variables = c("VETSTAT", "AGE", "SEX", "STATEFIP"),
data_format = "csv",
data_structure = "rectangular"
)
extract <- submit_extract(extract)
extract <- wait_for_extract(extract)
path <- download_extract(extract)
ddi <- read_ipums_ddi(path$ddi)
data <- read_ipums_micro(ddi)Python output (ipumspy):
from ipumspy import IpumsApiClient, UsaExtract
import os
client = IpumsApiClient(api_key=os.environ["IPUMS_API_KEY"])
extract = UsaExtract(
samples=["us2022a"],
variables=["VETSTAT", "AGE", "SEX", "STATEFIP"],
data_format="csv"
)
extract = client.submit_extract(extract)
client.wait_for_extract(extract)
client.download_extract(extract, download_dir="./downloads")The language parameter accepts "r", "python", or "both" (default). For variables with case selections or data quality flags, R output uses var_spec() automatically. NHGIS output uses ds_spec()/tst_spec() for datasets and time series tables, with camelCase API keys converted to snake_case for both languages.
Citation
generate_ipums_citation returns the standard citation for any IPUMS collection β no API call needed:
generate_ipums_citation({ collection: "nhgis" })Returns the full author list, DOI, and a direct link to the official citation page where the current version number is always listed. Replace [YEAR] and VX with the current year and version before publishing.
π Workflow: Jupyter MCP + ipumsr
This server pairs naturally with a Jupyter MCP server to form a complete data pipeline β from browsing IPUMS metadata to live analysis in a notebook β without leaving your LLM client.
Full pipeline example
Step 1 β Browse and submit (via MCP tools in Claude) π€
1. nhgis_search_datasets β find datasets by keyword (topic, year, census program)
2. nhgis_search_data_tables β narrow to specific tables (scope to dataset for full coverage)
3. nhgis_get_dataset β confirm tables and geo levels
4. nhgis_create_extract β submit the extract
5. nhgis_get_extract β poll until status = "completed"
6. nhgis_extract_to_code β generate R/Python code to reproduce the extractOr for microdata:
1. microdata_search_variables β find variable names by keyword or group
2. microdata_list_samples β confirm the right sample ID ("2022 ACS" β us2022a)
3. microdata_create_extract β submit (size advisory tells you whether to wait or check back)
4. microdata_wait_for_extract β poll up to 90s; bail out gracefully for large extracts
5. microdata_download_extract β download data + DDI codebook
6. microdata_extract_to_code β generate R/Python code to reproduce the extractπ‘ Variable discovery: Use
microdata_search_variablesto look up mnemonics from natural language β search"income","veteran","race"β rather than relying on memorized variable names. Filter bysampleto confirm a variable is available in your target year. For NHGIS, usenhgis_search_datasetsandnhgis_search_data_tablesto find tables by keyword, thennhgis_get_data_tableto see all variables within a table.
Step 2 β Analyze in Jupyter with ipumsr (R kernel) π
Once microdata_download_extract has saved files locally, use the Jupyter MCP server to run R in a notebook:
library(ipumsr)
# Point at the DDI codebook downloaded by microdata_download_extract
ddi <- read_ipums_ddi("/data/ipums/usa_00042.xml")
data <- read_ipums_micro(ddi)
# Variable labels and value labels are attached automatically
head(data)
attr(data$VETSTAT, "labels")For Python notebooks π:
import pandas as pd
# CSV data file downloaded by microdata_download_extract
df = pd.read_csv("/data/ipums/usa_00042.csv.gz")
df.head()For NHGIS data (already CSV, no DDI needed):
library(ipumsr)
# read_nhgis reads the CSV and attaches codebook metadata
tbl <- read_nhgis("/data/ipums/nhgis0007_csv.zip", data_layer = 1)Suggested config with Jupyter MCP
Add both servers to your MCP client config:
{
"mcpServers": {
"ipums": {
"command": "node",
"args": ["/absolute/path/to/ipums-mcp/dist/index.js"],
"env": { "IPUMS_API_KEY": "your-key-here" }
},
"jupyter": {
"command": "uvx",
"args": ["jupyter-mcp-server"],
"env": { "JUPYTER_TOKEN": "your-jupyter-token" }
}
}
}With both servers running you can prompt your LLM client: "Submit a 2022 ACS extract for VETSTAT, AGE, SEX, STATEFIP, download it when ready, then open a Jupyter notebook and plot veteran counts by state with ggplot2." π―
π Security Notes
API key: Pass via
IPUMS_API_KEYenv var only. Never hard-code it or commit it to source control. For local development, store it in a.envfile (gitignored).Download URL validation:
microdata_download_extractvalidates that each download URL uses HTTPS and resolves to an*.ipums.orghost before sending your API key. URLs that fail this check are skipped and reported inerrors.Path traversal protection: Downloaded filenames are resolved against
outputDirand rejected if the resolved path would escape that directory.SHA-256 verification: Every downloaded file is verified against the checksum provided by the API. A mismatch is reported in
errorsbut the file is kept so you can inspect it.Error message sanitization: API error responses from 4xx errors are HTML-stripped and truncated before being surfaced; 5xx server error bodies are suppressed entirely.
Generated code safety: R code emitted by
microdata_extract_to_codeandnhgis_extract_to_codeescapes all string values to prevent code injection from API-returned identifiers.
π» Development
Create a .env file in the project root (already gitignored):
IPUMS_API_KEY=your-key-hereThen run:
export $(cat .env | xargs) && npm run dev # load key + run via tsx
npm run build # compile TypeScript β dist/Source layout:
src/
index.ts entry point
client.ts shared HTTP client (ipumsRequest, getApiKey)
types.ts Zod schemas
data/
usa-variables.ts offline DB β 827 harmonized IPUMS USA variables
tools/
microdata.ts microdata tools (search vars, list, get, create, wait, download)
nhgis.ts NHGIS tools (search datasets/tables/TSTs + list/get/create/extract)
codegen.ts reproducibility tools (extractβcode for R/Python, citation lookup)π License
MIT β Β© 2026 hesscl
Available Tools
23 toolsgenerate_ipums_citationA
Return a formatted citation template for an IPUMS dataset. Includes the standard author list, DOI, and a direct link to the official citation page where the current version number is always listed. The version number also appears on your extract page and in the README included with each download.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | IPUMS collection to cite (e.g. 'usa', 'cps', 'nhgis') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the output contents (author list, DOI, link) and mentions where the version number appears, but does not clarify whether the template is static, if network access is required, or the exact return format. Partial behavioral disclosure, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the main action and provide essential details without unnecessary fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is adequate: it explains what the output contains and where to find the current version. It does not describe the return type, but given the simplicity and lack of output schema, this gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the 'collection' parameter already having a description and examples. The tool description does not add further parameter-specific meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a formatted citation template for an IPUMS dataset, using a specific verb 'Return' and resource. It distinguishes from sibling tools, which all focus on data listing/extraction, not citation generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for generating citations and explains what is included (author list, DOI, link). It doesn't explicitly state when not to use it, but since there are no alternative citation tools among siblings, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_create_extractA
Submit a new IPUMS microdata extract request. Specify the collection, samples, variables, and output format. Returns the new extract number and initial status. Once submitted, use microdata_extract_to_code to generate reproducible R or Python code for the extract.
| Name | Required | Description | Default |
|---|---|---|---|
| samples | No | Sample IDs to include | |
| version | No | API version (default: v2) | v2 |
| variables | No | Variables to include | |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps') | |
| dataFormat | No | Output file format | |
| description | No | Human-readable description of this extract | |
| caseSelectWho | No | Who to select cases for | |
| dataStructure | No | Data structure specification |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It mentions the return value ('Returns the new extract number and initial status') and hints at the next step, but does not disclose potential side effects, authentication requirements, asynchronous processing, or other behaviors that might be expected for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the purpose, and every sentence contributes value (what it does, what it returns, and the next recommended step). There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description adequately explains the return value and mentions a relevant follow-up tool. It does not explicitly mention asynchronous processing or how to track the extract, but it is reasonably complete for a create operation with related sibling tools available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the structured schema already documents all parameters. The description text only lists a subset of parameters (collection, samples, variables, output format) without adding deeper semantic detail beyond what the schema provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Submit a new IPUMS microdata extract request') and the resource ('IPUMS microdata extract'), with a specific verb and scope. It also lists key inputs and the return value, distinguishing it from sibling tools like nhgis_create_extract by specifying 'IPUMS microdata'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: to submit a new extract request. It also gives follow-up guidance ('Once submitted, use microdata_extract_to_code...'), but does not explicitly mention when not to use it or name alternatives like nhgis_create_extract, though the tool name and IPUMS qualifier imply that distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_download_extractA
Download completed IPUMS microdata extract files to a local directory. Verifies SHA-256 checksums. Returns local file paths and verification status.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | API version (default: v2) | v2 |
| fileTypes | No | File types to download (default: data and ddiCodebook) | |
| outputDir | Yes | Local directory path to save downloaded files (created if it does not exist) | |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps') | |
| extractNumber | Yes | Extract number to download |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly mentions SHA-256 checksum verification and returning local file paths and verification status, which are key runtime behaviors. However, it does not disclose potential side effects like directory creation or file overwriting, though these are partially covered in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and every word contributes. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with 3 required and no output schema, the description provides the core outcome and a mention of verification, but lacks guidance on prerequisites like needing a completed extract and the exact structure of the returned verification status. It is minimally viable but leaves clear gaps for an agent to fully understand the tool's context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides; it only generically refers to 'local directory' and 'extract files' which map to outputDir and fileTypes but add no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads completed IPUMS microdata extract files to a local directory. The verb 'download' and resource are specific, and it distinguishes itself from sibling tools like microdata_get_extract or microdata_list_extracts by focusing on file download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention 'use when extract is complete' beyond the word 'completed' and does not contrast with other extract tools, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_extract_to_codeA
Generate ready-to-run R (ipumsr) and/or Python (ipumspy) code to reproduce a microdata extract. Fetches the extract definition by number and emits code that re-submits the same request. Use this after microdata_create_extract to capture a reproducible workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Output language(s): 'r', 'python', or 'both' (default: 'both') | both |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps') | |
| extractNumber | Yes | Extract number to generate code for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly discloses that the tool 'fetches the extract definition by number' and 'emits code that re-submits the same request,' implying a read-only code-generation behavior. It does not detail side effects, authentication requirements, or error scenarios, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: first states the purpose, second explains the mechanism, third provides workflow timing. It is front-loaded with the core action and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description adequately covers the tool's role in the workflow (after create, before download), names the supported languages, and clarifies that it produces re-runnable code. It does not describe return format or edge cases, but these are not critical for using the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by mapping 'R (ipumsr)' and 'Python (ipumspy)' to the language enum and explaining 'extract number' as the identifier for reproducing a request. This goes slightly beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Generate ready-to-run R (ipumsr) and/or Python (ipumspy) code to reproduce a microdata extract.' It clearly states the tool's function and distinguishes it from sibling tools like microdata_get_extract (which returns metadata) or microdata_download_extract (which downloads data), focusing on code generation for reproducibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this after microdata_create_extract to capture a reproducible workflow,' giving a clear sequential context. However, it does not name alternative tools or explicitly state when not to use it, so there is room for stronger guidance relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_get_extractA
Get the status and details of a specific IPUMS microdata extract by its number. Includes download links when the extract is complete.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | API version (default: v2) | v2 |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps') | |
| extractNumber | Yes | Extract number to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It usefully discloses that download links appear only when the extract is complete, but it does not mention authentication requirements, potential error conditions, or what shape the response takes beyond 'status and details'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-formed sentence that immediately communicates the tool's purpose and a key behavioral detail. There is no redundant information or unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward retrieval tool with only three simple parameters and no output schema, the description covers the essential purpose and an important conditional behavior (download links when complete). It could go further by mentioning status values or linking to siblings, but it is adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all parameters (version, collection, extractNumber) already have meaningful descriptions. The tool description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the status and details of a specific IPUMS microdata extract by number, and mentions download links when complete. This distinguishes it from sibling tools like microdata_list_extracts (which lists extracts) and microdata_download_extract (which downloads).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking the status/details of a specific extract, but does not explicitly state when to use this tool over microdata_wait_for_extract or microdata_download_extract. No exclusions or alternative guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_list_extractsA
List recent extracts for an IPUMS microdata collection (e.g. usa, cps, ipumsi). Returns extract numbers, status, and basic metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | API version (default: v2) | v2 |
| pageSize | No | Results per page | |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps', 'ipumsi') | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the return content (extract numbers, status, basic metadata) but does not mention pagination behavior, ordering, or the exact time range for 'recent'. It is not misleading, but it leaves some behavioral details implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, front-loaded with the primary action and purpose. Every word adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation, the description covers the purpose and return content sufficiently. It lacks explicit details about pagination defaults or 'recent' semantics, but the schema provides pageSize/pageNumber, and the operation's simplicity reduces the need for deeper context. An output schema is absent, so the description must disclose return fields, which it does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents each parameter. The description adds only an example list of collection values, which overlaps with the enum in the schema. It does not enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent extracts for an IPUMS microdata collection, with examples (usa, cps, ipumsi). This specific verb+resource+scope distinguishes it from sibling tools like microdata_create_extract or microdata_get_extract, which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to list extracts and see their status) but does not explicitly mention alternatives or when not to use it. The sibling context provides clear alternatives, but the description itself only hints at the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_list_samplesA
List available samples for an IPUMS microdata collection (e.g. all ACS, CPS, or Census years). Use this to find the correct sample ID before creating an extract.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | API version (default: v2) | v2 |
| pageSize | No | Results per page | |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps', 'ipumsi') | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation but does not explicitly state that. It hints at the return content by saying 'find the correct sample ID' but omits details about pagination, response structure, or that results are time-series years. Some behavioral context is given, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences that front-load the purpose and then provide a usage tip. Every word earns its place, with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description covers the essential aspects: what it lists, why you would use it, and the typical workflow (before creating an extract). Pagination is implied by the schema parameters. Minor gaps like not describing the exact response format are acceptable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented (collection enum, version, pagination). The description adds a bit of context by noting 'e.g. all ACS, CPS, or Census years' for the collection parameter, but does not add significant meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List available samples for an IPUMS microdata collection' with concrete examples (ACS, CPS, Census years). The verb 'List' specifies the action, and 'samples' as the resource distinguishes it from sibling tools like microdata_list_extracts or microdata_search_variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this to find the correct sample ID before creating an extract.' This tells the agent when to invoke the tool. It does not explicitly mention alternatives or exclusions, but the context is clear enough for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_search_variablesA
Search IPUMS USA harmonized variable mnemonics by name or label. Returns matching variables with their label, record type (H=household / P=person), thematic group, and available sample IDs. Use this to discover variable names before building an extract. The samples field lists representative IPUMS USA sample IDs (e.g. 'us2024a') where the variable is available β cross-reference with microdata_list_samples. Database covers 827 harmonized variables scraped from usa.ipums.org.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by record type: H = household-level, P = person-level | |
| group | No | Filter by thematic group (e.g. 'Income', 'Education', 'Geographic'). Partial match, case-insensitive. | |
| limit | No | Maximum number of results to return (default: 50, max: 500) | |
| query | No | Search term matched against variable name and label (case-insensitive). Leave empty to list all variables. | |
| sample | No | Filter to variables available in a specific sample ID (e.g. 'us2024a', 'us1990a'). Must be an exact sample ID match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the source (scraped from usa.ipums.org), the 827-variable scope, and notes that sample IDs are representative (not exhaustive). It does not explicitly state read-only behavior, but the nature of a search tool makes that implicit. The 'scraped' caveat adds useful transparency about data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core action and return fields, then usage guidance, and a final data-source caveat. No redundant filler; every sentence adds value. It is compact yet complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description adequately lists return fields and usage context. It does not explicitly mention partial-match behavior for the query parameter, which is implied by 'search' but could be clearer. Given the 5 parameters and no output schema, it is mostly complete but leaves a tiny gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific meaning beyond the schemaβit does explain the 'sample' field in output and cross-references microdata_list_samples, which indirectly clarifies the sample parameter, but does not dive into syntax or edge cases. Thus 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches IPUMS USA harmonized variable mnemonics by name or label and returns specific fields (label, record type, thematic group, sample IDs). It distinguishes itself from sibling tools like microdata_list_samples by focusing on variable discovery and explicitly cross-referencing that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this to discover variable names before building an extract' and advises cross-referencing with microdata_list_samples for sample IDs. This gives clear when-to-use guidance and points to an alternative, fulfilling the dimension fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
microdata_wait_for_extractA
Poll a microdata extract until it completes (or fails). Returns the final extract object including downloadLinks when done. Default timeout is 90 seconds β if the extract is still running at that point the tool returns early with the current status and a command to check back later, so the conversation is not blocked for large extracts.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | API version (default: v2) | v2 |
| collection | Yes | IPUMS microdata collection (e.g. 'usa', 'cps') | |
| extractNumber | Yes | Extract number to wait for | |
| timeoutSeconds | No | Maximum seconds to wait before returning early (default: 90). Increase only if the user explicitly agrees to wait longer. | |
| pollIntervalSeconds | No | Seconds between status checks (default: 15, min: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well by disclosing the polling nature, default timeout (90s), early return behavior with status and a command to check back later, and the inclusion of downloadLinks upon completion. It could mention error handling or polling mechanics, but the essential behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and includes the most critical behavioral nuance (timeout/early return) without extraneous details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema), the description explains the return value (final extract object with downloadLinks) and the early-return fallback. It could describe the interim status object or failure modes, but the description is largely complete for the intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some behavioral context around timeoutSeconds (e.g., not blocking conversation) but does not add additional semantic meaning to the individual parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Poll' with a clear resource 'microdata extract' and a defined outcome ('until it completes or fails'). It clearly distinguishes this from sibling tools like get_extract by emphasizing the waiting/polling behavior and that it returns the final object with downloadLinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when you need to wait for an extract to finish, and notes it returns early under timeout to avoid blocking. It does not explicitly name alternative tools or conditions for when not to use it, but the context is clear enough from the behavior described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_create_extractA
Submit a new NHGIS extract request. Specify datasets (with data tables and geographic levels), time series tables, shapefiles, and output format. Returns the new extract number and initial status. Once submitted, use nhgis_extract_to_code to generate reproducible R or Python code for the extract.
| Name | Required | Description | Default |
|---|---|---|---|
| datasets | No | Map of dataset name to dataset specification | |
| dataFormat | No | Output data format | |
| shapefiles | No | Shapefile identifiers to include | |
| description | No | Human-readable description of the extract | |
| timeSeriesTables | No | Map of time series table name to specification | |
| geographicExtents | No | Geographic extents to filter by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals that the tool returns an extract number and initial status, implying asynchronous processing. It does not cover permissions, side effects, or validation behavior, but the core create-and-return semantics are communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence adds value: what the tool does, what it returns, and the recommended next step. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is rich with nested objects and 100% parameter descriptions, and the description covers the essential orientation: what to specify, return value, and follow-up. It does not explicitly note that all parameters are optional, but the schema's required fields (none) already convey that. For a complex tool with strong schema support, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description lists the main parameter categories (datasets, time series tables, shapefiles, output format) but adds no syntax or structural detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Submit' and clearly identifies the resource as 'NHGIS extract request'. It distinguishes from siblings like microdata_create_extract by naming NHGIS and lists the key inputs (datasets, time series tables, shapefiles, output format), establishing a distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for NHGIS extract creation and explicitly points to nhgis_extract_to_code as the follow-up step, which guides sequential usage. However, it does not explicitly mention alternatives or exclude microdata_create_extract, though the NHGIS naming makes the scope clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_extract_to_codeA
Generate ready-to-run R (ipumsr) and/or Python (ipumspy) code to reproduce an NHGIS extract. Fetches the extract definition by number and emits code that re-submits the same request. Use this after nhgis_create_extract to capture a reproducible workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Output language(s): 'r', 'python', or 'both' (default: 'both') | both |
| extractNumber | Yes | NHGIS extract number to generate code for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the tool 'Fetches the extract definition by number and emits code that re-submits the same request,' clarifying it does not itself submit the extract but only generates code. This is a key behavioral nuance beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, leading with the primary purpose. No filler or repetition. Every sentence adds value: what it does, how it works, and when to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple code generator: given an extract number and optional language, it returns ready-to-run code. The description covers the output's purpose and usage context. Without an output schema, the description adequately conveys the functional scope; no critical behavioral gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both language and extractNumber have descriptive text in the schema. The description does not add parameter semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Generate ready-to-run R (ipumsr) and/or Python (ipumspy) code to reproduce an NHGIS extract.' It clearly differentiates from sibling microdata_extract_to_code by explicitly naming NHGIS and the relevant R/Python packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this after nhgis_create_extract to capture a reproducible workflow,' providing explicit when-to-use context. It does not mention when-not-to-use or name alternatives explicitly, but the NHGIS qualifier and relationship to create_extract imply exclusion of non-NHGIS contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_get_datasetA
Get full details for a specific NHGIS dataset including available data tables, geographic levels, breakdown values, and years.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset identifier (e.g. '2000_SF1a', '2015_2019_ACS5a') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. The verb 'Get' implies a read-only operation, and it describes the kind of data returned, but it does not disclose potential errors, required permissions, or response formatting. This is adequate but not rich for a getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states the action, resource, and key content areas without any fluff or repetition. Every word contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description gives a solid idea of what will be returned ('data tables, geographic levels, breakdown values, and years'). The lack of an output schema means the description partially compensates by listing content categories, though it does not describe response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with a clear description and examples for 'dataset' (e.g., '2000_SF1a'). The tool description adds no parameter-specific semantics beyond labeling it as a 'specific' dataset, so it does not exceed the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Get full details') and resource ('a specific NHGIS dataset'), and enumerates the scope of details returned ('data tables, geographic levels, breakdown values, and years'). This distinguishes it from siblings like nhgis_list_datasets (listing all datasets) and nhgis_get_data_table (getting a specific table).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a specific NHGIS dataset' implies the tool is used when you already have a dataset identifier, contrasting with list/search siblings. However, it does not explicitly mention alternatives or when not to use it, so it stops short of fully explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_get_data_tableA
Get detailed information about a specific NHGIS data table within a dataset, including all variable descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset identifier (e.g. '2000_SF1a') | |
| dataTable | Yes | Data table identifier (e.g. 'NP001A') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what the tool does but does not reveal any behavioral traits such as being read-only, requiring authentication, or any side effects. The added detail about 'all variable descriptions' provides some output context, but overall it lacks transparency about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundancy. It efficiently conveys the tool's purpose and output without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, no output schema), and the description adequately covers its main outcome: returning information about a data table including variables. It does not mention error cases or return format, but given the low complexity and full schema coverage, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters. The description does not add extra semantic meaning beyond what is in the schemaβit only rephrases the identifiers. Baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get detailed information about a specific NHGIS data table within a dataset, including all variable descriptions.' It uses a specific verb ('Get'), identifies the resource ('data table'), and specifies the context ('within a dataset'), distinguishing it from sibling tools like listing or searching tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: when you need detailed variable descriptions for a specific table. It does not explicitly mention alternatives or when not to use it, but the clear scope provides adequate context for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_get_extractA
Get the status and details of a specific NHGIS extract by its number. Includes download links when the extract is complete.
| Name | Required | Description | Default |
|---|---|---|---|
| extractNumber | Yes | Extract number to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals that download links are included only when the extract is complete, which is a key conditional behavior. It does not detail error states or permissions, but these are less critical for a read-only status endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core purpose and then adds a useful conditional detail in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter status-retrieval tool with no output schema, the description covers the purpose, the target resource, and the key behavioral outcome (download links when complete). It does not explain the exact return structure, but that is not essential for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter (extractNumber) and its meaning. The description adds no extra semantic value beyond restating 'by its number,' so it meets the baseline for schema coverage but does not go further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the status and details of a specific NHGIS extract by its number. The verb 'Get' plus the resource and identifier make the purpose unambiguous and distinguish it from sibling tools like nhgis_list_extracts and microdata_get_extract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you have a specific extract number and need its status/details. It does not explicitly name alternatives or exclusions, but the context is clear enough for a simple retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_get_time_series_tableA
Get full details for a specific NHGIS time series table including available years, geographic levels, and variable descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Time series table identifier (e.g. 'CL8', 'B18') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It transparently states key output content (years, geographic levels, variable descriptions) and implies a read-only lookup via 'Get'. It does not discuss error conditions or permissions, but for a simple retrieval tool this is adequate and informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and resource, followed by a concise enumeration of what 'full details' includes. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter getter tool with no output schema, the description is well-rounded: it states the input scope (specific table) and the expected return categories (years, geographic levels, variable descriptions). This gives an agent enough context to invoke the tool correctly without extra elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the 'table' parameter has a clear description, pattern, and example. The tool description does not add additional parameter context, so it relies entirely on the schema. Per the baseline for high coverage, this is acceptable at a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get full details') with a clear resource ('NHGIS time series table') and explicitly lists what details are included (years, geographic levels, variable descriptions). This distinguishes it from siblings like nhgis_list_time_series_tables (list discovery) and nhgis_search_time_series_tables (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this when you need full details for a specific time series table. It does not explicitly name alternatives like search or list, but the 'specific table' wording implies that discovery tools should be used to find table identifiers first, making the intended usage reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_list_datasetsA
Browse available NHGIS datasets. Returns paginated list of dataset identifiers, names, years, and geographic levels available.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Results per page | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses pagination behavior ('Returns paginated list') and the exact fields returned, clearly indicating a read-only metadata listing. It does not cover auth or rate limits, but for a simple browse tool this is a reasonable level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with only two sentences: the first states the purpose, the second states the output. Every word contributes value, and it is front-loaded with the primary verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and no output schema, the description covers the essential aspects: what it does, what it returns, and the pagination behavior. It could mention default page size or that it returns only metadata, but these are minor gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for both parameters ('Results per page' and 'Page number (1-based)'), and the description adds no additional parameter-level detail beyond noting pagination. Since schema coverage is 100%, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Browse') and resource ('available NHGIS datasets'), and specifies the return content (dataset identifiers, names, years, geographic levels). This distinguishes it from sibling tools like nhgis_list_data_tables or nhgis_search_datasets, which have different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for browsing datasets ('Browse available NHGIS datasets'), but it does not explicitly mention alternatives or when not to use it. It lacks the explicit exclusions or alternative tool references seen in higher-scoring examples, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_list_data_tablesA
List all available NHGIS data tables across all datasets. Returns paginated list of table identifiers, descriptions, and universe.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Results per page | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly mentions that results are paginated and lists return fields (table identifiers, descriptions, universe), which informs the agent about the response structure and the need to potentially paginate. This is meaningful beyond the schema, though it omits details like rate limits or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the main action, and every word is informative. No unnecessary elaboration or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with two well-documented parameters and no output schema, the description adequately covers the return values and pagination behavior. It does not explain how to handle multi-page results or what 'universe' means, but that is likely acceptable for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both pageSize and pageNumber having descriptions. The tool description adds context about pagination ('paginated list') but does not provide additional parameter-specific meaning beyond what the schema already documents. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('List'), the resource ('NHGIS data tables'), and the scope ('all available across all datasets'). It distinguishes from sibling tools like nhgis_list_time_series_tables and nhgis_list_shapefiles by focusing on data tables specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the agent needs an unfiltered enumeration of all data tables, but it does not explicitly mention when to avoid this tool or direct users to alternatives like nhgis_search_data_tables for filtered queries. The context is reasonably clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_list_extractsB
List recent NHGIS extract requests. Returns extract numbers, status, and submission timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Results per page | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose scope ('recent') and return fields (numbers, status, timestamps), which adds some behavioral context. However, it omits details like pagination behavior, ordering, and whether this is a read-only operation (though inferable). It is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly states the purpose and return fields. Zero wasted words, easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and no output schema, the description provides the essential return fields. However, it does not explain pagination behavior or the meaning of 'recent', and lacks any note about authentication or read-only status. It is minimally complete but leaves room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both `pageSize` and `pageNumber`. The description adds no parameter-specific information, so it hits the baseline for well-documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('NHGIS extract requests'), and mentions the return fields (extract numbers, status, timestamps). It is distinguishable from sibling tools like `nhgis_get_extract` (which likely fetches a single extract) and `microdata_list_extracts` (which targets microdata), though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is for tracking recent submissions, nor does it contrast with `nhgis_get_extract` or note any conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_list_shapefilesA
List all available NHGIS shapefiles (boundary files). Returns identifiers for census geographies that can be included in extracts.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Results per page | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is a read-only list and specifies the return value. However, it does not mention pagination behavior despite the presence of pageSize and pageNumber parameters, nor any other behavioral nuances. This is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences. It is front-loaded with the verb and resource, and every sentence adds meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no output schema, two optional parameters), the description adequately conveys the tool's purpose and return value. It lacks explicit mention of pagination, but overall it is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of both parameters with descriptions. The tool description adds no additional semantic meaning beyond what the schema already conveys, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all available NHGIS shapefiles') and the resource (shapefiles/boundary files). It also distinguishes itself from sibling tools by specifying that it returns identifiers for census geographies usable in extracts, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case: to obtain identifiers for inclusion in extracts. It does not explicitly mention alternatives or exclusions, but the tool's name and the mention of using identifiers in extracts provide sufficient context for when to select this tool over other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_list_time_series_tablesA
List all available NHGIS time series tables. These span multiple census years with consistent geographic definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Results per page | |
| pageNumber | No | Page number (1-based) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful context about the temporal and geographic consistency of the tables, but it does not disclose pagination behavior, whether truly all tables are returned in a single call, or the output format. This is a minimal but not comprehensive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the primary action and the second provides meaningful context. There is no redundancy or wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with only pagination parameters and no output schema, the description provides adequate context: it explains what the tool lists and characterizes the nature of time series tables. It could mention pagination caveats, but the overall intent and scope are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters ('Results per page' and 'Page number (1-based)'), covering 100% of parameter semantics. The description adds no additional parameter information, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific action: 'List all available NHGIS time series tables.' It clearly identifies the resource (time series tables) and distinguishes it from sibling tools like nhgis_list_data_tables by emphasizing the multi-year, consistent-geography nature of these tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context that these tables span multiple census years with consistent geographic definitions, which hints at when this tool is appropriate. However, it does not explicitly mention when to use this tool versus alternatives such as nhgis_search_time_series_tables or nhgis_list_data_tables, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_search_datasetsA
Search NHGIS datasets by keyword. Fetches all available datasets and returns those whose name, group (e.g. '2020 Census'), or description match the keyword. Use this to find which datasets cover a topic or census year before drilling into specific data tables.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Search term to match against dataset name, group, and description (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses a key behavioral trait: 'Fetches all available datasets and returns those whose name, group, or description match,' which hints at a broader fetch-then-filter approach. It does not cover pagination or return format, but for a simple read-only search, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the action, and every sentence adds value. The first sentence defines the operation and matching logic, the second provides usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 parameter, no output schema), and the description fully explains what it does, what it matches on, and when to use it. It doesn't describe return values, but that is not required given the lack of a complex output schema and the simplicity of a search operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the keyword parameter with a description identical to the tool's explanation: 'Search term to match against dataset name, group, and description (case-insensitive).' The tool description adds no new semantic details beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search NHGIS datasets by keyword' with a specific verb and resource. It further specifies the matching criteria (name, group, description) and distinguishes itself from sibling tools like nhgis_search_data_tables by mentioning 'before drilling into specific data tables.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage context: 'Use this to find which datasets cover a topic or census year before drilling into specific data tables.' This implies it is a discovery-first tool, though it does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_search_data_tablesA
Search NHGIS data tables by keyword. If a dataset is specified, searches all tables within that dataset (comprehensive). Without a dataset, scans up to 2,500 tables across all datasets β recommend using nhgis_search_datasets first to find a relevant dataset, then scoping the search here. Matches against table description and universe.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | No | Optional dataset identifier to scope the search (e.g. '2019_ACS5a'). Strongly recommended for comprehensive results. | |
| keyword | Yes | Search term to match against table description and universe (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It reveals the scan limit (up to 2,500 tables), the matching criteria, and that specifying a dataset yields comprehensive results. It stops short of detailing return format or pagination, but the provided behavioral context is strong for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core purpose, and each sentence adds critical value: what it does, how scope changes behavior, and a concrete recommendation. No redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides enough context for an agent to decide when to invoke and what to expect: searchable fields, scope limitations, and a recommended alternative workflow. It fully covers the tool's complexity and fits well within the sibling-tool ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters are already described. The description adds meaningful context beyond the schema: the 'dataset' parameter's impact on comprehensiveness and the keyword's matching scope. This enhances understanding of parameter usage, especially the recommended workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') with a clear resource ('NHGIS data tables'), and immediately differentiates from sibling tools by focusing on data tables rather than datasets or time series tables. It also specifies matching fields (description and universe), leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: without a dataset it scans up to 2,500 tables, and it recommends using nhgis_search_datasets first to scope the search. This directly addresses when to use this tool vs. alternatives and gives a clear workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhgis_search_time_series_tablesA
Search NHGIS time series tables by keyword. Fetches all ~400 time series tables (which span multiple census years with consistent geographic definitions) and returns those matching the keyword in their name or description.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Search term to match against time series table name and description (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool internally fetches all ~400 time series tables and then filters by keyword, which is a useful behavioral detail. However, it does not mention performance implications, return structure, or error cases, so it's informative but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose and a supporting clarification. Every sentence adds value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 parameter) and lack of output schema, the description adequately explains the tool's operation and the nature of time series tables. It doesn't specify the exact return format, but it's sufficient for a search tool. Some might want more detail, but it's largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the keyword parameter fully with case-insensitive matching explanation. The tool description adds the phrase 'name or description' but that essentially mirrors the schema. With 100% coverage, the baseline is 3, and the description adds minimal extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search NHGIS time series tables by keyword' with a specific verb and resource. It distinguishes from sibling tools like list (which likely returns all) and get (which fetches a specific table) by focusing on keyword-based filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (searching with a keyword) but does not explicitly compare to alternatives such as nhgis_list_time_series_tables or nhgis_get_time_series_table. It does not state when to use this tool instead of others, so while the context is clear, exclusions or alternative references are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct resources and actions, with a consistent list/get/search/create pattern. A few pairs like search_ vs list_ for datasets/tables could be confused, but descriptions clarify the distinction. Overall, only one or two tools have overlapping boundaries.
All tools follow a consistent prefix (nhgis_ or microdata_) with a verb_noun pattern (list_, get_, search_, create_, download_, wait_for_). Minor exceptions like extract_to_code and generate_ipums_citation are still clear and do not break the overall consistency.
23 tools is on the heavier side but justified by covering two substantial domains (NHGIS and IPUMS microdata) with browse, search, extract creation, status, and code generation. The count is slightly over the ideal range but each tool has a clear purpose.
The microdata workflow is complete: search variables/list samples, create extract, wait, download, generate code. However, the NHGIS side lacks a dedicated download tool (nhgis_get_extract only provides links) and a wait/poll tool analogous to microdata_wait_for_extract, leaving a significant gap for agents that need to fetch NHGIS files programmatically.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA demo MCP server with streamable HTTP transport and auto tool registry, enabling LLMs to connect with external data sources and tools.21
- AlicenseNot gradedqualityAmaintenanceMCP server to query U.S. Census Bureau data, variables, and geography through 7 tools supporting dataset discovery, variable search, geography resolution, and data queries with suppression code decoding.3242Apache 2.0
- AlicenseAqualityBmaintenanceAn MCP server that puts open data on tap, enabling LLM clients to search, inspect, and query 30,000+ civic datasets from Socrata portals with built-in guardrails like row caps and actionable error messages.4MIT
- FlicenseAqualityCmaintenanceAn MCP server that exposes the U.S. Energy Information Administration (EIA) Open Data API, enabling LLMs to browse and query energy data across 17 datasets with generic, composable tools.4
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hesscl/ipums-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server