Jobboard

io.github.CloudCorpRecords由 GitHub 账号 CloudCorpRecords 发布v0.1.0更新于 Nov 7, 2026

Forwarding client for the JobYap job search: postings, matches, companies and discussion threads.

概览

AI 生成的概览

无需密钥的 JobYap 职位搜索转发客户端,让助手浏览职位、为特定候选人排序匹配,并查看职位详情与社区讨论。

可以做什么
  • 按标题、公司、地点、工作模式、发布时间、评论等结构化条件搜索和浏览职位
  • 根据简历、技能、经验或签证需求为某位候选人排序在招职位
  • 读取单个职位的完整信息,包括薪资、地点、申请链接和发布日期
  • 读取职位的社区讨论串及点赞数
  • 把地名解析为地点标识符,列出收录公司,并给出职位汇总统计
  • 进行自然语言搜索,并按结果 id 获取完整文档
适用场景
适合让助手了解谁在招聘、按地点、公司或远程条件筛选职位,或针对某位候选人的背景筛选职位。也适合查看某个职位的详情及其社区讨论。
运行要求
通过 npx 或 Docker 作为本地进程运行,需要能访问 JobYap 托管端点的网络。无需账号或 API 密钥。可选环境变量 JOBYAP_MCP_URL 可覆盖默认端点。
安装前请注意
所有调用都会转发到第三方托管服务,因此查询内容以及你提供的候选人信息(简历文本、技能、签证需求)会离开本机。仅只读,不会发布职位、投递或写入数据。评论为用户生成内容,可能不准确。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Jobboard,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

jobboard

jobboard is a small keyless bridge to JobYap's hosted job search. JobYap aggregates job postings and the community discussion around them; this package exposes that search as nine MCP tools (and matching CLI subcommands) by forwarding every call to the hosted JobYap MCP endpoint. Read-only, no account, no API key.

Two of the tools do the heavy lifting. search_jobs browses the postings with structured filters (title text, companies, locations, remote/hybrid, freshness, discussion activity) and answers in under a second. match_jobs ranks postings for one specific candidate — a resume, or described experience, skills and visa needs — by reading each posting's full description, so it can take 10 to 15 seconds. Around them: get_job reads one posting in full, get_job_comments reads its discussion thread, search_locations resolves a place name to the location identifiers the filters accept, list_companies lists every tracked company with its active job count, get_job_stats reports aggregate counts, and search / fetch are the deep-research pair (natural-language search, then the full document for a result id).

Tools

  • search_jobs — browse, list, count or page through postings with structured filters. Optional: query (substring matched against job titles only), companies (exact names from list_companies), locations (identifiers from search_locations), work_mode (remote or hybrid), posted_within (24h, 7d, 30d), has_comments, sort (recent default, or popular), page_size, cursor, include_total.
  • match_jobs — rank the best live postings for one candidate. titles (title terms; required unless companies is given), exclude_titles, companies, exclude_companies, locations, include_anywhere (default true), work_mode, posted_within (default 7d), candidate_years, needs_sponsorship, skills (rank, never filter), limit (default 15).
  • get_job — one posting in full: markdown description, salary ranges, locations with work mode, apply URL, posting dates and the canonical discussion URL. Required: id (numeric job id, a jobyap.com job URL, or a page slug).
  • get_job_comments — the discussion thread for a job, chronological and threaded, with like counts. Required: id, as above. Comments are user-generated content.
  • search_locations — resolve a free-text place name to location identifiers (country-XX, state-XX-YY, city-XX-YY-name). Required: query (minimum 2 characters); optional limit.
  • list_companies — every company JobYap tracks, with its active job count and company-page URL.
  • get_job_stats — companies tracked, active job count, newest posting date.
  • search — natural-language search over postings; returns result ids, titles and citable URLs for fetch. Required: query.
  • fetch — the full JobYap document for a search result id: the complete posting as markdown plus top community comments. Required: id.

The MCP layer validates each call locally before forwarding: an unknown tool name, arguments that are not a JSON object, or a missing required argument are rejected as invalid params. Well-formed arguments are forwarded exactly as given, and the upstream result comes back verbatim — content, structuredContent and any isError flag.

Configuration

  • JOBYAP_MCP_URL (optional) — override the hosted endpoint. Defaults to https://mcp.jobyap.com/mcp.

