edp-mcp
OfficialClick on "Deploy 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., "@edp-mcpShow total public school enrollment by state for 2022."
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.
education-data-mcp
An MCP server over the Urban Institute's Education Data Portal — harmonized federal education data (CCD, CRDC, IPEDS, EdFacts, SAIPE, College Scorecard, MEPS, PSEO) for schools, school districts, and colleges.
Queries the live EDP API. No API key required. Read-only.
Prerequisites
Python 3.11+
Related MCP server: mcp-data-oregon
Installation
git clone https://github.com/UrbanInstitute/education-data-mcp.git
cd education-data-mcp
uv syncTools
Six tools, following a discovery-first workflow:
Tool | Purpose |
| Find available datasets by level, source, topic, or keyword |
| Inspect a dataset's variables, filters, and coded value formats |
| Fetch raw data records with human-readable labels (by default) |
| Get aggregated statistics (counts, sums, averages) by group |
| Translate between codes and labels (e.g., FIPS 6 = California) |
| Find a school/district/college ID by name (e.g., "Harvard" → unitid 166027) |
Typical workflow: search_datasets → describe_dataset → get_summary or get_data, with lookup_codes and resolve_entity as needed.
Tool reference
search_datasets
Find available datasets.
Parameter | Type | Description |
| string (optional) |
|
| string (optional) |
|
| string (optional) |
|
| string (optional) | Keyword to match against dataset URLs and descriptions |
describe_dataset
Inspect a dataset's variables, filters, and coded value formats.
Parameter | Type | Description |
| string | Dataset path, raw template or filled in: |
| boolean (default: false) | Only show variables usable as query filters |
get_data
Fetch education data. Returns human-readable labels by default.
Parameter | Type | Description |
| string | A path with every |
| string (optional) | Query filters: |
| string (optional) | Columns to return: |
| boolean (default: true) | Decode coded values to human-readable labels |
| boolean (default: false) | Return a small labelled sample instead of a complete result |
get_summary
Get aggregated statistics from the Education Data Portal. Use for counts, totals, or averages across groups. Much faster than fetching raw data and computing yourself.
Parameter | Type | Description |
| string | The dataset path WITHOUT |
| string | Variable to aggregate: |
| string | Statistic: |
| string | Grouping variables (comma-separated): |
| string (optional) | Query filters: |
Results are always grouped by year in addition to the specified groupings.
Example: Total enrollment by state: get_summary(path="schools/ccd/enrollment", var="enrollment", stat="sum", by="fips")
lookup_codes
Look up code-to-label mappings. Use to find filter values (e.g., "California" = FIPS 6) or understand coded results.
Parameter | Type | Description |
| string | Format name from |
| string (optional) | Comma-separated codes: |
Coded values are field-specific. Code meanings come from each variable's API metadata, not a fixed table, and get_data/get_summary decode them to labels automatically. Negative codes often mean -1 = Missing/not reported, -2 = Not applicable, -3 = Suppressed for privacy — but not always: for grade, -1 means Pre-K (0 = Kindergarten). Use lookup_codes to see a variable's full, authoritative code list.
resolve_entity
Resolve a school, district, or college name to its ID for filtering. Use when you need to filter data by a specific entity.
Parameter | Type | Description |
| string | Name to search for (case-insensitive substring match) |
| string |
|
| integer (optional) | State FIPS code (e.g., 6 for California). Required for schools and districts |
| integer (default: 15) | Maximum number of results to return |
Returns matching entities with their IDs (ncessch for schools, leaid for districts, unitid for colleges) for use in get_data filters.
Running it
MCP Inspector (interactive testing)
uv run mcp dev src/edp_mcp/server.pyOpens a browser at http://localhost:6274 — connect, open Tools, and run
any tool with parameters.
Claude Desktop / Claude Code / VS Code / Copilot CLI
{
"mcpServers": {
"edp-mcp": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/education-data-mcp", "edp-mcp"]
}
}
}Client | Where it goes |
Claude Desktop |
|
Claude Code |
|
VS Code (Copilot) |
|
stdio (direct)
uv run edp-mcpStreamable HTTP (hosted)
MCP_TRANSPORT=streamable-http PORT=8080 uv run edp-mcpMCP is served at POST /mcp; GET /health is a plain unauthenticated health
check for a load balancer or orchestrator.
Variable | Default | Purpose |
|
|
|
|
| Listen port |
|
| Bind address |
| (unset) | Comma-separated |
| (unset) | Comma-separated |
Set MCP_ALLOWED_HOSTS to the public hostname before exposing this beyond a
private network. Both are unset by default, which leaves the SDK's
DNS-rebinding protection off — setting either turns it on. Note that enabling it
with an allow-list that omits the real hostname rejects every request.
Hosted
Also available as a hosted streamable-HTTP server: https://educationdata.urban.org/mcp/edp
Tests
uv run pytest -qTests use saved API fixtures (tests/fixtures/) with mocked HTTP, so no network
is needed. scripts/smoke_live.py exercises the real API end to end.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search and query government open-data portals (Socrata SODA API).
Access US federal award, recipient, agency, and spending analytics data from USAspending.gov.
HealthData.gov MCP — wraps HealthData.gov CKAN API (free, no auth)
UNESCO UIS statistics (education, science, culture) with full provenance and fixed releases.
Related MCP Servers
- AlicenseCqualityDmaintenanceProvides access to Urban Institute's Education Data API through Claude, enabling users to query and analyze detailed educational data from schools, districts, and universities.22MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching, querying, and retrieving metadata from Oregon Open Data (data.oregon.gov) via the Socrata SoQL API, with no API key required.51MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying Utah Open Data datasets via the Socrata SoQL API, including datasets, metadata, and row-level data retrieval.6MIT
- AlicenseNot gradedqualityCmaintenanceFederated MCP server that routes K-12 education data requests to public sources like Urban Institute, EDC/Zelma, NAEP, and MA E2C, handling comparability and provenance automatically.MIT