{"serverId":"mcp-registry/com.datronis/mcp","tools":[{"name":"create_resume","fixed":{"name":"create_resume","description":"Create a new resume for the authenticated user by directly specifying its content — name, headline, summary, contact info, work experience, education, skills, projects, certificates. Unlike the human resume builder at /app/resume-builder/, this tool skips layout and styling entirely — Datronis applies sensible defaults, which the user can still adjust later in the builder without losing anything you wrote. Requires a personal access token.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string","description":"Full name shown on the resume header."},"title":{"type":"string","description":"Internal title to identify this resume, e.g. \"Backend Engineer — EU\". Defaults to \"Untitled Resume\"."},"locale":{"type":"string","description":"2-letter locale code for this resume version, e.g. \"en\", \"de\". Defaults to \"en\"."},"skills":{"type":"array","items":{"type":"object","required":["name","skills"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"name":{"type":"string","description":"Category label, e.g. \"Programming\" or \"Backend\"."},"skills":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"description":"Skill categories. If provided, replaces this entire section — send the complete list, not just what changed."},"api_key":{"type":"string","description":"Your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred — see search_jobs' api_key description for why)."},"contact":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"github":{"type":"string"},"reddit":{"type":"string"},"twitter":{"type":"string"},"website":{"type":"string"},"linkedin":{"type":"string"},"telegram":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}}},"description":"Contact links shown in the header.","additionalProperties":false},"summary":{"type":"string","description":"2-4 sentence professional summary."},"headline":{"type":"string","description":"Short professional title under the name, e.g. \"Senior Software Engineer\"."},"location":{"type":"string","description":"City, Country shown in the header."},"projects":{"type":"array","items":{"type":"object","required":["name"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"link":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"tech":{"type":"array","items":{"type":"string"}},"remote":{"type":"boolean"},"bullets":{"type":"array","items":{"type":"string"}},"endDate":{"type":"string"},"location":{"type":"string"},"startDate":{"type":"string"}},"additionalProperties":false},"description":"Projects section. If provided, replaces this entire section — send the complete list, not just what changed."},"education":{"type":"array","items":{"type":"object","required":["university"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"field":{"type":"string"},"degree":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"current":{"type":"boolean"},"endDate":{"type":"string","description":"YYYY-MM"},"location":{"type":"string"},"startDate":{"type":"string","description":"YYYY-MM"},"university":{"type":"string"}},"additionalProperties":false},"description":"Education history. If provided, replaces this entire section — send the complete list, not just what changed."},"is_default":{"type":"boolean","description":"Make this the default resume — used by apply_to_job when no resume_id is given."},"experiences":{"type":"array","items":{"type":"object","required":["company","title"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"title":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"company":{"type":"string"},"current":{"type":"boolean"},"endDate":{"type":"string","description":"YYYY-MM, omit/empty if current"},"location":{"type":"string"},"startDate":{"type":"string","description":"YYYY-MM"}},"additionalProperties":false},"description":"Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed."},"certificates":{"type":"array","items":{"type":"object","required":["name"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"date":{"type":"string","description":"YYYY-MM"},"name":{"type":"string"},"issuer":{"type":"string"}},"additionalProperties":false},"description":"Certifications. If provided, replaces this entire section — send the complete list, not just what changed."},"customSections":{"type":"array","items":{"type":"object","required":["title","items"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"items":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"title":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"subtitle":{"type":"string"}},"additionalProperties":false}},"title":{"type":"string","description":"Section heading, e.g. \"Publications\" or \"Volunteering\"."}},"additionalProperties":false},"description":"Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section — send the complete list, not just what changed."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1536,"tokensAfter":1536},{"name":"get_categories","fixed":{"name":"get_categories","description":"List all content categories available on the platform (for filtering news, jobs, etc.).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"locale":{"type":"integer","default":1,"maximum":24,"minimum":1,"description":"Language locale (1=English)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"get_job","fixed":{"name":"get_job","description":"Get full details of a job listing by its slug or ID, including description, requirements, company info, and application link.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Job slug (URL-friendly identifier) or job ID"},"api_key":{"type":"string","description":"Optional: your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Prefer sending it as an `Authorization: Bearer <token>` HTTP header instead of this argument — the header never enters the conversation/tool-call log the way this argument does. When provided (either way) and valid, results are personalized (e.g. includes whether you saved a job)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"get_missing_news_translations","fixed":{"name":"get_missing_news_translations","description":"List published English news articles and which locale codes they are still missing a translation for. Pass locale to focus on one language at a time. Use this to find work for submit_news_translation — this tool only reports gaps, it never translates anything itself.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (default: 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (default: 20)"},"locale":{"type":"string","description":"Optional 2-letter locale code (e.g. \"fi\") to only return articles missing that specific translation. Omit to see every published article missing at least one locale."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":234,"tokensAfter":234},{"name":"get_my_applications","fixed":{"name":"get_my_applications","description":"Check the status of the authenticated user's job applications. Requires a personal access token (generate one at /app/api-keys/).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (default: 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (default: 20)"},"api_key":{"type":"string","description":"Your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred — see search_jobs' api_key description for why)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"get_news","fixed":{"name":"get_news","description":"Fetch the latest news articles. Optionally filter by category, locale, or title keyword. Returns title, summary, publication date, and URL.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":10,"maximum":50,"minimum":1},"title":{"type":"string","description":"Search keyword in title"},"locale":{"type":"integer","default":1,"maximum":24,"minimum":1,"description":"Language locale (1=English, 2=Persian, 3=Spanish, 4=German, ...)"},"offset":{"type":"integer","default":0,"minimum":0},"category_id":{"type":"integer","description":"Filter by category ID"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":196,"tokensAfter":196},{"name":"get_platform_stats","fixed":{"name":"get_platform_stats","description":"Get high-level statistics about the Datronis platform: total active jobs, jobs indexed in the last 7 days, companies, countries represented, news articles, and users.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"list_my_resumes","fixed":{"name":"list_my_resumes","description":"List the authenticated user's saved resumes. Requires a personal access token (generate one at /app/api-keys/).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (default: 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (default: 20)"},"query":{"type":"string","description":"Search keyword in resume title or headline"},"locale":{"type":"string","description":"Filter by resume locale"},"status":{"enum":["draft","published","archived"],"type":"string","description":"Filter by resume status"},"api_key":{"type":"string","description":"Your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred — see search_jobs' api_key description for why)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":277,"tokensAfter":277},{"name":"search_companies","fixed":{"name":"search_companies","description":"Search companies on the platform. Returns company name, industry, location, size, website, and open roles count.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (default: 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (default: 10)"},"query":{"type":"string","description":"Company name or industry keyword"},"country":{"type":"string","description":"Filter by country"},"industry":{"type":"string","description":"Filter by industry"},"is_hiring":{"type":"boolean","description":"Filter to companies actively hiring"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":208,"tokensAfter":208},{"name":"search_jobs","fixed":{"name":"search_jobs","description":"Search job listings by keyword, location, type, or remote policy. Returns paginated results with title, company, salary, and application URL.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Search keyword (title or description)"},"city":{"type":"string","description":"Filter by city"},"page":{"type":"integer","minimum":1,"description":"Page number (default: 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (default: 10)"},"skills":{"type":"array","items":{"type":"string"},"description":"Required skills (e.g. [\"Python\", \"React\"])"},"api_key":{"type":"string","description":"Optional: your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Prefer sending it as an `Authorization: Bearer <token>` HTTP header instead of this argument — the header never enters the conversation/tool-call log the way this argument does. When provided (either way) and valid, results are personalized (e.g. includes whether you saved a job)."},"country":{"type":"string","description":"Filter by country (e.g. \"United States\")"},"job_type":{"enum":["FULL_TIME","PART_TIME","CONTRACT","INTERNSHIP","FREELANCE"],"type":"string","description":"Employment type"},"job_level":{"enum":["ENTRY","MID","SENIOR","LEAD","EXECUTIVE"],"type":"string","description":"Experience level required"},"salary_min":{"type":"integer","description":"Minimum annual salary (USD)"},"remote_type":{"enum":["REMOTE","HYBRID","ONSITE"],"type":"string","description":"Remote work policy"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":467,"tokensAfter":467},{"name":"submit_news_translation","fixed":{"name":"submit_news_translation","description":"Publish your own translation of an already-published English article into a new locale. Unlike draft_news's target_locales (which asks Datronis's own server to translate it), the translated title/body you pass here is published as-is — you (the calling AI) do the translation. Open to anyone with an account, same as draft_news; the source article must already be live, and only one translation may exist per (article, locale) — a locale that already has a translation is rejected, use get_missing_ne","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["news_id","locale","title","body"],"properties":{"body":{"type":"string","minLength":1,"description":"Translated body, in the target locale — HTML or plain text, same format as the source"},"title":{"type":"string","minLength":1,"description":"Translated title, in the target locale"},"locale":{"type":"string","description":"2-letter target locale code (e.g. \"fi\") — see get_missing_news_translations for what a given article still needs"},"api_key":{"type":"string","description":"Your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred — see search_jobs' api_key description for why). Publishing is open to anyone with an account — this token exists for rate-limiting and an audit trail, not to gate who may publish."},"news_id":{"type":"integer","description":"The news_id of the published English source article (from get_news or get_missing_news_translations)"},"content_format":{"enum":["html","markdown"],"type":"string","default":"html","description":"Body format. Use \"markdown\" for headings, tables, lists, code blocks, links and images; use \"html\" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":545,"tokensAfter":545},{"name":"update_resume","fixed":{"name":"update_resume","description":"Update an existing resume's content and/or metadata (title, locale, status, default flag). By default this merges: fields you omit stay as they are, and any section array you DO send (experiences, education, skills, projects, certificates, customSections) replaces that one section while every other section is untouched — call list_my_resumes first if you need to see current content before adding to it (e.g. appending one job to an existing experience list). Requires a personal access token.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["resume_id"],"properties":{"name":{"type":"string","description":"Full name shown on the resume header."},"title":{"type":"string","description":"New internal title. Omit to leave unchanged."},"locale":{"type":"string","description":"New locale code. Omit to leave unchanged."},"skills":{"type":"array","items":{"type":"object","required":["name","skills"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"name":{"type":"string","description":"Category label, e.g. \"Programming\" or \"Backend\"."},"skills":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"description":"Skill categories. If provided, replaces this entire section — send the complete list, not just what changed."},"status":{"enum":["draft","published","archived"],"type":"string","description":"New status. Omit to leave unchanged."},"api_key":{"type":"string","description":"Your Datronis personal access token (starts with \"dtk_\"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred — see search_jobs' api_key description for why)."},"contact":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"github":{"type":"string"},"reddit":{"type":"string"},"twitter":{"type":"string"},"website":{"type":"string"},"linkedin":{"type":"string"},"telegram":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}}},"description":"Contact links shown in the header.","additionalProperties":false},"summary":{"type":"string","description":"2-4 sentence professional summary."},"headline":{"type":"string","description":"Short professional title under the name, e.g. \"Senior Software Engineer\"."},"location":{"type":"string","description":"City, Country shown in the header."},"projects":{"type":"array","items":{"type":"object","required":["name"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"link":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"tech":{"type":"array","items":{"type":"string"}},"remote":{"type":"boolean"},"bullets":{"type":"array","items":{"type":"string"}},"endDate":{"type":"string"},"location":{"type":"string"},"startDate":{"type":"string"}},"additionalProperties":false},"description":"Projects section. If provided, replaces this entire section — send the complete list, not just what changed."},"education":{"type":"array","items":{"type":"object","required":["university"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"field":{"type":"string"},"degree":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"current":{"type":"boolean"},"endDate":{"type":"string","description":"YYYY-MM"},"location":{"type":"string"},"startDate":{"type":"string","description":"YYYY-MM"},"university":{"type":"string"}},"additionalProperties":false},"description":"Education history. If provided, replaces this entire section — send the complete list, not just what changed."},"resume_id":{"type":"string","format":"uuid","description":"The resume to update — from list_my_resumes."},"is_default":{"type":"boolean","description":"Make this the default resume. Omit to leave unchanged."},"experiences":{"type":"array","items":{"type":"object","required":["company","title"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"title":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"company":{"type":"string"},"current":{"type":"boolean"},"endDate":{"type":"string","description":"YYYY-MM, omit/empty if current"},"location":{"type":"string"},"startDate":{"type":"string","description":"YYYY-MM"}},"additionalProperties":false},"description":"Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed."},"certificates":{"type":"array","items":{"type":"object","required":["name"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"date":{"type":"string","description":"YYYY-MM"},"name":{"type":"string"},"issuer":{"type":"string"}},"additionalProperties":false},"description":"Certifications. If provided, replaces this entire section — send the complete list, not just what changed."},"full_replace":{"type":"boolean","description":"false (default): merge — fields you omit stay as they are; any section array you DO send (experiences, education, skills, projects, certificates, customSections) replaces that one section, other sections are untouched. true: the content fields you send become the ENTIRE resume — any section you omit is removed. Call list_my_resumes first to see current content before adding to an existing section."},"customSections":{"type":"array","items":{"type":"object","required":["title","items"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"items":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"string","description":"Omit to auto-generate."},"title":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}},"subtitle":{"type":"string"}},"additionalProperties":false}},"title":{"type":"string","description":"Section heading, e.g. \"Publications\" or \"Volunteering\"."}},"additionalProperties":false},"description":"Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section — send the complete list, not just what changed."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":1709,"tokensAfter":1709}],"toolsChanged":12,"tokensSaved":0,"todo":[{"tool":"create_diagram","params":["name"]},{"tool":"create_form","params":["mode","title"]},{"tool":"create_memo_deck","params":["description"]},{"tool":"export_form_responses","params":["format"]},{"tool":"get_form_response","params":["response_id"]},{"tool":"get_news","params":["limit","offset"]},{"tool":"list_diagrams","params":["limit","offset"]},{"tool":"list_form_responses","params":["page","limit","stage","search","starred"]},{"tool":"list_forms","params":["limit","search","status"]},{"tool":"review_form_response","params":["comment","verdict","response_id"]},{"tool":"update_diagram","params":["name","settings","is_public"]},{"tool":"update_form_response","params":["tags","notes","starred","response_id"]},{"tool":"update_memo_deck","params":["icon","color","title","description"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}