# EPA EJScreen

> Environmental justice screening indicators, pollution burden, and demographic vulnerability

- name: com.olyport/ejscreen
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 72/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.olyport%2Fejscreen
- tools: https://api.protogrid.dev/v1/servers/com.olyport%2Fejscreen/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ejscreen": {
      "type": "http",
      "url": "https://mcp.olyport.com/ejscreen/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 45
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% -stale-201d -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_ej_data_by_location (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_ej_county_summary (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_ej_state_summary (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,099 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 1,099 tokens to load them all
- tool set hash: 17889f5c4521ae4bbb368ad058bac899
- badge: [![protogrid quality](https://protogrid.dev/badge/com.olyport/ejscreen.svg)](https://protogrid.dev/servers/com.olyport/ejscreen)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.olyport.com/ejscreen/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (5)

- `get_demographic_indicators`: Get demographic vulnerability indicators by block group.

    Returns demographic data including minority percentage, low income
    percentage, linguistic isolation, education levels, and age
    distributions. These are the demographic components used in
    EJScreen's EJ index calculations.

    Args:
        state: Two-letter US state abbreviation (e.g. 'WA', 'CA').
        county_fips: Optional county FIPS code (3-digit or 5-digit).
                     If omitted, returns state-level results sorted by
                     highest demographic index.
        limit: Maximum number of block groups to return (default 50, max 500).
    
- `get_ej_county_summary`: Get EJ indicators for census block groups in a county.

    Returns EJScreen environmental justice data for block groups within
    the specified county, sorted by highest overall environmental burden.
    Includes environmental indicators, demographic data, and EJ indexes.

    Args:
        state: Two-letter US state abbreviation (e.g. 'WA', 'CA').
        county_fips: County FIPS code, either 5-digit full (e.g. '53033')
                     or 3-digit county portion (e.g. '033'). If 3 digits,
                     state FIPS is prepended automatically.
        limit: Maximum number of block groups to return (default 50, max 500).
    
- `get_ej_data_by_location`: Get EJScreen environmental justice data for a specific location.

    Uses the EPA EJScreen REST broker to retrieve EJ screening indicators
    for a point location with a buffer distance. Returns environmental
    indicators, demographic data, and EJ indexes.

    Args:
        latitude: Latitude of the location (e.g. 47.61).
        longitude: Longitude of the location (e.g. -122.33).
        distance: Buffer distance in miles around the point (default 1.0).
    
- `get_ej_state_summary`: Get a state-level overview of EJ indicators across block groups.

    Returns the most environmentally burdened block groups in the state,
    sorted by PM2.5 percentile. Useful for identifying areas with the
    highest environmental justice concerns.

    Args:
        state: Two-letter US state abbreviation (e.g. 'WA', 'CA').
        limit: Maximum number of block groups to return (default 100, max 500).
    
- `get_environmental_indicators`: Get specific environmental indicators by block group.

    Returns environmental indicator values and state percentiles for
    block groups. Can filter to a specific indicator type or return all.

    Args:
        state: Two-letter US state abbreviation (e.g. 'WA', 'CA').
        county_fips: Optional county FIPS code (3-digit or 5-digit).
                     If omitted, returns state-level results.
        indicator: Optional specific indicator to focus on. Options:
                   'pm25', 'ozone', 'diesel', 'cancer', 'respiratory',
                   'traffic', 'lead', 'superfund', 'hazwaste',
                   'wastewater', 'rmp', 'ust'. If omitted, returns all.
        limit: Maximum number of block groups to return (default 50, max 500).
    