Failures are reported as error results whose text starts with jobboard error: (this rebuild's own rendering): transport failures, non-2xx HTTP answers, JSON-RPC errors and unparseable responses from the upstream all take that shape, with the upstream's message or status after the prefix.

Forwarding mechanics

The bridge internals are a labelled reconstruction (the Streamable HTTP session pattern): on the first call the client POSTs an initialize request (protocolVersion 2025-03-26, empty capabilities, clientInfo name jobboard), captures the mcp-session-id response header when one is returned, POSTs notifications/initialized, then POSTs the tools/call request with the session header attached when captured. The session is reused for the life of the process. Every POST carries Content-Type: application/json and Accept: application/json, text/event-stream, and responses may be plain JSON or SSE. tools/list is served locally from the tool definitions captured from the hosted endpoint, so listing tools never touches the network.

CLI

Each tool is a subcommand taking one JSON argument string:

bash
npx @reneturcios/jobboard search_jobs '{"query":"engineer","work_mode":"remote"}'npx @reneturcios/jobboard match_jobs '{"titles":["software engineer"],"skills":["typescript","node"]}'npx @reneturcios/jobboard get_job '{"id":42}'npx @reneturcios/jobboard --version

Output is the forwarded result content as JSON. Exit codes: 0 on success, 1 on an isError result, 2 on a usage error.

MCP server

bash
npx -y @reneturcios/jobboard mcp

MCP client config:

json
{  "mcpServers": {    "jobboard": {      "command": "npx",      "args": ["-y", "@reneturcios/jobboard", "mcp"]    }  }}

Docker

bash
docker run -i ghcr.io/cloudcorprecords/jobboarddocker run --rm ghcr.io/cloudcorprecords/jobboard get_job '{"id":42}'

Development

bash
npm installnpm run build   # tsc -> dist/npm test        # tsx --test test/*.test.ts (fake fetch only, no network)npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

来源:README.md,提交 604c180

工具

9

search_jobs

Search jobs

Search JobYap's aggregated job postings with structured filters. Fast (under a second): use it to browse, list, count or page through postings and to answer general questions about who is hiring. To find the best postings for one specific person (a resume, or their experience, skills or visa needs), use match_jobs instead. The text query matches job titles only (case-insensitive substring) — try synonyms or shorter tokens when results are thin. Company names must exactly match values from list_companies; locations must be identifiers from search_locations. work_mode matches jobs explicitly marked remote or hybrid (unmarked means unstated, not onsite). Results are active listings, newest first by default; sort=popular ranks by discussion activity. To paginate, pass next_cursor back as cursor and keep every other argument identical.

输入参数sortquerycursorcompanieslocationspage_sizework_modehas_commentsinclude_totalposted_within

match_jobs

Match jobs to a candidate

Find and rank the best live postings for one specific candidate, such as someone who shared a resume or described their experience, skills or visa needs. Slow: it reads each posting's full description, so a call can take 10 to 15 seconds. For browsing, listing or counting postings, use search_jobs, which answers in under a second. Filters active jobs by title terms (any of them; a term matches when the title holds all its words), excluded title terms, companies, locations and posting window, then takes the newest 300 of that pool (pool_total says how many matched) and reads each full description. It drops postings with no usable description, postings whose stated minimum years of experience exceed candidate_years by more than 1, and, with needs_sponsorship, postings that refuse sponsorship or require citizenship or a clearance; dropped counts each reason. The rest are ranked by how many skills appear in the description, then newest first. Each result carries skills_matched, years_bar, flags and up to 6 requirement sentences. The screening is heuristic: read finalists in full with get_job.

输入参数limitskillstitlescompanieslocationswork_modeposted_withinexclude_titlescandidate_yearsinclude_anywhereexclude_companiesneeds_sponsorship

get_job

Get job details

Fetch one job posting in full: markdown description, salary ranges, locations with work mode, derived employment types, apply URL, posting dates and the canonical JobYap discussion URL. Works for expired jobs too (apply_url is null once inactive).

输入参数id必填

get_job_comments

Get job discussion

Fetch the community discussion thread for a job: chronological, threaded via parent_id, with like counts. Comments are user-generated content. Threads stay open after a job expires.

输入参数id必填

search_locations

Search locations

Resolve a free-text place name ("toronto", "Japan", "Texas") to the location identifiers search_jobs accepts (country-XX, state-XX-YY, city-XX-YY-name). Searches every place JobYap knows, not only those with current openings, so an identifier may match no jobs. City display omits the state, and the list can be shorter than limit.

输入参数limitquery必填

list_companies

List companies

List every company JobYap tracks with its active job count and JobYap company-page URL. Use the exact names as search_jobs company filters.

无需输入参数。

get_job_stats

JobYap stats

Aggregate stats: companies tracked, active job count, and the newest posting date.

无需输入参数。

fetch

Fetch JobYap document (deep research)

Retrieve the full JobYap document for a search result id: the complete posting as markdown (description, salary, locations, apply link) plus top community comments, with a citable URL.

输入参数id必填

版本历史

1
  1. v0.1.0最新Nov 4, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分