# Reported issues for college-scorecard-mcp-server

Pod holds 12 of 12 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [college-scorecard-mcp-server](/mcp/college-scorecard-mcp-server).

## Most discussed

### docs(release-and-publish): synced skill trails the framework's current version

### Description

`skills/release-and-publish/SKILL.md` (mirrored into `.claude/skills/` and `.agents/skills/`) is missing content present in the current `@cyanheads/mcp-ts-core` package version of the same skill:

- The `bun run test:package` verification step (a separate gate from `test:all` for projects that define it) and its explanation.
- The tag-signature preflight check before `--notes-from-tag` (verifying `git tag -l v<version> --format='%(contents:signature)'` is non-empty on a signing-

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/11) · 2026-08-22 · closed · 2 comments

### ux(scorecard_get_earnings): format() exposes internal API field names in output text

`scorecard_get_earnings` renders internal API field name identifiers in the human-readable text output:

```
6-Year Median (earnings_6yr_median): $131,633
6-Year P25 (earnings_6yr_p25): Not available / P75 (earnings_6yr_p75): Not available
10-Year Median (earnings_10yr_median): $143,372
6-Year Female Median (earnings_6yr_female_median): Not available
6-Year Male Median (earnings_6yr_male_median): Not available
```

The parenthetical labels (`earnings_6yr_median`, `earnings_6yr_p25`, etc.) are im

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/5) · 2026-05-26 · closed · 2 comments

### ux(scorecard_compare_schools): format() leaks internal key names in comparison rows

The `scorecard_compare_schools` `format()` renders each row with raw internal key names (`school_id`, `value`, `rank`) visible in the output text, making it harder to read:

```
**In-State Tuition ($)**
  Massachusetts Institute of Technology (school_id: 166683): value: $62,396 rank: 1
  Stanford University (school_id: 243744): value: $65,910 rank: 2
```

Expected readable output:
```
**In-State Tuition ($)**
  Massachusetts Institute of Technology: $62,396 (#1)
  Stanford University: $65,910 (#

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/4) · 2026-05-26 · closed · 2 comments

### bug(scorecard_get_programs): credential_level always shows 'Unknown' — wrong field path

### Server version

0.1.0

### mcp-ts-core version

0.9.9

### Runtime

Node.js

### Runtime version

Node 24

### Transport

HTTP

### Description

`scorecard_get_programs` shows `credential_level: "Unknown"` for every program. The College Scorecard API returns credential data under `credential.level` (nested), but `RawProgram` type defines it as `credential_level` (flat) and the code accesses `p.credential_level` which is always `undefined`.

Verified against the raw API — program objects have

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/3) · 2026-05-26 · closed · 2 comments

### bug(repayment_rate): 3-year repayment rate displays as 58700% instead of 58.7%

### Server version

0.1.0

### mcp-ts-core version

0.9.9

### Runtime

Node.js

### Runtime version

Node 24

### Transport

HTTP

### Description

The College Scorecard API returns `latest.repayment.3_yr_repayment.overall` as an integer in basis-point-like units (e.g. `587` for MIT = 58.7%), not as a decimal (0–1). The server's `fmtPct` function and `compare_schools` format handler both treat the value as a decimal and multiply by 100, yielding `58700%` instead of `58.7%`.

Verified: raw API r

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/2) · 2026-05-26 · closed · 2 comments

### bug(cip_code): CIP code filter silently returns 0 results due to dot notation mismatch

### Server version

0.1.0

### mcp-ts-core version

0.9.9

### Runtime

Node.js

### Runtime version

Node 24

### Transport

HTTP (stdio reproduces identically)

### Description

The College Scorecard API's `latest.programs.cip_4_digit.code` filter field expects CIP codes **without** the dot separator (e.g. `1107`), but the server passes codes **with** the dot (e.g. `11.07`). This causes the API to return 0 results for any CIP-filtered query, silently — no error is returned, the results are jus

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/1) · 2026-05-26 · closed · 2 comments

### bug(net_price_by_income): wrong API field paths — income-bracket net price always returns null

### Server version

0.1.3

### mcp-ts-core version

^0.9.9

### Runtime

Bun

### Runtime version

1.3.11

### Transport

http (Streamable HTTP)

### Description

Net price by income bracket is silently null across all tools that surface it — `scorecard_get_school`, `scorecard_value_analysis`, and `scorecard_compare_schools` (costs topic). The College Scorecard API paths used by the server do not exist; the API silently omits unrecognized field paths from its response (they don't even appear as 

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/7) · 2026-05-26 · closed · 1 comment

### bug(repayment_rate): wrong field used — 3_yr_repayment.overall is a cohort count, not a rate

### Server version

0.1.3

### mcp-ts-core version

^0.9.9

### Runtime

Bun

### Runtime version

1.3.11

### Transport

http (Streamable HTTP)

### Description

All three tools that surface `repayment_rate_3yr` — `scorecard_get_school`, `scorecard_value_analysis`, and `scorecard_compare_schools` — display absurd repayment rates like **1078.6%** for University of Washington and **975.3%** for WSU. The root cause is using the wrong API field.

The field `latest.repayment.3_yr_repayment.overall` 

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/6) · 2026-05-26 · closed · 1 comment

## Most recent

### feat(config): default MCP_SESSION_MODE to stateless across env, Docker, and src

`Dockerfile` sets `ENV MCP_SESSION_MODE="stateless"`, but `.env.example` carries a commented `# MCP_SESSION_MODE=stateful`, whose comment documents the value set as `stateful | stateless (default: stateful)`. The container and the same code run via `bunx`, `npm start`, or from source therefore resolve to different session modes — stateless in Docker, stateful everywhere else, since the framework schema defaults to `auto` and `auto` resolves to `stateful`.

