@cyanheads/college-scorecard-mcp-server 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CLAUDE.md +405 -0
  2. package/Dockerfile +98 -0
  3. package/README.md +356 -0
  4. package/changelog/0.1.x/0.1.0.md +24 -0
  5. package/changelog/0.1.x/0.1.1.md +14 -0
  6. package/changelog/template.md +119 -0
  7. package/dist/config/server-config.d.ts +12 -0
  8. package/dist/config/server-config.d.ts.map +1 -0
  9. package/dist/config/server-config.js +17 -0
  10. package/dist/config/server-config.js.map +1 -0
  11. package/dist/data/cip-codes.d.ts +23 -0
  12. package/dist/data/cip-codes.d.ts.map +1 -0
  13. package/dist/data/cip-codes.js +274 -0
  14. package/dist/data/cip-codes.js.map +1 -0
  15. package/dist/data/field-catalog.d.ts +25 -0
  16. package/dist/data/field-catalog.d.ts.map +1 -0
  17. package/dist/data/field-catalog.js +122 -0
  18. package/dist/data/field-catalog.js.map +1 -0
  19. package/dist/index.d.ts +7 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +47 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp-server/format-helpers.d.ts +9 -0
  24. package/dist/mcp-server/format-helpers.d.ts.map +1 -0
  25. package/dist/mcp-server/format-helpers.js +24 -0
  26. package/dist/mcp-server/format-helpers.js.map +1 -0
  27. package/dist/mcp-server/prompts/definitions/compare.prompt.d.ts +15 -0
  28. package/dist/mcp-server/prompts/definitions/compare.prompt.d.ts.map +1 -0
  29. package/dist/mcp-server/prompts/definitions/compare.prompt.js +55 -0
  30. package/dist/mcp-server/prompts/definitions/compare.prompt.js.map +1 -0
  31. package/dist/mcp-server/resources/definitions/programs.resource.d.ts +10 -0
  32. package/dist/mcp-server/resources/definitions/programs.resource.d.ts.map +1 -0
  33. package/dist/mcp-server/resources/definitions/programs.resource.js +42 -0
  34. package/dist/mcp-server/resources/definitions/programs.resource.js.map +1 -0
  35. package/dist/mcp-server/resources/definitions/school.resource.d.ts +10 -0
  36. package/dist/mcp-server/resources/definitions/school.resource.d.ts.map +1 -0
  37. package/dist/mcp-server/resources/definitions/school.resource.js +43 -0
  38. package/dist/mcp-server/resources/definitions/school.resource.js.map +1 -0
  39. package/dist/mcp-server/tools/definitions/compare-schools.tool.d.ts +46 -0
  40. package/dist/mcp-server/tools/definitions/compare-schools.tool.d.ts.map +1 -0
  41. package/dist/mcp-server/tools/definitions/compare-schools.tool.js +367 -0
  42. package/dist/mcp-server/tools/definitions/compare-schools.tool.js.map +1 -0
  43. package/dist/mcp-server/tools/definitions/get-earnings.tool.d.ts +43 -0
  44. package/dist/mcp-server/tools/definitions/get-earnings.tool.d.ts.map +1 -0
  45. package/dist/mcp-server/tools/definitions/get-earnings.tool.js +183 -0
  46. package/dist/mcp-server/tools/definitions/get-earnings.tool.js.map +1 -0
  47. package/dist/mcp-server/tools/definitions/get-programs.tool.d.ts +46 -0
  48. package/dist/mcp-server/tools/definitions/get-programs.tool.d.ts.map +1 -0
  49. package/dist/mcp-server/tools/definitions/get-programs.tool.js +194 -0
  50. package/dist/mcp-server/tools/definitions/get-programs.tool.js.map +1 -0
  51. package/dist/mcp-server/tools/definitions/get-school.tool.d.ts +67 -0
  52. package/dist/mcp-server/tools/definitions/get-school.tool.d.ts.map +1 -0
  53. package/dist/mcp-server/tools/definitions/get-school.tool.js +324 -0
  54. package/dist/mcp-server/tools/definitions/get-school.tool.js.map +1 -0
  55. package/dist/mcp-server/tools/definitions/list-fields.tool.d.ts +28 -0
  56. package/dist/mcp-server/tools/definitions/list-fields.tool.d.ts.map +1 -0
  57. package/dist/mcp-server/tools/definitions/list-fields.tool.js +92 -0
  58. package/dist/mcp-server/tools/definitions/list-fields.tool.js.map +1 -0
  59. package/dist/mcp-server/tools/definitions/lookup-cip.tool.d.ts +26 -0
  60. package/dist/mcp-server/tools/definitions/lookup-cip.tool.d.ts.map +1 -0
  61. package/dist/mcp-server/tools/definitions/lookup-cip.tool.js +71 -0
  62. package/dist/mcp-server/tools/definitions/lookup-cip.tool.js.map +1 -0
  63. package/dist/mcp-server/tools/definitions/search-programs.tool.d.ts +49 -0
  64. package/dist/mcp-server/tools/definitions/search-programs.tool.d.ts.map +1 -0
  65. package/dist/mcp-server/tools/definitions/search-programs.tool.js +188 -0
  66. package/dist/mcp-server/tools/definitions/search-programs.tool.js.map +1 -0
  67. package/dist/mcp-server/tools/definitions/search-schools.tool.d.ts +57 -0
  68. package/dist/mcp-server/tools/definitions/search-schools.tool.d.ts.map +1 -0
  69. package/dist/mcp-server/tools/definitions/search-schools.tool.js +223 -0
  70. package/dist/mcp-server/tools/definitions/search-schools.tool.js.map +1 -0
  71. package/dist/mcp-server/tools/definitions/value-analysis.tool.d.ts +37 -0
  72. package/dist/mcp-server/tools/definitions/value-analysis.tool.d.ts.map +1 -0
  73. package/dist/mcp-server/tools/definitions/value-analysis.tool.js +227 -0
  74. package/dist/mcp-server/tools/definitions/value-analysis.tool.js.map +1 -0
  75. package/dist/services/scorecard/scorecard-service.d.ts +44 -0
  76. package/dist/services/scorecard/scorecard-service.d.ts.map +1 -0
  77. package/dist/services/scorecard/scorecard-service.js +376 -0
  78. package/dist/services/scorecard/scorecard-service.js.map +1 -0
  79. package/dist/services/scorecard/types.d.ts +131 -0
  80. package/dist/services/scorecard/types.d.ts.map +1 -0
  81. package/dist/services/scorecard/types.js +6 -0
  82. package/dist/services/scorecard/types.js.map +1 -0
  83. package/package.json +80 -0
  84. package/server.json +99 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-school.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-school.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview Field catalog search tool. Searches the embedded Scorecard field dictionary.
