College Scorecard MCP Server
Click 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., "@College Scorecard MCP Serversearch for colleges with high median earnings"
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.
Overview
U.S. college data from the Department of Education College Scorecard API — costs, earnings, programs, and outcomes across roughly 6,500 Title IV institutions. Search and compare schools, look up program-level earnings by field of study, and compute ROI metrics like debt-to-earnings ratio from any MCP client. Runs as a stdio process or a local Streamable HTTP server.
Tools
Tool | Description |
| Search institutions by name, location, type, size, acceptance rate, and single-sex flags; sort by supported API fields. Returns core identity and cost metrics. |
| Full institutional profiles — costs, admissions, outcomes, aid, demographics, single-sex flags, and completion rates. |
| Normalized side-by-side comparison of 2–5 schools on a named topic. Returns percentile-ranked rows and relative deltas within the result set. |
| Field-of-study programs at one school: median 1-year earnings, cumulative Stafford/Grad PLUS debt, and IPEDS awards in the two pooled debt-cohort years. |
| Find programs by CIP code or keyword, with school, earnings, and debt filters; rank by earnings within each fetched school page. |
| Institution-level post-graduation earnings for one school — median at 6, 8, and 10 years after entry (P25/P75 at 6 and 10 years), with optional gender breakdown. |
| Workflow tool: parallel-fetches cost, debt, repayment, and earnings data, then computes ROI metrics — debt-to-earnings ratio and net price to earnings ratio. |
| Search 202 curated Classification of Instructional Programs (CIP) codes by keyword or partial name. Served from embedded static data — no API call or rate-limit impact. |
| Search the Scorecard field catalog by keyword. Returns matching field paths, descriptions, data types, and sort support. Use before passing custom |
Resources
Resource | Description |
| Institutional profile by unit ID — injectable context for school-specific conversations |
| Program-level outcomes for a school |
All resource data is also reachable via tools. Use scorecard_search_schools or scorecard_get_school to discover school IDs before constructing resource URIs.
Prompts
Prompt | Description |
| Structures a multi-school comparison analysis using Scorecard data |
Related MCP server: mcp-college-scorecard
Capability reference
scorecard_search_schools tool
Search by name, state, ownership, degree level, size, acceptance rate, CIP code, or zip code and distance;
per_pageis capped at 100 with zero-indexedpage.Returns core identity and cost metrics for quick scanning.
sortforwards a supported API expression such aslatest.cost.avg_net_price.overall:asc(:descreverses it).men_onlyandwomen_onlyaccept true or false; omission includes unknown flags, while false selects only explicit zero values.
scorecard_get_school tool
Accepts a single school ID or an array of up to 100 IDs per call.
Returns institutional profiles covering costs, admissions, outcomes, financial aid, demographics, and completion rates;
fieldsoverrides the default selection.men_onlyandwomen_onlypreserve true/false when known and are absent when unknown.
scorecard_compare_schools tool
Accepts 2–5 school unit IDs and one topic:
costs,admissions,outcomes, oraid.Returns comparison rows with within-set percentile ranks and relative deltas from a single API call.
scorecard_get_programs tool
Accepts one school ID, with optional CIP code,
credential_level, and minimum earnings filters.Returns median earnings and the matching count of graduates working and not enrolled 1 year after their highest credential, with
suppressedandsuppression_notefor unavailable earnings.median_debtis completers' cumulative Stafford/Grad PLUS borrowing across attended institutions at the same academic level.ipeds_awards_year1andipeds_awards_year2count awards in each year of the pooled debt cohort, not enrollment or unique students.
scorecard_search_programs tool
Search by CIP code or program name, with state, ownership, net price, earnings, and debt filters; zero-indexed
pageandper_page(up to 100) paginate schools, so returned program rows may exceedper_page.Returns school IDs and names alongside program metrics, sorted by earnings within the fetched page.
min_earningsfilters locally; totals and pagination remain upstream school counts before local filtering. Earnings/debt thresholds are inclusive and exclude unknown values. Debt and award fields have the same meanings as inscorecard_get_programs.
scorecard_get_earnings tool
Accepts one school ID and optional
yearsfor cohort trends and a gender-breakdown option.Returns median earnings at 6, 8, and 10 years after entry, P25/P75 at 6 and 10 years, and optional 6-year female/male medians;
suppressedandsuppression_noteflag earnings unavailable at every time point.Each requested trend year adds its 6-year and 10-year median alongside the current snapshot.
scorecard_value_analysis tool
Accepts one school ID; optional
family_incomeselects the applicable net price bracket ($0–30k, $30k–48k, $48k–75k, $75k–110k, or $110k+).Returns debt-to-earnings and net-price-to-earnings ratios alongside the source figures;
data_notesexplains suppressed or missing fields.
scorecard_lookup_cip tool
Search by keyword or partial name with
limitup to 50 (default 20); use before CIP filters when the code is unknown.Returns codes, standard titles, and CIP families from a curated offline set of 202 common 4-digit codes, rather than the full NCES taxonomy.
scorecard_list_fields tool
Search 80 curated offline field entries with
limitup to 100 (default 30); use before passing customfieldstoscorecard_get_school.Returns field paths, descriptions, data types, categories, and API sorting support;
tipflags results containing unsortable fields.
scorecard://school/{id} resource
Institutional profile as
application/json— identity, cost, admissions, outcomes, aid, and completion dataidis the school unit ID (integer as string) fromscorecard_search_schoolslistreturns a handful of example school URIs; usescorecard_search_schoolsto discover others
scorecard://programs/{id} resource
Program-level outcomes as
application/json— CIP code, title, credential level, 1-year earnings, cumulative Stafford/Grad PLUS debt, andipeds_awards_year1/ipeds_awards_year2with the same meanings as the program tools; missing metrics are nullidis the school unit ID fromscorecard_search_schoolslistreturns a handful of example school URIs; usescorecard_search_schoolsto discover others
scorecard_compare_prompt prompt
Arguments:
school_names(comma-separated list) andfocus(costs|outcomes|programs), both requiredReturns one user message sequencing
scorecard_search_schools→scorecard_compare_schools→scorecard_get_school, plusscorecard_get_programs/scorecard_lookup_cipwhen focus isprogramsorscorecard_value_analysisotherwise
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
College Scorecard-specific:
Full College Scorecard API coverage: ~6,500 Title IV institutions, ~2,800 data fields spanning costs, outcomes, demographics, financial aid, and field-of-study earnings
Program-level earnings: median earnings of graduates working and not enrolled 1 year after their highest credential, per school × CIP code × credential level
Field pre-selection per tool — curated field sets appropriate to each tool's purpose; optional
fieldsoverride for custom queriesEmbedded CIP code taxonomy (202 codes) and field catalog (80 fields) served as static data — zero API calls, zero rate-limit impact
Geographic filtering via U.S. zip code + distance radius
Agent-friendly output:
FERPA suppression surfaced as structured
suppressed: trueflag withsuppression_note— prevents hallucination of missing earnings data at selective schools with small cohortsDerived metrics alongside source figures in
scorecard_value_analysis— agents can verify arithmetic and branch on computed values, not raw numbersPercentile ranks and relative deltas in
scorecard_compare_schools— structured output an agent cannot reconstruct from raw profiles without knowing the full comparison setSchool sorting uses indexed API fields; check
scorecard_list_fieldsbefore choosing a sort expression. Six-year earnings does not support API sorting. Program earnings ordering applies within each fetched school page.
Getting started
Add the following to your MCP client configuration file. See api.data.gov/signup for a free API key.
{
"mcpServers": {
"college-scorecard-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/college-scorecard-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"SCORECARD_API_KEY": "your-api-key"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"college-scorecard-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/college-scorecard-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"SCORECARD_API_KEY": "your-api-key"
}
}
}
}Or with Docker:
{
"mcpServers": {
"college-scorecard-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "SCORECARD_API_KEY=your-api-key",
"ghcr.io/cyanheads/college-scorecard-mcp-server:latest"
]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 SCORECARD_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.4.0 or higher (or Node.js v24+).
A College Scorecard API key — free registration at api.data.gov/signup. Rate limit: 1,000 requests/hour per key.
Installation
Clone the repository:
git clone https://github.com/cyanheads/college-scorecard-mcp-server.gitNavigate into the directory:
cd college-scorecard-mcp-serverInstall dependencies:
bun installConfigure environment:
cp .env.example .env
# edit .env and set SCORECARD_API_KEYConfiguration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:
Variable | Description | Default |
| Required. API key from api.data.gov. 1,000 req/hour rate limit. | — |
| Transport: |
|
| HTTP server port |
|
| HTTP endpoint path where the MCP server is mounted |
|
| Public origin override for TLS-terminating reverse-proxy deployments | none |
| HTTP session mode: |
|
| Authentication: |
|
| Log level ( |
|
| Opt-in forced-GC pressure loop (ms, Bun only). Try |
|
| Directory for log files (Node.js only) |
|
| Storage backend: |
|
|
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t college-scorecard-mcp-server .
docker run --rm -e SCORECARD_API_KEY=your-key -p 3010:3010 college-scorecard-mcp-serverThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/college-scorecard-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Directory | Purpose |
|
|
| Server-specific environment variable parsing and validation with Zod. |
| Tool definitions ( |
| Resource definitions. School profile and program outcomes resources. |
| Prompt definitions. Multi-school comparison prompt. |
|
|
| Unit and integration tests mirroring |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storageRegister new tools, resources, and prompts in the
createApp()arrays insrc/index.tsWrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search US colleges and compare historical admissions, costs and aid using public federal data.
College Scorecard MCP — US Department of Education College Scorecard API
Higher education data: tuition, graduation rates, and earnings
Education Data MCP — US K-12 schools, districts, funding and child poverty.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceQuery SEC EDGAR filings, XBRL financials, and company data through MCP.669 npm10Apache 2.0
- AlicenseNot gradedqualityBmaintenanceCollege Scorecard MCP — US Department of Education College Scorecard API226 npmMIT
- FlicenseAqualityDmaintenanceSearches US colleges and scholarships using government data, enabling comparisons of tuition, debt, earnings, and program-specific outcomes.4-
- AlicenseAqualityDmaintenanceMCP server to query UK higher-education open data including National Student Survey results, student outcomes, and graduate earnings. Data is downloaded locally from official sources and compared against benchmarks.5MIT