person.work — Agent-maintained CV
Maintain your CV with your agent. Review changes, then share one record as web, PDF and open data.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"career-record": {
"url": "https://person.work/api/mcp"
}
}
}远程端点
https://person.work/api/mcpstreamable-http它能做什么
工具清单
工具(4)
🟢get_profile(username, include_extensions, format)
Returns one public Career Record whose owner explicitly enabled MCP visibility. Contact values are excluded.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 3,
"maxLength": 50,
"description": "The person.work profile slug"
},
"include_extensions": {
"default": true,
"type": "boolean"
},
"format": {
"default": "full",
"type": "string",
"enum": [
"full",
"summary"
]
}
},
"required": [
"username"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sync_my_profile(identity, profile, extension, experiences)
Explicit initial-import operation for structured facts already interpreted by the calling agent. It does not accept or store a raw CV, PDF, or source text, and person.work does not run a second AI interpretation. The operation deterministically validates the payload and atomically creates a private profile when needed or replaces the owner's profile facts and complete experience list. Experiences may include a public HTTPS company_logo_url; person.work imports a protected copy. Use null to remove a logo and omit the field to preserve it. Identity is required only for first creation. Never use this for routine updates.
输入模式
{
"type": "object",
"properties": {
"identity": {
"description": "Required only when this initial sync creates the authenticated owner's private person.work profile.",
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]{1,28}[a-z0-9]$",
"description": "Requested public slug. Used only when the authenticated owner has no person.work profile yet."
}
},
"required": [
"first_name",
"last_name",
"slug"
],
"additionalProperties": false
},
"profile": {
"type": "object",
"properties": {
"avatar_url": {
"description": "Public HTTPS URL of the profile picture. person.work imports and stores a protected copy, cropped to a portrait frame. Use null to remove the current picture and fall back to initials; omit the field to preserve it.",
"anyOf": [
{
"type": "string",
"maxLength": 2000,
"format": "uri",
"pattern": "^https:\\/\\/"
},
{
"type": "null"
}
]
},
"headline": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"summary_short": {
"type": "string",
"maxLength": 1000
},
"summary_full": {
"type": "string",
"maxLength": 12000
},
"profession_group": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"competencies": {
"maxItems": 80,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"primary_language": {
"default": "de",
"type": "string",
"minLength": 2,
"maxLength": 12
}
},
"required": [
"headline",
"summary",
"summary_short",
"summary_full",
"profession_group",
"competencies"
],
"additionalProperties": false
},
"extension": {
"type": "object",
"properties": {
"extension_id": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 320
},
{
"maxItems": 60,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
{
"type": "number"
},
{
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"extension_id",
"fields"
],
"additionalProperties": false,
"description": "Typed profession fields (e.g. primaryLanguages, seniority). Replaces the stored fields of that extension; omit to leave them untouched."
},
"experiences": {
"minItems": 1,
"maxItems": 24,
"type": "array",
"items": {
"type": "object",
"properties": {
"stable_uri": {
"type": "string",
"minLength": 3,
"maxLength": 200
},
"company": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"company_logo_url": {
"description": "Public HTTPS URL of the company logo. person.work imports and stores a protected copy. Use null to remove the current logo; omit the field to preserve it.",
"anyOf": [
{
"type": "string",
"maxLength": 2000,
"format": "uri",
"pattern": "^https:\\/\\/"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"minLength": 1,
"maxLength": 320
},
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
{
"type": "null"
}
]
},
"headline": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"key_result": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"context": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"problem": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"contribution": {
"anyOf": [
{
"type": "string",
"maxLength": 16000
},
{
"type": "null"
}
]
},
"result": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"learning": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"order_index": {
"type": "integer",
"minimum": 0,
"maximum": 99
},
"is_prominent": {
"type": "boolean"
}
},
"required": [
"stable_uri",
"company",
"role",
"start_date",
"end_date",
"order_index",
"is_prominent"
],
"additionalProperties": false
}
}
},
"required": [
"profile",
"experiences"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Structured CV facts interpreted by the calling agent. Raw files and source text are not part of this contract; person.work validates and stores only this structured payload."
}🟢get_my_career_record
Returns the OAuth-authenticated owner's canonical record. Read this before proposing an ongoing CV update so stable experience identifiers and confirmed facts are preserved.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡propose_my_career_change(instruction, source_label, proposed_patch, diff_summary)
Adds a structured, human-readable diff to the owner's review inbox. Experience upserts may include a public HTTPS company_logo_url; person.work imports its own protected copy only after owner approval. Use this for normal maintenance after the initial import; the agent cannot apply or publish it.
输入模式
{
"type": "object",
"properties": {
"instruction": {
"type": "string",
"minLength": 1,
"maxLength": 12000
},
"source_label": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
]
},
"proposed_patch": {
"type": "object",
"properties": {
"profile": {
"type": "object",
"properties": {
"avatar_url": {
"description": "Public HTTPS URL of the profile picture. person.work imports and stores a protected copy, cropped to a portrait frame. Use null to remove the current picture and fall back to initials; omit the field to preserve it.",
"anyOf": [
{
"type": "string",
"maxLength": 2000,
"format": "uri",
"pattern": "^https:\\/\\/"
},
{
"type": "null"
}
]
},
"headline": {
"anyOf": [
{
"type": "string",
"maxLength": 300
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 12000
},
{
"type": "null"
}
]
},
"summary_short": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"summary_full": {
"anyOf": [
{
"type": "string",
"maxLength": 20000
},
{
"type": "null"
}
]
},
"profession_group": {
"anyOf": [
{
"type": "string",
"maxLength": 160
},
{
"type": "null"
}
]
},
"competencies": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"spoken_languages": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
}
},
"additionalProperties": false
},
"extension": {
"type": "object",
"properties": {
"extension_id": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 320
},
{
"maxItems": 60,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
{
"type": "number"
},
{
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"extension_id",
"fields"
],
"additionalProperties": false,
"description": "Typed profession fields (e.g. primaryLanguages, seniority). Replaces the stored fields of that extension; omit to leave them untouched."
},
"experiences": {
"minItems": 1,
"maxItems": 24,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"operation": {
"type": "string",
"const": "upsert"
},
"experience": {
"type": "object",
"properties": {
"stable_uri": {
"type": "string",
"minLength": 3,
"maxLength": 200
},
"company": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"company_logo_url": {
"description": "Public HTTPS URL of the company logo. person.work imports and stores a protected copy. Use null to remove the current logo; omit the field to preserve it.",
"anyOf": [
{
"type": "string",
"maxLength": 2000,
"format": "uri",
"pattern": "^https:\\/\\/"
},
{
"type": "null"
}
]
},
"role": {
"type": "string",
"minLength": 1,
"maxLength": 320
},
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end_date": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
{
"type": "null"
}
]
},
"headline": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"key_result": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"context": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"problem": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"contribution": {
"anyOf": [
{
"type": "string",
"maxLength": 16000
},
{
"type": "null"
}
]
},
"result": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"learning": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "null"
}
]
},
"order_index": {
"type": "integer",
"minimum": 0,
"maximum": 99
},
"is_prominent": {
"type": "boolean"
}
},
"required": [
"stable_uri",
"company",
"role",
"start_date",
"end_date",
"order_index",
"is_prominent"
],
"additionalProperties": false
}
},
"required": [
"operation",
"experience"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"operation": {
"type": "string",
"const": "remove"
},
"stable_uri": {
"type": "string",
"minLength": 3,
"maxLength": 200
}
},
"required": [
"operation",
"stable_uri"
],
"additionalProperties": false
}
]
}
}
},
"additionalProperties": false
},
"diff_summary": {
"default": [],
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"operation": {
"type": "string",
"enum": [
"add",
"replace",
"remove"
]
},
"before": {},
"after": {},
"reason": {
"type": "string",
"maxLength": 1000
}
},
"required": [
"path",
"operation"
]
}
}
},
"required": [
"instruction",
"proposed_patch"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据