PopHIVE MCP Server
Integrates Google Health Trends search data to analyze population behavior and symptom patterns as part of its multi-source respiratory disease surveillance.
Provides access to the Yale School of Public Health's PopHIVE platform, enabling the analysis of comprehensive health surveillance data including immunizations, chronic diseases, and hospital capacity.
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., "@PopHIVE MCP ServerCompare child immunization rates between Texas and Florida"
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.
PopHIVE MCP Server
Featured on Claude, try it out here: https://claude.ai/directory/ant.dir.gh.cicatriiz.pophive
A Model Context Protocol (MCP) server that provides access to PopHIVE (Population Health Information Visual Explorer) public health data from Yale School of Public Health. This server exposes comprehensive health surveillance data including immunizations, respiratory diseases, and chronic diseases through standardized MCP tools, resources, and prompts.
🎯 Production-Ready: All critical bugs fixed, enhanced error handling, and comprehensive dataset metadata included.
📦 Desktop Extension Ready: Fully compliant with Anthropic's Desktop Extension (DXT) specification for one-click installation in Claude Desktop and other MCP-enabled applications.
What is PopHIVE?
PopHIVE (Population Health Information Visual Explorer) is Yale's comprehensive platform that aggregates near real-time public health data from authoritative sources including CDC surveillance systems, Epic Cosmos EHR networks, and Google Health Trends. It's an invaluable resource for epidemiologists, researchers, and public health professionals.
👉 Explore PopHIVE: https://www.pophive.org/
Related MCP server: WHO MCP Server
Recent Improvements
New Features
Implemented scrapers for three new datasets:
Hospital Capacity: Fetches state-level hospital utilization data from HealthData.gov.
Injury & Overdose: Fetches national-level injury and overdose death data from data.cdc.gov.
Youth Mental Health ED Visits: Fetches national-level data on youth mental health-related emergency department visits from data.cdc.gov.Performance Improvements
Implemented a parallel, batched initial fetch for the hospital capacity dataset to significantly speed up the first-time data download.
Added incremental update logic to all scrapers to only fetch new data, reducing subsequent load times.Bug Fixes
Corrected date parsing logic in the analysis tools to robustly handle various date formats across all datasets.
Fixed an issue where the hospital capacity scraper was not fetching all records.Overview
PopHIVE aggregates near real-time health data from multiple authoritative sources:
CDC National Immunization Survey (NIS): Gold-standard vaccination coverage data
Epic Cosmos EHR Network: Real-world clinical data from electronic health records
CDC Laboratory Surveillance (NREVSS): Respiratory virus test positivity rates
CDC Wastewater Surveillance (NWWS): Environmental viral monitoring
Google Health Trends: Population behavior and symptom search patterns
Features
🔧 MCP Tools
filter_data: Filter datasets by state, date range, demographics, and conditions
compare_states: Compare health metrics across multiple states with statistical analysis
time_series_analysis: Analyze trends over time with aggregation options
get_available_datasets: Comprehensive catalog of all available datasets
search_health_data: Search across datasets for specific conditions or keywords
📊 MCP Resources
dataset://immunizations_nis: CDC National Immunization Survey data
dataset://immunizations_epic: Epic Cosmos immunization data by demographics
dataset://respiratory_ed: Emergency department visits for respiratory viruses
dataset://respiratory_lab: Laboratory test positivity rates
dataset://respiratory_wastewater: Wastewater viral surveillance data
dataset://respiratory_trends: Google search trends for respiratory symptoms
dataset://chronic_obesity: Obesity prevalence by state and age group
dataset://chronic_diabetes: Diabetes prevalence and glycemic control data
dataset://hospital_capacity: HHS hospital capacity data
dataset://injury_overdose: CDC injury and overdose data
dataset://youth_ed_mental_health: CDC youth mental health ED visit data
💡 MCP Prompts
immunization_gaps: Analyze vaccination coverage gaps by demographics
respiratory_surge_detection: Detect and analyze respiratory disease surges
chronic_disease_trends: Analyze chronic disease prevalence trends
multi_source_analysis: Comprehensive analysis integrating multiple data sources
Installation
Option 1: Desktop Extension (Recommended)
For Claude Desktop users:
Download the
.dxtfile from the releases pageDouble-click the file to open with Claude Desktop
Click "Install" in the installation dialog
Configure any required settings (update frequency, cache size)
The extension will be automatically available in Claude Desktop
For other MCP-enabled applications:
Use the same
.dxtfile with any application supporting Desktop ExtensionsFollow your application's extension installation process
Option 2: Manual Installation
Prerequisites:
Node.js 18+
npm or yarn
Setup:
Clone and install dependencies:
git clone <repository-url>
cd pophive-mcp-server
npm installConfigure environment (optional):
# Create .env file for custom configuration
echo "DATA_CACHE_DIR=./data" > .env
echo "UPDATE_FREQUENCY=daily" >> .envTest the server:
npm testStart the server:
npm startOption 3: Build Your Own Extension
Create a Desktop Extension from source:
Install DXT CLI tools:
npm install -g @anthropic-ai/dxtClone and prepare:
git clone <repository-url>
cd pophive-mcp-server
npm installPackage as extension:
dxt packInstall the generated
.dxtfile in Claude Desktop or other MCP applications
Configuration
Environment Variables
Variable | Default | Description |
|
| Directory for cached data files |
|
| Data refresh frequency ( |
|
| Environment mode |
MCP Client Configuration
Add to your MCP client configuration (e.g., Claude Desktop):
{
"mcpServers": {
"pophive": {
"command": "node",
"args": ["server/index.js"],
"cwd": "/path/to/pophive-mcp-server"
}
}
}Dataset Selection Guide
Choose the right dataset for your analysis:
Dataset | Geographic Level | Best Use Cases | Date Range | Update Frequency | Key Limitations |
| National + State | National vaccination trends, state comparisons | 2019-2024 | Annual | Survey data, limited demographics |
| National + State | Real-world vaccination patterns, insurance analysis | 2020-2024 | Monthly | EHR network bias |
| National + State | Emergency department surveillance, outbreak detection | 2020-2024 | Weekly | Healthcare utilization only |
| National only | Clinical test positivity, laboratory surveillance | 2020-2024 | Weekly | National aggregates only |
| Regional | Environmental surveillance, early warning | 2022-2024 | Weekly | Limited geographic coverage |
| National + State | Population behavior, symptom searches | 2020-2024 | Weekly | Behavioral proxy, not clinical |
| National + State | Obesity prevalence, chronic disease tracking | 2020-2024 | Quarterly | Clinical populations only |
| National + State | Diabetes management, glycemic control | 2020-2024 | Quarterly | Clinical populations only |
| State | Hospital utilization, bed capacity, staffing shortages | 2020-2024 | Daily | COVID-era focus |
| National | Drug overdoses, homicides, suicides | 2019-2025 | Monthly/Quarterly | National aggregates only |
| National | Youth mental health ED visits, demographic trends | 2019-2025 | Monthly | National aggregates only |
Quick Dataset Selection
For national trends: Use immunizations_nis, respiratory_lab, or any dataset with geography="national"
For state comparisons: Use respiratory_ed, chronic_obesity, chronic_diabetes, or immunizations_nis
For real-time surveillance: Use respiratory_ed, respiratory_wastewater, or respiratory_trends
For clinical outcomes: Use immunizations_epic, chronic_obesity, or chronic_diabetes
Usage Examples
Basic Data Filtering
// ✅ WORKING: Filter immunization data for California
{
"tool": "filter_data",
"arguments": {
"dataset": "immunizations_nis",
"state": "CA"
}
}
// ✅ WORKING: Filter national immunization data
{
"tool": "filter_data",
"arguments": {
"dataset": "immunizations_nis",
"state": "US"
}
}
// ❌ AVOID: This will return 0 results
{
"tool": "filter_data",
"arguments": {
"dataset": "respiratory_lab",
"state": "CA" // respiratory_lab only has national data
}
}State Comparison
// ✅ WORKING: Compare obesity rates across states
{
"tool": "compare_states",
"arguments": {
"dataset": "chronic_obesity",
"states": ["CA", "TX", "FL", "NY"],
"metric": "prevalence_rate",
"time_period": "latest"
}
}
// ✅ WORKING: Compare vaccination coverage
{
"tool": "compare_states",
"arguments": {
"dataset": "immunizations_nis",
"states": ["California", "Texas", "New York"], // Full names work too
"metric": "coverage_rate"
}
}Time Series Analysis
// ✅ WORKING: Analyze national respiratory trends
{
"tool": "time_series_analysis",
"arguments": {
"dataset": "respiratory_ed",
"metric": "ed_visits_per_100k",
"geography": "national", // Use "national" for US-level data
"aggregation": "weekly"
}
}
// ✅ WORKING: Analyze state-level trends
{
"tool": "time_series_analysis",
"arguments": {
"dataset": "respiratory_ed",
"metric": "ed_visits_per_100k",
"geography": "CA",
"start_date": "2024-01-01",
"end_date": "2024-12-01"
}
}Search Health Data
// ✅ WORKING: Search with national geography
{
"tool": "search_health_data",
"arguments": {
"query": "RSV",
"geography": "national" // Fixed: Use "national" instead of "US"
}
}
// ✅ WORKING: Search specific datasets
{
"tool": "search_health_data",
"arguments": {
"query": "vaccination coverage",
"datasets": ["immunizations_nis", "immunizations_epic"]
}
}Using Prompts
// ✅ WORKING: Generate immunization gap analysis
{
"prompt": "immunization_gaps",
"arguments": {
"state": "Texas",
"demographic_focus": "insurance"
}
}
// ✅ WORKING: Detect respiratory surges
{
"prompt": "respiratory_surge_detection",
"arguments": {
"region": "California",
"virus_type": "RSV",
"time_period": "last_4_weeks"
}
}Common Issues & Solutions
Issue: "No data found" or 0 results
Cause: Geographic mismatch or dataset limitations
Solutions:
Check dataset capabilities: Use
get_available_datasetsto see supported geographiesUse correct geography values:
For national data:
"geography": "national"(not "US")For states: Use state codes ("CA") or full names ("California")
Try alternative datasets: Some datasets only support national-level analysis
// ❌ Problem: Wrong geography for national data
{
"tool": "search_health_data",
"arguments": {
"query": "influenza",
"geography": "US" // Should be "national"
}
}
// ✅ Solution: Use correct geography
{
"tool": "search_health_data",
"arguments": {
"query": "influenza",
"geography": "national"
}
}Issue: Empty results for state-level queries
Cause: Dataset only contains national-level data
Solutions:
Check dataset metadata first using
get_available_datasetsUse state-capable datasets:
respiratory_ed,chronic_obesity,chronic_diabetes,immunizations_nisSwitch to national analysis for datasets like
respiratory_lab
Issue: Metric not found
Cause: Incorrect metric name or dataset mismatch
Solutions:
Use dataset-appropriate metrics:
Immunizations:
coverage_rate,sample_sizeRespiratory:
ed_visits_per_100k,positivity_rateChronic:
prevalence_rate,patient_count
Check sample data using
get_available_datasetswithinclude_sample: true
Working Parameter Combinations
Immunization Analysis
// National vaccination trends
{
"tool": "time_series_analysis",
"arguments": {
"dataset": "immunizations_nis",
"metric": "coverage_rate",
"geography": "national"
}
}
// State vaccination comparison
{
"tool": "compare_states",
"arguments": {
"dataset": "immunizations_nis",
"states": ["CA", "TX", "NY", "FL"],
"metric": "coverage_rate"
}
}Respiratory Surveillance
// Emergency department trends
{
"tool": "filter_data",
"arguments": {
"dataset": "respiratory_ed",
"state": "CA",
"condition": "RSV"
}
}
// National lab surveillance
{
"tool": "time_series_analysis",
"arguments": {
"dataset": "respiratory_lab",
"metric": "positivity_rate",
"geography": "national"
}
}Chronic Disease Analysis
// Obesity prevalence by state
{
"tool": "filter_data",
"arguments": {
"dataset": "chronic_obesity",
"state": "TX",
"age_group": "18-64"
}
}
// Diabetes trends
{
"tool": "time_series_analysis",
"arguments": {
"dataset": "chronic_diabetes",
"metric": "prevalence_rate",
"geography": "CA"
}
}Data Sources & Quality
Immunization Data
NIS Data: Household survey, gold standard for coverage rates
Epic Cosmos: EHR data with demographic breakdowns
Update Frequency: Annual (NIS), Monthly (Epic)
Geographic Level: State
Quality: High confidence, large sample sizes
Respiratory Disease Surveillance
ED Visits: Near real-time healthcare utilization
Lab Data: Clinical test positivity rates
Wastewater: Environmental viral monitoring (early indicator)
Search Trends: Population behavior signals
Update Frequency: Weekly
Quality: High for clinical data, moderate for environmental/behavioral
Chronic Disease Data
Source: Epic Cosmos EHR network
Metrics: Clinical measurements (BMI, HbA1c)
Update Frequency: Quarterly
Geographic Level: State with age stratification
Quality: High - real-world clinical data
API Reference
Tools
filter_data
Filter datasets by various criteria.
Parameters:
dataset(required): Dataset identifierstate(optional): State code or namestart_date(optional): Start date (YYYY-MM-DD)end_date(optional): End date (YYYY-MM-DD)age_group(optional): Age group filtercondition(optional): Condition/metric filter
compare_states
Compare health metrics across multiple states.
Parameters:
dataset(required): Dataset identifierstates(required): Array of state codes/namesmetric(required): Metric to comparetime_period(optional): Time period for comparison
time_series_analysis
Analyze trends over time.
Parameters:
dataset(required): Dataset identifiermetric(required): Metric to analyzegeography(optional): Geographic focusstart_date(optional): Analysis start dateend_date(optional): Analysis end dateaggregation(optional): Time aggregation (weekly,monthly,quarterly,yearly)
Resources
All resources return JSON data with standardized schemas:
// Example immunization record
{
"geography": "CA",
"year": 2024,
"vaccine": "MMR",
"age_group": "19-35 months",
"coverage_rate": 96.1,
"sample_size": 1876,
"source": "CDC NIS"
}
// Example respiratory surveillance record
{
"geography": "US",
"date": "2024-12-01",
"week": "2024-48",
"virus": "RSV",
"ed_visits_per_100k": 3.8,
"percent_change": 15.2,
"source": "Epic Cosmos"
}Development
Project Structure
pophive-mcp-server/
├── server/
│ ├── index.js # Main MCP server
│ ├── utils/
│ │ └── data-loader.js # Data loading and caching
│ ├── tools/
│ │ └── analysis-tools.js # MCP tool implementations
│ ├── prompts/
│ │ └── prompt-templates.js # MCP prompt templates
│ └── scrapers/
│ ├── immunizations.js # Immunization data scraper
│ ├── respiratory.js # Respiratory data scraper
│ └── chronic-diseases.js # Chronic disease data scraper
├── data/ # Cached data files
├── package.json
├── manifest.json # MCP server manifest
└── README.mdAdding New Data Sources
Create a scraper in
server/scrapers/Update data loader to include new datasets
Add resource mappings in the main server
Update tool logic to handle new data types
Create prompts for new analysis types
Testing
# Run all tests
npm test
# Test specific components
npm run test:tools
npm run test:scrapers
npm run test:integrationData Refresh
The server automatically refreshes data based on the UPDATE_FREQUENCY setting. Manual refresh:
npm run refresh-dataTroubleshooting
Common Issues
Server won't start:
Check Node.js version (18+ required)
Verify all dependencies installed:
npm installCheck for port conflicts
No data returned:
Data may be initializing on first run
Check data directory permissions
Verify network connectivity for scraping
MCP client connection issues:
Verify server path in client configuration
Check server logs for errors
Ensure MCP client supports stdio transport
Logging
Server logs are written to stderr and include:
Data scraping activities
Tool execution results
Error messages and stack traces
Enable verbose logging:
DEBUG=pophive:* npm startContributing
Fork the repository
Create a feature branch
Make changes with tests
Submit a pull request
Code Style
Use ESLint configuration
Follow existing patterns
Add JSDoc comments for public APIs
Include error handling
License
MIT License - see LICENSE file for details.
Support
Issues: GitHub Issues
Documentation: This README and inline code comments
Data Questions: Refer to original PopHIVE sources
Acknowledgments
Yale School of Public Health for PopHIVE initiative
CDC for surveillance data systems
Epic Systems for Cosmos EHR network data
Model Context Protocol community for standards
Available Tools
5 toolscompare_statesC
Compare health metrics across multiple states
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | Specific metric to compare (e.g., "vaccination_rate", "ed_visits", "positivity_rate") | |
| states | Yes | Array of state codes or names to compare | |
| dataset | Yes | Dataset to analyze | |
| time_period | No | Time period for comparison (e.g., "latest", "2024", "last_6_months") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states that it compares metrics, implying a read operation, but does not disclose what the output looks like, any limitations, or side effects. For a tool with required parameters and no output schema, this is insufficient.
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 concise sentence with no unnecessary words. It effectively communicates the core purpose without redundancy. It could be slightly expanded to include usage guidance without losing conciseness, but given its current length, it 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 has 4 parameters (3 required), no output schema, and no annotations, the 6-word description is too minimal. It does not explain what the comparison output is, any constraints beyond schema, or how results are structured. The description leaves significant gaps for an agent trying to 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 has 100% description coverage for its 4 parameters. The description adds no additional meaning beyond the schema; it simply echoes the tool's purpose. According to the rubric, with coverage >80%, baseline is 3, and the description does not improve it.
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 'Compare health metrics across multiple states' clearly states the verb (compare) and resource (health metrics across states). While it distinguishes from siblings like filter_data and time_series_analysis, it does not explicitly differentiate from search_health_data which could also compare across states. Still, the purpose is well communicated.
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 siblings like filter_data, get_available_datasets, search_health_data, or time_series_analysis. There is no mention of prerequisites or context that would help an agent choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_dataB
Filter PopHIVE datasets by various criteria (state, date range, demographics)
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | State code (e.g., CA, TX, NY) or state name | |
| dataset | Yes | Dataset to filter | |
| end_date | No | End date for filtering (YYYY-MM-DD) | |
| age_group | No | Age group to filter by (e.g., "0-2 years", "18-64", "65+") | |
| condition | No | Health condition or metric to filter by | |
| start_date | No | Start date for filtering (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It states the tool filters data, but does not mention whether it is read-only, pagination, limits, or side effects. For a filter tool, read-only nature should be explicit.
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, front-loaded with the main action, and contains no unnecessary words. It is concise and to the point.
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 has 6 parameters (1 required) and no output schema or annotations, the description is minimal. It lacks details on return format, empty results, sorting, or limits. For a filter tool with many optional filters, more context would improve completeness.
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 all parameters are documented there. The description adds a summary of criteria categories but no additional meaning beyond the schema. 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 action ('filter'), the resource ('PopHIVE datasets'), and examples of criteria ('state, date range, demographics'). It distinguishes from sibling tools like 'compare_states' or 'time_series_analysis' which have different purposes.
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 (for filtering datasets), but does not explicitly compare to siblings like 'search_health_data' or 'get_available_datasets'. No when-not-to-use or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_datasetsB
Get comprehensive information about all available PopHIVE datasets
| Name | Required | Description | Default |
|---|---|---|---|
| include_sample | No | Include sample data for each dataset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions 'comprehensive information' but does not specify what that includes (e.g., dataset names, descriptions, metadata). The include_sample parameter hints at sample data but behavior is not fully disclosed (e.g., data volume, pagination, response format).
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 short sentence, which is functional but could be more informative. It is not excessively verbose but lacks some useful context. It is adequately concise but not exemplary.
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 (1 optional param, no output schema), the description is minimal. It does not explain what datasets are, what information is returned, or how it fits with sibling tools. More context about data discovery workflow would improve completeness.
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 the boolean parameter already well-described. The description does not add significant extra meaning beyond the schema's 'Include sample data for each dataset'. The baseline is 3, and no additional value is provided.
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 'Get comprehensive information about all available PopHIVE datasets', specifying the verb (Get), resource (available datasets), and scope (all). It distinguishes well from sibling tools like compare_states and filter_data, which are more specific operations.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention that this tool should be used first to discover available datasets before applying filters or analyses. The description lacks any usage context or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_health_dataB
Search across all datasets for specific health conditions, metrics, or keywords
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (health condition, metric name, or keyword) | |
| datasets | No | Specific datasets to search (if empty, searches all) | |
| geography | No | Geographic filter for search results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits like output format, pagination, or data sources. It only says 'search' and does not explain what the result looks like or any constraints, leaving the agent blind to key behaviors.
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 concise sentence that front-loads the main purpose. It could be slightly expanded without losing conciseness, but it is efficient and to the point.
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 has no output schema and no annotations, the description is too minimal. It does not explain return format, result structure, or how to further refine searches, leaving significant gaps for a search 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%, so the description does not need to add meaning for parameters. The description does not provide additional semantics beyond what is already in the schema's property 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 clearly states the action ('Search across all datasets') and the target ('health conditions, metrics, or keywords'). It differentiates from siblings like 'compare_states' or 'time_series_analysis' by focusing on generic search across all datasets.
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. Sibling tools are listed but there is no explicit differentiation or recommendation on which to choose for specific tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_series_analysisC
Analyze trends over time for specific health metrics
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | Metric to analyze over time | |
| dataset | Yes | ||
| end_date | No | ||
| geography | No | Geographic focus (state, region, or "national") | |
| start_date | No | ||
| aggregation | No | monthly |
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 does not disclose whether the tool is read-only, what data freshness assumptions exist, or if side effects occur. The output format is not mentioned, leaving the agent uncertain about what to expect.
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, which is efficient and front-loaded with the core purpose. However, it is too concise at the expense of necessary detail, bordering on under-specification.
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 6 parameters, the description fails to explain return values, default behaviors (e.g., start_date not required), or what happens if dates are omitted. The tool lacks sufficient context for an agent to invoke it correctly without additional knowledge.
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 only 33%, and the description adds no additional meaning beyond the schema's parameter names. For example, 'metric' and 'geography' lack elaboration, and the description does not clarify valid metric values or date range implications.
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 states 'Analyze trends over time for specific health metrics,' which clearly indicates the tool's purpose of time series analysis on health metrics. However, it lacks specificity about the type of analysis (e.g., modeling, forecasting) and does not differentiate from sibling tools like compare_states or filter_data.
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?
No usage guidelines are provided. The description does not specify when to use this tool versus alternatives like compare_states or search_health_data. There is no guidance on prerequisites, data context, or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
- Added
compare_states - Added
filter_data - Added
get_available_datasets - Added
search_health_data - Added
time_series_analysis
5 tool updates
v1.1.0- Removed
compare_states - Removed
filter_data - Removed
get_available_datasets - Removed
search_health_data - Removed
time_series_analysis
5 tool updates
v1.0.0- First observed
compare_states - First observed
filter_data - First observed
get_available_datasets - First observed
search_health_data - First observed
time_series_analysis
TDQS
Each tool serves a clearly distinct purpose: comparing states, filtering datasets, listing datasets, searching, and time series analysis. No two tools have overlapping functionality.
Most tools follow a verb_noun pattern (compare_states, filter_data, get_available_datasets, search_health_data). time_series_analysis is slightly less imperative but still descriptive and consistent in style.
With 5 tools, the server is well-scoped for a health data exploration API. Each tool addresses a key operation without redundancy or bloat.
The tool set covers core data exploration needs: discovery, search, filtering, comparison, and trend analysis. Minor missing features like data export exist but are optional for a query-focused server.
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
Search and query CDC public health data — mortality, vaccinations, surveillance, behavioral risk.
County and tract-level health outcomes, behaviors, and preventive services from CDC PLACES
The adaptive health-messaging engine for apps and agents. Federally-sourced. Not medical advice.
US healthcare data for AI agents: CMS, FDA adverse events, CDC, NPPES NPI. Keyless, real samples.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to securely access Epic Healthcare Systems patient data through FHIR R4 API integration. Provides tools for searching patients, retrieving clinical summaries, vital signs, medications, and generating healthcare reports with HIPAA-compliant OAuth 2.0 authentication.-
- AlicenseBqualityDmaintenanceProvides access to the World Health Organization's Global Health Observatory data, enabling AI assistants to search, retrieve, and analyze comprehensive health indicators, country statistics, disease burden data, and regional health trends through WHO's OData API.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to 73 CDC public health datasets covering disease surveillance, vaccination tracking, behavioral risk factors, environmental health, and outbreak detection across 18 surveillance systems through the Socrata Open Data API.2MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query and analyze FDA adverse events, drug labels, medical device clearances, and other public health datasets through natural language commands.13-
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/Cicatriiz/pophive-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server