3
+ * No API call — served entirely from static embedded data.
4
+ * @module mcp-server/tools/definitions/list-fields.tool
5
+ */
6
+ import { z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ export declare const listFieldsTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
9
+ query: z.ZodString;
10
+ limit: z.ZodDefault<z.ZodNumber>;
11
+ }, z.core.$strip>, z.ZodObject<{
12
+ query: z.ZodString;
13
+ results: z.ZodArray<z.ZodObject<{
14
+ path: z.ZodString;
15
+ description: z.ZodString;
16
+ type: z.ZodString;
17
+ sortable: z.ZodBoolean;
18
+ category: z.ZodString;
19
+ }, z.core.$strip>>;
20
+ totalMatches: z.ZodNumber;
21
+ tip: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>, readonly [{
23
+ readonly reason: "no_match";
24
+ readonly code: JsonRpcErrorCode.NotFound;
25
+ readonly when: "No fields matched the search query.";
26
+ readonly recovery: "Try a broader category keyword like \"cost\", \"earnings\", \"admissions\", or \"aid\".";
27
+ }]>;
28
+ //# sourceMappingURL=list-fields.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-fields.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/list-fields.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;GAgGzB,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @fileoverview Field catalog search tool. Searches the embedded Scorecard field dictionary.
3
+ * No API call — served entirely from static embedded data.
4
+ * @module mcp-server/tools/definitions/list-fields.tool
5
+ */
6
+ import { tool, z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ import { searchFieldCatalog } from '../../../data/field-catalog.js';
9
+ export const listFieldsTool = tool('scorecard_list_fields', {
10
+ title: 'List Scorecard Fields',
11
+ description: 'Search the College Scorecard field catalog by keyword. Returns matching field paths, descriptions, data types, and whether each field supports API-side sorting. Use before passing custom field paths to the fields parameter on scorecard_search_schools or scorecard_get_school to verify a path is valid. Served entirely from embedded static data — no API call, no rate limit impact.',
12
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
13
+ input: z.object({
14
+ query: z
15
+ .string()
16
+ .min(1)
17
+ .describe('Keyword to search the field catalog (e.g. "tuition", "earnings", "admissions", "debt"). Matches against field paths, descriptions, and category names.'),
18
+ limit: z
19
+ .number()
20
+ .int()
21
+ .min(1)
22
+ .max(100)
23
+ .default(30)
24
+ .describe('Maximum number of matching fields to return.'),
25
+ }),
26
+ output: z.object({
27
+ query: z.string().describe('The search query used.'),
28
+ results: z
29
+ .array(z
30
+ .object({
31
+ path: z.string().describe('Full API field path (e.g. "latest.cost.tuition.in_state").'),
32
+ description: z.string().describe('Human-readable description of the field.'),
33
+ type: z.string().describe('Data type: integer, float, string, or boolean.'),
34
+ sortable: z.boolean().describe('Whether this field supports API-side sort parameter.'),
35
+ category: z
36
+ .string()
37
+ .describe('Thematic category (e.g. cost, admissions, earnings, programs).'),
38
+ })
39
+ .describe('Field catalog entry.'))
40
+ .describe('Matching field entries ranked by relevance.'),
41
+ totalMatches: z.number().describe('Number of matching fields found.'),
42
+ tip: z.string().optional().describe('Usage tip for unsortable fields when relevant.'),
43
+ }),
44
+ errors: [
45
+ {
46
+ reason: 'no_match',
47
+ code: JsonRpcErrorCode.NotFound,
48
+ when: 'No fields matched the search query.',
49
+ recovery: 'Try a broader category keyword like "cost", "earnings", "admissions", or "aid".',
50
+ },
51
+ ],
52
+ handler(input, ctx) {
53
+ ctx.log.info('Searching field catalog', { query: input.query });
54
+ const results = searchFieldCatalog(input.query, input.limit);
55
+ if (results.length === 0) {
56
+ throw ctx.fail('no_match', `No fields matched "${input.query}"`, {
57
+ recovery: { hint: `Try broader terms like "cost", "earnings", "aid", or "admissions".` },
58
+ });
59
+ }
60
+ const hasUnsortable = results.some((r) => !r.sortable);
61
+ const tip = hasUnsortable
62
+ ? 'Fields where sortable=false are not indexed by the API — pass them in the fields parameter for retrieval but do not use them in the sort parameter.'
63
+ : undefined;
64
+ return {
65
+ query: input.query,
66
+ results: results.map((r) => ({
67
+ path: r.path,
68
+ description: r.description,
69
+ type: r.type,
70
+ sortable: r.sortable,
71
+ category: r.category,
72
+ })),
73
+ totalMatches: results.length,
74
+ ...(tip && { tip }),
75
+ };
76
+ },
77
+ format: (result) => {
78
+ const lines = [
79
+ `## Scorecard Field Catalog: "${result.query}"`,
80
+ `**Matches:** ${result.totalMatches}`,
81
+ ];
82
+ if (result.tip)
83
+ lines.push(`\n> **Tip:** ${result.tip}`);
84
+ for (const f of result.results) {
85
+ lines.push(`\n**${f.path}**`);
86
+ lines.push(`${f.description}`);
87
+ lines.push(`Type: ${f.type} | Category: ${f.category} | Sortable: ${f.sortable ? 'Yes' : 'No'}`);
88
+ }
89
+ return [{ type: 'text', text: lines.join('\n') }];
90
+ },
91
+ });
92
+ //# sourceMappingURL=list-fields.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-fields.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/list-fields.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview CIP code lookup tool. Searches the embedded CIP taxonomy by keyword.
3
+ * No API call — served entirely from static embedded data.
4
+ * @module mcp-server/tools/definitions/lookup-cip.tool
5
+ */
6
+ import { z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ export declare const lookupCipTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
9
+ query: z.ZodString;
10
+ limit: z.ZodDefault<z.ZodNumber>;
11
+ }, z.core.$strip>, z.ZodObject<{
12
+ query: z.ZodString;
13
+ results: z.ZodArray<z.ZodObject<{
14
+ code: z.ZodString;
15
+ title: z.ZodString;
16
+ family: z.ZodString;
17
+ familyTitle: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ totalMatches: z.ZodNumber;
20
+ }, z.core.$strip>, readonly [{
21
+ readonly reason: "no_match";
22
+ readonly code: JsonRpcErrorCode.NotFound;
23
+ readonly when: "No CIP codes matched the search query.";
24
+ readonly recovery: "Try a broader keyword — use the discipline name rather than a specific subdiscipline.";
25
+ }]>;
26
+ //# sourceMappingURL=lookup-cip.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-cip.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-cip.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;GA0ExB,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @fileoverview CIP code lookup tool. Searches the embedded CIP taxonomy by keyword.
3
+ * No API call — served entirely from static embedded data.
4
+ * @module mcp-server/tools/definitions/lookup-cip.tool
5
+ */
6
+ import { tool, z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ import { searchCipCodes } from '../../../data/cip-codes.js';
9
+ export const lookupCipTool = tool('scorecard_lookup_cip', {
10
+ title: 'Lookup CIP Code',
11
+ description: 'Search the Classification of Instructional Programs (CIP) taxonomy by keyword or partial name. Returns matching CIP codes with standard titles. Use this before passing cip_code filters to scorecard_search_programs or scorecard_get_programs when you know a program by name but not its code. Served entirely from embedded static data — no API call, no rate limit impact.',
12
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
13
+ input: z.object({
14
+ query: z
15
+ .string()
16
+ .min(1)
17
+ .describe('Search term — program name keyword (e.g. "computer science", "nursing", "business"). Matches against CIP titles and family names.'),
18
+ limit: z
19
+ .number()
20
+ .int()
21
+ .min(1)
22
+ .max(50)
23
+ .default(20)
24
+ .describe('Maximum number of matching codes to return.'),
25
+ }),
26
+ output: z.object({
27
+ query: z.string().describe('The search query used.'),
28
+ results: z
29
+ .array(z
30
+ .object({
31
+ code: z.string().describe('4-digit CIP code (e.g. "11.07").'),
32
+ title: z.string().describe('Standard program title.'),
33
+ family: z.string().describe('2-digit CIP family code.'),
34
+ familyTitle: z.string().describe('Name of the CIP family/discipline.'),
35
+ })
36
+ .describe('CIP taxonomy entry.'))
37
+ .describe('Matching CIP entries ranked by relevance.'),
38
+ totalMatches: z.number().describe('Number of matches found.'),
39
+ }),
40
+ errors: [
41
+ {
42
+ reason: 'no_match',
43
+ code: JsonRpcErrorCode.NotFound,
44
+ when: 'No CIP codes matched the search query.',
45
+ recovery: 'Try a broader keyword — use the discipline name rather than a specific subdiscipline.',
46
+ },
47
+ ],
48
+ handler(input, ctx) {
49
+ ctx.log.info('Searching CIP codes', { query: input.query });
50
+ const results = searchCipCodes(input.query, input.limit);
51
+ if (results.length === 0) {
52
+ throw ctx.fail('no_match', `No CIP codes matched "${input.query}"`, {
53
+ recovery: { hint: `Try a broader term like "computer", "health", or "business".` },
54
+ });
55
+ }
56
+ return {
57
+ query: input.query,
58
+ results,
59
+ totalMatches: results.length,
60
+ };
61
+ },
62
+ format: (result) => {
63
+ const lines = [`## CIP Code Lookup: "${result.query}"`, `**Matches:** ${result.totalMatches}`];
64
+ for (const entry of result.results) {
65
+ lines.push(`\n**${entry.code}** — ${entry.title}`);
66
+ lines.push(`Family: ${entry.family} ${entry.familyTitle}`);
67
+ }
68
+ return [{ type: 'text', text: lines.join('\n') }];
69
+ },
70
+ });
71
+ //# sourceMappingURL=lookup-cip.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-cip.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/lookup-cip.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview Cross-institution program search tool. Finds programs by CIP code or keyword
3
+ * across all institutions, ranked by median earnings.
4
+ * @module mcp-server/tools/definitions/search-programs.tool
5
+ */
6
+ import { z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ export declare const searchProgramsTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
9
+ cip_code: z.ZodOptional<z.ZodString>;
10
+ program_name: z.ZodOptional<z.ZodString>;
11
+ state: z.ZodOptional<z.ZodString>;
12
+ ownership: z.ZodOptional<z.ZodNumber>;
13
+ max_net_price: z.ZodOptional<z.ZodNumber>;
14
+ min_earnings: z.ZodOptional<z.ZodNumber>;
15
+ max_debt: z.ZodOptional<z.ZodNumber>;
16
+ per_page: z.ZodDefault<z.ZodNumber>;
17
+ page: z.ZodDefault<z.ZodNumber>;
18
+ }, z.core.$strip>, z.ZodObject<{
19
+ total: z.ZodNumber;
20
+ page: z.ZodNumber;
21
+ per_page: z.ZodNumber;
22
+ programs: z.ZodArray<z.ZodObject<{
23
+ school_id: z.ZodNumber;
24
+ school_name: z.ZodString;
25
+ school_state: z.ZodOptional<z.ZodString>;
26
+ school_ownership: z.ZodString;
27
+ net_price_overall: z.ZodOptional<z.ZodNumber>;
28
+ program_code: z.ZodString;
29
+ program_title: z.ZodOptional<z.ZodString>;
30
+ earnings_1yr_median: z.ZodOptional<z.ZodNumber>;
31
+ median_debt: z.ZodOptional<z.ZodNumber>;
32
+ enrollment: z.ZodOptional<z.ZodNumber>;
33
+ suppressed: z.ZodBoolean;
34
+ }, z.core.$strip>>;
35
+ total_programs: z.ZodNumber;
36
+ suppressed_count: z.ZodNumber;
37
+ notice: z.ZodOptional<z.ZodString>;
38
+ }, z.core.$strip>, readonly [{
39
+ readonly reason: "no_results";
40
+ readonly code: JsonRpcErrorCode.NotFound;
41
+ readonly when: "No programs matched the search filters.";
42
+ readonly recovery: "Remove min_earnings or max_net_price filters, or try a different CIP code with scorecard_lookup_cip.";
43
+ }, {
44
+ readonly reason: "api_error";
45
+ readonly code: JsonRpcErrorCode.ServiceUnavailable;
46
+ readonly when: "The College Scorecard API returned an error.";
47
+ readonly recovery: "Check SCORECARD_API_KEY validity and retry after a brief delay.";
48
+ }]>;
49
+ //# sourceMappingURL=search-programs.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-programs.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-programs.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAkBjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+L7B,CAAC"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * @fileoverview Cross-institution program search tool. Finds programs by CIP code or keyword
3
+ * across all institutions, ranked by median earnings.
4
+ * @module mcp-server/tools/definitions/search-programs.tool
5
+ */
6
+ import { tool, z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ import { ownershipLabel } from '../../../mcp-server/format-helpers.js';
9
+ import { getScorecardService } from '../../../services/scorecard/scorecard-service.js';
10
+ const ProgramResultSchema = z.object({
11
+ school_id: z.number().describe('School unit ID — use for follow-up calls.'),
12
+ school_name: z.string().describe('Institution name.'),
13
+ school_state: z.string().optional().describe('State code.'),
14
+ school_ownership: z.string().describe('Control type: Public, Private nonprofit, or For-profit.'),
15
+ net_price_overall: z.number().optional().describe('Average net price at this school.'),
16
+ program_code: z.string().describe('4-digit CIP program code.'),
17
+ program_title: z.string().optional().describe('Program title.'),
18
+ earnings_1yr_median: z.number().optional().describe('Median earnings 1 year after graduation.'),
19
+ median_debt: z.number().optional().describe('Median debt at graduation for this program.'),
20
+ enrollment: z.number().optional().describe('IPEDS enrollment for this program.'),
21
+ suppressed: z.boolean().describe('True when earnings are suppressed due to small cohort.'),
22
+ });
23
+ export const searchProgramsTool = tool('scorecard_search_programs', {
24
+ title: 'Search Programs',
25
+ description: 'Find programs by CIP code across all institutions, ranked by median earnings. Accepts school-side filters (state, ownership, max cost) to answer queries like "best CS programs in Washington under $30k." Use scorecard_lookup_cip to convert program names to CIP codes before using this tool. Returns school name, school ID, and unit ID alongside program metrics for follow-up chaining to scorecard_get_school or scorecard_get_programs.',
26
+ annotations: { readOnlyHint: true, openWorldHint: true },
27
+ input: z.object({
28
+ cip_code: z
29
+ .string()
30
+ .optional()
31
+ .describe('CIP 4-digit code to search for (e.g. "11.07" for Computer Science). Use scorecard_lookup_cip to find codes.'),
32
+ program_name: z
33
+ .string()
34
+ .optional()
35
+ .describe('Program name keyword for approximate matching. Converted to CIP family filter; for precise matching use cip_code.'),
36
+ state: z
37
+ .string()
38
+ .length(2)
39
+ .optional()
40
+ .describe('Restrict to schools in this state (two-letter code).'),
41
+ ownership: z
42
+ .number()
43
+ .int()
44
+ .min(1)
45
+ .max(3)
46
+ .optional()
47
+ .describe('Restrict to school type: 1=public, 2=private nonprofit, 3=for-profit.'),
48
+ max_net_price: z.number().optional().describe('Maximum average net price at the school.'),
49
+ min_earnings: z.number().optional().describe('Minimum 1-year median earnings for the program.'),
50
+ max_debt: z.number().optional().describe('Maximum median debt at graduation for the program.'),
51
+ per_page: z.number().int().min(1).max(100).default(20).describe('Results per page (max 100).'),
52
+ page: z.number().int().min(0).default(0).describe('Zero-indexed page number.'),
53
+ }),
54
+ output: z.object({
55
+ total: z.number().describe('Total schools returned (pagination at school level).'),
56
+ page: z.number().describe('Current page (zero-indexed).'),
57
+ per_page: z.number().describe('Results per page used.'),
58
+ programs: z
59
+ .array(ProgramResultSchema.describe('Program result with school context.'))
60
+ .describe('Program results — multiple programs per school if school matches multiple CIP codes. Sorted by earnings descending (suppressed last).'),
61
+ total_programs: z.number().describe('Total programs returned across all result schools.'),
62
+ suppressed_count: z.number().describe('Programs with suppressed earnings.'),
63
+ notice: z
64
+ .string()
65
+ .optional()
66
+ .describe('Recovery hint when no programs match or earnings data is unavailable.'),
67
+ }),
68
+ errors: [
69
+ {
70
+ reason: 'no_results',
71
+ code: JsonRpcErrorCode.NotFound,
72
+ when: 'No programs matched the search filters.',
73
+ recovery: 'Remove min_earnings or max_net_price filters, or try a different CIP code with scorecard_lookup_cip.',
74
+ },
75
+ {
76
+ reason: 'api_error',
77
+ code: JsonRpcErrorCode.ServiceUnavailable,
78
+ when: 'The College Scorecard API returned an error.',
79
+ recovery: 'Check SCORECARD_API_KEY validity and retry after a brief delay.',
80
+ },
81
+ ],
82
+ async handler(input, ctx) {
83
+ ctx.log.info('Searching programs', {
84
+ cip_code: input.cip_code,
85
+ state: input.state,
86
+ page: input.page,
87
+ });
88
+ const service = getScorecardService();
89
+ const response = await service.searchPrograms({
90
+ ...(input.cip_code && { cipCode: input.cip_code }),
91
+ ...(input.state && { state: input.state }),
92
+ ...(input.ownership != null && { ownership: input.ownership }),
93
+ ...(input.max_net_price != null && { maxNetPrice: input.max_net_price }),
94
+ ...(input.min_earnings != null && { minEarnings: input.min_earnings }),
95
+ ...(input.max_debt != null && { maxDebt: input.max_debt }),
96
+ perPage: input.per_page,
97
+ page: input.page,
98
+ }, ctx);
99
+ // Flatten: each school record may have multiple matching programs in the nested array
100
+ const allPrograms = [];
101
+ for (const record of response.results) {
102
+ const rawPrograms = record['latest.programs.cip_4_digit'] ?? [];
103
+ // When cip_code filter applied, API returns only matching programs
104
+ for (const p of rawPrograms) {
105
+ // Apply program_name soft filter if cip_code not provided
106
+ if (input.program_name && !input.cip_code) {
107
+ const nameMatch = (p.title ?? '')
108
+ .toLowerCase()
109
+ .includes(input.program_name.toLowerCase());
110
+ if (!nameMatch)
111
+ continue;
112
+ }
113
+ const rawEarnings = p.earnings?.highest?.['1_yr']?.overall_median_earnings;
114
+ const suppressed = rawEarnings == null;
115
+ // Post-fetch earnings filter
116
+ if (input.min_earnings != null &&
117
+ !suppressed &&
118
+ rawEarnings < input.min_earnings)
119
+ continue;
120
+ // Post-fetch debt filter
121
+ if (input.max_debt != null &&
122
+ p.debt?.median_debt != null &&
123
+ p.debt.median_debt > input.max_debt)
124
+ continue;
125
+ allPrograms.push({
126
+ school_id: record.id ?? 0,
127
+ school_name: record['school.name'] ?? 'Unknown',
128
+ ...(record['school.state'] && { school_state: record['school.state'] }),
129
+ school_ownership: ownershipLabel(record['school.ownership']),
130
+ ...(record['latest.cost.avg_net_price.overall'] != null && {
131
+ net_price_overall: record['latest.cost.avg_net_price.overall'],
132
+ }),
133
+ program_code: p.code ?? 'Unknown',
134
+ ...(p.title && { program_title: p.title }),
135
+ ...(rawEarnings != null && { earnings_1yr_median: rawEarnings }),
136
+ ...(p.debt?.median_debt != null && { median_debt: p.debt.median_debt }),
137
+ ...(p.counts?.ipeds_enrollment != null && { enrollment: p.counts.ipeds_enrollment }),
138
+ suppressed,
139
+ });
140
+ }
141
+ }
142
+ // Sort: earnings descending, suppressed last
143
+ allPrograms.sort((a, b) => {
144
+ if (a.suppressed && !b.suppressed)
145
+ return 1;
146
+ if (!a.suppressed && b.suppressed)
147
+ return -1;
148
+ return (b.earnings_1yr_median ?? 0) - (a.earnings_1yr_median ?? 0);
149
+ });
150
+ const suppressed_count = allPrograms.filter((p) => p.suppressed).length;
151
+ const notice = allPrograms.length === 0
152
+ ? `No programs matched the applied filters. Try removing min_earnings or max_net_price constraints, or use scorecard_lookup_cip to find the correct CIP code.`
153
+ : suppressed_count === allPrograms.length
154
+ ? `All ${allPrograms.length} programs have suppressed earnings data. Try a broader CIP code or different state.`
155
+ : undefined;
156
+ return {
157
+ total: response.metadata.total,
158
+ page: response.metadata.page,
159
+ per_page: response.metadata.per_page,
160
+ programs: allPrograms,
161
+ total_programs: allPrograms.length,
162
+ suppressed_count,
163
+ ...(notice && { notice }),
164
+ };
165
+ },
166
+ format: (result) => {
167
+ const lines = [
168
+ `## Program Search Results`,
169
+ `**Schools Matched:** ${result.total} | **Programs:** ${result.total_programs} | **Suppressed:** ${result.suppressed_count}`,
170
+ `**Page:** ${result.page} | **Per Page:** ${result.per_page}`,
171
+ ];
172
+ if (result.notice)
173
+ lines.push(`\n> ${result.notice}`);
174
+ for (const p of result.programs) {
175
+ lines.push(`\n**${p.program_code}** — ${p.program_title ?? 'Unknown'}`);
176
+ lines.push(`School: ${p.school_name} (ID: ${p.school_id}) | ${p.school_ownership}${p.school_state ? ` | ${p.school_state}` : ''}`);
177
+ if (p.net_price_overall != null)
178
+ lines.push(`Net Price: $${p.net_price_overall.toLocaleString()}`);
179
+ lines.push(`1-Year Earnings (median): ${p.earnings_1yr_median != null ? `$${p.earnings_1yr_median.toLocaleString()}` : p.suppressed ? 'Suppressed (small cohort)' : 'Not available'}`);
180
+ if (p.median_debt != null)
181
+ lines.push(`Median Debt: $${p.median_debt.toLocaleString()}`);
182
+ if (p.enrollment != null)
183
+ lines.push(`Enrollment: ${p.enrollment.toLocaleString()}`);
184
+ }
185
+ return [{ type: 'text', text: lines.join('\n') }];
186
+ },
187
+ });
188
+ //# sourceMappingURL=search-programs.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-programs.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-programs.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview School search tool. Searches and filters institutions by name, location,
3
+ * type, size, and acceptance rate range.
4
+ * @module mcp-server/tools/definitions/search-schools.tool
5
+ */
6
+ import { z } from '@cyanheads/mcp-ts-core';
7
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
+ export declare const searchSchoolsTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
9
+ query: z.ZodOptional<z.ZodString>;
10
+ state: z.ZodOptional<z.ZodString>;
11
+ ownership: z.ZodOptional<z.ZodNumber>;
12
+ degree_level: z.ZodOptional<z.ZodNumber>;
13
+ size_range: z.ZodOptional<z.ZodObject<{
14
+ min: z.ZodNumber;
15
+ max: z.ZodNumber;
16
+ }, z.core.$strip>>;
17
+ acceptance_rate_range: z.ZodOptional<z.ZodObject<{
18
+ min: z.ZodNumber;
19
+ max: z.ZodNumber;
20
+ }, z.core.$strip>>;
21
+ zip: z.ZodOptional<z.ZodString>;
22
+ distance: z.ZodOptional<z.ZodString>;
23
+ cip_code: z.ZodOptional<z.ZodString>;
24
+ per_page: z.ZodDefault<z.ZodNumber>;
25
+ page: z.ZodDefault<z.ZodNumber>;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ total: z.ZodNumber;
28
+ page: z.ZodNumber;
29
+ per_page: z.ZodNumber;
30
+ schools: z.ZodArray<z.ZodObject<{
31
+ id: z.ZodNumber;
32
+ name: z.ZodString;
33
+ city: z.ZodOptional<z.ZodString>;
34
+ state: z.ZodOptional<z.ZodString>;
35
+ ownership: z.ZodString;
36
+ degree_level: z.ZodString;
37
+ enrollment: z.ZodOptional<z.ZodNumber>;
38
+ admission_rate: z.ZodOptional<z.ZodNumber>;
39
+ tuition_in_state: z.ZodOptional<z.ZodNumber>;
40
+ tuition_out_of_state: z.ZodOptional<z.ZodNumber>;
41
+ net_price_overall: z.ZodOptional<z.ZodNumber>;
42
+ median_debt: z.ZodOptional<z.ZodNumber>;
43
+ earnings_6yr_median: z.ZodOptional<z.ZodNumber>;
44
+ }, z.core.$strip>>;
45
+ notice: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strip>, readonly [{
47
+ readonly reason: "no_results";
48
+ readonly code: JsonRpcErrorCode.NotFound;
49
+ readonly when: "No institutions matched the provided filters.";
50
+ readonly recovery: "Broaden the search by removing filters or widening size and acceptance rate ranges.";
51
+ }, {
52
+ readonly reason: "api_error";
53
+ readonly code: JsonRpcErrorCode.ServiceUnavailable;
54
+ readonly when: "The College Scorecard API returned an error.";
55
+ readonly recovery: "Check SCORECARD_API_KEY validity and retry after a brief delay.";
56
+ }]>;
57
+ //# sourceMappingURL=search-schools.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-schools.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-schools.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4O5B,CAAC"}