Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

onet-match

von Benjamin-V-ChanVersion 0.3.5i★ –iLäuft auf deinem Computer
Name in der Registryio.github.Benjamin-V-Chan/onet-match

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

Occupation classifier: free text to ranked O*NET-SOC codes with tasks, skills and RIASEC. Local.

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft auf deinem Computer
  • Transport: stdio
  • Kategorie: Sonstiges

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf deinem Computer mit den Rechten deines Benutzerkontos (Dateien, Netzwerk, Apps).
  • Die Registry nennt keinen Schlüssel zum Eintragen.

Du brauchst

  • PyPIuv für Python installiert (für den Befehl uvx)

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein

{
  "mcpServers": {
    "onet-match": {
      "command": "uvx",
      "args": [
        "onet-match",
        "mcp"
      ]
    }
  }
}

Führe das in deinem Terminal aus

claude mcp add onet-match -- uvx onet-match mcp

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "onet-match": {
      "command": "uvx",
      "args": [
        "onet-match",
        "mcp"
      ]
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "onet-match": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "onet-match",
        "mcp"
      ]
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde mit dem GitHub-Konto Benjamin-V-Chan bestätigt, dem das Repo gehört

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • – Nicht zutreffend

    Endpunkt antwortet

    Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen

Im Vergleich mit anderen in Sonstigesi

  • Mehr Sterne als 0 % der anderen 32709 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 85 % der anderen 32709 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 32709 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist onet-match sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.

Läuft er auf meinem Computer oder in der Cloud?

Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.3.5) kam vor 6 Tagen in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, SwarmMemo

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Spec Driven Development

von formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Läuft auf deinem Computer★ 440MITAktualisiert vor 14 Monaten
Installieren

Remote Desktop Commander

von desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Läuft in der Cloud★ 211Aktualisiert vorgestern
Installieren

SwarmMemo

von Hugo0

Talk with agent swarms: rooms, private messages and paid tasks for AI agents

Läuft in der CloudAktualisiert heute
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

onet-match