Related: cyanheads/mcp-ts-core#376

## 

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/12) · 2026-08-22 · open · 0 comments

### test(scorecard-service): empty school-ID validation error has no test coverage

### Server version

0.1.8

### mcp-ts-core version

0.12.3

### Description

`ScorecardService.getSchoolProfiles` throws a `validationError` when called with an empty `ids` array (`src/services/scorecard/scorecard-service.ts`):

```ts
if (ids.length === 0) throw validationError('No school IDs provided.');
```

This path is reachable from `scorecard_get_school`: its `id` input accepts `z.array(...)` with no `.min(1)`, so `{ "id": [] }` is valid input that resolves to an empty `ids` array before c

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/10) · 2026-08-22 · open · 0 comments

### bug(scorecard_search_programs): truncation guidance overwrites the suppressed-earnings notice

### Server version

0.1.8

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.x

### Transport

stdio

### Description

`scorecard_search_programs` writes an enrichment `notice` from two different sources in `src/mcp-server/tools/definitions/search-programs.tool.ts`:

1. When every returned program has suppressed earnings, it calls `ctx.enrich.notice(...)` with a message telling the caller to try a broader CIP code or different state.
2. Separately, when the school-l

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/9) · 2026-08-21 · open · 0 comments

### feat(scorecard_search_schools, scorecard_get_school): expose sort and single-sex flags

### Use case

Two related gaps in the school search and profile tools.

`scorecard_search_schools` has no `sort` parameter and no way to filter on the boolean single-sex flags (`school.men_only`, `school.women_only`). The service layer (`ScorecardService.searchSchools`) already accepts a `sort` field — it's just not wired into the tool's input schema.

`scorecard_get_school` already fetches `school.men_only` and `school.women_only` in its default field list (`PROFILE_DEFAULT_FIELDS`), and `RawSc

[Read the thread](https://github.com/cyanheads/college-scorecard-mcp-server/issues/8) · 2026-06-03 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/college-scorecard-mcp-server/issues).
