Repository navigation
MCP Server
JobniacFast includes a Model Context Protocol (MCP) server. An AI client such as Claude Desktop or Claude Code can use it to read and write the same profiles, jobs and match reports as the desktop app. The server uses the same database file, so both see the same data.
There are two ways to run it:
-
stdio (
jobniac-cli mcp): the MCP client starts the process and talks to it over stdin and stdout. This is the normal choice. It opens no network listener. -
Loopback HTTP (
jobniac-cli http): opt-in. The process listens on127.0.0.1only and needs a bearer token.
The desktop app can also run the loopback server from Settings (Run the MCP server, with a port from 1024 to 65535). It creates a new access token each time the server starts, and Copy connection details gives you what to paste into your client.
jobniac-cli is installed next to the app. On Windows with the per-user installer it is %LOCALAPPDATA%\JobniacFast\jobniac-cli.exe. On macOS it is /Applications/JobniacFast.app/Contents/MacOS/jobniac-cli.
Add an entry to the client's mcpServers block. Replace <you> with your Windows user name. JSON needs each backslash in a Windows path doubled.
{
"mcpServers": {
"jobniac": {
"command": "C:\\Users\\<you>\\AppData\\Local\\JobniacFast\\jobniac-cli.exe",
"args": ["mcp"],
"env": {}
}
}
}- Claude Desktop on Windows: put it in
%APPDATA%\Claude\claude_desktop_config.jsonand restart the client. - Claude Code: put it in a
.mcp.jsonfile in the project folder, then runclaude mcp list.jobniacshould show as connected. - Other clients: use the same
command,argsandenv.
To use a database file other than the default, add "JOBNIAC_DB_PATH": "<absolute path>" to env. To remove the registration, delete the jobniac entry and restart the client.
Check the build with jobniac-cli --version, which prints Jobniac <version>. The full guide, including a hand check over stdin and the HTTP mode with its token, is in docs/ops/mcp-client-registration.md.
If the database cannot be opened, the server still starts, but every database call fails and health reports DOWN.
A flag is on only when its value is exactly 1. Pass it in the client's env block. Without any flag the server lists 34 tools. All flags together give 40.
| Variable | Effect on tools |
|---|---|
JOBNIAC_LINK_FETCH_ENABLED=1 |
Adds add_job_from_link. |
JOBNIAC_ARBEITNOW_ENABLED=1 |
Adds scan_arbeitnow_jobs and import_arbeitnow_job. Also needs JOBNIAC_ARBEITNOW_CANDIDATE_KEY and a valid JOBNIAC_CURSOR_HMAC_SECRET. |
JOBNIAC_DELETION_ENABLED=1 |
Adds delete_profile and delete_job. |
JOBNIAC_DOCUMENT_ARTIFACTS_ENABLED=1 |
Adds get_document_artifact. |
JOBNIAC_GENERATED_ENABLED=1 |
No new tools. The generate_* tools start working. Run jobniac-cli setup-generated-root once first. |
JOBNIAC_DOCUMENT_IMPORT_ROOT |
Not a flag. An absolute folder that store_document_file and extract_pdf_text read PDFs from. |
JOBNIAC_CURSOR_HMAC_SECRET |
Not a flag. Keeps paging cursors valid across restarts. 32 characters or more. |
The tables describe jobniac-cli started by an MCP client, which reads each variable as written. The HTTP server the desktop app starts from Settings works differently for the tools that reach the network or delete data. It gets the app's defaults for document artifacts and generation, so by default it lists 35 tools. It lists scan_arbeitnow_jobs and import_arbeitnow_job, add_job_from_link, and delete_profile and delete_job (40 in all) only after you turn on Let MCP clients scan Arbeitnow, Let MCP clients add a job from a link or Let MCP clients delete profiles and jobs in Settings > Optional features and restart the app. Those are the only tools of the catalog that reach the network or delete data. A variable set to exactly 1 in the environment that starts the app is not passed to that server and is not an opt-in; a variable set to anything else (such as 0) keeps the tools off and wins over the switch. Turning one of those switches off applies at once: the server is stopped and started again without the tool (a new access token), and later starts keep it out until you turn the switch on and restart the app. These tools do not ask for confirmation.
In HTTP mode, every authenticated session gets the opt-in tools, so enable only the flags you need. See Data and Privacy.
The tool names below are exact.
-
health: return the current local health envelope.
-
list_profiles: list a bounded page of profile identities. -
get_profile: get a profile by UUID. -
create_profile: create a profile. -
update_profile: replace a profile using its latest revision. -
update_profile_project: partially update one project of a profile. -
search_profiles: search profile fields with bounded, deterministic ranking. -
delete_profile: delete a profile (opt-in).
-
list_jobs: list a bounded page of stored jobs. -
get_job: get a stored job by UUID, with source provenance. -
search_jobs: search stored jobs with deterministic ranking. -
add_job_from_text: save a job from pasted text. -
add_job_from_link: save a job by fetching a URL (opt-in). -
update_job: partially update a job using its expected revision. -
delete_job: delete a stored job (opt-in). -
scan_arbeitnow_jobs: read-only scan of the Arbeitnow board (opt-in). -
import_arbeitnow_job: import one scan candidate (opt-in).
-
analyze_job_match: create or reuse an immutable match report for a profile and a job. -
analyze_all_job_matches: analyze one bounded page of jobs for a profile. -
get_match_report: get a report, with whether its inputs have changed since. -
list_match_reports: list reports, with optional profile and job filters. -
submit_match_review: save an advisory review and any disagreement. -
get_match_review: get one advisory review. -
list_match_reviews: list advisory reviews. -
list_match_disagreements: list disagreements. -
acknowledge_match_disagreement: acknowledge a disagreement. -
link_match_disagreement: link a disagreement to an existing issue reference.
-
store_document_file: store a PDF from the import root and return its metadata. -
get_document_metadata: get stored document metadata by UUID. -
extract_pdf_text: preview the text of a local PDF without storing it. -
extract_stored_pdf_text: extract text from a stored PDF. -
ingest_profile_from_stored_pdf: fill a profile from a stored PDF extraction. -
get_profile_pdf_source: get the PDF extraction linked to a profile.
-
generate_pdf_file: generate a standalone PDF. -
generate_pdf_resume: generate the master resume PDF of a profile. -
generate_canadian_pdf_resume: generate the Canadian resume PDF. -
generate_canadian_french_pdf_resume: generate the French Canadian resume PDF. -
generate_german_tailored_resume: generate the job-specific English and German resumes. -
generate_german_cover_letter: generate a German cover letter for the selected resume. -
get_document_artifact: get a stored PDF up to 1 MiB as metadata and Base64 content (opt-in).
Tool names, argument keys, result envelopes and error semantics are a stable public contract. Any change to them is recorded in CHANGELOG.md and covered by a test. Text read from PDFs and web pages is returned as untrusted data.
JobniacFast is MIT-licensed. This wiki mirrors docs/wiki/; change a page with a pull request against development.
Using the app
AI clients
Contributing