Civify
Server Details
Official Model Context Protocol (MCP) server for the Civify Career Platform.
Connects autonomous AI agents (Claude Desktop, Cursor, OpenCode, Qwen CLI, custom agents) directly to Civify's AI resume parsing, ATS scoring, resume tailoring, PII redaction, and application tracking engines.
- Status
- Healthy
- Uptime
- 90.8% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 13 tools
Most tools target clearly distinct workflow steps: parsing, tailoring, scoring, scraping, tracking, and purchasing. Some overlap exists—tailor_cv and score_ats both return ATS feedback, and generate_pdf competes with PDF outputs from tailor_cv and mask_pii—but the descriptions clarify their different intended purposes.
All tools follow a consistent civify_ prefix with snake_case verb_noun naming, such as parse_cv, scrape_job, and track_application. The verbs are descriptive and the pattern is predictable across the entire set.
13 tools is well within the ideal range and each tool maps to a meaningful part of the CV/career workflow, from parsing and tailoring to job scraping and application tracking. No tool feels redundant or extraneous.
The set covers the core lifecycle well: input parsing, tailoring, ATS scoring, PDF generation, PII masking, job scraping, application tracking, and the purchase/entitlement flow. Minor gaps exist, such as no update/delete operation for tracked applications and no template selection, but agents can complete primary workflows without dead ends.
Available Tools
13 toolscivify_check_cv_entitlementCheck Resume Pass EntitlementARead-onlyIdempotentInspect
Check if a specific resume currently has an active 30-day unwatermarked pass and unlimited edits.
| Name | Required | Description | Default |
|---|---|---|---|
| resume_id | Yes | Resume UUID or ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by defining what counts as entitled and adding the 'currently' freshness qualifier, but it does not disclose response behavior or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the action and precise entitlement conditions, making every word earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one required parameter, full schema coverage, an output schema present, and annotations covering side effects, the description is sufficient for an agent to invoke the tool correctly. No return-value explanation is needed because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents resume_id with a description and 100% coverage, so the schema carries the parameter meaning. The description adds no extra detail about ID format, ownership requirements, or how the resume relates to the pass, keeping this at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('check') against a clearly defined resource ('a specific resume') and precisely states what is being verified: an active 30-day unwatermarked pass and unlimited edits. This clearly distinguishes the tool from siblings like civify_purchase_cv_pass or civify_generate_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this is an entitlement status check, so an agent can infer it should be used when verification of an existing pass is needed. However, it does not explicitly name alternatives or state when not to use this tool, leaving routing to inference from sibling names like civify_purchase_cv_pass.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_generate_pdfRender Resume PDFAIdempotentInspect
Render and generate a high-fidelity PDF from structured resume data using Civify's template engine.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | PDF accent color in six-digit hex. | #000000 |
| filename | No | Filename for the exported PDF. | resume |
| template | No | PDF layout. | modern |
| resume_id | No | Existing Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted. | |
| resume_data | Yes | Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, readOnlyHint=false, and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context, such as entitlement consumption, authentication needs, or side effects beyond generating a PDF. Thus it does not exceed what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, output, input, and engine without filler. Every phrase earns its place; the title is redundant but the description is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested schema and an output schema, and the schema descriptions are thorough (resume_data structure, account policy, filename defaults). The description is terse but the definition as a whole covers the needed inputs; it only lacks explicit mention of account/entitlement prerequisites, though these are hinted in the resume_id parameter description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already documents all parameters, including the nested resume_data structure and the meaning of resume_id (entitlement/account policy). The description only mentions 'structured resume data,' adding no new parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Render and generate') and a clear resource ('high-fidelity PDF from structured resume data'), making the tool's function unmistakable. The mention of 'structured resume data' distinguishes it from siblings like civify_parse_cv, which handles unstructured input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description itself does not state when to use this tool versus alternatives, but the resume_data schema description says 'No parse call is required when you have this data,' which gives an implicit selection rule. There is no explicit exclusion or comparison with other tools, so it earns a mid score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_get_accountGet Account Profile & QuotasARead-onlyIdempotentInspect
Get current authenticated user account profile, subscription tier, remaining AI token balance, and CV credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safe read-only nature is well covered. The description adds meaningful behavioral context by specifying that the data is for the 'current authenticated user' and enumerating the quota-related fields (subscription tier, remaining AI tokens, CV credits), which clarifies the scope and statefulness of the returned values beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly scoped sentence that front-loads the verb and resource, then lists the key data points. Every phrase earns its place, with no filler, repetition, or redundant restatement of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (zero parameters), the presence of a full output schema, and complete safety annotations, the description is sufficiently complete. It tells an agent exactly what data will be returned (profile, tier, token balance, CV credits) and does not need to explain return values because an output schema exists. No critical information for correctly invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is essentially empty, so there is nothing for the description to add semantically. The baseline of 4 applies because with no parameters, the description's role in explaining parameter meaning is moot, and the description does not omit any required parameter-level information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('current authenticated user account profile'), and enumerates the exact data returned (subscription tier, AI token balance, CV credits). This is sufficiently distinct from sibling tools like civify_check_cv_entitlement or civify_get_pay_per_cv_pricing, which focus on specific entitlements or pricing rather than the overall account snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as civify_check_cv_entitlement or civify_get_pay_per_cv_pricing. There is no mention of prerequisites, or situations where another tool would be more appropriate. The 'current authenticated user' wording implies self-service account lookup, but no comparative usage guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_get_pay_per_cv_pricingGet Pay-Per-CV PricingARead-onlyIdempotentInspect
Get public localized Pay-Per-CV pricing (USD base price, converted EGP regional pricing, exchange rates, and entitlement details). Public, no auth required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds value by specifying 'Public, no auth required' (not in annotations) and detailing the exact data returned (pricing, exchange rates, entitlement details). It does not contradict annotations and supplements them with useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the tool's purpose and then lists specifics. Every phrase adds value—'public localized', 'USD base price, converted EGP regional pricing, exchange rates, and entitlement details'—without waste. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and the presence of an output schema that documents return format, the description fully covers what an agent needs: purpose, public nature, and the specific data contents. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description mentions the type of information returned but doesn't need to elaborate on parameters since none exist. No gaps here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves public localized Pay-Per-CV pricing, enumerating specific contents (USD base, EGP pricing, exchange rates, entitlement details). It uses a specific verb 'Get' with a precise resource, and the public scope distinguishes it from other tools. It avoids tautology and is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Public, no auth required' tells when this tool is appropriate (public access, no authentication needed). It does not explicitly mention alternatives or exclusions, such as noting that entitlement details could also be checked via a sibling tool like civify_check_cv_entitlement, but the context is sufficient for basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_get_startedARead-onlyIdempotentInspect
Start here for Civify capabilities, account connection, costs, supported resume inputs and career workflow guidance. Public; no account required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds 'Public; no account required,' which is useful, but it does not disclose any further behavioral details such as output format or limitations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the purpose and packs in scope plus auth context with no filler. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter introductory tool with an output schema present, the description covers what the tool is for and its auth prerequisites. It could say a bit more about what kind of guidance it returns, but the output schema is available to cover return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema with 100% coverage, so the baseline is 4. The description does not need to explain parameter semantics because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the starting point for Civify, naming the covered topics: capabilities, account connection, costs, supported resume inputs, and workflow guidance. It is distinct from the sibling operation tools, though it does not explicitly say what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Start here' gives a clear entry-point instruction, and 'Public; no account required' specifies the auth context for using it. It does not enumerate alternatives or exclusions, but for an orientation tool this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_list_applicationsList Tracked Job ApplicationsARead-onlyIdempotentInspect
List all tracked job applications from the candidate's Civify Kanban board.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is covered. The description adds the sourcing detail (Kanban board) but does not disclose any other behavior such as ordering, pagination, or empty results. This adds some context beyond annotations but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no waste. It states the action and scope immediately, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, list-style tool with an output schema present, this description is sufficient. It identifies what is listed and where the data comes from. There is no obvious missing information needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so a baseline of 4 is appropriate. The description correctly indicates no parameters are needed by stating 'list all' without filters; no additional parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list'), a clear resource ('all tracked job applications'), and a context ('candidate's Civify Kanban board'). This clearly differentiates it from the sibling 'civify_track_application', which implies adding a single application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this tool is for viewing all tracked applications, which is the primary use case. It does not explicitly state when not to use it or name alternatives, but the context is strong enough for an agent to select it over the singular 'track_application'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_mask_piiMask Personally Identifiable InformationAInspect
Sanitize and redact sensitive PII (email, phone, physical address) from a CV document, exporting an anonymized PDF. May consume AI credits; do not automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A user-selected chat attachment supplied by the client. Never invent a download URL or file ID. | |
| file_url | No | Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL. | |
| filename | No | Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted. | |
| file_base64 | No | Base64 encoded resume file (PDF, DOCX). Recommended for remote/cloud MCP servers. | |
| resume_text | No | Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide negative hints (readOnlyHint false, idempotentHint false, destructiveHint false), so the description carries the burden. It adds a valuable behavioral warning about AI credit consumption and advises against automatic retries, which is critical for an agent. It also implies a transformation (sanitization) that produces a PDF, but does not disclose details like error handling or irreversibility. The credit warning adds significant transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The core purpose is front-loaded, and the cost/retry warning is a separate, essential callout. Every sentence earns its place; no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. The description covers the PII types and output format, and the cost warning addresses a key operational concern. It does not mention supported input formats (though the schema does for base64), nor does it note any limitations or prerequisites beyond credits. Given the tool's complexity (multiple input modes) and the presence of an output schema, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a detailed description (e.g., 'Never invent a download URL or file ID' for file_url, and 'Do not summarize or invent missing content' for resume_text). The description itself adds no parameter-specific detail, but the schema already handles semantics well. Baseline 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (sanitize and redact PII) on a CV document and the output (anonymized PDF). It lists the specific PII types (email, phone, physical address), distinguishing it from sibling tools like parse_cv or tailor_cv. The verb 'sanitize and redact' and resource 'CV document' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when anonymization is needed but does not explicitly mention when to choose this tool over siblings or provide exclusions. The cost warning ('May consume AI credits; do not automatically retry') gives some operational context but does not guide selection among alternatives. Clear context but no explicit 'when not to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_parse_cvParse Resume DocumentAInspect
Parse a resume document (PDF, DOCX, image) into structured JSON schema containing contact details, work experience, education, skills, and projects. May consume AI credits; do not automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A user-selected chat attachment supplied by the client. Never invent a download URL or file ID. | |
| file_url | No | Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL. | |
| filename | No | Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted. | |
| language | No | Language code (e.g. 'en', 'ar', 'auto'). Default is 'auto'. | auto |
| file_base64 | No | Base64 encoded content of the resume document (PDF, DOCX). Recommended for remote/cloud MCP servers. | |
| resume_text | No | Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is known. The description adds valuable behavioral context beyond annotations: it may consume AI credits and should not be automatically retried. This is a meaningful operational caveat that the annotations cannot express. The description does not detail failure behavior or rate limits, but the credit warning is a strong addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and resource, lists the key input and output specifics, and ends with a critical behavioral caveat. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, nested objects, multiple input modes, output schema exists), the description plus the schema provides sufficient context for correct invocation. The AI-credit warning and retry policy are critical and included. The only small gap is not explicitly mentioning an entitlement prerequisite, but that is covered by sibling tools and not necessary for invoking this specific tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions, so the schema carries the semantic load. The tool description adds summary-level context (input formats, output fields) but does not repeat parameter details unnecessarily. The strong schema coverage including warnings like 'never invent a download URL' justifies a score above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Parse'), a resource ('resume document'), and the output ('structured JSON schema containing contact details, work experience, education, skills, and projects'). This distinguishes it from siblings like civify_score_ats or civify_tailor_cv, whose names and purposes are clearly different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists supported input formats (PDF, DOCX, image) and the output structure, which implies when this tool is appropriate. The schema's anyOf provides clear alternatives for input modes (resume_text, file_base64, file, file_url). The warning 'do not automatically retry' adds operational guidance. However, it does not explicitly state when to prefer this over alternatives like scoring or tailoring, though the purpose difference is self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_purchase_cv_passInitiate Pay-Per-CV PurchaseAInspect
Initiate checkout for a Pay-Per-CV unlock pass (single CV or 3-pack). Returns payment URL, invoice ID, and amount.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Payment method: 'CARD' or 'WALLET'. | CARD |
| gateway | No | Payment gateway ('paymob', 'fawaterak', 'dodo'). Auto-resolved by region if omitted. | |
| resume_id | No | Optional resume ID to immediately bind the single-pass entitlement to. | |
| product_id | No | Product to purchase: 'PAY_PER_CV_SINGLE' ($2.99 / ~150 EGP) or 'PAY_PER_CV_PACK3' ($6.99 / ~350 EGP). | PAY_PER_CV_SINGLE |
| promo_code | No | Optional discount promo code. | |
| phone_number | No | Mobile wallet number (required for Egyptian mobile wallets like Vodafone Cash). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=false, so the agent already knows this is a mutating, non-idempotent operation. The description adds that the tool returns a payment URL, invoice ID, and amount, providing some outcome transparency. However, it does not disclose side effects such as creating a pending order, whether a charge is actually made, or whether the URL must be completed by the user, which would be valuable for a purchase flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that front-load the core action and immediately state the key return values. There is no redundant information or filler, and every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the presence of a full output schema, complete parameter descriptions, and annotations covering the mutating/non-idempotent nature, the description is largely sufficient for an agent to select and invoke it correctly. It communicates the essential purpose and outputs, though a brief note about the external payment flow or when a wallet phone number is mandatory could make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a description in the schema, establishing a baseline of 3. The tool description itself does not add further parameter-level meaning beyond noting the single vs. 3-pack options, which mirrors the product_id enum. No additional clarification is given for gateway auto-resolution, promo code behavior, or wallet phone-number requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Initiate checkout for a Pay-Per-CV unlock pass'), and explicitly mentions the single or 3-pack variants, which maps directly to the product_id enum. This clearly distinguishes the purchase action from sibling tools like get_pay_per_cv_pricing or check_cv_entitlement, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the action and its result, but it does not explicitly say when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. There is no guidance such as 'if you only need pricing, use get_pay_per_cv_pricing' or 'requires an authenticated account', leaving the timing of use to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_score_atsScore Resume ATS CompatibilityAInspect
Calculate ATS compatibility score and structural audit for a resume document (file path) or structured resume JSON without needing a job description. May consume AI credits; do not automatically retry.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A user-selected chat attachment supplied by the client. Never invent a download URL or file ID. | |
| file_url | No | Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL. | |
| filename | No | Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted. | |
| file_base64 | No | Base64 encoded content of the resume document (PDF, DOCX). Recommended for remote/cloud MCP servers. | |
| resume_data | No | Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data. | |
| resume_text | No | Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a meaningful behavioral trait beyond the all-false annotations: 'May consume AI credits; do not automatically retry.' This warns of cost and non-idempotency, consistent with idempotentHint: false, and the 'do not retry' guidance is operationally critical. No contradiction with annotations (readOnlyHint: false aligns with an analysis operation). It omits auth/rate-limit detail, but the cost warning adds genuine value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the purpose and input modes, the second delivers the cost and retry warning. Every sentence earns its place, and the critical operational caveat is placed at the end without burying the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with an anyOf input contract and an existing output schema, the description plus fully-described parameters and output schema give an agent enough to select an input form and invoke correctly. The main gaps are the 'file path' phrasing that conflicts slightly with the actual parameter set, and the absence of input-preference ordering in the description (though the schema provides preferences like 'Recommended for remote/cloud MCP servers').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already carries rich, prescriptive guidance (e.g., 'Never invent a download URL or file ID,' 'Do not summarize or invent missing content,' 'Recommended for remote/cloud MCP servers'). The description adds only a coarse orientation to two input classes, which is helpful but does not exceed the baseline for a fully-documented schema. The 'file path' wording also does not map to any actual parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Calculate') and resource ('ATS compatibility score and structural audit') and clarifies the input domain ('resume document (file path) or structured resume JSON') and the absence of a job-description requirement. This clearly distinguishes it from siblings like civify_parse_cv and civify_tailor_cv. The phrase 'file path' is slightly loose relative to the schema's file/file_url/file_base64 parameters, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys one usage condition — no job description needed — which implies when this scoring tool is appropriate versus tailoring tools. However, it names no sibling tools and offers no explicit when-not-to-use guidance or alternatives, leaving routing largely to inference. The schema partially compensates ('No parse call is required when you have this data' on resume_data), but the tool description itself does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_scrape_jobScrape Job Description URLARead-onlyIdempotentInspect
Scrape and extract structured job description, company name, requirements, and responsibilities from a job URL (LinkedIn, Greenhouse, Lever, Ashby, Wuzzuf, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the job posting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the extraction scope (structured job description, company name, requirements, responsibilities) and the supported platforms, which helps the agent understand what the tool will do beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action ('Scrape and extract'), specifies the output fields, and lists supported sources. Every word earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter, a clear output schema, and annotations covering safety and idempotency. The description is complete enough for an agent to invoke it correctly. The only minor gap is that it doesn't mention error cases (e.g., unsupported URL or inaccessible page), but this is not critical given the simplicity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'url' parameter. The description adds context by specifying the type of URL (job posting) and the supported sources, which is useful for the agent to know what input is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: scraping and extracting structured job data from a job posting URL. It lists the specific data fields (job description, company name, requirements, responsibilities) and names the supported sources (LinkedIn, Greenhouse, Lever, Ashby, Wuzzuf, etc.), which distinguishes it from sibling tools like civify_parse_cv or civify_score_ats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you have a job posting URL and need structured job data. It doesn't explicitly state when not to use it or name alternatives, but the supported sources list and the clear resource (job URL) provide sufficient context for an agent to select it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_tailor_cvTailor Resume to Job DescriptionAInspect
Tailor a CV to a job and return tailoredCv, ATS feedback, and a finished PDF by default. Prefer resume_data if you already extracted the CV; otherwise send one original document/text input. May consume AI credits. Do not call parse first or automatically repeat tailoring. PDF failure preserves tailoredCv for export-only retry.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A user-selected chat attachment supplied by the client. Never invent a download URL or file ID. | |
| color | No | PDF accent color in six-digit hex. | #000000 |
| file_url | No | Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL. | |
| filename | No | Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted. | |
| language | No | Language code (e.g., 'en', 'ar'). | |
| template | No | PDF layout. | modern |
| job_title | No | Target job title. | |
| resume_id | No | Existing Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted. | |
| export_pdf | No | Return the finished PDF with tailoring (default true). Set false for analysis only. If export fails, retry civify_generate_pdf with the returned tailoredCv; never repeat tailoring just to obtain a PDF. | |
| file_base64 | No | Base64 encoded resume file content (PDF, DOCX). Recommended for remote/cloud MCP servers. | |
| resume_data | No | Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data. | |
| resume_text | No | Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content. | |
| company_name | No | Target company name. | |
| include_roadmap | No | Whether to generate a preparation roadmap. | |
| job_description | Yes | Complete target job description. | |
| generate_cover_letter | No | Whether to generate a matching tailored cover letter. | |
| include_interview_questions | No | Whether to generate matching interview prep questions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the operation may consume AI credits and warns against repeating tailoring, which implies a costly or side-effecting operation. It also reveals the failure behavior: if PDF generation fails, tailoredCv is preserved for export-only retry. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it leads with the core purpose and outputs, then offers actionable usage rules. Every sentence adds critical guidance without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 17-parameter tool with nested objects and an output schema, the description covers the essential workflow, cost implications, retry behavior, and relationship to parsing. The schema property descriptions further fill in parameter-level details, so nothing critical is missing for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by specifying a preference order among the input alternatives (resume_data first, then original document/text), which the anyOf schema alone does not convey. It also clarifies that repeated tailoring is not the remedy for PDF issues, reinforcing the export_pdf parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Tailor a CV to a job') and names the concrete deliverables: tailoredCv, ATS feedback, and a finished PDF by default. This distinguishes it from siblings like civify_parse_cv, civify_generate_pdf, and civify_score_ats by clarifying that this tool combines tailoring with ATS feedback and PDF output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit selection guidance: prefer resume_data if already extracted, otherwise send one original document or text input. It also gives clear exclusions and fallbacks: 'Do not call parse first', 'Do not automatically repeat tailoring', and retry PDF export via generate_pdf on failure. These instructions directly help an agent decide when and how to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
civify_track_applicationTrack Job ApplicationBInspect
Record a job application in the candidate's Civify Kanban tracker board.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes, interview dates, or recruiter contacts. | |
| status | No | Application lifecycle status. | APPLIED |
| job_url | No | URL of the job posting. | |
| job_title | Yes | Target role / job title. | |
| company_name | Yes | Name of the target company. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds no behavioral context beyond the 'record' action, failing to disclose that repeated calls will create duplicate entries (non-idempotent).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action and target. There is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create-like tool, the description is minimally adequate: the schema covers parameters and the annotations cover safety. However, it omits the non-idempotent behavior and doesn't clarify whether it always creates a new record or could update an existing one, leaving a gap for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all five parameters described. The description does not add parameter-specific semantics, but the baseline of 3 applies since the schema already carries the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Record' and names the resource ('job application in the candidate's Civify Kanban tracker board'). This clearly states what the tool does and functionally differentiates it from siblings like civify_list_applications, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no contextual guidance on when to use this tool versus alternatives such as civify_list_applications, nor does it state prerequisites or exclusions. The agent must infer usage from the tool's name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
- Changed
civify_check_cv_entitlement1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Changed
civify_get_account1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override for this call.", - "type": "string" -}
- Changed
civify_list_applications1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Removed
civify_login - Removed
civify_logout - Changed
civify_mask_pii1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Changed
civify_parse_cv1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Changed
civify_purchase_cv_pass1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Removed
civify_register - Changed
civify_score_ats1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Changed
civify_scrape_job1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Removed
civify_set_api_key - Changed
civify_tailor_cv1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Changed
civify_track_application1 field changed- removed
Input schema / properties / api_keyRemoved value: -{ - "description": "Optional API key override.", - "type": "string" -}
- Removed
civify_verify_2fa
3 tool updates
- Changed
civify_generate_pdf8 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"Primary accent color in hex (e.g. '#2563eb' or '#000000')."New value: +"PDF accent color in six-digit hex." - added
Input schema / properties / color / patternAdded value: +"^#[0-9a-fA-F]{6}$" - changed
Input schema / properties / resume_data / descriptionPrevious value: -"Complete structured resume JSON."New value: +"Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data." - added
Input schema / properties / resume_data / propertiesAdded value: +{ + "metadata": { + "description": "Optional renderer settings, such as templateId and primaryColor.", + "type": "object" + }, + "personalInfo": { + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "country": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "fullName": { + "type": [ + "string", + "null" + ] + }, + "github": { + "type": [ + "string", + "null" + ] + }, + "jobTitle": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "website": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "sections": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "items": { + "items": { + "properties": { + "date": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "subtitle": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "order": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "type": { + "description": "experience, education, skills, or custom", + "type": "string" + }, + "visible": { + "type": "boolean" + } + }, + "required": [ + "type", + "items" + ], + "type": "object" + }, + "type": "array" + } +} - added
Input schema / properties / resume_data / requiredAdded value: +[ + "personalInfo", + "sections" +] - added
Input schema / properties / resume_idAdded value: +{ + "description": "Existing Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted.", + "maxLength": 128, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / template / descriptionPrevious value: -"Template design: 'modern', 'classic', 'minimal', 'executive'. Default is 'modern'."New value: +"PDF layout." - added
Input schema / properties / template / enumAdded value: +[ + "modern", + "classic", + "creative", + "executive", + "minimal", + "ats" +]
- Changed
civify_score_ats3 fields changed- changed
Input schema / properties / resume_data / descriptionPrevious value: -"Structured resume JSON data."New value: +"Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data." - added
Input schema / properties / resume_data / propertiesAdded value: +{ + "metadata": { + "description": "Optional renderer settings, such as templateId and primaryColor.", + "type": "object" + }, + "personalInfo": { + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "country": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "fullName": { + "type": [ + "string", + "null" + ] + }, + "github": { + "type": [ + "string", + "null" + ] + }, + "jobTitle": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "website": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "sections": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "items": { + "items": { + "properties": { + "date": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "subtitle": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "order": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "type": { + "description": "experience, education, skills, or custom", + "type": "string" + }, + "visible": { + "type": "boolean" + } + }, + "required": [ + "type", + "items" + ], + "type": "object" + }, + "type": "array" + } +} - added
Input schema / properties / resume_data / requiredAdded value: +[ + "personalInfo", + "sections" +]
- Changed
civify_tailor_cv11 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "file" - ] - }, - { - "required": [ - "file_url" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "resume_data" + ] + }, + { + "required": [ + "file" + ] + }, + { + "required": [ + "file_url" + ] + } +] - added
Input schema / properties / colorAdded value: +{ + "default": "#000000", + "description": "PDF accent color in six-digit hex.", + "pattern": "^#[0-9a-fA-F]{6}$", + "type": "string" +} - added
Input schema / properties / export_pdfAdded value: +{ + "default": true, + "description": "Return the finished PDF with tailoring (default true). Set false for analysis only. If export fails, retry civify_generate_pdf with the returned tailoredCv; never repeat tailoring just to obtain a PDF.", + "type": "boolean" +} - changed
Input schema / properties / job_description / descriptionPrevious value: -"The full text of the job description to tailor against."New value: +"Complete target job description." - added
Input schema / properties / job_description / minLengthAdded value: +1 - added
Input schema / properties / job_description / patternAdded value: +"\\S" - added
Input schema / properties / resume_dataAdded value: +{ + "description": "Civify ResumeData extracted by you or returned by Civify. Preserve all real details; never invent achievements. Use personalInfo for contact/summary and sections[].items for experience, education and skills. No parse call is required when you have this data.", + "properties": { + "metadata": { + "description": "Optional renderer settings, such as templateId and primaryColor.", + "type": "object" + }, + "personalInfo": { + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "country": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "fullName": { + "type": [ + "string", + "null" + ] + }, + "github": { + "type": [ + "string", + "null" + ] + }, + "jobTitle": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "website": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "sections": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "items": { + "items": { + "properties": { + "date": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "subtitle": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "visible": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "order": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "type": { + "description": "experience, education, skills, or custom", + "type": "string" + }, + "visible": { + "type": "boolean" + } + }, + "required": [ + "type", + "items" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "personalInfo", + "sections" + ], + "type": "object" +} - added
Input schema / properties / resume_idAdded value: +{ + "description": "Existing Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted.", + "maxLength": 128, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / templateAdded value: +{ + "default": "modern", + "description": "PDF layout.", + "enum": [ + "modern", + "classic", + "creative", + "executive", + "minimal", + "ats" + ], + "type": "string" +} - added
Output schema / properties / data / propertiesAdded value: +{ + "document": { + "properties": { + "download_url": { + "description": "Return this clickable PDF URL promptly.", + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "path": { + "type": "string" + }, + "pdf_base64": { + "type": "string" + }, + "retry_tool": { + "type": "string" + }, + "status": { + "enum": [ + "SUCCESS", + "EXPORT_FAILED", + "NOT_REQUESTED" + ], + "type": "string" + } + }, + "type": "object" + }, + "error": { + "type": "object" + }, + "request_id": { + "description": "Correlation ID for support; not an idempotency key.", + "type": "string" + }, + "tailoredCv": { + "description": "Completed canonical resume data. Preserve for editing and export retries.", + "type": "object" + } +} - added
Output schema / properties / data / typeAdded value: +"object"
18 tool updates
- Changed
civify_check_cv_entitlement7 fields changed- removed
Output schema / properties / canDownloadUnwatermarkedRemoved value: -{ - "description": "Permission to export PDF without watermark", - "type": "boolean" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / expiresAtRemoved value: -{ - "description": "ISO timestamp when the active pass expires", - "type": "string" -} - removed
Output schema / properties / hasActivePassRemoved value: -{ - "description": "Whether the resume has an active 30-day unwatermarked pass", - "type": "boolean" -} - removed
Output schema / properties / resumeIdRemoved value: -{ - "description": "ID of the checked resume", - "type": "string" -} - removed
Output schema / properties / unlimitedEditsRemainingDaysRemoved value: -{ - "description": "Remaining days of unlimited editing", - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "resumeId", - "hasActivePass" -]New value: +[ + "data" +]
- Changed
civify_generate_pdf7 fields changed- removed
Input schema / properties / output_pathRemoved value: -{ - "description": "Local file path to save the resulting PDF.", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Confirmation message", - "type": "string" -} - removed
Output schema / properties / pathRemoved value: -{ - "description": "Filesystem path to the exported PDF document", - "type": "string" -} - removed
Output schema / properties / pdf_base64Removed value: -{ - "description": "Base64 encoded PDF document", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Export status (SUCCESS)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_get_account8 fields changed- removed
Output schema / properties / aiTokensBalanceRemoved value: -{ - "description": "Remaining AI token balance", - "type": "number" -} - removed
Output schema / properties / creditsBalanceRemoved value: -{ - "description": "Remaining CV credits balance", - "type": "number" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / emailRemoved value: -{ - "description": "Account email address", - "type": "string" -} - removed
Output schema / properties / idRemoved value: -{ - "description": "User ID", - "type": "string" -} - removed
Output schema / properties / subscriptionTierRemoved value: -{ - "description": "Subscription plan (FREE, PRO, PREMIUM, ENTERPRISE)", - "type": "string" -} - removed
Output schema / properties / usernameRemoved value: -{ - "description": "Username", - "type": "string" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_get_pay_per_cv_pricing6 fields changed- removed
Output schema / properties / currencyRemoved value: -{ - "description": "Default base currency (USD)", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / exchangeRateRemoved value: -{ - "description": "Current currency exchange rate applied", - "type": "number" -} - removed
Output schema / properties / productsRemoved value: -{ - "description": "Available Pay-Per-CV packages", - "items": { - "properties": { - "features": { - "description": "List of included package features and benefits", - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "description": "Product ID (PAY_PER_CV_SINGLE or PAY_PER_CV_PACK3)", - "type": "string" - }, - "name": { - "description": "Product display name", - "type": "string" - }, - "priceRegional": { - "description": "Converted regional price in localized currency", - "type": "number" - }, - "priceUsd": { - "description": "Base price in USD", - "type": "number" - } - }, - "required": [ - "id", - "priceUsd" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / regionalCurrencyRemoved value: -{ - "description": "Localized currency detected from GeoIP (e.g. EGP)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "currency", - "products" -]New value: +[ + "data" +]
- Added
civify_get_started - Changed
civify_list_applications4 fields changed- removed
Output schema / properties / applicationsRemoved value: -{ - "description": "List of tracked applications", - "items": { - "properties": { - "companyName": { - "description": "Target company", - "type": "string" - }, - "id": { - "description": "Application ID", - "type": "string" - }, - "jobTitle": { - "description": "Job title", - "type": "string" - }, - "jobUrl": { - "description": "Job posting link", - "type": "string" - }, - "notes": { - "description": "Application notes", - "type": "string" - }, - "status": { - "description": "Current status", - "type": "string" - } - }, - "required": [ - "id", - "companyName", - "jobTitle", - "status" - ], - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / totalRemoved value: -{ - "description": "Total count of tracked applications", - "type": "number" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_login8 fields changed- removed
Output schema / properties / action_requiredRemoved value: -{ - "description": "Next action required if 2FA is needed", - "type": "string" -} - removed
Output schema / properties / apiKeyPreviewRemoved value: -{ - "description": "Masked preview of the auto-generated API key", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Status message", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Authentication status (AUTHENTICATED or 2FA_REQUIRED)", - "type": "string" -} - removed
Output schema / properties / userRemoved value: -{ - "description": "User profile information", - "properties": { - "email": { - "description": "User email", - "type": "string" - }, - "id": { - "description": "User ID", - "type": "string" - }, - "username": { - "description": "User username", - "type": "string" - } - }, - "type": "object" -} - removed
Output schema / properties / usernameRemoved value: -{ - "description": "Username for pending 2FA verification", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_logout4 fields changed- added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Confirmation message", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Status code (LOGGED_OUT)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_mask_pii13 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "file" + ] + }, + { + "required": [ + "file_url" + ] + }, + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + } +] - added
Input schema / properties / fileAdded value: +{ + "additionalProperties": false, + "description": "A user-selected chat attachment supplied by the client. Never invent a download URL or file ID.", + "properties": { + "download_url": { + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - added
Input schema / properties / file_urlAdded value: +{ + "description": "Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.", + "type": "string" +} - added
Input schema / properties / filenameAdded value: +{ + "description": "Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.", + "type": "string" +} - removed
Input schema / properties / output_pathRemoved value: -{ - "description": "Optional destination path on the server to save the masked PDF.", - "type": "string" -} - added
Input schema / properties / resume_textAdded value: +{ + "description": "Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content.", + "minLength": 1, + "type": "string" +} - removed
Input schema / properties / server_file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'file_base64' instead.", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Details on the exported sanitized document", - "type": "string" -} - removed
Output schema / properties / pathRemoved value: -{ - "description": "Filesystem path to saved masked PDF", - "type": "string" -} - removed
Output schema / properties / pdf_base64Removed value: -{ - "description": "Base64 encoded masked PDF if saved to memory", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Redaction status (SUCCESS)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_parse_cv20 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "server_file_path" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "file" + ] + }, + { + "required": [ + "file_url" + ] + } +] - added
Input schema / properties / fileAdded value: +{ + "additionalProperties": false, + "description": "A user-selected chat attachment supplied by the client. Never invent a download URL or file ID.", + "properties": { + "download_url": { + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - added
Input schema / properties / file_urlAdded value: +{ + "description": "Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.", + "type": "string" +} - removed
Input schema / properties / filename / defaultRemoved value: -"resume.pdf" - changed
Input schema / properties / filename / descriptionPrevious value: -"Filename when providing base64 (e.g., 'resume.pdf')."New value: +"Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted." - changed
Input schema / properties / resume_text / descriptionPrevious value: -"Plain text or markdown content of the resume. Easiest option when chatting with an AI agent."New value: +"Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content." - added
Input schema / properties / resume_text / minLengthAdded value: +1 - removed
Input schema / properties / server_file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", - "type": "string" -} - removed
Output schema / properties / contactRemoved value: -{ - "description": "Candidate contact information (name, email, phone, location, links)", - "type": "object" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / detectedLanguageRemoved value: -{ - "description": "Primary detected language code (e.g., 'en', 'ar')", - "type": "string" -} - removed
Output schema / properties / educationRemoved value: -{ - "description": "Academic degrees and certifications", - "items": { - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / experienceRemoved value: -{ - "description": "Chronological employment history", - "items": { - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Diagnostic or status message", - "type": "string" -} - removed
Output schema / properties / projectsRemoved value: -{ - "description": "Key projects and achievements", - "items": { - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / resumeDataRemoved value: -{ - "description": "Parsed resume sections including contact, experience, education, skills, and projects", - "type": "object" -} - removed
Output schema / properties / skillsRemoved value: -{ - "description": "Technical and domain skills extracted", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / successRemoved value: -{ - "description": "Whether the document was successfully parsed", - "type": "boolean" -} - removed
Output schema / properties / summaryRemoved value: -{ - "description": "Professional summary statement", - "type": "string" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_purchase_cv_pass8 fields changed- removed
Output schema / properties / amountRemoved value: -{ - "description": "Total charge amount", - "type": "number" -} - removed
Output schema / properties / currencyRemoved value: -{ - "description": "Charge currency code (USD or EGP)", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / gatewayRemoved value: -{ - "description": "Assigned payment gateway (paymob, fawaterak, dodo)", - "type": "string" -} - removed
Output schema / properties / invoiceIdRemoved value: -{ - "description": "Unique transaction invoice reference", - "type": "string" -} - removed
Output schema / properties / paymentUrlRemoved value: -{ - "description": "Direct checkout or payment redirect URL", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Initial order status (PENDING)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "invoiceId", - "paymentUrl" -]New value: +[ + "data" +]
- Changed
civify_register6 fields changed- removed
Output schema / properties / action_requiredRemoved value: -{ - "description": "Next step required if email verification link was sent", - "type": "string" -} - removed
Output schema / properties / apiKeyPreviewRemoved value: -{ - "description": "Masked preview of API key if auto-verified", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Status message", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Registration status (AUTHENTICATED or REGISTERED_VERIFICATION_REQUIRED)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_score_ats18 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "server_file_path" - ] - }, - { - "required": [ - "resume_data" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "resume_data" + ] + }, + { + "required": [ + "file" + ] + }, + { + "required": [ + "file_url" + ] + } +] - added
Input schema / properties / fileAdded value: +{ + "additionalProperties": false, + "description": "A user-selected chat attachment supplied by the client. Never invent a download URL or file ID.", + "properties": { + "download_url": { + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - added
Input schema / properties / file_urlAdded value: +{ + "description": "Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.", + "type": "string" +} - removed
Input schema / properties / filename / defaultRemoved value: -"resume.pdf" - changed
Input schema / properties / filename / descriptionPrevious value: -"Filename when providing base64 (e.g. 'resume.pdf')."New value: +"Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted." - changed
Input schema / properties / resume_text / descriptionPrevious value: -"Plain text or markdown content of the resume. Easiest option when chatting with an AI agent."New value: +"Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content." - added
Input schema / properties / resume_text / minLengthAdded value: +1 - removed
Input schema / properties / server_file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", - "type": "string" -} - removed
Output schema / properties / data / descriptionRemoved value: -"ATS score details containing overall, keywordMatch, skillsMatch, missingKeywords, and suggestions" - removed
Output schema / properties / data / typeRemoved value: -"object" - removed
Output schema / properties / keywordMatchRemoved value: -{ - "description": "Keyword density and match score (0-100)", - "type": "number" -} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Status message", - "type": "string" -} - removed
Output schema / properties / missingKeywordsRemoved value: -{ - "description": "Important keywords missing from the resume", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / overallRemoved value: -{ - "description": "Overall ATS match score (0-100)", - "type": "number" -} - removed
Output schema / properties / skillsMatchRemoved value: -{ - "description": "Skills section alignment score (0-100)", - "type": "number" -} - removed
Output schema / properties / successRemoved value: -{ - "description": "Operation success status", - "type": "boolean" -} - removed
Output schema / properties / suggestionsRemoved value: -{ - "description": "Actionable recommendations to improve ATS compatibility", - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_scrape_job9 fields changed- removed
Output schema / properties / companyRemoved value: -{ - "description": "Hiring organization or employer name", - "type": "string" -} - removed
Output schema / properties / contentRemoved value: -{ - "description": "Raw scraped job description text content", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / descriptionRemoved value: -{ - "description": "Cleaned job description text", - "type": "string" -} - removed
Output schema / properties / locationRemoved value: -{ - "description": "Job location or Remote status", - "type": "string" -} - removed
Output schema / properties / requirementsRemoved value: -{ - "description": "Extracted job requirements and qualifications", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / responsibilitiesRemoved value: -{ - "description": "Extracted day-to-day duties and responsibilities", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / titleRemoved value: -{ - "description": "Extracted job title", - "type": "string" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_set_api_key5 fields changed- added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Confirmation message", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Authentication status (AUTHENTICATED)", - "type": "string" -} - removed
Output schema / properties / userRemoved value: -{ - "description": "Authenticated user profile details", - "properties": { - "email": { - "description": "User email address", - "type": "string" - }, - "id": { - "description": "User ID", - "type": "string" - }, - "subscriptionTier": { - "description": "Subscription tier level", - "type": "string" - }, - "username": { - "description": "User account username", - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
- Changed
civify_tailor_cv20 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "server_file_path" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "file" + ] + }, + { + "required": [ + "file_url" + ] + } +] - added
Input schema / properties / fileAdded value: +{ + "additionalProperties": false, + "description": "A user-selected chat attachment supplied by the client. Never invent a download URL or file ID.", + "properties": { + "download_url": { + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - added
Input schema / properties / file_urlAdded value: +{ + "description": "Actual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.", + "type": "string" +} - removed
Input schema / properties / filename / defaultRemoved value: -"resume.pdf" - changed
Input schema / properties / filename / descriptionPrevious value: -"Filename when providing base64 content (e.g. 'resume.pdf')."New value: +"Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted." - changed
Input schema / properties / resume_text / descriptionPrevious value: -"Plain text or markdown content of the candidate's resume. Easiest option when chatting with an AI agent."New value: +"Complete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content." - added
Input schema / properties / resume_text / minLengthAdded value: +1 - removed
Input schema / properties / server_file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", - "type": "string" -} - removed
Output schema / properties / atsScoreRemoved value: -{ - "description": "Audit score for tailored version", - "properties": { - "keywordMatch": { - "description": "Keyword match score 0-100", - "type": "number" - }, - "missingKeywords": { - "description": "Keywords still missing", - "items": { - "type": "string" - }, - "type": "array" - }, - "overall": { - "description": "Overall score 0-100", - "type": "number" - }, - "skillsMatch": { - "description": "Skills match score 0-100", - "type": "number" - } - }, - "type": "object" -} - removed
Output schema / properties / changesRemoved value: -{ - "description": "Summary list of bullet points and sections tailored", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / coverLetterRemoved value: -{ - "description": "Matching personalized cover letter text if requested", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / interviewPrepRemoved value: -{ - "description": "Targeted interview preparation questions and talking points", - "type": "object" -} - removed
Output schema / properties / originalAtsScoreRemoved value: -{ - "description": "Original ATS score before tailoring for comparison", - "type": "object" -} - removed
Output schema / properties / roadmapRemoved value: -{ - "description": "Targeted skill acquisition roadmap", - "type": "object" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Execution status", - "type": "string" -} - removed
Output schema / properties / tailoredCvRemoved value: -{ - "description": "Optimized resume document structure", - "type": "object" -} - removed
Output schema / properties / tailoredResumeRemoved value: -{ - "description": "Optimized resume document structure", - "type": "object" -} - removed
Output schema / properties / validationWarningsRemoved value: -{ - "description": "Validation warnings or alignment notes", - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / requiredAdded value: +[ + "data" +]
- Changed
civify_track_application8 fields changed- removed
Output schema / properties / companyNameRemoved value: -{ - "description": "Company name", - "type": "string" -} - removed
Output schema / properties / createdAtRemoved value: -{ - "description": "Creation timestamp", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / idRemoved value: -{ - "description": "Unique identifier for the tracked application", - "type": "string" -} - removed
Output schema / properties / jobTitleRemoved value: -{ - "description": "Job title", - "type": "string" -} - removed
Output schema / properties / notesRemoved value: -{ - "description": "Candidate notes and timeline details", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Kanban status (EVALUATED, APPLIED, INTERVIEW, OFFER, REJECTED)", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "companyName", - "jobTitle", - "status" -]New value: +[ + "data" +]
- Changed
civify_verify_2fa6 fields changed- removed
Output schema / properties / apiKeyPreviewRemoved value: -{ - "description": "Masked preview of the provisioned API key", - "type": "string" -} - added
Output schema / properties / dataAdded value: +{} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Status confirmation message", - "type": "string" -} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Authentication status (AUTHENTICATED)", - "type": "string" -} - removed
Output schema / properties / userRemoved value: -{ - "description": "Authenticated user profile", - "properties": { - "email": { - "description": "User email", - "type": "string" - }, - "id": { - "description": "User ID", - "type": "string" - }, - "username": { - "description": "User username", - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "status", - "message" -]New value: +[ + "data" +]
4 tool updates
- Changed
civify_mask_pii4 fields changed- changed
Input schema / properties / file_base64 / descriptionPrevious value: -"Base64 encoded resume file."New value: +"Base64 encoded resume file (PDF, DOCX). Recommended for remote/cloud MCP servers." - removed
Input schema / properties / file_pathRemoved value: -{ - "description": "Path to resume file to redact.", - "type": "string" -} - changed
Input schema / properties / output_path / descriptionPrevious value: -"Optional destination path to save the masked PDF."New value: +"Optional destination path on the server to save the masked PDF." - added
Input schema / properties / server_file_pathAdded value: +{ + "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'file_base64' instead.", + "type": "string" +}
- Changed
civify_parse_cv3 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "file_path" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "server_file_path" + ] + } +] - removed
Input schema / properties / file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. Do NOT use for remote cloud servers; use 'resume_text' or 'file_base64' instead.", - "type": "string" -} - added
Input schema / properties / server_file_pathAdded value: +{ + "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", + "type": "string" +}
- Changed
civify_score_ats3 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "file_path" - ] - }, - { - "required": [ - "resume_data" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "server_file_path" + ] + }, + { + "required": [ + "resume_data" + ] + } +] - removed
Input schema / properties / file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. Do NOT use for remote cloud servers; use 'resume_text' or 'file_base64' instead.", - "type": "string" -} - added
Input schema / properties / server_file_pathAdded value: +{ + "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", + "type": "string" +}
- Changed
civify_tailor_cv3 fields changed- changed
Input schema / anyOfPrevious value: -[ - { - "required": [ - "resume_text" - ] - }, - { - "required": [ - "file_base64" - ] - }, - { - "required": [ - "file_path" - ] - } -]New value: +[ + { + "required": [ + "resume_text" + ] + }, + { + "required": [ + "file_base64" + ] + }, + { + "required": [ + "server_file_path" + ] + } +] - removed
Input schema / properties / file_pathRemoved value: -{ - "description": "Local file path on the MCP server machine. Do NOT use for remote cloud servers; use 'resume_text' or 'file_base64' instead.", - "type": "string" -} - added
Input schema / properties / server_file_pathAdded value: +{ + "description": "Local file path on the MCP server machine. For local CLI/stdio usage only. In ChatGPT or Claude, pass 'resume_text' or 'file_base64' instead.", + "type": "string" +}
17 tool updates
- First observed
civify_check_cv_entitlement - First observed
civify_generate_pdf - First observed
civify_get_account - First observed
civify_get_pay_per_cv_pricing - First observed
civify_list_applications - First observed
civify_login - First observed
civify_logout - First observed
civify_mask_pii - First observed
civify_parse_cv - First observed
civify_purchase_cv_pass - First observed
civify_register - First observed
civify_score_ats - First observed
civify_scrape_job - First observed
civify_set_api_key - First observed
civify_tailor_cv - First observed
civify_track_application - First observed
civify_verify_2fa
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1624 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs1114 npm40 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.