프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Skillmatch MCP

제작자: jarmstrong158버전 2.0.0i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.jarmstrong158/skillmatch-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

Job search and ranking pipeline via MCP for Claude Desktop.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 검색 및 AI 기억

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 레지스트리에 입력해야 할 키가 나와 있지 않아요.

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

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

터미널에서 이 명령어를 실행하세요

claude mcp add skillmatch -- uvx skillmatch-mcp

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

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

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

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

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 jarmstrong158 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

검색 및 AI 기억 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 5686개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 5686개 중 27%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 5686개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Skillmatch MCP, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(2.0.0)은 3개월 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Context7, Codebase Memory, Exa

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Context7

Up-to-date docs for AI agents

제작자: upstash널리 사용됨↓ 97.3만/주★ 6.4만그저께 업데이트

컴퓨터 또는 클라우드

Codebase Memory

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

제작자: DeusData널리 사용됨↓ 1.8만/주★ 4.8만22일 전 업데이트

내 컴퓨터에서 실행

Exa

Connect AI agents to Exa for web search, content fetching, and multi-step research.

제작자: exa-labs성장 중★ 5.2천2개월 전 업데이트

클라우드에서 실행✓ exa.ai

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

SkillMatch MCP

Claude-powered job fit analyzer for people who prove their skills through work, not credentials.

What It Does

SkillMatch is an MCP server that gives Claude access to your GitHub portfolio, resume, and job search preferences. It lets Claude:

  • Analyze how well you fit a specific job description based on your actual projects and resume
  • Build optimized job search queries tailored to your targets and constraints
  • Track every application you submit in a local SQLite database
  • Pull your public GitHub repos to highlight relevant work during fit analysis

All data stays local on your machine. Nothing is sent anywhere except public GitHub API calls to fetch your own repos.

Setup

1. Install the dependency
cd skillmatch-mcp

pip install -r requirements.txt

Speaks MCP protocol revision `2026-07-28` over stdio, on SDK mcp>=2.0,<3. It is stateless: no initialize handshake and no session id, with every request carrying its own protocol version and client identity. tools/list and server/discover return ttlMs/cacheScope freshness hints, and tool order is stable across calls so client-side and prompt caches keep hitting.

Upgrading from 1.x: 2.0.0 drops the initialize handshake, so it requires a client that

speaks 2026-07-28. Tool names, schemas, and results are unchanged — only the transport moved.

Stay on 1.x if you need to serve an older client.

2. Add to Claude

Claude Code (CLI):

claude mcp add --scope user skillmatch -- python /path/to/skillmatch-mcp/server.py

Then restart Claude Code.

Claude Desktop:

Open your Claude Desktop configuration file and add SkillMatch to the mcpServers section:

{

"mcpServers": { "skillmatch": { "command": "python", "args": ["/path/to/skillmatch-mcp/server.py"] } } }

Replace /path/to/skillmatch-mcp/server.py with the actual path to server.py on your machine, then restart Claude Desktop.

3. Start using it

After restarting, SkillMatch tools will be available in your conversation. Works in Claude Code and Claude Desktop.

Onboarding

The first time you use SkillMatch, Claude will walk you through a setup conversation. It looks something like this:

You: Help me find a new job.

Claude: I don't have your profile set up yet. Let me ask you a few questions first.

What is your name? You: Jordan

Claude: What is your current role? You: Senior frontend developer

Claude: What roles are you targeting? You: Staff frontend engineer, senior full-stack engineer

Claude: What is your minimum acceptable salary? You: 180000

Claude: Are you only looking for remote positions? You: Yes

Claude: Where are you located? You: Portland, OR

Claude: Any dealbreakers? You: No on-call rotations, no defense contractors

Claude: What is your GitHub URL? You: https://github.com/jordan-dev

Claude: Where is your resume file? You: C:/Users/jordan/Documents/resume.md

Claude: Got it. Your profile is saved. Let me search for jobs matching your targets.

After onboarding, your profile is saved locally and reused in every future conversation.

Extended Profile (optional)

You can enrich your profile at any time by asking Claude to update it. These fields help Claude reason about nuanced fit:

FieldTypeExample
work_styleobject{async_preferred: true, ic_vs_leadership: "ic", client_facing_tolerance: "none", team_size_preference: "small"}
optimizing_forarray["comp", "autonomy", "interesting_problems"]
unlisted_skillsarray["MCP protocol implementation", "Windows installer packaging"]
developing_skillsarray["TypeScript", "RAG pipelines"]
dealbreaker_detailarray[{dealbreaker: "on-call", hardness: "absolute"}, {dealbreaker: "relocation", hardness: "strong_preference"}]
rejection_patternsarray["roles that sounded like automation but were actually IT support"]

