io.github.cyanheads/college-scorecard-mcp-server
Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes.
Que pouvez-vous faire avec io.github.cyanheads/college-scorecard-mcp-server ?
- 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 queries - Embedded CIP taxonomy (186 groups) and field catalog (78 fields) served offline
- Geographic filtering via U.S. zip code + distance radius
- Availability distinguishes numbers (including zero), missing values, and explicit
PS/PrivacySuppressedprovider markers - Derived metrics sit alongside source figures in
scorecard_value_analysis, andscorecard_compare_schoolsadds ordinal ranks - School sorting uses indexed API fields; check
scorecard_list_fieldsbefore choosing a sort expression. Six-year earnings does not support API sorting.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
claude mcp add --transport http college-scorecard-mcp-server 'https://college-scorecard.caseyjhand.com/mcp'
{
"mcpServers": {
"college-scorecard-mcp-server": {
"type": "http",
"url": "https://college-scorecard.caseyjhand.com/mcp"
}
}
}
@cyanheads/college-scorecard-mcp-serverclaude mcp add college-scorecard-mcp-server -e 'SCORECARD_API_KEY=<SCORECARD_API_KEY>' -e 'MCP_LOG_LEVEL=info' -- npx -y @cyanheads/college-scorecard-mcp-server@0.4.0
{
"mcpServers": {
"college-scorecard-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/college-scorecard-mcp-server@0.4.0"
],
"env": {
"SCORECARD_API_KEY": "<SCORECARD_API_KEY>",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Variables d'environnement
SCORECARD_API_KEYobligatoire Required API key for the College Scorecard API. Free registration at https://api.data.gov/signup/. Rate limit: 1,000 requests/hour.MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
@cyanheads/college-scorecard-mcp-serverclaude mcp add college-scorecard-mcp-server -e 'MCP_TRANSPORT_TYPE=<MCP_TRANSPORT_TYPE>' -e 'SCORECARD_API_KEY=<SCORECARD_API_KEY>' -e 'MCP_HTTP_HOST=127.0.0.1' -e 'MCP_HTTP_PORT=3010' -e 'MCP_HTTP_ENDPOINT_PATH=/mcp' -e 'MCP_AUTH_MODE=none' -e 'MCP_LOG_LEVEL=info' -- npx -y @cyanheads/college-scorecard-mcp-server@0.4.0
{
"mcpServers": {
"college-scorecard-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/college-scorecard-mcp-server@0.4.0"
],
"env": {
"MCP_TRANSPORT_TYPE": "<MCP_TRANSPORT_TYPE>",
"SCORECARD_API_KEY": "<SCORECARD_API_KEY>",
"MCP_HTTP_HOST": "127.0.0.1",
"MCP_HTTP_PORT": "3010",
"MCP_HTTP_ENDPOINT_PATH": "/mcp",
"MCP_AUTH_MODE": "none",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Variables d'environnement
MCP_TRANSPORT_TYPESelects the HTTP transport.SCORECARD_API_KEYobligatoire Required API key for the College Scorecard API. Free registration at https://api.data.gov/signup/. Rate limit: 1,000 requests/hour.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODEAuthentication mode to use: 'none', 'jwt', or 'oauth'.MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
@cyanheads/college-scorecard-mcp-server
Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes — via MCP. STDIO or Streamable HTTP.
9 Tools • 2 Resources • 1 Prompt
Public Hosted Server: https://college-scorecard.caseyjhand.com/mcp
Overview
US college data from the Department of Education College Scorecard: costs, earnings, programs, and outcomes across roughly 6,500 institutions. Search and compare schools, look up earnings by field of study, and compute ROI metrics like debt-to-earnings ratio.
Tools
| Tool | Description |
|---|---|
scorecard_search_schools | Search institutions by name, location, type, size, acceptance rate, and single-sex flags; sort by supported API fields. Returns core identity and cost metrics. |
scorecard_get_school | Full institutional profiles — costs, admissions, outcomes, aid, demographics, single-sex flags, and completion rates. |
scorecard_compare_schools | Normalized side-by-side comparison of 2–5 schools on a named topic. Returns metric values, ordinal ranks, and a comparison summary. |
scorecard_get_programs | 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. |
scorecard_search_programs | Find programs by CIP and credential or keyword, retain degree identity, and rank earnings within each fetched school page. |
scorecard_get_earnings | Earnings of federally aided undergraduate entrants working and not enrolled, regardless of completion: 6/8/10-year medians, 6/10-year P25/P75, and non-male/male 6-year medians. |
scorecard_value_analysis | Workflow tool: parallel-fetches cost, debt, repayment, and earnings data, then computes ROI metrics — debt-to-earnings ratio and net price to earnings ratio. |
scorecard_lookup_cip | Search 186 curated NCES CIP 2020 four-digit groups by code, keyword, or related program name. Served offline. |
scorecard_list_fields | Search the Scorecard field catalog by keyword. Returns matching field paths, descriptions, data types, and sort support. Use before passing custom fields parameters. |
Resources
| Resource | Description |
|---|---|
scorecard://school/{id} | Institutional profile by unit ID — injectable context for school-specific conversations |
scorecard://programs/{id} | 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 |
|---|---|
scorecard_compare_prompt | Structures a multi-school comparison analysis using Scorecard data |
Capability reference
scorecard_search_schools tool
- Search by name, state, ownership, degree level, size, acceptance rate, CIP code, or ZIP and distance (miles or
km).per_pageis capped at 100;pageis zero-indexed. State lists acceptWA,CA. - Returns core identity and cost metrics for quick scanning.
sorttakes an API expression such aslatest.cost.avg_net_price.overall:asc(:descreverses it).men_onlyandwomen_onlyaccept true or false.
scorecard_get_school tool
- Accepts a school ID or an array of up to 1,000. The first 100 distinct IDs are fetched;
missing_idslists fetched IDs with no record andunprocessed_idslists the excess. - Default profiles cover costs, admissions, outcomes, financial aid, demographics, and completion rates. Custom
fieldsreturnsselected_fieldswith the requested values, andabsent_fieldslists requested paths missing from the response. - HBCU and single-sex flags are true/false when known and unknown when absent.
scorecard_compare_schools tool
- Accepts 2–5 school unit IDs and one topic:
costs,admissions,outcomes, oraid. - Returns metric values and ranks from one API call: equal values share a rank (1, 1, 3) and unavailable values are unranked.
- Each cell's
availabilitydistinguishes available, unavailable, and privacy-suppressed values.
scorecard_get_programs tool
- Accepts one school ID, with optional CIP code (dotted or undotted),
credential_level, and minimum earnings filters. A school with no matching programs returns an empty collection; a nonexistent school is a lookup error. - Returns median earnings and graduate counts 1 year after the highest credential.
earnings_availabilityisavailable,unavailable, orprivacy_suppressed, withsuppressed_countandunavailable_count. median_debtis completers' cumulative Stafford/Grad PLUS borrowing.ipeds_awards_year1andipeds_awards_year2count awards in each year of the pooled debt cohort, not students.
scorecard_search_programs tool
- Search by CIP code or program name, with optional integer
credential_level(1–8 and 99), state, ownership, net price, earnings, and debt filters. Zero-indexedpageandper_page(up to 100) paginate schools, so returned program rows may exceedper_page. - Returns school IDs and names with program metrics,
credential_level, andcredential_title. Available earnings sort first; availability, debt, and award fields matchscorecard_get_programs. min_earningsfilters locally, so totals and pagination are upstream school counts before filtering. Earnings and debt thresholds are inclusive and exclude unknown values.
scorecard_get_earnings tool
- Accepts one school ID and optional data-file start
yearsfrom 1996–2025 (file vintages, not entry years). Omityearsor pass[]for the snapshot only. - Covers federally aided undergraduate entrants working and not enrolled, regardless of completion: medians at 6/8/10 years after entry, 6/10-year P25/P75, and non-male/male 6-year medians.
current_availabilityandtrend[].availabilityclassify each metric.current_contextandtrend[].contextgivedata_file_year,entry_cohorts,measurement_years, anddollar_year; values keep the provider's dollar basis, so check it before comparing across vintages.
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 ratios alongside their source figures.
effective_net_priceis the price used, andnet_price_basisisincome_bracket,overall, orunavailable. - If the bracket is missing, the overall price is used and
data_notessays so. Ratios require positive annual earnings.
scorecard_lookup_cip tool
- Search by nonblank keyword or partial name (default limit 20, capped at 50). Dotted
11.07and undotted1107are equivalent. - Returns exact group titles and family identities from 186 current NCES CIP 2020 four-digit groups, a subset of the full taxonomy. Related six-digit program names also match and return their group; no matches return an empty collection with guidance.
scorecard_list_fields tool
- Search 78 curated offline field entries by nonblank query (default limit 30, capped at 100). Use before passing custom
fieldstoscorecard_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 data idis 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 null idis 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 required costsandoutcomesrun school discovery,scorecard_compare_schools, profiles, and value analysis.programsruns school discovery, CIP lookup, andscorecard_get_programsper school, then compares earnings, debt, and IPEDS awards for matching credentials.
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 queries - Embedded CIP taxonomy (186 groups) and field catalog (78 fields) served offline
- Geographic filtering via U.S. zip code + distance radius
Agent-friendly output:
- Availability distinguishes numbers (including zero), missing values, and explicit
PS/PrivacySuppressedprovider markers - Derived metrics sit alongside source figures in
scorecard_value_analysis, andscorecard_compare_schoolsadds ordinal ranks - School sorting uses indexed API fields; check
scorecard_list_fieldsbefore choosing a sort expression. Six-year earnings does not support API sorting. - Provider failures report distinct validation, authentication, throttling, timeout, and availability reasons; availability uses
api_errorand cancellation remainsRequestCancelled
Getting started
Public Hosted Instance
A public instance is available at https://college-scorecard.caseyjhand.com/mcp — no installation required. No API key needed; the instance supplies its own. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"college-scorecard-mcp-server": {
"type": "streamable-http",
"url": "https://college-scorecard.caseyjhand.com/mcp"
}
}
}
Self-Hosted / Local
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/mcp
Prerequisites
- 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.git
- Navigate into the directory:
cd college-scorecard-mcp-server
- Install dependencies:
bun install
- Configure environment:
cp .env.example .env
# edit .env and set SCORECARD_API_KEY
Configuration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:
| Variable | Description | Default |
|---|---|---|
SCORECARD_API_KEY | Required. API key from api.data.gov (1,000 req/hour). | — |
MCP_TRANSPORT_TYPE | Transport: stdio or http | stdio |
MCP_HTTP_PORT | HTTP server port | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP endpoint path where the MCP server is mounted | /mcp |
MCP_PUBLIC_URL | Public origin override for TLS-terminating reverse-proxy deployments | none |
MCP_SESSION_MODE | HTTP session mode: stateless, stateful, or auto | stateless |
MCP_AUTH_MODE | Authentication: none, jwt, or oauth | none |
MCP_LOG_LEVEL | Log level (debug, info, warning, error, etc.) | info |
MCP_GC_PRESSURE_INTERVAL_MS | Opt-in forced-GC loop interval in ms (Bun only); try 60000 if heap grows under HTTP load | 0 (disabled) |
LOGS_DIR | Directory for log files (Node.js only) | <project-root>/logs |
STORAGE_PROVIDER_TYPE | Storage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1 | in-memory |
OTEL_ENABLED | Enable OpenTelemetry instrumentation | false |
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:http - Run 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-server
The 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 |
|---|---|
src/index.ts | createApp() entry point — registers tools/resources/prompts and inits services. |
src/config | Server-specific environment variable parsing and validation with Zod. |
src/mcp-server/tools | Tool definitions (*.tool.ts). Nine tools across search, profile, programs, earnings, and analysis. |
src/mcp-server/resources | Resource definitions. School profile and program outcomes resources. |
src/mcp-server/prompts | Prompt definitions. Multi-school comparison prompt. |
src/services | ScorecardService — fetch wrapper with retry, field selection, and pagination against the College Scorecard API. |
tests/ | Unit and integration tests mirroring src/. |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storage - Register new tools, resources, and prompts in the
createApp()arrays insrc/index.ts - Wrap 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 test
License
Apache-2.0 — see LICENSE for details.
Questions fréquentes
Qu'est-ce que io.github.cyanheads/college-scorecard-mcp-server ?
Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes.
Comment installer io.github.cyanheads/college-scorecard-mcp-server ?
Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http college-scorecard-mcp-server 'https://college-scorecard.caseyjhand.com/mcp'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour io.github.cyanheads/college-scorecard-mcp-server ?
Oui. Il attend SCORECARD_API_KEY, à renseigner dans sa configuration.
io.github.cyanheads/college-scorecard-mcp-server est-il open source ?
Oui. Son code est sur GitHub sous licence Apache-2.0.
Qui maintient io.github.cyanheads/college-scorecard-mcp-server ?
Il est publié par cyanheads. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.