mcp
Search and apply to real jobs, browse companies, and read tech news via Datronis's live data.
我该使用它吗
质量与安全性
发现(1)
- LOW在 admin_get_news_translation_status 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"mcp": {
"url": "https://api.datronis.com/api/mcp"
}
}
}远程端点
https://api.datronis.com/api/mcpstreamable-http它能做什么
工具清单
工具(19)
🟢search_jobs(q, country, city, remote_type, job_type, ...)
Search job listings by keyword, location, type, or remote policy. Returns paginated results with title, company, salary, and application URL.
输入模式
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search keyword (title or description)"
},
"country": {
"type": "string",
"description": "Filter by country (e.g. \"United States\")"
},
"city": {
"type": "string",
"description": "Filter by city"
},
"remote_type": {
"type": "string",
"enum": [
"REMOTE",
"HYBRID",
"ONSITE"
],
"description": "Remote work policy"
},
"job_type": {
"type": "string",
"enum": [
"FULL_TIME",
"PART_TIME",
"CONTRACT",
"INTERNSHIP",
"FREELANCE"
],
"description": "Employment type"
},
"job_level": {
"type": "string",
"enum": [
"ENTRY",
"MID",
"SENIOR",
"LEAD",
"EXECUTIVE"
],
"description": "Experience level required"
},
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Required skills (e.g. [\"Python\", \"React\"])"
},
"salary_min": {
"type": "integer",
"description": "Minimum annual salary (USD)"
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (default: 1)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page (default: 10)"
},
"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,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_job(slug, api_key)
Get full details of a job listing by its slug or ID, including description, requirements, company info, and application link.
输入模式
{
"type": "object",
"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)."
}
},
"required": [
"slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_news(title, category_id, locale, limit, offset)
Fetch the latest news articles. Optionally filter by category, locale, or title keyword. Returns title, summary, publication date, and URL.
输入模式
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Search keyword in title"
},
"category_id": {
"type": "integer",
"description": "Filter by category ID"
},
"locale": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"default": 1,
"description": "Language locale (1=English, 2=Persian, 3=Spanish, 4=German, ...)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_categories(locale)
List all content categories available on the platform (for filtering news, jobs, etc.).
输入模式
{
"type": "object",
"properties": {
"locale": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"default": 1,
"description": "Language locale (1=English)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_companies(query, country, industry, is_hiring, limit, ...)
Search companies on the platform. Returns company name, industry, location, size, website, and open roles count.
输入模式
{
"type": "object",
"properties": {
"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"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page (default: 10)"
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (default: 1)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_platform_stats
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.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴apply_to_job(api_key, job_id, resume_id, cover_letter)
Submit a job application on behalf of the authenticated user. Requires a personal access token (generate one at /app/api-keys/). A resume is mandatory: if no resume_id is given, the user's default (or most recently updated) resume is used automatically, and the call fails with a clear error if the user has no resume yet.
输入模式
{
"type": "object",
"properties": {
"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)."
},
"job_id": {
"type": "string",
"format": "uuid",
"description": "Job ID to apply for (from search_jobs or get_job)"
},
"resume_id": {
"type": "string",
"format": "uuid",
"description": "Resume to attach. If omitted, your default resume (or most recently updated) is used automatically."
},
"cover_letter": {
"type": "string",
"maxLength": 5000,
"description": "Optional cover letter text"
}
},
"required": [
"job_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_my_resumes(api_key, query, status, locale, page, ...)
List the authenticated user's saved resumes. Requires a personal access token (generate one at /app/api-keys/).
输入模式
{
"type": "object",
"properties": {
"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)."
},
"query": {
"type": "string",
"description": "Search keyword in resume title or headline"
},
"status": {
"type": "string",
"enum": [
"draft",
"published",
"archived"
],
"description": "Filter by resume status"
},
"locale": {
"type": "string",
"description": "Filter by resume locale"
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (default: 1)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page (default: 20)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_applications(api_key, page, limit)
Check the status of the authenticated user's job applications. Requires a personal access token (generate one at /app/api-keys/).
输入模式
{
"type": "object",
"properties": {
"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)."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (default: 1)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page (default: 20)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡draft_news(title, body, content_format, category_id, target_locales, ...)
Draft and publish a news article. Open to anyone with a Datronis account — the personal access token is for rate-limiting and audit, not permission-gating. Always drafted in English first; an automated safety classifier must return "green" (not political, not likely to be seen as controversial or divisive) before the article goes live. A "flagged" result creates the article unpublished and returns the reasons — use resubmit_news with revised content to try again; there is no way to force-publish a flagged article. Publishes English-only unless target_locales is given.
输入模式
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Article title (English)"
},
"body": {
"type": "string",
"minLength": 1,
"description": "Article body in the format selected by content_format"
},
"content_format": {
"type": "string",
"enum": [
"html",
"markdown"
],
"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."
},
"category_id": {
"type": "integer",
"description": "Category ID; defaults to the site's default news category"
},
"target_locales": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional 2-letter locale codes to also translate and publish into (e.g. [\"de\",\"ru\"]). English is always published first. Omit to publish English-only — broad multi-language publishing is only ever done when explicitly requested. There is no limit on how many locales may be requested here."
},
"allow_self_translation": {
"type": "boolean",
"description": "Reserves (does not yet grant a UI for) your permission to personally translate this article into additional locales later, beyond target_locales. Defaults to true — checked by default. Only ever applies to a locale after the English original has been classified \"green\"; a \"flagged\" article carries no translation permission regardless of this flag."
},
"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."
}
},
"required": [
"title",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪resubmit_news(news_id, title, body, content_format, target_locales, ...)
Revise and reclassify a news article that draft_news (or a previous resubmit_news call) rejected as "flagged". Every call is its own fully logged classification attempt against the news_id's audit trail — never a silent status flip. Publishes the revision live only if the classifier now returns "green". Only the account that originally submitted the article (via draft_news) may resubmit it — a different account's api_key is rejected, even a valid one.
输入模式
{
"type": "object",
"properties": {
"news_id": {
"type": "integer",
"description": "The news_id returned by a previous draft_news call"
},
"title": {
"type": "string",
"minLength": 1,
"description": "Revised article title (English)"
},
"body": {
"type": "string",
"minLength": 1,
"description": "Revised article body (English)"
},
"content_format": {
"type": "string",
"enum": [
"html",
"markdown"
],
"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."
},
"target_locales": {
"type": "array",
"items": {
"type": "string"
},
"description": "Same as draft_news — only used if this revision is approved"
},
"allow_self_translation": {
"type": "boolean",
"description": "Same as draft_news. Omit to leave the article's existing setting unchanged; pass explicitly to change it."
},
"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."
}
},
"required": [
"news_id",
"title",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡get_missing_news_translations(locale, page, limit)
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.
输入模式
{
"type": "object",
"properties": {
"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."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number (default: 1)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Results per page (default: 20)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_news_translation(news_id, locale, title, body, content_format, ...)
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_news_translations to find real gaps first.
输入模式
{
"type": "object",
"properties": {
"news_id": {
"type": "integer",
"description": "The news_id of the published English source article (from get_news or get_missing_news_translations)"
},
"locale": {
"type": "string",
"description": "2-letter target locale code (e.g. \"fi\") — see get_missing_news_translations for what a given article still needs"
},
"title": {
"type": "string",
"minLength": 1,
"description": "Translated title, in the target locale"
},
"body": {
"type": "string",
"minLength": 1,
"description": "Translated body, in the target locale — HTML or plain text, same format as the source"
},
"content_format": {
"type": "string",
"enum": [
"html",
"markdown"
],
"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."
},
"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."
}
},
"required": [
"news_id",
"locale",
"title",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡admin_create_news(title, body, content_format, locale, category_id, ...)
Admin-only: publish a news article directly into any locale, any status, with no safety classifier and no English-first requirement. Requires an api_key belonging to an admin account — a valid but non-admin key is rejected. For non-admin accounts, use draft_news instead. Can also queue selected translations or every missing locale without keeping the MCP request open while translation runs.
输入模式
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Article title, in the target locale"
},
"body": {
"type": "string",
"minLength": 1,
"description": "Article body in the format selected by content_format"
},
"content_format": {
"type": "string",
"enum": [
"html",
"markdown"
],
"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."
},
"locale": {
"type": "string",
"description": "2-letter locale code to publish directly into (e.g. \"en\", \"de\") — no English-first requirement, unlike draft_news"
},
"category_id": {
"type": "integer",
"description": "Category ID; defaults to the site's default news category"
},
"published": {
"type": "boolean",
"description": "Whether the article goes live immediately. Defaults to true. No safety classifier runs either way — admin judgment only."
},
"target_locales": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 23,
"description": "Optional locale codes to translate in the durable background queue after creating the article. Use translate_to_all instead when every missing locale is wanted."
},
"translate_to_all": {
"type": "boolean",
"description": "When true, queue every missing locale after creating the article. The tool returns immediately; use admin_get_news_translation_status to follow progress."
},
"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). The token must belong to an admin account — a valid but non-admin key is rejected."
}
},
"required": [
"title",
"body",
"locale"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴admin_edit_news(news_id, title, body, content_format, category_id, ...)
Admin-only: edit any existing news article — title, body, category, or published status — regardless of who created it or what locale it is in. Requires an api_key belonging to an admin account. Unlike resubmit_news, there is no ownership restriction and no safety classifier; omit a field to leave it unchanged.
输入模式
{
"type": "object",
"properties": {
"news_id": {
"type": "integer",
"description": "The news_id of any existing article — not limited to ones the caller created"
},
"title": {
"type": "string",
"minLength": 1,
"description": "New title. Omit to leave unchanged."
},
"body": {
"type": "string",
"minLength": 1,
"description": "New body. Omit to leave unchanged."
},
"content_format": {
"type": "string",
"enum": [
"html",
"markdown"
],
"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."
},
"category_id": {
"type": "integer",
"description": "New category ID. Omit to leave unchanged."
},
"published": {
"type": "boolean",
"description": "Publish or unpublish the article. Omit to leave the current status 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). The token must belong to an admin account — a valid but non-admin key is rejected."
}
},
"required": [
"news_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢admin_translate_news(news_id, target_locales, api_key)
Admin-only: durably queue server-generated translations for an existing published news article. Pass target_locales for selected languages, or omit it to fill every missing locale across all 24 supported languages. Existing translations are skipped and each locale has a deterministic task, so repeating the call is safe. This call returns quickly; use admin_get_news_translation_status until complete=true.
输入模式
{
"type": "object",
"properties": {
"news_id": {
"type": "integer",
"description": "Any published news row in the translation family."
},
"target_locales": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 23,
"description": "Locale codes to fill (for example [\"fa\",\"de\"]). Omit to queue every locale that is still missing. Existing translations are skipped, so retries are safe."
},
"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). The token must belong to an admin account — a valid but non-admin key is rejected."
}
},
"required": [
"news_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢admin_get_news_translation_status(news_id, api_key)
Admin-only: inspect translation coverage and durable queue state for a news article. Returns existing locale rows, missing locale codes, per-locale QUEUED/PROCESSING/COMPLETED/FAILED jobs, and complete=true only when all 24 languages exist.
输入模式
{
"type": "object",
"properties": {
"news_id": {
"type": "integer",
"description": "Any news row in the translation family."
},
"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). The token must belong to an admin account — a valid but non-admin key is rejected."
}
},
"required": [
"news_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_resume(api_key, title, locale, is_default, name, ...)
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.
输入模式
{
"type": "object",
"properties": {
"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)."
},
"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\"."
},
"is_default": {
"type": "boolean",
"description": "Make this the default resume — used by apply_to_job when no resume_id is given."
},
"name": {
"type": "string",
"description": "Full name shown on the resume header."
},
"headline": {
"type": "string",
"description": "Short professional title under the name, e.g. \"Senior Software Engineer\"."
},
"summary": {
"type": "string",
"description": "2-4 sentence professional summary."
},
"location": {
"type": "string",
"description": "City, Country shown in the header."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"website": {
"type": "string"
},
"linkedin": {
"type": "string"
},
"github": {
"type": "string"
},
"twitter": {
"type": "string"
},
"reddit": {
"type": "string"
},
"telegram": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Contact links shown in the header."
},
"experiences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"company": {
"type": "string"
},
"title": {
"type": "string"
},
"location": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM"
},
"endDate": {
"type": "string",
"description": "YYYY-MM, omit/empty if current"
},
"current": {
"type": "boolean"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"company",
"title"
],
"additionalProperties": false
},
"description": "Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed."
},
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"link": {
"type": "string"
},
"location": {
"type": "string"
},
"remote": {
"type": "boolean"
},
"startDate": {
"type": "string"
},
"endDate": {
"type": "string"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
},
"tech": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Projects section. If provided, replaces this entire section — send the complete list, not just what changed."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"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"
}
}
},
"required": [
"name",
"skills"
],
"additionalProperties": false
},
"description": "Skill categories. If provided, replaces this entire section — send the complete list, not just what changed."
},
"certificates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"name": {
"type": "string"
},
"issuer": {
"type": "string"
},
"date": {
"type": "string",
"description": "YYYY-MM"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Certifications. If provided, replaces this entire section — send the complete list, not just what changed."
},
"education": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"university": {
"type": "string"
},
"degree": {
"type": "string"
},
"field": {
"type": "string"
},
"location": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM"
},
"endDate": {
"type": "string",
"description": "YYYY-MM"
},
"current": {
"type": "boolean"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"university"
],
"additionalProperties": false
},
"description": "Education history. If provided, replaces this entire section — send the complete list, not just what changed."
},
"customSections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"title": {
"type": "string",
"description": "Section heading, e.g. \"Publications\" or \"Volunteering\"."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"title": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"title"
],
"additionalProperties": false
}
}
},
"required": [
"title",
"items"
],
"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,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡update_resume(api_key, resume_id, title, locale, status, ...)
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.
输入模式
{
"type": "object",
"properties": {
"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)."
},
"resume_id": {
"type": "string",
"format": "uuid",
"description": "The resume to update — from list_my_resumes."
},
"title": {
"type": "string",
"description": "New internal title. Omit to leave unchanged."
},
"locale": {
"type": "string",
"description": "New locale code. Omit to leave unchanged."
},
"status": {
"type": "string",
"enum": [
"draft",
"published",
"archived"
],
"description": "New status. Omit to leave unchanged."
},
"is_default": {
"type": "boolean",
"description": "Make this the default resume. Omit to leave unchanged."
},
"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."
},
"name": {
"type": "string",
"description": "Full name shown on the resume header."
},
"headline": {
"type": "string",
"description": "Short professional title under the name, e.g. \"Senior Software Engineer\"."
},
"summary": {
"type": "string",
"description": "2-4 sentence professional summary."
},
"location": {
"type": "string",
"description": "City, Country shown in the header."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"website": {
"type": "string"
},
"linkedin": {
"type": "string"
},
"github": {
"type": "string"
},
"twitter": {
"type": "string"
},
"reddit": {
"type": "string"
},
"telegram": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Contact links shown in the header."
},
"experiences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"company": {
"type": "string"
},
"title": {
"type": "string"
},
"location": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM"
},
"endDate": {
"type": "string",
"description": "YYYY-MM, omit/empty if current"
},
"current": {
"type": "boolean"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"company",
"title"
],
"additionalProperties": false
},
"description": "Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed."
},
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"link": {
"type": "string"
},
"location": {
"type": "string"
},
"remote": {
"type": "boolean"
},
"startDate": {
"type": "string"
},
"endDate": {
"type": "string"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
},
"tech": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Projects section. If provided, replaces this entire section — send the complete list, not just what changed."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"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"
}
}
},
"required": [
"name",
"skills"
],
"additionalProperties": false
},
"description": "Skill categories. If provided, replaces this entire section — send the complete list, not just what changed."
},
"certificates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"name": {
"type": "string"
},
"issuer": {
"type": "string"
},
"date": {
"type": "string",
"description": "YYYY-MM"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Certifications. If provided, replaces this entire section — send the complete list, not just what changed."
},
"education": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"university": {
"type": "string"
},
"degree": {
"type": "string"
},
"field": {
"type": "string"
},
"location": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM"
},
"endDate": {
"type": "string",
"description": "YYYY-MM"
},
"current": {
"type": "boolean"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"university"
],
"additionalProperties": false
},
"description": "Education history. If provided, replaces this entire section — send the complete list, not just what changed."
},
"customSections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"title": {
"type": "string",
"description": "Section heading, e.g. \"Publications\" or \"Volunteering\"."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Omit to auto-generate."
},
"title": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"bullets": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"title"
],
"additionalProperties": false
}
}
},
"required": [
"title",
"items"
],
"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."
}
},
"required": [
"resume_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}社区
证据