Skip to main content
Glama

college-roi-mcp

MCP server for U.S. college-ROI data: 30-year net present value (NPV) for 500 four-year colleges, lifetime ROI for 19 major categories + 115 CIP subfields, per-state best-value rankings, and the out-of-state tuition penalty ranking.

Wraps the free, keyless LE TEEN College ROI API (static JSON, CC BY 4.0). No API key, no signup, no rate limits beyond CDN sanity. Data derives from FREOPP program-level ROI estimates, IPEDS institutional data, and BEA price deflators — methodology at le-teen.com/methodology. Dataset DOI: 10.5281/zenodo.21351602.

Install

Requires Node ≥ 18.

Claude Desktop / Claude Code (claude_desktop_config.json or .mcp.json):

{
  "mcpServers": {
    "college-roi": {
      "command": "npx",
      "args": ["-y", "college-roi-mcp"]
    }
  }
}

Claude Code CLI:

claude mcp add college-roi -- npx -y college-roi-mcp

Any other MCP client: run npx -y college-roi-mcp over stdio.

Related MCP server: uk-he-data-mcp

Tools

Tool

What it returns

list_majors

Compact ROI rows for 19 categories / 115 subfields — median & mean lifetime ROI, % never break even, break-even age, AI-exposure band. Filter by kind/parent, sort, limit.

get_major

Full record for one major: ROI distribution (p25/median/mean/p75), completion-adjusted & dropout ROI, graduates/programs, AI-exposure detail.

search_colleges

Search the 500 positive-NPV-envelope colleges by name/state/control — resident & non-resident 30-yr NPV, cost of attendance, median earnings, break-even age.

get_college

Full record for one college, incl. IPEDS unitid and FREOPP coverage.

best_value_colleges

Each state's best-value four-years at resident pricing (top 15 per state), or a nationwide top-pick summary.

out_of_state_penalty

Public four-years ranked by how much 30-yr NPV a non-resident gives up vs a resident.

get_api_info

Metadata for the underlying API: endpoints, license, DOI, attribution.

All dollar figures are lifetime/30-year totals in USD. List responses are compact projections with limit controls so they stay small in agent contexts; detail tools return the full upstream record.

Note the envelope: only colleges that clear a positive-NPV bar appear (500 of ~1,656 U.S. four-years). A school being absent is itself a signal.

Example prompts

  • "Is a nursing degree worth it compared to computer science?"

  • "Best-value colleges in Michigan for a resident."

  • "How much does going out-of-state to UVA cost me over 30 years?"

  • "Which majors have the worst odds of ever breaking even?"

Data freshness & caching

The upstream API is static JSON regenerated with the dataset; this server caches responses in-process for 24 h (matching the API's CDN cache). Nothing is written anywhere; the server is read-only.

License & attribution

  • Code: MIT.

  • Data: CC BY 4.0 — free to use with attribution. Cite LE TEEN, le-teen.com (and FREOPP/IPEDS/BEA as upstream sources).

Available Tools

7 tools
best_value_collegesBest-value colleges by stateA

Each U.S. state's best-value four-year colleges at resident pricing, ranked by 30-year NPV (top 15 per state). Pass a state for its full list; omit it for a nationwide summary (every state's top pick).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTwo-letter state code, e.g. 'CA'. Omit for all states' #1.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the tool's behavior: it returns ranked lists (top 15 per state or top 1 per state), filters by resident pricing, and uses a specific metric (30-year NPV). This is comprehensive for the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence defines the resource and ranking, the second specifies usage. Information is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema, the description adequately covers behavior and output scope. It explains the ranking metric and the two modes. A minor gap is what 'best-value' precisely means beyond NPV, but it's sufficient for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the 'state' parameter (two-letter code). The description adds semantic value by explaining how omitting the parameter changes the output (nationwide summary) versus providing it (full list per state). This enriches the parameter's meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: listing each U.S. state's best-value four-year colleges ranked by 30-year NPV, with a clear distinction between passing a state (top 15) or omitting it (nationwide top pick). This distinguishes it from sibling tools like get_college or search_colleges.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to pass a state ('for its full list') and when to omit it ('for a nationwide summary'). While it doesn't compare to sibling tools, the usage context is clear and sufficient for a single-parameter tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_infoAbout the College ROI APIA

