Skip to main content
Glama

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.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
90.8% over 24 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
civify_check_cv_entitlementCheck Resume Pass EntitlementA
Read-onlyIdempotent
Inspect

Check if a specific resume currently has an active 30-day unwatermarked pass and unlimited edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
resume_idYesResume UUID or ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 PDFA
Idempotent
Inspect

Render and generate a high-fidelity PDF from structured resume data using Civify's template engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoPDF accent color in six-digit hex.#000000
filenameNoFilename for the exported PDF.resume
templateNoPDF layout.modern
resume_idNoExisting Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted.
resume_dataYesCivify 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

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 & QuotasA
Read-onlyIdempotent
Inspect

Get current authenticated user account profile, subscription tier, remaining AI token balance, and CV credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states a specific verb ('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.

Usage Guidelines2/5

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 PricingA
Read-onlyIdempotent
Inspect

Get public localized Pay-Per-CV pricing (USD base price, converted EGP regional pricing, exchange rates, and entitlement details). Public, no auth required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_startedA
Read-onlyIdempotent
Inspect

Start here for Civify capabilities, account connection, costs, supported resume inputs and career workflow guidance. Public; no account required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 ApplicationsA
Read-onlyIdempotent
Inspect

List all tracked job applications from the candidate's Civify Kanban board.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA user-selected chat attachment supplied by the client. Never invent a download URL or file ID.
file_urlNoActual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.
filenameNoOriginal filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.
file_base64NoBase64 encoded resume file (PDF, DOCX). Recommended for remote/cloud MCP servers.
resume_textNoComplete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA user-selected chat attachment supplied by the client. Never invent a download URL or file ID.
file_urlNoActual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.
filenameNoOriginal filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.
languageNoLanguage code (e.g. 'en', 'ar', 'auto'). Default is 'auto'.auto
file_base64NoBase64 encoded content of the resume document (PDF, DOCX). Recommended for remote/cloud MCP servers.
resume_textNoComplete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states a specific verb ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoPayment method: 'CARD' or 'WALLET'.CARD
gatewayNoPayment gateway ('paymob', 'fawaterak', 'dodo'). Auto-resolved by region if omitted.
resume_idNoOptional resume ID to immediately bind the single-pass entitlement to.
product_idNoProduct to purchase: 'PAY_PER_CV_SINGLE' ($2.99 / ~150 EGP) or 'PAY_PER_CV_PACK3' ($6.99 / ~350 EGP).PAY_PER_CV_SINGLE
promo_codeNoOptional discount promo code.
phone_numberNoMobile wallet number (required for Egyptian mobile wallets like Vodafone Cash).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA user-selected chat attachment supplied by the client. Never invent a download URL or file ID.
file_urlNoActual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.
filenameNoOriginal filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.
file_base64NoBase64 encoded content of the resume document (PDF, DOCX). Recommended for remote/cloud MCP servers.
resume_dataNoCivify 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_textNoComplete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 URLA
Read-onlyIdempotent
Inspect

Scrape and extract structured job description, company name, requirements, and responsibilities from a job URL (LinkedIn, Greenhouse, Lever, Ashby, Wuzzuf, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the job posting.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA user-selected chat attachment supplied by the client. Never invent a download URL or file ID.
colorNoPDF accent color in six-digit hex.#000000
file_urlNoActual HTTPS download URL supplied by the client or user. Never use a sandbox path, file ID alone or an invented URL.
filenameNoOriginal filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.
languageNoLanguage code (e.g., 'en', 'ar').
templateNoPDF layout.modern
job_titleNoTarget job title.
resume_idNoExisting Civify resume ID, if known, to apply its export entitlement. Never invent an ID. Account policy applies when omitted.
export_pdfNoReturn 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_base64NoBase64 encoded resume file content (PDF, DOCX). Recommended for remote/cloud MCP servers.
resume_dataNoCivify 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_textNoComplete resume text read from the attachment. Preferred fallback when the client cannot forward bytes. Do not summarize or invent missing content.
company_nameNoTarget company name.
include_roadmapNoWhether to generate a preparation roadmap.
job_descriptionYesComplete target job description.
generate_cover_letterNoWhether to generate a matching tailored cover letter.
include_interview_questionsNoWhether to generate matching interview prep questions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoNotes, interview dates, or recruiter contacts.
statusNoApplication lifecycle status.APPLIED
job_urlNoURL of the job posting.
job_titleYesTarget role / job title.
company_nameYesName of the target company.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 15 tool updates
    • Changedcivify_check_cv_entitlement1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Changedcivify_get_account1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override for this call.",
        -  "type": "string"
        -}
    • Changedcivify_list_applications1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Removedcivify_login
    • Removedcivify_logout
    • Changedcivify_mask_pii1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Changedcivify_parse_cv1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Changedcivify_purchase_cv_pass1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Removedcivify_register
    • Changedcivify_score_ats1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Changedcivify_scrape_job1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Removedcivify_set_api_key
    • Changedcivify_tailor_cv1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Changedcivify_track_application1 field changed
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Optional API key override.",
        -  "type": "string"
        -}
    • Removedcivify_verify_2fa
  2. 3 tool updates
    • Changedcivify_generate_pdf8 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"Primary accent color in hex (e.g. '#2563eb' or '#000000')."New value: +"PDF accent color in six-digit hex."
      • addedInput schema / properties / color / pattern
        Added value: +"^#[0-9a-fA-F]{6}$"
      • changedInput schema / properties / resume_data / description
        Previous 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."
      • addedInput schema / properties / resume_data / properties
        Added 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"
        +  }
        +}
      • addedInput schema / properties / resume_data / required
        Added value: +[
        +  "personalInfo",
        +  "sections"
        +]
      • addedInput schema / properties / resume_id
        Added 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"
        +}
      • changedInput schema / properties / template / description
        Previous value: -"Template design: 'modern', 'classic', 'minimal', 'executive'. Default is 'modern'."New value: +"PDF layout."
      • addedInput schema / properties / template / enum
        Added value: +[
        +  "modern",
        +  "classic",
        +  "creative",
        +  "executive",
        +  "minimal",
        +  "ats"
        +]
    • Changedcivify_score_ats3 fields changed
      • changedInput schema / properties / resume_data / description
        Previous 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."
      • addedInput schema / properties / resume_data / properties
        Added 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"
        +  }
        +}
      • addedInput schema / properties / resume_data / required
        Added value: +[
        +  "personalInfo",
        +  "sections"
        +]
    • Changedcivify_tailor_cv11 fields changed
      • changedInput schema / anyOf
        Previous 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"
        +    ]
        +  }
        +]
      • addedInput schema / properties / color
        Added value: +{
        +  "default": "#000000",
        +  "description": "PDF accent color in six-digit hex.",
        +  "pattern": "^#[0-9a-fA-F]{6}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / export_pdf
        Added 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"
        +}
      • changedInput schema / properties / job_description / description
        Previous value: -"The full text of the job description to tailor against."New value: +"Complete target job description."
      • addedInput schema / properties / job_description / minLength
        Added value: +1
      • addedInput schema / properties / job_description / pattern
        Added value: +"\\S"
      • addedInput schema / properties / resume_data
        Added 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"
        +}
      • addedInput schema / properties / resume_id
        Added 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"
        +}
      • addedInput schema / properties / template
        Added value: +{
        +  "default": "modern",
        +  "description": "PDF layout.",
        +  "enum": [
        +    "modern",
        +    "classic",
        +    "creative",
        +    "executive",
        +    "minimal",
        +    "ats"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / data / type
        Added value: +"object"
  3. 18 tool updates
    • Changedcivify_check_cv_entitlement7 fields changed
      • removedOutput schema / properties / canDownloadUnwatermarked
        Removed value: -{
        -  "description": "Permission to export PDF without watermark",
        -  "type": "boolean"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / expiresAt
        Removed value: -{
        -  "description": "ISO timestamp when the active pass expires",
        -  "type": "string"
        -}
      • removedOutput schema / properties / hasActivePass
        Removed value: -{
        -  "description": "Whether the resume has an active 30-day unwatermarked pass",
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / resumeId
        Removed value: -{
        -  "description": "ID of the checked resume",
        -  "type": "string"
        -}
      • removedOutput schema / properties / unlimitedEditsRemainingDays
        Removed value: -{
        -  "description": "Remaining days of unlimited editing",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "resumeId",
        -  "hasActivePass"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_generate_pdf7 fields changed
      • removedInput schema / properties / output_path
        Removed value: -{
        -  "description": "Local file path to save the resulting PDF.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Confirmation message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / path
        Removed value: -{
        -  "description": "Filesystem path to the exported PDF document",
        -  "type": "string"
        -}
      • removedOutput schema / properties / pdf_base64
        Removed value: -{
        -  "description": "Base64 encoded PDF document",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Export status (SUCCESS)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_get_account8 fields changed
      • removedOutput schema / properties / aiTokensBalance
        Removed value: -{
        -  "description": "Remaining AI token balance",
        -  "type": "number"
        -}
      • removedOutput schema / properties / creditsBalance
        Removed value: -{
        -  "description": "Remaining CV credits balance",
        -  "type": "number"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / email
        Removed value: -{
        -  "description": "Account email address",
        -  "type": "string"
        -}
      • removedOutput schema / properties / id
        Removed value: -{
        -  "description": "User ID",
        -  "type": "string"
        -}
      • removedOutput schema / properties / subscriptionTier
        Removed value: -{
        -  "description": "Subscription plan (FREE, PRO, PREMIUM, ENTERPRISE)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / username
        Removed value: -{
        -  "description": "Username",
        -  "type": "string"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_get_pay_per_cv_pricing6 fields changed
      • removedOutput schema / properties / currency
        Removed value: -{
        -  "description": "Default base currency (USD)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / exchangeRate
        Removed value: -{
        -  "description": "Current currency exchange rate applied",
        -  "type": "number"
        -}
      • removedOutput schema / properties / products
        Removed 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"
        -}
      • removedOutput schema / properties / regionalCurrency
        Removed value: -{
        -  "description": "Localized currency detected from GeoIP (e.g. EGP)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "currency",
        -  "products"
        -]New value: +[
        +  "data"
        +]
    • Addedcivify_get_started
    • Changedcivify_list_applications4 fields changed
      • removedOutput schema / properties / applications
        Removed 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"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / total
        Removed value: -{
        -  "description": "Total count of tracked applications",
        -  "type": "number"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_login8 fields changed
      • removedOutput schema / properties / action_required
        Removed value: -{
        -  "description": "Next action required if 2FA is needed",
        -  "type": "string"
        -}
      • removedOutput schema / properties / apiKeyPreview
        Removed value: -{
        -  "description": "Masked preview of the auto-generated API key",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Status message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Authentication status (AUTHENTICATED or 2FA_REQUIRED)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / user
        Removed 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"
        -}
      • removedOutput schema / properties / username
        Removed value: -{
        -  "description": "Username for pending 2FA verification",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_logout4 fields changed
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Confirmation message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Status code (LOGGED_OUT)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_mask_pii13 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "file"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "resume_text"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_base64"
        +    ]
        +  }
        +]
      • addedInput schema / properties / file
        Added 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"
        +}
      • addedInput schema / properties / file_url
        Added 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"
        +}
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Original filename for base64 data, including extension (PDF, DOCX, PNG or JPG). Inferred from bytes when omitted.",
        +  "type": "string"
        +}
      • removedInput schema / properties / output_path
        Removed value: -{
        -  "description": "Optional destination path on the server to save the masked PDF.",
        -  "type": "string"
        -}
      • addedInput schema / properties / resume_text
        Added 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"
        +}
      • removedInput schema / properties / server_file_path
        Removed 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"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Details on the exported sanitized document",
        -  "type": "string"
        -}
      • removedOutput schema / properties / path
        Removed value: -{
        -  "description": "Filesystem path to saved masked PDF",
        -  "type": "string"
        -}
      • removedOutput schema / properties / pdf_base64
        Removed value: -{
        -  "description": "Base64 encoded masked PDF if saved to memory",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Redaction status (SUCCESS)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_parse_cv20 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "resume_text"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "server_file_path"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "resume_text"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_url"
        +    ]
        +  }
        +]
      • addedInput schema / properties / file
        Added 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"
        +}
      • addedInput schema / properties / file_url
        Added 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"
        +}
      • removedInput schema / properties / filename / default
        Removed value: -"resume.pdf"
      • changedInput schema / properties / filename / description
        Previous 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."
      • changedInput schema / properties / resume_text / description
        Previous 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."
      • addedInput schema / properties / resume_text / minLength
        Added value: +1
      • removedInput schema / properties / server_file_path
        Removed 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"
        -}
      • removedOutput schema / properties / contact
        Removed value: -{
        -  "description": "Candidate contact information (name, email, phone, location, links)",
        -  "type": "object"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / detectedLanguage
        Removed value: -{
        -  "description": "Primary detected language code (e.g., 'en', 'ar')",
        -  "type": "string"
        -}
      • removedOutput schema / properties / education
        Removed value: -{
        -  "description": "Academic degrees and certifications",
        -  "items": {
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / experience
        Removed value: -{
        -  "description": "Chronological employment history",
        -  "items": {
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Diagnostic or status message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / projects
        Removed value: -{
        -  "description": "Key projects and achievements",
        -  "items": {
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / resumeData
        Removed value: -{
        -  "description": "Parsed resume sections including contact, experience, education, skills, and projects",
        -  "type": "object"
        -}
      • removedOutput schema / properties / skills
        Removed value: -{
        -  "description": "Technical and domain skills extracted",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / success
        Removed value: -{
        -  "description": "Whether the document was successfully parsed",
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / summary
        Removed value: -{
        -  "description": "Professional summary statement",
        -  "type": "string"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_purchase_cv_pass8 fields changed
      • removedOutput schema / properties / amount
        Removed value: -{
        -  "description": "Total charge amount",
        -  "type": "number"
        -}
      • removedOutput schema / properties / currency
        Removed value: -{
        -  "description": "Charge currency code (USD or EGP)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / gateway
        Removed value: -{
        -  "description": "Assigned payment gateway (paymob, fawaterak, dodo)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / invoiceId
        Removed value: -{
        -  "description": "Unique transaction invoice reference",
        -  "type": "string"
        -}
      • removedOutput schema / properties / paymentUrl
        Removed value: -{
        -  "description": "Direct checkout or payment redirect URL",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Initial order status (PENDING)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "invoiceId",
        -  "paymentUrl"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_register6 fields changed
      • removedOutput schema / properties / action_required
        Removed value: -{
        -  "description": "Next step required if email verification link was sent",
        -  "type": "string"
        -}
      • removedOutput schema / properties / apiKeyPreview
        Removed value: -{
        -  "description": "Masked preview of API key if auto-verified",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Status message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Registration status (AUTHENTICATED or REGISTERED_VERIFICATION_REQUIRED)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_score_ats18 fields changed
      • changedInput schema / anyOf
        Previous 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"
        +    ]
        +  }
        +]
      • addedInput schema / properties / file
        Added 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"
        +}
      • addedInput schema / properties / file_url
        Added 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"
        +}
      • removedInput schema / properties / filename / default
        Removed value: -"resume.pdf"
      • changedInput schema / properties / filename / description
        Previous 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."
      • changedInput schema / properties / resume_text / description
        Previous 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."
      • addedInput schema / properties / resume_text / minLength
        Added value: +1
      • removedInput schema / properties / server_file_path
        Removed 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"
        -}
      • removedOutput schema / properties / data / description
        Removed value: -"ATS score details containing overall, keywordMatch, skillsMatch, missingKeywords, and suggestions"
      • removedOutput schema / properties / data / type
        Removed value: -"object"
      • removedOutput schema / properties / keywordMatch
        Removed value: -{
        -  "description": "Keyword density and match score (0-100)",
        -  "type": "number"
        -}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Status message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / missingKeywords
        Removed value: -{
        -  "description": "Important keywords missing from the resume",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / overall
        Removed value: -{
        -  "description": "Overall ATS match score (0-100)",
        -  "type": "number"
        -}
      • removedOutput schema / properties / skillsMatch
        Removed value: -{
        -  "description": "Skills section alignment score (0-100)",
        -  "type": "number"
        -}
      • removedOutput schema / properties / success
        Removed value: -{
        -  "description": "Operation success status",
        -  "type": "boolean"
        -}
      • removedOutput schema / properties / suggestions
        Removed value: -{
        -  "description": "Actionable recommendations to improve ATS compatibility",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_scrape_job9 fields changed
      • removedOutput schema / properties / company
        Removed value: -{
        -  "description": "Hiring organization or employer name",
        -  "type": "string"
        -}
      • removedOutput schema / properties / content
        Removed value: -{
        -  "description": "Raw scraped job description text content",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "Cleaned job description text",
        -  "type": "string"
        -}
      • removedOutput schema / properties / location
        Removed value: -{
        -  "description": "Job location or Remote status",
        -  "type": "string"
        -}
      • removedOutput schema / properties / requirements
        Removed value: -{
        -  "description": "Extracted job requirements and qualifications",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / responsibilities
        Removed value: -{
        -  "description": "Extracted day-to-day duties and responsibilities",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / title
        Removed value: -{
        -  "description": "Extracted job title",
        -  "type": "string"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_set_api_key5 fields changed
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Confirmation message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Authentication status (AUTHENTICATED)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / user
        Removed 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"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_tailor_cv20 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "resume_text"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "server_file_path"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "resume_text"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_url"
        +    ]
        +  }
        +]
      • addedInput schema / properties / file
        Added 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"
        +}
      • addedInput schema / properties / file_url
        Added 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"
        +}
      • removedInput schema / properties / filename / default
        Removed value: -"resume.pdf"
      • changedInput schema / properties / filename / description
        Previous 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."
      • changedInput schema / properties / resume_text / description
        Previous 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."
      • addedInput schema / properties / resume_text / minLength
        Added value: +1
      • removedInput schema / properties / server_file_path
        Removed 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"
        -}
      • removedOutput schema / properties / atsScore
        Removed 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"
        -}
      • removedOutput schema / properties / changes
        Removed value: -{
        -  "description": "Summary list of bullet points and sections tailored",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / coverLetter
        Removed value: -{
        -  "description": "Matching personalized cover letter text if requested",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / interviewPrep
        Removed value: -{
        -  "description": "Targeted interview preparation questions and talking points",
        -  "type": "object"
        -}
      • removedOutput schema / properties / originalAtsScore
        Removed value: -{
        -  "description": "Original ATS score before tailoring for comparison",
        -  "type": "object"
        -}
      • removedOutput schema / properties / roadmap
        Removed value: -{
        -  "description": "Targeted skill acquisition roadmap",
        -  "type": "object"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Execution status",
        -  "type": "string"
        -}
      • removedOutput schema / properties / tailoredCv
        Removed value: -{
        -  "description": "Optimized resume document structure",
        -  "type": "object"
        -}
      • removedOutput schema / properties / tailoredResume
        Removed value: -{
        -  "description": "Optimized resume document structure",
        -  "type": "object"
        -}
      • removedOutput schema / properties / validationWarnings
        Removed value: -{
        -  "description": "Validation warnings or alignment notes",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / required
        Added value: +[
        +  "data"
        +]
    • Changedcivify_track_application8 fields changed
      • removedOutput schema / properties / companyName
        Removed value: -{
        -  "description": "Company name",
        -  "type": "string"
        -}
      • removedOutput schema / properties / createdAt
        Removed value: -{
        -  "description": "Creation timestamp",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / id
        Removed value: -{
        -  "description": "Unique identifier for the tracked application",
        -  "type": "string"
        -}
      • removedOutput schema / properties / jobTitle
        Removed value: -{
        -  "description": "Job title",
        -  "type": "string"
        -}
      • removedOutput schema / properties / notes
        Removed value: -{
        -  "description": "Candidate notes and timeline details",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Kanban status (EVALUATED, APPLIED, INTERVIEW, OFFER, REJECTED)",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "companyName",
        -  "jobTitle",
        -  "status"
        -]New value: +[
        +  "data"
        +]
    • Changedcivify_verify_2fa6 fields changed
      • removedOutput schema / properties / apiKeyPreview
        Removed value: -{
        -  "description": "Masked preview of the provisioned API key",
        -  "type": "string"
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Status confirmation message",
        -  "type": "string"
        -}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Authentication status (AUTHENTICATED)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / user
        Removed 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"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "status",
        -  "message"
        -]New value: +[
        +  "data"
        +]
  4. 4 tool updates
    • Changedcivify_mask_pii4 fields changed
      • changedInput schema / properties / file_base64 / description
        Previous value: -"Base64 encoded resume file."New value: +"Base64 encoded resume file (PDF, DOCX). Recommended for remote/cloud MCP servers."
      • removedInput schema / properties / file_path
        Removed value: -{
        -  "description": "Path to resume file to redact.",
        -  "type": "string"
        -}
      • changedInput schema / properties / output_path / description
        Previous value: -"Optional destination path to save the masked PDF."New value: +"Optional destination path on the server to save the masked PDF."
      • addedInput schema / properties / server_file_path
        Added 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"
        +}
    • Changedcivify_parse_cv3 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "resume_text"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_path"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "resume_text"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "server_file_path"
        +    ]
        +  }
        +]
      • removedInput schema / properties / file_path
        Removed 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"
        -}
      • addedInput schema / properties / server_file_path
        Added 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"
        +}
    • Changedcivify_score_ats3 fields changed
      • changedInput schema / anyOf
        Previous 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"
        +    ]
        +  }
        +]
      • removedInput schema / properties / file_path
        Removed 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"
        -}
      • addedInput schema / properties / server_file_path
        Added 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"
        +}
    • Changedcivify_tailor_cv3 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "resume_text"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "file_path"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "resume_text"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "server_file_path"
        +    ]
        +  }
        +]
      • removedInput schema / properties / file_path
        Removed 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"
        -}
      • addedInput schema / properties / server_file_path
        Added 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"
        +}
  5. 17 tool updates
    • First observedcivify_check_cv_entitlement
    • First observedcivify_generate_pdf
    • First observedcivify_get_account
    • First observedcivify_get_pay_per_cv_pricing
    • First observedcivify_list_applications
    • First observedcivify_login
    • First observedcivify_logout
    • First observedcivify_mask_pii
    • First observedcivify_parse_cv
    • First observedcivify_purchase_cv_pass
    • First observedcivify_register
    • First observedcivify_score_ats
    • First observedcivify_scrape_job
    • First observedcivify_set_api_key
    • First observedcivify_tailor_cv
    • First observedcivify_track_application
    • First observedcivify_verify_2fa

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    16
    24 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources