io.github.cyanheads/college-scorecard-mcp-server

Official registry Search and web

Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes.

What can you do with 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 fields override 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 / PrivacySuppressed provider markers
  • Derived metrics sit alongside source figures in scorecard_value_analysis, and scorecard_compare_schools adds ordinal ranks
  • School sorting uses indexed API fields; check scorecard_list_fields before choosing a sort expression. Six-year earnings does not support API sorting.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

Remote (streamable-http)
Claude Code
claude mcp add --transport http college-scorecard-mcp-server 'https://college-scorecard.caseyjhand.com/mcp'
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "college-scorecard-mcp-server": {
            "type": "http",
            "url": "https://college-scorecard.caseyjhand.com/mcp"
        }
    }
}
NPM package @cyanheads/college-scorecard-mcp-server
Claude Code
claude 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
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "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"
            }
        }
    }
}

Environment variables

  • SCORECARD_API_KEY required Required API key for the College Scorecard API. Free registration at https://api.data.gov/signup/. Rate limit: 1,000 requests/hour.
  • MCP_LOG_LEVEL Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').
NPM package @cyanheads/college-scorecard-mcp-server
Claude Code
claude 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
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "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"
            }
        }
    }
}

Environment variables

  • MCP_TRANSPORT_TYPE Selects the HTTP transport.
  • SCORECARD_API_KEY required Required API key for the College Scorecard API. Free registration at https://api.data.gov/signup/. Rate limit: 1,000 requests/hour.
  • MCP_HTTP_HOST The hostname for the HTTP server.
  • MCP_HTTP_PORT The port to run the HTTP server on.
  • MCP_HTTP_ENDPOINT_PATH The endpoint path for the MCP server.
  • MCP_AUTH_MODE Authentication mode to use: 'none', 'jwt', or 'oauth'.
  • MCP_LOG_LEVEL Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. @cyanheads/college-scorecard-mcp-server
  2. Overview
  3. Capability reference
  4. Features
  5. Getting started
  6. Configuration
  7. Running the server
  8. Project structure
  9. Development guide
  10. Contributing
  11. License

@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
ToolDescription
scorecard_search_schoolsSearch 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_schoolFull institutional profiles — costs, admissions, outcomes, aid, demographics, single-sex flags, and completion rates.
scorecard_compare_schoolsNormalized side-by-side comparison of 2–5 schools on a named topic. Returns metric values, ordinal ranks, and a comparison summary.
scorecard_get_programsField-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_programsFind programs by CIP and credential or keyword, retain degree identity, and rank earnings within each fetched school page.
scorecard_get_earningsEarnings 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_analysisWorkflow 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_cipSearch 186 curated NCES CIP 2020 four-digit groups by code, keyword, or related program name. Served offline.
scorecard_list_fieldsSearch the Scorecard field catalog by keyword. Returns matching field paths, descriptions, data types, and sort support. Use before passing custom fields parameters.
Resources
ResourceDescription
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
PromptDescription
scorecard_compare_promptStructures 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_page is capped at 100; page is zero-indexed. State lists accept WA,CA.
  • Returns core identity and cost metrics for quick scanning.
  • sort takes an API expression such as latest.cost.avg_net_price.overall:asc (:desc reverses it). men_only and women_only accept 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_ids lists fetched IDs with no record and unprocessed_ids lists the excess.
  • Default profiles cover costs, admissions, outcomes, financial aid, demographics, and completion rates. Custom fields returns selected_fields with the requested values, and absent_fields lists 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, or aid.
  • 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 availability distinguishes 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_availability is available, unavailable, or privacy_suppressed, with suppressed_count and unavailable_count.
  • median_debt is completers' cumulative Stafford/Grad PLUS borrowing. ipeds_awards_year1 and ipeds_awards_year2 count 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-indexed page and per_page (up to 100) paginate schools, so returned program rows may exceed per_page.
  • Returns school IDs and names with program metrics, credential_level, and credential_title. Available earnings sort first; availability, debt, and award fields match scorecard_get_programs.
  • min_earnings filters 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 years from 1996–2025 (file vintages, not entry years). Omit years or 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_availability and trend[].availability classify each metric. current_context and trend[].context give data_file_year, entry_cohorts, measurement_years, and dollar_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_income selects the applicable net price bracket ($0–30k, $30k–48k, $48k–75k, $75k–110k, or $110k+).
  • Returns ratios alongside their source figures. effective_net_price is the price used, and net_price_basis is income_bracket, overall, or unavailable.
  • If the bracket is missing, the overall price is used and data_notes says 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.07 and undotted 1107 are 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 fields to scorecard_get_school.
  • Returns field paths, descriptions, data types, categories, and API sorting support; tip flags results containing unsortable fields.

scorecard://school/{id} resource
  • Institutional profile as application/json — identity, cost, admissions, outcomes, aid, and completion data
  • id is the school unit ID (integer as string) from scorecard_search_schools
  • list returns a handful of example school URIs; use scorecard_search_schools to 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, and ipeds_awards_year1 / ipeds_awards_year2 with the same meanings as the program tools; missing metrics are null
  • id is the school unit ID from scorecard_search_schools
  • list returns a handful of example school URIs; use scorecard_search_schools to discover others

scorecard_compare_prompt prompt
  • Arguments: school_names (comma-separated list) and focus (costs | outcomes | programs), both required
  • costs and outcomes run school discovery, scorecard_compare_schools, profiles, and value analysis. programs runs school discovery, CIP lookup, and scorecard_get_programs per 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 fields override 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 / PrivacySuppressed provider markers
  • Derived metrics sit alongside source figures in scorecard_value_analysis, and scorecard_compare_schools adds ordinal ranks
  • School sorting uses indexed API fields; check scorecard_list_fields before 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_error and cancellation remains RequestCancelled

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
  1. Clone the repository:
git clone https://github.com/cyanheads/college-scorecard-mcp-server.git
  1. Navigate into the directory:
cd college-scorecard-mcp-server
  1. Install dependencies:
bun install
  1. 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:

VariableDescriptionDefault
SCORECARD_API_KEYRequired. API key from api.data.gov (1,000 req/hour).—
MCP_TRANSPORT_TYPETransport: stdio or httpstdio
MCP_HTTP_PORTHTTP server port3010
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path where the MCP server is mounted/mcp
MCP_PUBLIC_URLPublic origin override for TLS-terminating reverse-proxy deploymentsnone
MCP_SESSION_MODEHTTP session mode: stateless, stateful, or autostateless
MCP_AUTH_MODEAuthentication: none, jwt, or oauthnone
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.)info
MCP_GC_PRESSURE_INTERVAL_MSOpt-in forced-GC loop interval in ms (Bun only); try 60000 if heap grows under HTTP load0 (disabled)
LOGS_DIRDirectory for log files (Node.js only)<project-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1in-memory
OTEL_ENABLEDEnable OpenTelemetry instrumentationfalse

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

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools/resources/prompts and inits services.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts). Nine tools across search, profile, programs, earnings, and analysis.
src/mcp-server/resourcesResource definitions. School profile and program outcomes resources.
src/mcp-server/promptsPrompt definitions. Multi-school comparison prompt.
src/servicesScorecardService — 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/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools, resources, and prompts in the createApp() arrays in src/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.

Frequently asked questions

What is io.github.cyanheads/college-scorecard-mcp-server?

Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes.

How do I install io.github.cyanheads/college-scorecard-mcp-server?

It runs as a remote server. In Claude Code: claude mcp add --transport http college-scorecard-mcp-server 'https://college-scorecard.caseyjhand.com/mcp'. For other clients, paste the JSON configuration from this page into their MCP settings.

Does io.github.cyanheads/college-scorecard-mcp-server need an API key?

Yes. It expects SCORECARD_API_KEY, which you set in its configuration.

Is io.github.cyanheads/college-scorecard-mcp-server open source?

Yes. Its code is on GitHub under the Apache-2.0 license.

Who maintains io.github.cyanheads/college-scorecard-mcp-server?

It is published by cyanheads. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.