College Scorecard MCP Server
Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes — via MCP.
README
<div align="center"> <h1>@cyanheads/college-scorecard-mcp-server</h1> <p><b>Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes — via MCP. STDIO or Streamable HTTP.</b> <div>9 Tools • 2 Resources • 1 Prompt</div> </p> </div>
<div align="center">
</div>
<div align="center">
</div>
Tools
9 tools for working with U.S. Department of Education College Scorecard data — institution search, program-level earnings, cost and outcomes analysis, and structured comparison:
| Tool | Description |
|---|---|
scorecard_search_schools |
Search and filter institutions by name, location, type, size, and acceptance rate range. Returns core identity and cost metrics. |
scorecard_get_school |
Full institutional profile for one or more school IDs — costs, admissions, outcomes, aid, demographics, and completion rates. |
scorecard_compare_schools |
Normalized side-by-side comparison of 2–5 schools on a named topic. Returns percentile-ranked rows and relative deltas within the result set. |
scorecard_get_programs |
All field-of-study programs at one school: 1-year post-graduation earnings (P25/median/P75), debt at graduation, and enrollment figures. |
scorecard_search_programs |
Find programs by CIP code or keyword across all institutions, ranked by median earnings. Accepts school-side filters (state, ownership, max cost). |
scorecard_get_earnings |
Institution-level post-graduation earnings for one school — median and percentiles at 6, 8, and 10 years after entry, with optional gender breakdown. |
scorecard_value_analysis |
Workflow tool: parallel-fetches cost, debt, repayment, and earnings data, then computes ROI metrics — debt-to-earnings ratio, net price by income bracket, and peer comparisons. |
scorecard_lookup_cip |
Search Classification of Instructional Programs (CIP) codes by keyword or partial name. Served from embedded static data — no API call or rate-limit impact. |
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. |
scorecard_search_schools
Search for institutions using name, location, and institutional filters.
- Free-text name search plus typed filters: state, ownership (public/private nonprofit/private for-profit), degree level, size range, acceptance rate range
- Geographic proximity filtering by U.S. zip code and distance (miles or km)
- CIP code filter to find schools offering a specific program family
- Pagination (
per_pageup to 100, zero-indexedpage) - Returns core identity and cost metrics for quick scanning
scorecard_get_school
Fetch a full institutional profile by school ID.
- Accepts a single ID or an array of IDs (batch fetch up to 100 per page)
- Covers costs, admissions, outcomes, financial aid, demographics, and completion rates
- Optional
fieldsoverride for callers who need a narrower or broader field set - For side-by-side comparison on a specific dimension, use
scorecard_compare_schools
scorecard_compare_schools
Normalized comparison across 2–5 institutions on a named topic.
- Four topics:
costs,admissions,outcomes,aid— each pulls a curated topic-specific field set - Computes within-set percentile ranks and relative deltas — structured output an agent cannot reconstruct from raw profiles
- Single API call for all schools; normalization applied post-fetch
- Distinct from
scorecard_get_schoolmulti-ID: output shape is rows, not profiles
scorecard_get_programs
List all field-of-study programs at one school with earnings and debt data.
- Returns P25/median/P75 earnings 1 year after graduation, median debt at graduation, and enrollment figures per program
- Filter by CIP code to return only matching programs
- Filter by
credential_level(certificate, associate's, bachelor's) and minimum earnings threshold - Primary source for program-level earnings — institution-level earnings at 6/8/10 years are available via
scorecard_get_earnings - FERPA suppression surfaced as structured
suppressed: trueflag withsuppression_note, not bare null
scorecard_search_programs
Find programs by CIP code or name across all institutions, ranked by median earnings.
- Program-centric: "which schools in Washington have CS programs with median earnings over $80k?"
- Accepts school-side filters: state, ownership, max net price
- Earnings and debt thresholds for filtering results
- Returns school name, school ID, and unit ID alongside program metrics for follow-up chaining
- Sorting applied post-fetch where earnings fields are not API-indexed
scorecard_get_earnings
Institution-level post-graduation earnings for one school.
- Median and P25/P75 earnings at 6, 8, and 10 years after entry
- Optional gender breakdown when available
yearsparameter for time-series analysis; defaults tolatest.*for current-state queries- Reflects outcomes across all graduates, not broken down by program
scorecard_value_analysis
Workflow tool: "Is this school worth it?"
- Parallel-fetches cost/debt/repayment and earnings data in two concurrent requests
- Computes ROI metrics the API does not pre-calculate: debt-to-earnings ratio (median debt / 6-year earnings), net price to first-year earnings ratio, and 3-year loan repayment rate
family_incomeparameter selects the applicable net price bracket- Fetches peer school identifiers (same Carnegie category and ownership) for comparative median values
- Returns all source figures alongside derived metrics — callers can audit the arithmetic
data_notesflags any suppressed or null fields with structured explanations
scorecard_lookup_cip
Search CIP codes by keyword or partial name.
- Covers the full ~2,400-code CIP taxonomy embedded as static data
- No API call required — zero rate-limit impact, works offline
- Required before using CIP-based filters when the caller knows a program by name but not code
- Returns matching codes with standard titles
scorecard_list_fields
Search the Scorecard field catalog by keyword.
- ~2,800 field entries from the data dictionary, embedded as static data
- Returns field paths, descriptions, data types, and whether the field supports API-side sorting
- No API call required — zero rate-limit impact
- Use before passing custom
fieldsparameters to search/get tools
Resources and prompts
| Type | Name | Description |
|---|---|---|
| Resource | scorecard://school/{id} |
Institutional profile by unit ID — injectable context for school-specific conversations |
| Resource | scorecard://programs/{id} |
Program-level outcomes for a school |
| Prompt | scorecard_compare_prompt |
Structures a multi-school comparison analysis using Scorecard data |
All resource data is also reachable via tools. Use scorecard_search_schools or scorecard_get_school to discover school IDs before constructing resource URIs.
Features
Built on @cyanheads/mcp-ts-core:
- Declarative tool, resource, and prompt definitions — single file per primitive, framework handles registration and validation
- Unified error handling — handlers throw, framework catches, classifies, and formats
- Pluggable auth:
none,jwt,oauth - Swappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1 - Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
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 post-graduation earnings: actual median earnings 1 year after graduation for ~6,500 school × CIP code combinations
- Field pre-selection per tool — curated ~10–20 field sets appropriate to each tool's purpose; optional
fieldsoverride for custom queries - Embedded CIP code taxonomy and field catalog: both served as static data with zero API calls and zero rate-limit impact
- Geographic filtering via U.S. zip code + distance radius
scorecard_value_analysisworkflow tool computes ROI metrics (debt-to-earnings ratio, net price to first-year earnings) that require multiple API round-trips and post-processing arithmetic
Agent-friendly output:
- FERPA suppression surfaced as structured
suppressed: trueflag withsuppression_note— prevents hallucination of missing earnings data at selective schools with small cohorts - Derived metrics alongside source figures in
scorecard_value_analysis— agents can verify arithmetic and branch on computed values, not raw numbers - Percentile ranks and relative deltas in
scorecard_compare_schools— structured output an agent cannot reconstruct from raw profiles without knowing the full comparison set - Post-fetch sorting documented and handled transparently — callers never hit API errors on non-indexed sort fields
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/mcp
Prerequisites
- Bun v1.3.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 rate limit. | — |
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_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 pressure loop (ms, Bun only). Try 60000 if heap growth is observed under sustained 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 and resources via the barrels in
src/mcp-server/*/definitions/index.ts - Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
License
Apache-2.0 — see LICENSE for details.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。