feat: add Jobindex.dk job board provider - #203
Merged
Merged
Conversation
Dedicated jobindex_search_jobs / jobindex_get_job_detail MCP tools, debug
CLI, and fixture-backed tests. Search returns Stash searchResponse field
names (minus card html); detail scrapes /vis-job/{tid}. Includes review
fixes: no synthesized total_pages, JoinPath, goquery og meta, robot (r*)
detail fixture, and GitHub citations for the Stash extract helpers.
json.Decoder already does the string/brace walk, so the hand-written endOfJSONObject scanner is redundant; decoding straight off the response body also stops downloading once the Stash object ends. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The per-function citations repeated the same blob URL; parseSearchHTML's comment already covers all three ported steps. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Field lists, page size, and the apply_deadline caveat already live in the input/output schemas; Stash and scraping are implementation detail. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Employers without a Jobindex profile render as plain text in the detail toolbar; requiring an <a> dropped their company entirely (2 of 5 sampled r-tids), leaving detail with less data than the search card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Collapse apply_url / share_url / tracking url into a single results url (prefer direct apply, else Jobindex page). Strip company homeurl and other link noise from search and detail for LLM clients.
Map Jobindex listing dates to clearer field names for MCP clients while keeping apply_deadline* separate from listing end.
Note YYYY-MM-DD in MCP schema and provider comments, matching ats isoDate.
…rams Drop q=/jobage=/sort=/page= jargon from tool schemas so LLMs see intent-only parameter and result descriptions.
Record the rationale for []map[string]any results and light slimming (unstable Stash, no thin card DTO, drop fullcard html) next to the types.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
jobindex_search_jobs/jobindex_get_job_detailMCP tools, wired into the openings-mcp server./jobsoegningHTML’s embeddedvar Stashpayload (the old.jsonendpoint returns 204) and returns upstream field names (tid,headline,company, …), dropping only per-result cardhtml./vis-job/{tid}(not off-site/jobannonce/redirects). Scraped fields use the same names where concepts match; no invented deadline merges.cmd/jobindex(search/detail --tid). Fixtures cover hosted (h*) and robot (r*) detail HTML.Re-opens the work from #201 after #202 revert, with prior review feedback already applied.
Test plan
go test ./internal/provider/jobindex ./internal/openingsmcp ./cmd/openings-mcpgo run ./cmd/jobindex search --keyword backend --jobage 14go run ./cmd/jobindex detail --tid h1683131jobindex_search_jobs+jobindex_get_job_detail