These can be set during initial setup or added later with the update_profile tool.

How It Works

search_jobs builds a search query from your profile and any keywords you provide. Claude then uses that query with its web search capabilities to find real listings. The tool itself does not search the web.

analyze_fit runs a two-step process. First it parses the job description into structured signal (hard requirements, nice-to-haves, red flags, compensation signals, role type) via the Claude API. Then it fetches your portfolio and auto-selects the best resume variant for the detected role type. Claude sees structured signal before raw marketing copy.

parse_jd is the standalone JD parser. Use it independently to pre-process a job description without running the full fit analysis.

log_application, get_applications, and update_application form a job search CRM. Track status (applied, screening, interview, offer, rejected, ghosted), set follow-up dates, and record outcomes.

get_follow_ups shows applications that need attention — where the follow-up date has passed and you're still waiting.

get_application_patterns analyzes your full application history (10+ needed) to find which role types get responses, which skills resonate, and recommends search adjustments.

email_ranked_jobs.py is a standalone Conductor worker script that emails the latest ranked job report. See Email Worker Setup below for configuration.

save_scouted_job saves a job listing found during scouting. It validates the URL to reject search result pages and deduplicates against existing scouted jobs and applications.

get_scouted_jobs returns all scouted listings, optionally filtered to only unranked ones. mark_jobs_ranked marks all unranked jobs as ranked after a ranking report is generated.

add_resume and list_resumes manage multiple resume variants. Each variant targets specific role types (e.g. "AI Engineering" targets ai_engineering and ml_engineering). During fit analysis, the best variant is auto-selected based on the JD's detected role type.

update_profile merges new or changed fields into your existing profile without re-running setup.

get_portfolio and get_resume can be called independently if you want Claude to review just your repos or just your resume.

Quick Start (No File Paths)

For the simplest setup, paste your resume directly — no local files needed:

You: Help me find a job.

Claude: What is your name? You: Alex Claude: What roles are you targeting? You: AI engineer, ML engineer Claude: Paste your resume or provide a file path. You: [paste resume text here] Claude: Profile saved. Let me search for jobs.

Email Worker Setup

email_ranked_jobs.py sends the ranked job report via Gmail. It is designed to run as a Conductor worker on a schedule.

Credentials live in a gitignored config file — never in the source. Copy the template and fill it in:

cp data/email_config.example.json data/email_config.json

Then edit data/email_config.json:

{

"gmail_user": "you@gmail.com", "gmail_app_password": "your-16-char-app-password", "email_to": "you@gmail.com", "email_cap": 15 }

KeyRequiredDefault
gmail_useryes—
gmail_app_passwordyes—
email_tonofalls back to gmail_user
email_capno15

The whole data/ folder is gitignored (only .gitkeep and email_config.example.json are tracked), so email_config.json can never be committed by accident.

Why a config file and not environment variables? Depending on how the worker process is launched — notably via Conductor on Windows — environment variables may not be inherited by the child process, causing silent send failures. The config file is read from a path relative to the script, so it works regardless of how the process was spawned. Environment variables (GMAIL_USER, GMAIL_APP_PASSWORD, EMAIL_TO, EMAIL_CAP) are still honored as a fallback when a key is absent from the config file, which is handy for CI or containerized runs. If neither source supplies credentials, the script exits with code 2 and prints setup instructions instead of failing silently.

To generate a Gmail App Password: Google Account → Security → 2-Step Verification → App Passwords. Create one for "Mail". This is not your normal account password. If you ever paste one into a source file by mistake, revoke it from that same screen.

The script reads data/ranked_jobs.md, caps the email to the top 15 ranked listings, sends it, and then deletes ranked_jobs.md so stale rankings are not recycled on the next run.

File Structure

skillmatch-mcp/

server.py # MCP server (stdio JSON-RPC) requirements.txt # python-docx dependency CLAUDE.md # Instructions for Claude README.md # This file email_ranked_jobs.py # Conductor worker: emails ranked job reports cowork_monitor.py # Conductor worker: monitors Cowork VM, auto-recovers cowork_tab.png # Reference image for Cowork tab UI automation data/ # Entire folder gitignored except the two tracked files below .gitkeep # Keeps the folder in git (tracked) email_config.example.json # Credential template (tracked, no real secrets) email_config.json # Your real Gmail credentials (gitignored) profile.json # Created on first setup (gitignored) applications.db # Created on first log (gitignored) scouted_jobs.json # Scouted listings (gitignored) ranked_jobs.md # Latest ranked report (gitignored)

PopNx에게 묻기