Metadata for the underlying LE TEEN College ROI API: description, license, attribution, DOI, docs URL, and the list of raw endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden but only states the output contents. It does not disclose safety, side effects, or restrictions, though the read-only nature is implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key information, no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description adequately lists return fields. Could mention how the data is used, but overall sufficient for a metadata endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Baseline score of 4 applies; description adds no parameter info but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns metadata for the underlying API, including specific fields like description, license, DOI, and endpoints. This distinguishes it from sibling tools which retrieve specific data (e.g., colleges, majors).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for understanding API structure before using other tools, but does not explicitly state when to use this tool versus alternatives or provide usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_collegeGet one college's full recordA

Full record for one college by slug (e.g. 'university-of-michigan-ann-arbor'): 30-year NPV at resident and non-resident pricing, total cost of attendance both ways, median earnings 10 years after entry, break-even age, IPEDS unitid, and FREOPP program coverage. Accepts a plain name and will slugify it; use search_colleges to discover slugs.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesCollege slug or name, e.g. 'university-of-michigan-ann-arbor'.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description adds some behavioral context (accepts plain name and slugifies it), but lacks disclosure of error handling or output format beyond listing fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first sentence lists data fields concisely; second sentence adds slugification behavior and sibling tool reference. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with one param and no output schema. Description covers input flexibility and enumerates output fields. Missing error behavior but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of one parameter with a basic description. Description enhances by providing example slug format and stating it can also accept a plain name, adding clarity beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states it retrieves the full record for one college by slug, listing specific data fields. It distinguishes from sibling 'search_colleges' which is for discovering slugs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains when to use (need full record for a specific college by slug) and when to use alternative (use search_colleges to discover slugs). Also notes it can accept a plain name and slugify it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_majorGet one major's full ROI detailA

Full lifetime-ROI record for one major category or CIP subfield by slug (e.g. 'nursing', 'computer-science', 'philosophy-and-religious-studies'): ROI distribution (p25/median/mean/p75), never-break-even %, break-even age, completion-adjusted and dropout ROI, graduates/programs counts, and AI-exposure detail. Accepts a plain name and will slugify it; use list_majors to discover exact slugs.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesMajor slug or name, e.g. 'computer-science' or 'Computer Science'.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It details the data returned but omits behavioral traits such as read-only nature, auth requirements, rate limits, or error handling. This is a moderate gap given no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first states the core purpose and lists outputs, second clarifies slug acceptance, third directs to sibling for discovery. No fluff, all information earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter and no output schema, the description is largely complete. It explains inputs and outputs thoroughly. Slight lack of coverage on error scenarios or read-only nature, but acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter. The description adds value beyond the schema by clarifying that the tool accepts a plain name and will slugify it, which is not obvious from the property description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a full lifetime-ROI record for one major by slug, listing specific data points (ROI distribution, break-even age, etc.). It distinguishes itself from the sibling list_majors tool for discovering slugs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'use list_majors to discover exact slugs', providing clear guidance on when to use which tool. Also notes that it accepts a plain name and will slugify it, setting expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_majorsList majors by lifetime ROIA

List bachelor's-degree majors (19 broad categories and/or 115 CIP subfields) with lifetime-ROI stats: median/mean lifetime ROI (USD), % of programs that never break even, median break-even age, and AI-exposure band. Returns compact rows sorted by the chosen field. Use the returned slug with get_major for full detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoFilter to broad categories (19), CIP subfields (115), or all 134.all
limitNoMax rows returned.
parentNoOnly subfields of this category slug, e.g. 'engineering'.
sort_byNoSort field. ROI sorts are descending; name ascending.median_lifetime_roi_usd

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations; description carries full burden. Clearly states return fields (median/mean ROI, break-even stats, AI-exposure band) and behavior (compact rows, sorted by chosen field). No mention of destructive actions or auth, but for a read-only list this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loads the purpose and key details. Every piece of information earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description adequately explains return values (metrics listed). Covers main behavior and parameter nuances. Could mention pagination or default ordering more explicitly, but given the parameter descriptions are fully covered, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). Description adds value by explaining the broad-category vs subfield structure, sorting direction (descending for ROI, ascending for name), and that 'parent' filters subfields by category slug—going beyond what schema enums and descriptions provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists bachelor's-degree majors with lifetime-ROI stats, mentions two levels (19 categories, 115 subfields), and names the specific metrics. It also distinguishes from sibling tool 'get_major' by suggesting use of returned slug for full details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells agent to use the returned slug with 'get_major' for full detail, indicating when to chain calls. However, lacks explicit 'when not to use' or alternatives like 'search_colleges'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

out_of_state_penaltyOut-of-state tuition penalty rankingA

U.S. public four-year colleges ranked by the out-of-state penalty: how much 30-year NPV a non-resident gives up versus a resident at the same school. Includes both NPVs and both tuition figures per row.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows returned (77 total).
stateNoFilter to one state's public colleges.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description must carry full burden. It states the tool returns rankings with specific data per row (NPVs, tuition) but does not disclose read-only nature, data source, update frequency, or any side effects. Adequate but missing some transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first covers purpose, second covers output content. No wasted words, appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description explains return values (NPVs, tuition figures per row). However, it does not specify ordering direction (e.g., descending penalty) or the default sort. Mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter definitions are already complete. Description does not add meaning beyond schema; it only mentions what is included per row (output), not parameters. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it ranks U.S. public four-year colleges by out-of-state penalty, defines the penalty as NPV difference, and mentions included data (NPVs, tuition). This distinguishes it from siblings like best_value_colleges and search_colleges.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when interested in out-of-state penalty ranking but does not explicitly state when to use this tool versus alternatives like best_value_colleges or search_colleges. No exclusions or when-not-to-use guidance provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_collegesSearch colleges by name/stateA

Search the 500 largest-coverage U.S. four-year colleges that clear the positive-NPV envelope. Each row: 30-year NPV at resident and non-resident pricing, total cost of attendance, median earnings 10 years after entry, and break-even age. Filter by name substring, state, and control; sorted by resident NPV descending unless overridden. Use the returned slug with get_college.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows returned.
queryNoCase-insensitive substring of the college name.
stateNoTwo-letter state code, e.g. 'MI'.
controlNo
sort_byNonpv_30yr_resident_usd

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the dataset scope (500 largest-coverage colleges), the returned columns, and the default sort. It does not mention side effects but the tool is clearly read-only. The description adds good behavioral context without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose and key columns, then filtering and sorting details. Every sentence adds value; no wasted words. The structure is clear and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains return columns, filtering, and default sort. It also notes the slug usage with get_college. However, it does not mention the maximum limit (100) or whether results are paginated. It could be slightly more complete for a search tool with 5 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% (3 of 5 parameters have descriptions). The description adds meaning by explaining the filtering options ('Filter by name substring, state, and control') and the sort override behavior ('sorted by resident NPV descending unless overridden'). This compensates for the missing schema descriptions on control and sort_by.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: 'Search the 500 largest-coverage U.S. four-year colleges'. It specifies the columns returned (NPV, cost, earnings, break-even age), filtering options (name, state, control), and the default sort order. It also differentiates from sibling 'get_college' by noting that the returned slug can be used with that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly guides usage by indicating when to filter by name, state, and control, and when to use the returned slug with get_college. However, it does not explicitly state when to prefer this tool over siblings like 'best_value_colleges' or 'out_of_state_penalty', nor does it provide exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedbest_value_colleges
    • First observedget_api_info
    • First observedget_college
    • First observedget_major
    • First observedlist_majors
    • First observedout_of_state_penalty
    • First observedsearch_colleges

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect of college ROI data (search, detail, majors, reports, API info) with no functional overlap. Even similar tools like search_colleges and best_value_colleges have clearly different purposes.

Naming Consistency4/5

Most tools follow a verb_noun pattern (search_colleges, list_majors, get_college), but best_value_colleges and out_of_state_penalty are noun phrases. The inconsistency is minor and still readable.

Tool Count5/5

Seven tools is well-scoped for a college ROI data server, covering search, detail, listing, and special reports without being excessive or insufficient.

Completeness5/5

The set covers all major access patterns: search colleges, get full college/major details, list majors, state best-value summaries, out-of-state penalty analysis, and API metadata. No obvious gaps for the stated purpose.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers