Paid job search: 7 matched roles, each with a tailored CV and cover letter.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <agent API key>. Optional: get_pricing and register_agent work without one.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
What a Jobherder search costs and how to pay for it, in card and stablecoin terms. No auth required.
This tool takes no arguments.
What a Jobherder search costs and how to pay for it, in card and stablecoin terms. No auth required.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Progress of a search, and the matched roles with the reason each was picked once it finishes.
| Argument | Type | Description |
|---|---|---|
| run_id | string | The run_id returned by start_job_search or quick_job_search. Omit to get the most recent run for this account |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"run_id": {
"type": "string",
"description": "The run_id returned by start_job_search or quick_job_search. Omit to get the most recent run for this account"
}
}
}The single best current role for a profile, with a tailored CV and cover letter, in minutes rather than an hour. $2.50 in USDC. Use this when you want one answer fast; use start_job_search when you want a shortlist of 7 to choose from. With no credit it returns an x402 PaymentRequired; retry the same call with the signed payment in _meta["x402/payment"].
| Argument | Type | Description |
|---|---|---|
| cv_json | object | The job seeker's existing CV as structured data, in the JSON Resume schema (jsonresume.org): basics, work, education, skills. Prefer this when you hold the CV as data — you do not need to render a file. Supply either cv_json or cv_base64 |
| cv_type | string | Format of cv_base64: "pdf", "docx" or "txt". Ignored when cv_json is supplied |
| profile* | object | Who the job seeker is and what they want. Every field shapes matching, so guessing is worse than asking |
| cv_base64 | string | The job seeker's existing CV as a file, base64 encoded. PDF, DOCX or plain text, up to 10MB. Use cv_json instead if you have the CV as data rather than a file |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profile"
],
"properties": {
"cv_json": {
"type": "object",
"properties": {
"work": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"company": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"summary": {
"type": "string",
"maxLength": 3000
},
"location": {
"type": "string",
"maxLength": 200
},
"position": {
"type": "string",
"maxLength": 200
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
}
}
},
"maxItems": 40
},
"awards": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40
},
"title": {
"type": "string",
"maxLength": 200
},
"awarder": {
"type": "string",
"maxLength": 200
},
"summary": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 30
},
"basics": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 120
},
"email": {
"type": "string",
"maxLength": 200
},
"label": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 60
},
"summary": {
"type": "string",
"maxLength": 4000
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string",
"maxLength": 120
},
"region": {
"type": "string",
"maxLength": 120
},
"address": {
"type": "string",
"maxLength": 200
},
"postalCode": {
"type": "string",
"maxLength": 30
},
"countryCode": {
"type": "string",
"maxLength": 10
}
}
},
"profiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"network": {
"type": "string",
"maxLength": 80
},
"username": {
"type": "string",
"maxLength": 120
}
}
},
"maxItems": 20
}
}
},
"skills": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"level": {
"type": "string",
"maxLength": 60
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 60
}
}
},
"maxItems": 40
},
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 50
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
},
"description": {
"type": "string",
"maxLength": 3000
}
}
},
"maxItems": 30
},
"education": {
"type": "array",
"items": {
"type": "object",
"properties": {
"area": {
"type": "string",
"maxLength": 200
},
"score": {
"type": "string",
"maxLength": 60
},
"courses": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
},
"endDate": {
"type": "string",
"maxLength": 40
},
"startDate": {
"type": "string",
"maxLength": 40
},
"studyType": {
"type": "string",
"maxLength": 100
},
"institution": {
"type": "string",
"maxLength": 200
}
}
},
"maxItems": 20
},
"interests": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 30
}
}
},
"maxItems": 20
},
"languages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fluency": {
"type": "string",
"maxLength": 80
},
"language": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 20
},
"volunteer": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"company": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"summary": {
"type": "string",
"maxLength": 3000
},
"location": {
"type": "string",
"maxLength": 200
},
"position": {
"type": "string",
"maxLength": 200
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
}
}
},
"maxItems": 20
},
"certificates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40
},
"name": {
"type": "string",
"maxLength": 200
},
"issuer": {
"type": "string",
"maxLength": 200
}
}
},
"maxItems": 30
},
"publications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"summary": {
"type": "string",
"maxLength": 1000
},
"publisher": {
"type": "string",
"maxLength": 200
},
"releaseDate": {
"type": "string",
"maxLength": 40
}
}
},
"maxItems": 30
}
},
"description": "The job seeker's existing CV as structured data, in the JSON Resume schema (jsonresume.org): basics, work, education, skills. Prefer this when you hold the CV as data — you do not need to render a file. Supply either cv_json or cv_base64"
},
"cv_type": {
"type": "string",
"description": "Format of cv_base64: \"pdf\", \"docx\" or \"txt\". Ignored when cv_json is supplied"
},
"profile": {
"type": "object",
"required": [
"cfg_name",
"cfg_email",
"cfg_location",
"cfg_location_preference",
"cfg_work_style",
"cfg_want_remote_eu",
"cfg_want_remote_uk",
"cfg_want_usa",
"cfg_seniority_level",
"cfg_target_titles",
"cfg_local_country",
"cfg_industries"
],
"properties": {
"cfg_name": {
"type": "string",
"description": "Full name of the job seeker, as it should appear on the tailored CV"
},
"cfg_email": {
"type": "string",
"description": "Must match the email the API key is registered to. Results are emailed here as well as returned by get_search_status"
},
"cfg_location": {
"type": "string",
"description": "Where the job seeker actually lives, e.g. \"Limassol, Cyprus\". Used for commute and time zone reasoning, not as a filter on its own"
},
"cfg_want_usa": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles in the USA. Say no unless the job seeker can legally work there or the role is genuinely remote-worldwide"
},
"cfg_languages": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"english"
],
"description": "Working languages, lower case, e.g. [\"english\", \"german\"]. Roles requiring a language not listed here are dropped"
},
"cfg_uk_onsite": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "no",
"description": "Also include on-site roles in the UK. Defaults to no; UK remote is a separate flag"
},
"cfg_industries": {
"type": "string",
"description": "Comma-separated sectors of interest, e.g. \"Music, Fintech, Healthcare\". Sectors only — job functions go in cfg_target_titles"
},
"cfg_work_style": {
"enum": [
"remote_only",
"mix"
],
"type": "string",
"description": "remote_only rejects anything requiring office attendance; mix means local or hybrid near the candidate plus remote in the chosen regions"
},
"cfg_advisory_open": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "yes",
"description": "Whether to include advisory, fractional, board and consulting roles alongside employment"
},
"cfg_local_country": {
"type": "string",
"description": "ISO country name for where they live, e.g. \"Germany\". Required so local vs remote gating does not guess from a free-text city line"
},
"cfg_target_titles": {
"type": "string",
"description": "Comma-separated target job titles, e.g. \"Head of Production, COO, Product Director\""
},
"cfg_want_remote_eu": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles advertised as remote within the EU. Set independently of the other regions; several can be yes"
},
"cfg_want_remote_uk": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles advertised as remote within the UK"
},
"cfg_seniority_level": {
"type": "string",
"description": "Seniority band as a single label or a contiguous range, e.g. \"Director\" or \"Manager – Head of Department\". Not a free-text mix of titles and industries"
},
"cfg_not_interested_in": {
"type": "string",
"default": "",
"description": "Comma-separated industries or employer types to exclude, e.g. \"gambling, defence\". Applied as a hard filter"
},
"cfg_additional_context": {
"type": "string",
"default": "",
"description": "Anything else that shapes the search and is not covered by the other fields: visa position, notice period, salary floor, companies to avoid"
},
"cfg_location_preference": {
"type": "string",
"description": "Prose description of acceptable locations, e.g. \"anywhere remote in Europe, or on-site in Berlin\". Free text; matching reads it as intent rather than parsing it"
},
"cfg_share_with_employers": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "no",
"description": "Consent to share the profile with employers. \"no\" keeps the search entirely one-way"
}
},
"description": "Who the job seeker is and what they want. Every field shapes matching, so guessing is worse than asking"
},
"cv_base64": {
"type": "string",
"description": "The job seeker's existing CV as a file, base64 encoded. PDF, DOCX or plain text, up to 10MB. Use cv_json instead if you have the CV as data rather than a file"
}
}
}Create an agent identity and receive an API key. Registration is free and includes no free searches.
| Argument | Type | Description |
|---|---|---|
| name | string | Display name for the account. Optional; the profile name is used on documents regardless |
| email* | string | Email that will own the account and receive results. Must be the job seeker's own address, and must match cfg_email on every later search |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"name": {
"type": "string",
"description": "Display name for the account. Optional; the profile name is used on documents regardless"
},
"email": {
"type": "string",
"description": "Email that will own the account and receive results. Must be the job seeker's own address, and must match cfg_email on every later search"
}
}
}Spend one credit to run a full search: 7 roles matched to the profile, each with a tailored CV and cover letter returned as markdown by get_search_status and emailed as PDFs. Requires an API key. With no credit left it returns an x402 PaymentRequired; retry the same call with the signed payment in _meta["x402/payment"] to pay in USDC and run immediately.
| Argument | Type | Description |
|---|---|---|
| cv_json | object | The job seeker's existing CV as structured data, in the JSON Resume schema (jsonresume.org): basics, work, education, skills. Prefer this when you hold the CV as data — you do not need to render a file. Supply either cv_json or cv_base64 |
| cv_type | string | Format of cv_base64: "pdf", "docx" or "txt". Ignored when cv_json is supplied |
| profile* | object | Who the job seeker is and what they want. Every field shapes matching, so guessing is worse than asking |
| cv_base64 | string | The job seeker's existing CV as a file, base64 encoded. PDF, DOCX or plain text, up to 10MB. Use cv_json instead if you have the CV as data rather than a file |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profile"
],
"properties": {
"cv_json": {
"type": "object",
"properties": {
"work": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"company": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"summary": {
"type": "string",
"maxLength": 3000
},
"location": {
"type": "string",
"maxLength": 200
},
"position": {
"type": "string",
"maxLength": 200
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
}
}
},
"maxItems": 40
},
"awards": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40
},
"title": {
"type": "string",
"maxLength": 200
},
"awarder": {
"type": "string",
"maxLength": 200
},
"summary": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 30
},
"basics": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 120
},
"email": {
"type": "string",
"maxLength": 200
},
"label": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 60
},
"summary": {
"type": "string",
"maxLength": 4000
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string",
"maxLength": 120
},
"region": {
"type": "string",
"maxLength": 120
},
"address": {
"type": "string",
"maxLength": 200
},
"postalCode": {
"type": "string",
"maxLength": 30
},
"countryCode": {
"type": "string",
"maxLength": 10
}
}
},
"profiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"network": {
"type": "string",
"maxLength": 80
},
"username": {
"type": "string",
"maxLength": 120
}
}
},
"maxItems": 20
}
}
},
"skills": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"level": {
"type": "string",
"maxLength": 60
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 60
}
}
},
"maxItems": 40
},
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 50
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
},
"description": {
"type": "string",
"maxLength": 3000
}
}
},
"maxItems": 30
},
"education": {
"type": "array",
"items": {
"type": "object",
"properties": {
"area": {
"type": "string",
"maxLength": 200
},
"score": {
"type": "string",
"maxLength": 60
},
"courses": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
},
"endDate": {
"type": "string",
"maxLength": 40
},
"startDate": {
"type": "string",
"maxLength": 40
},
"studyType": {
"type": "string",
"maxLength": 100
},
"institution": {
"type": "string",
"maxLength": 200
}
}
},
"maxItems": 20
},
"interests": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 30
}
}
},
"maxItems": 20
},
"languages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fluency": {
"type": "string",
"maxLength": 80
},
"language": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 20
},
"volunteer": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 300
},
"name": {
"type": "string",
"maxLength": 200
},
"company": {
"type": "string",
"maxLength": 200
},
"endDate": {
"type": "string",
"maxLength": 40
},
"summary": {
"type": "string",
"maxLength": 3000
},
"location": {
"type": "string",
"maxLength": 200
},
"position": {
"type": "string",
"maxLength": 200
},
"startDate": {
"type": "string",
"maxLength": 40
},
"highlights": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 50
}
}
},
"maxItems": 20
},
"certificates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40
},
"name": {
"type": "string",
"maxLength": 200
},
"issuer": {
"type": "string",
"maxLength": 200
}
}
},
"maxItems": 30
},
"publications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"summary": {
"type": "string",
"maxLength": 1000
},
"publisher": {
"type": "string",
"maxLength": 200
},
"releaseDate": {
"type": "string",
"maxLength": 40
}
}
},
"maxItems": 30
}
},
"description": "The job seeker's existing CV as structured data, in the JSON Resume schema (jsonresume.org): basics, work, education, skills. Prefer this when you hold the CV as data — you do not need to render a file. Supply either cv_json or cv_base64"
},
"cv_type": {
"type": "string",
"description": "Format of cv_base64: \"pdf\", \"docx\" or \"txt\". Ignored when cv_json is supplied"
},
"profile": {
"type": "object",
"required": [
"cfg_name",
"cfg_email",
"cfg_location",
"cfg_location_preference",
"cfg_work_style",
"cfg_want_remote_eu",
"cfg_want_remote_uk",
"cfg_want_usa",
"cfg_seniority_level",
"cfg_target_titles",
"cfg_local_country",
"cfg_industries"
],
"properties": {
"cfg_name": {
"type": "string",
"description": "Full name of the job seeker, as it should appear on the tailored CV"
},
"cfg_email": {
"type": "string",
"description": "Must match the email the API key is registered to. Results are emailed here as well as returned by get_search_status"
},
"cfg_location": {
"type": "string",
"description": "Where the job seeker actually lives, e.g. \"Limassol, Cyprus\". Used for commute and time zone reasoning, not as a filter on its own"
},
"cfg_want_usa": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles in the USA. Say no unless the job seeker can legally work there or the role is genuinely remote-worldwide"
},
"cfg_languages": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"english"
],
"description": "Working languages, lower case, e.g. [\"english\", \"german\"]. Roles requiring a language not listed here are dropped"
},
"cfg_uk_onsite": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "no",
"description": "Also include on-site roles in the UK. Defaults to no; UK remote is a separate flag"
},
"cfg_industries": {
"type": "string",
"description": "Comma-separated sectors of interest, e.g. \"Music, Fintech, Healthcare\". Sectors only — job functions go in cfg_target_titles"
},
"cfg_work_style": {
"enum": [
"remote_only",
"mix"
],
"type": "string",
"description": "remote_only rejects anything requiring office attendance; mix means local or hybrid near the candidate plus remote in the chosen regions"
},
"cfg_advisory_open": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "yes",
"description": "Whether to include advisory, fractional, board and consulting roles alongside employment"
},
"cfg_local_country": {
"type": "string",
"description": "ISO country name for where they live, e.g. \"Germany\". Required so local vs remote gating does not guess from a free-text city line"
},
"cfg_target_titles": {
"type": "string",
"description": "Comma-separated target job titles, e.g. \"Head of Production, COO, Product Director\""
},
"cfg_want_remote_eu": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles advertised as remote within the EU. Set independently of the other regions; several can be yes"
},
"cfg_want_remote_uk": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Include roles advertised as remote within the UK"
},
"cfg_seniority_level": {
"type": "string",
"description": "Seniority band as a single label or a contiguous range, e.g. \"Director\" or \"Manager – Head of Department\". Not a free-text mix of titles and industries"
},
"cfg_not_interested_in": {
"type": "string",
"default": "",
"description": "Comma-separated industries or employer types to exclude, e.g. \"gambling, defence\". Applied as a hard filter"
},
"cfg_additional_context": {
"type": "string",
"default": "",
"description": "Anything else that shapes the search and is not covered by the other fields: visa position, notice period, salary floor, companies to avoid"
},
"cfg_location_preference": {
"type": "string",
"description": "Prose description of acceptable locations, e.g. \"anywhere remote in Europe, or on-site in Berlin\". Free text; matching reads it as intent rather than parsing it"
},
"cfg_share_with_employers": {
"enum": [
"yes",
"no"
],
"type": "string",
"default": "no",
"description": "Consent to share the profile with employers. \"no\" keeps the search entirely one-way"
}
},
"description": "Who the job seeker is and what they want. Every field shapes matching, so guessing is worse than asking"
},
"cv_base64": {
"type": "string",
"description": "The job seeker's existing CV as a file, base64 encoded. PDF, DOCX or plain text, up to 10MB. Use cv_json instead if you have the CV as data rather than a file"
}
}
}