@gera-services/mcp-gera-jobs 1.0.0
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.
- package/README.md +79 -0
- package/bin/cli.js +12 -0
- package/dist/dataset.generated.d.ts +65 -0
- package/dist/dataset.generated.js +3516 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.js +248 -0
- package/package.json +54 -0
- package/server.json +22 -0
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# @gera-services/mcp-gera-jobs
|
|
2
|
+
|
|
3
|
+
**GeraJobs MCP server** — give any AI agent (Claude, ChatGPT with tools, Cursor,
|
|
4
|
+
or any [Model Context Protocol](https://modelcontextprotocol.io) client) direct
|
|
5
|
+
access to the GeraJobs global jobs dataset: 30 job categories, 20 country job
|
|
6
|
+
markets, and salary benchmarks aggregated from **1,002 real crawled job
|
|
7
|
+
listings**.
|
|
8
|
+
|
|
9
|
+
Everything is answered locally from on-disk data — **no backend, no network, no
|
|
10
|
+
auth, no API key**. It is the same data the [GeraJobs](https://gerajobs.com)
|
|
11
|
+
product renders. A Gera Systems product.
|
|
12
|
+
|
|
13
|
+
## Tools
|
|
14
|
+
|
|
15
|
+
| Tool | What it does |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `search_job_categories` | Free-text search over the 30 categories (name, description, skills, keywords). Returns avg USD salary range, top skills, remote %, trending flag. |
|
|
18
|
+
| `get_salary_benchmark` | Real salary benchmarks for a role per country/currency — sample size + median / p25 / p75 / low / high annual pay, plus sample listings. Aggregated from crawled listings. |
|
|
19
|
+
| `list_job_categories` | Compact index of all 30 categories (id, name, salary range, trending) — the canonical ids for the other tools. |
|
|
20
|
+
| `get_job_market` | Country hiring profile: avg monthly wage, top industries/employers, job + AI growth, remote adoption, summary. Lookup by ISO code, country name, or city. |
|
|
21
|
+
| `get_category_details` | Full profile + curated FAQ for one category (salaries, skills, how to find roles). |
|
|
22
|
+
|
|
23
|
+
All numbers trace to the underlying GeraJobs datasets; salary figures derive from
|
|
24
|
+
real crawled listings (snapshot date and total listing count are returned in
|
|
25
|
+
every salary response). Orientation only — not a contractual salary guarantee.
|
|
26
|
+
|
|
27
|
+
## Install & run
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# From the npm registry (once published):
|
|
31
|
+
npx -y @gera-services/mcp-gera-jobs
|
|
32
|
+
|
|
33
|
+
# Or from this repo:
|
|
34
|
+
cd packages/mcp-gera-jobs
|
|
35
|
+
node scripts/build-dataset.mjs # snapshot the real datasets (already committed)
|
|
36
|
+
npm run build # tsc --noCheck -> dist/
|
|
37
|
+
npm run smoke # prove tools/list + tools/call over stdio
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Claude Desktop
|
|
41
|
+
|
|
42
|
+
Add this to your `claude_desktop_config.json`
|
|
43
|
+
(`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"gera-jobs": {
|
|
49
|
+
"command": "npx",
|
|
50
|
+
"args": ["-y", "@gera-services/mcp-gera-jobs"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Then restart Claude Desktop. Ask things like:
|
|
57
|
+
|
|
58
|
+
- *"What's the median salary for a data scientist in the US?"*
|
|
59
|
+
- *"Show me trending remote job categories and their top skills."*
|
|
60
|
+
- *"What's the hiring market like in Armenia right now?"*
|
|
61
|
+
|
|
62
|
+
## Cursor / other stdio MCP clients
|
|
63
|
+
|
|
64
|
+
Point the client at the `mcp-gera-jobs` stdio command (`npx -y
|
|
65
|
+
@gera-services/mcp-gera-jobs`), or to `node bin/cli.js` when running from a local
|
|
66
|
+
checkout.
|
|
67
|
+
|
|
68
|
+
## Data sources (real, in-repo)
|
|
69
|
+
|
|
70
|
+
- **Categories:** `apps/gerajobs-web/src/data/job-categories.ts` (30 categories)
|
|
71
|
+
- **Markets:** `apps/gerajobs-web/src/data/job-markets.ts` (20 countries)
|
|
72
|
+
- **Salary benchmarks:** `apps/gerajobs-web/src/data/salary-cluster.generated.ts`
|
|
73
|
+
— aggregated from 1,002 real crawled GeraJobs listings.
|
|
74
|
+
|
|
75
|
+
Regenerate the bundled snapshot with `node scripts/build-dataset.mjs`.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
A [GeraJobs](https://gerajobs.com) product, by Gera Systems Ltd. MIT licensed.
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for the GeraJobs MCP server.
|
|
4
|
+
* Starts the server on stdio. Intended to be launched by an MCP client
|
|
5
|
+
* (Claude Desktop, ChatGPT-with-tools, Cursor, etc.) — not run interactively.
|
|
6
|
+
*/
|
|
7
|
+
import { main } from '../dist/server.js';
|
|
8
|
+
|
|
9
|
+
main().catch((err) => {
|
|
10
|
+
console.error('Fatal:', err);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export interface JobCategory {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
description: string;
|
|
6
|
+
avgSalaryUSD: {
|
|
7
|
+
min: number;
|
|
8
|
+
max: number;
|
|
9
|
+
};
|
|
10
|
+
topSkills: string[];
|
|
11
|
+
trending: boolean;
|
|
12
|
+
remotePercentage: number;
|
|
13
|
+
keywords: string[];
|
|
14
|
+
faqs: {
|
|
15
|
+
q: string;
|
|
16
|
+
a: string;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
export interface JobMarket {
|
|
20
|
+
countryCode: string;
|
|
21
|
+
country: string;
|
|
22
|
+
city: string;
|
|
23
|
+
currency: string;
|
|
24
|
+
avgMonthlyWage: number;
|
|
25
|
+
topIndustries: string[];
|
|
26
|
+
topEmployers: string[];
|
|
27
|
+
jobGrowthRate: string;
|
|
28
|
+
remoteWorkAdoption: string;
|
|
29
|
+
aiJobsGrowth: string;
|
|
30
|
+
description: string;
|
|
31
|
+
hiring: string;
|
|
32
|
+
keywords: string[];
|
|
33
|
+
slug: string;
|
|
34
|
+
}
|
|
35
|
+
export interface SalaryMarketStat {
|
|
36
|
+
currency: string;
|
|
37
|
+
country: string;
|
|
38
|
+
countryCode: string;
|
|
39
|
+
sampleSize: number;
|
|
40
|
+
medianAnnual: number;
|
|
41
|
+
p25Annual: number;
|
|
42
|
+
p75Annual: number;
|
|
43
|
+
lowAnnual: number;
|
|
44
|
+
highAnnual: number;
|
|
45
|
+
}
|
|
46
|
+
export interface SalarySampleListing {
|
|
47
|
+
id: string;
|
|
48
|
+
title: string;
|
|
49
|
+
company: string | null;
|
|
50
|
+
currency: string;
|
|
51
|
+
salary: string;
|
|
52
|
+
url: string | null;
|
|
53
|
+
}
|
|
54
|
+
export interface SalaryRole {
|
|
55
|
+
slug: string;
|
|
56
|
+
name: string;
|
|
57
|
+
totalSampleSize: number;
|
|
58
|
+
markets: SalaryMarketStat[];
|
|
59
|
+
sampleListings: SalarySampleListing[];
|
|
60
|
+
}
|
|
61
|
+
export declare const SALARY_TOTAL_LISTINGS: 1002;
|
|
62
|
+
export declare const SALARY_GENERATED_AT: "2026-06-12";
|
|
63
|
+
export declare const JOB_CATEGORIES: JobCategory[];
|
|
64
|
+
export declare const JOB_MARKETS: JobMarket[];
|
|
65
|
+
export declare const SALARY_ROLES: SalaryRole[];
|