**Occupation classification and job-title normalization against the O\*NET-SOC taxonomy.** onet-match turns messy, unstructured text about work (job titles, resume bullets, job postings, project descriptions, interest statements, skill lists) into standardized SOC codes with a fine-tuned retrieve-and-rerank transformer pipeline. On held-out O\*NET text it ranks the right occupation first 51% of the time, against 21% for a TF-IDF baseline, and 65% vs 17% on messy, human-style inputs. Each result is enriched with O\*NET tasks, skills, knowledge and RIASEC interests, and comes with a calibrated confidence. Use it from Python, the command line, a REST API or any MCP-compatible agent, with no API keys.

  • [Try it in your browser](https://huggingface.co/spaces/BenjaminChan12/onet-match): no install, and the model runs on your device.
  • Open source (MIT) and runs locally. No API key or account needed to match.
  • Fine-tuned bge-base bi-encoder + cross-encoder reranker over all 923 O\*NET 31.0 occupations. About 47 ms per query on a laptop.
  • Python API, CLI, REST API (FastAPI), MCP server for AI assistants, and Docker.
  • Also includes the O\*NET data pipeline it's built on: bulk database download, a Web Services client and analysis tools.
use caseinputtop match (confidence)
Career explorationdesigned our robot in CAD and wired its circuits for my high school robotics teamRobotics Engineers, 17-2199.08 (0.38); #2 Robotics Technicians
Career explorationI love weather, maps and tracking stormsAtmospheric and Space Scientists, 19-2021.00 (0.87)
Skills-based hiringMust know survival analysis, R, SAS and clinical trial dataBiostatisticians, 15-2041.01 (0.60)
Skills-based hiringMust know Solidity, smart contracts and EthereumBlockchain Engineers, 15-1299.07 (0.81)
Resume parsingLed a team of 12 nurses on a cardiac ICU night shiftCritical Care Nurses, 29-1141.03 (0.42); #2 Acute Care Nurses
Resume parsingExcel, QuickBooks, payroll, AP/ARPayroll and Timekeeping Clerks, 43-3051.00 (0.49)
Career counselingskills: Python, SQL, Tableau; interests: sports statisticsStatisticians, 15-2041.00 (0.59)
Job-posting normalization{"title": "Wind Turbine Tech", "requirements": ["climbing", "hydraulics", "electrical troubleshooting"]}Wind Turbine Service Technicians, 49-9081.00 (0.81)

Real outputs of the served model, saved in outputs/examples/readme_examples.json.

Quickstart

pip install "onet-match[matching]"
from onet_match import match

result = match("Must know survival analysis, R, SAS and clinical trial data", top_k=5) for m in result.matches: print(m.soc, m.title, m.confidence) print(result.profile["riasec_code"]) # aggregate interest code, e.g. "ICS"

The package imports as onet_match and provides the onet-match command. The first call downloads the pretrained model bundle (about 0.5 GB) from the Hugging Face Hub (BenjaminChan12/onet-match) and caches it.

onet-match match "Excel, QuickBooks, payroll, AP/AR"          # CLI (add --json for JSON)

pip install "onet-match[matching,serve]" onet-match serve --port 8000 # REST API curl -s localhost:8000/match -H 'content-type: application/json' \ -d '{"text": "I love weather, maps and tracking storms", "top_k": 3}'

REST routes: POST /match, POST /match/batch, GET /occupation/{soc} and GET /health. The full request and response contract and the Docker setup are in docs/API.md.

For coding agents: llms.txt is a one-page summary, and AGENTS.md covers usage from another project and work inside this repo.

Use from AI assistants (MCP)

onet-match mcp runs a Model Context Protocol server with two read-only tools: match_occupations(text, top_k) and get_occupation(soc). Add it to any MCP client (Claude Desktop, Cursor, VS Code and others):

{

"mcpServers": { "onet-match": { "command": "uvx", "args": ["--from", "onet-match[mcp]", "onet-match", "mcp"] } } }

Without uv, run pip install "onet-match[mcp]" and use "command": "onet-match", "args": ["mcp"]. For a remote server, use onet-match mcp --transport streamable-http --port 8001 (served at /mcp). Tool arguments and return fields are in docs/API.md. Listed in the MCP Registry as io.github.Benjamin-V-Chan/onet-match, on Glama and on mcpservers.org.

What each match contains

soc, title, confidence (calibrated, 0–1), score, major_group and its title, job_zone, riasec_code, description, top_tasks, top_skills and top_knowledge (with O\*NET importance and level). Each result also carries a profile that aggregates skills, knowledge and all six RIASEC interests across the matches, weighted by confidence.

Use cases

  • Career exploration (EdTech). Map what students say they did or enjoy to occupations and skills.
  • Resume and profile parsing. Code experience bullets and skill lists to SOC codes.
  • Skills-based hiring and workforce planning. Turn a list of required skills into the roles that use them, to scope a job or find adjacent talent.
  • Job-posting normalization. Turn informal titles and descriptions into standard occupations.
  • Workforce and labor-market analytics. Batch-code large text collections.
  • Career counseling tools. Show the tasks and skills behind a suggestion.
  • LLM agents. Ground occupation questions in O\*NET instead of free generation (see llms.txt).

Worked example: onet-match-job-postings codes 3,000 LinkedIn job postings and compares pay by occupation group.

Details and integration patterns: docs/APPLICATIONS.md.

Accuracy

All models are evaluated on the same held-out splits. Every number traces to a saved run in outputs/runs/.

modelO\*NET test top-1O\*NET test top-5messy-text test top-1messy-text test top-5p50 latency
TF-IDF baseline20.5%40.5%17.4%39.2%0.5 ms
BM2520.7%40.1%24.1%45.2%0.2 ms
bge-base-en-v1.5, off the shelf36.1%64.3%45.4%77.6%6.9 ms
fine-tuned bge-base50.2%78.2%65.2%92.6%6.8 ms
fine-tuned bge-base + reranker (served)51.1%79.1%65.4%92.9%46.7 ms
  • **O\*NET test:** 6,792 held-out titles, task statements, work activities and descriptions.
  • Messy-text test: 4,703 informal snippets written by a different LLM than the one that wrote the training text.
  • Confidence: temperature-calibrated, ECE 0.037.
  • Full results: per-input-type tables, calibration, ablations, learning curves and error analysis are in docs/RESULTS.md.

How it works

flowchart LR

B["O*NET 31.0 database (bulk download)"] --> C["Occupation catalog 923 occupations"] C --> P["Labeled pairs titles · tasks · activities"] C --> S["LLM-written messy text train: model A · test: model B"] P --> T["Fine-tune bi-encoder

  • cross-encoder reranker"] S --> T T --> BU["Model bundle

(Hugging Face Hub)"] BU --> API["match() · onet-match CLI · REST API"]

  1. A fine-tuned bi-encoder (bge-base) embeds the input and retrieves the 20 nearest occupations.
  2. A fine-tuned cross-encoder rescores those 20.
  3. The two scores are blended with a weight chosen on validation data.
  4. A temperature-scaled softmax turns the blended scores into calibrated confidence.

The validation and test tasks are removed from the occupation documents the models search, so no test text leaks into retrieval. Synthetic training and test text come from different LLMs.

In-browser demo

The demo Space runs the same pipeline client-side with transformers.js: both models are exported to ONNX and quantized to int8 (about 130 MB, cached after the first visit). demo/build.py builds it from a bundle. Quantization and the browser runtime shift results slightly: on 800 test queries the browser picks the same top match as the Python package 95% of the time, with top-1 accuracy 61.5% vs 62.6% (outputs/demo/browser_parity.json). Use the Python package for anything that matters.

O\*NET data pipeline

The onet_data_collector package (onet-collect) downloads and verifies O\*NET database releases, which needs no credentials. It also wraps O\*NET Web Services: keyword search, occupation details and flattened profiles. See docs/COLLECTOR.md.

onet-collect bulk download                         # download + verify the latest O*NET database

onet-match collect "healthcare" "technology" # Web Services search (free O*NET account, see .env.example) onet-match eda | keywords | cluster # classic analysis: coverage, keyword attribution, TF-IDF clusters

Train your own

git clone https://github.com/Benjamin-V-Chan/onet-match && cd onet-match

pip install -e ".[dev]" onet-match matching build-data # O*NET catalog, labeled pairs, splits scripts/matching/reproduce.sh # every model, ablation and the results report onet-match matching bundle " " --run # package a model for serving

  • Synthetic text: WITH_SYNTH=1 TRAIN_LLM= EVAL_PROVIDER= EVAL_LLM= scripts/matching/reproduce.sh also generates the messy training and test text, using a different LLM for each. It needs LLM API keys in environment variables.
  • Training time: bge-base took 58 minutes for one epoch on a laptop GPU (Apple Silicon, MPS). The exact scripts behind every saved run are in scripts/matching/.
  • Tests: pytest runs fully offline, using tiny local models and a mocked LLM.

Set ONET_MATCH_BUNDLE=/path/to/bundle to serve your own model, or ONET_MATCH_HF_REPO=owner/repo to load one from the Hub.

Background

This project was originally built in 2024 as an open-source edtech tool for analyzing O*NET occupational data at scale, and as part of my capstone project for an engineering course. Its analytics pipeline (EDA, occupation clustering, and keyword attribution) was later integrated into production products at Project Leo, and has inspired related work at other companies and projects.

In 2026 it was rebuilt around semantic occupation

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen