Skip to main content
Glama
Workforce-Cloud-Tech

Recruit CRM MCP Server

Update Candidate

update_candidate
Destructive

Update an existing Recruit CRM candidate by slug, modify profile fields, and optionally add up to 10 work and education history entries. Requires candidate slug, updater user ID, and at least one name.

Instructions

Updates one existing Recruit CRM candidate by candidate_slug, then optionally creates up to 10 work history rows and 10 education history rows. Requires candidate_slug, updated_by, and at least one of first_name or last_name. Resolve user IDs with list_users, currency_id with list_currencies, language_skills with list_languages_and_proficiencies, company slugs with search_companies, and custom field IDs with list_custom_fields. The resume field accepts a publicly accessible HTTPS direct download URL or a base64-encoded file string. File-type custom fields accept a direct download URL only. Returns a compact summary with the candidate slug and partial-success details for history operations.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoCity.
xingNoXing URL.
emailNoCandidate email.
skillNoComma-separated candidate skills.
stateNoState.
avatarNoCandidate avatar URL.
githubNoGitHub URL.
resumeNoResume file. Accepts a publicly accessible HTTPS direct download URL or a base64-encoded file string. Max file size 16 MB.
sourceNoCandidate source (e.g. 'Claude', 'LinkedIn').
addressNoStreet address.
countryNoCountry.
twitterNoTwitter/X URL.
facebookNoFacebook URL.
linkedinNoLinkedIn URL.
localityNoLocality.
owner_idNoCandidate owner user ID. Required when creating.
positionNoCandidate position/title.
gender_idNoGender id: 0 not available, 1 male, 2 female, 3 non-binary, 4 prefer not to say.
last_nameNoCandidate last name. At least one of first_name or last_name is required.
created_byNoCreating user ID. Required when creating.
first_nameNoCandidate first name. At least one of first_name or last_name is required.
updated_byYesRecruit CRM user id updating the candidate.
currency_idNoRecruit CRM currency id.
postal_codeNoPostal code.
salary_typeNoRecruit CRM salary type id.
work_ex_yearNoTotal work experience in years.
work_historyNoLatest work history rows to create after the candidate is created or updated. Max 10 rows.
candidate_dobNoCandidate date of birth, preferably YYYY-MM-DD.
custom_fieldsNoCandidate custom field values. Dropdown and multiselect fields require a value matching the options returned by get_custom_field_details.
notice_periodNoNotice period in days.
available_fromNoAvailable-from date, preferably YYYY-MM-DD.
candidate_slugYesExisting candidate slug to update.
contact_numberNoCandidate contact number.
current_salaryNoCurrent salary.
current_statusNoCurrent candidate status.
language_skillsNoCandidate language skills.
candidate_summaryNoCandidate summary. Supports basic HTML/rich text.
education_historyNoLatest education history rows to create after the candidate is created or updated. Max 10 rows.
profile_updated_onNoProfile updated date, preferably YYYY-MM-DD.
salary_expectationNoSalary expectation.
relevant_experienceNoRelevant experience in years.
willing_to_relocateNoRelocation flag: 1 willing, 0 not willing.
current_organizationNoCurrent organization name.
current_organization_slugNoCurrent organization company slug.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
ownerYes
actionYes
errorsYes
positionYes
view_urlYes
last_nameYes
created_onYes
first_nameYes
updated_onYes
candidate_idYes
work_historyYes
candidate_slugYes
current_statusYes
education_historyYes
current_organizationYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, and the description enriches this by explaining the exact mutation scope: updating the candidate and optionally creating up to 10 work history and 10 education history rows. It discloses partial-success behavior ('partial-success details for history operations'), resume file format constraints, and that file-type custom fields accept only a direct download URL. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the primary purpose. Each subsequent sentence earns its place: requirements, resolver guidance, file format constraints, and return summary. It is concise relative to the 44-parameter schema, though it is dense and could be slightly restructured for readability. No filler or repetition of schema-only content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 44 parameters, nested arrays, and no output schema content in the description, the description covers the essential context: target resource, required/conditional fields, how to resolve IDs, file format restrictions, and return behavior. It does not explicitly state whether unspecified fields are left unchanged or reset, but the up to 10 rows and partial-success details suggest a reasonable update semantics. Given the output schema exists and annotations are present, the description is complete enough for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3, but the description adds meaningful semantics beyond the schema. It maps logical parameters to resolver tools ('currency_id with list_currencies', 'language_skills with list_languages_and_proficiencies'), clarifies the resume field accepts base64 or URL, and explains that file-type custom fields only accept a direct download URL. It also introduces the conditional requirement that at least one of first_name or last_name must be provided, which is not encoded in the schema's required list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Updates'), resource ('one existing Recruit CRM candidate'), and identifier ('by candidate_slug'), distinguishing it from sibling tools like create_candidate and search_candidates. It also names the exact operation scope (update plus optional history creation), leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on resolving foreign keys ('Resolve user IDs with list_users, currency_id with list_currencies...'), which helps agents prepare correct parameter values. It also clearly implies the tool is for updating an existing candidate (not creating one), but it does not explicitly name alternative tools or state when not to use it. The conditional requirement 'at least one of first_name or last_name' adds useful usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Workforce-Cloud-Tech/mcp-recruitcrm'

If you have feedback or need assistance with the MCP directory API, please join our Discord server