Skip to main content
Glama
TechnoLaps
by TechnoLaps

Civify MCP server

npm Smithery

The agent gateway for Civify: resume parsing, ATS scoring, job-specific tailoring, PII masking, PDF export, pricing, and application tracking.

Hosted ChatGPT connection

Use https://mcp.civify.cv/mcp with OAuth after deploying/configuring this release together with the backend and frontend account-link changes. Account linking opens Civify's normal sign-in (including its existing Google/LinkedIn and two-factor flows), then asks the user to approve access. Users do not create or copy API keys. A one-time, proof-bound exchange creates a dedicated 30-day scoped backend credential; the gateway stores it encrypted and ChatGPT receives separate opaque OAuth tokens. Never paste passwords or API keys into the agent conversation.

OAuth requires CIVIFY_MCP_PUBLIC_URL, a stable CIVIFY_OAUTH_STORE_KEY, and durable storage as described below. Existing connections must reconnect after rollout. This release has local regression coverage; it has not been deployed by this change.

Related MCP server: recruiting-jobs-mcp

Configuration

Variable

Default

Purpose

PORT

unset

Enables HTTP when set; Docker uses 8080

TRANSPORT

unset

sse also enables the HTTP server, including /mcp

CIVIFY_API_URL

https://civify.cv/apis

Backend base URL

CIVIFY_FRONTEND_URL

https://civify.cv

PDF-rendering service

CIVIFY_MCP_PUBLIC_URL

unset

Public HTTPS origin; enables OAuth

CIVIFY_ACCOUNT_CONNECT_URL

https://civify.cv/en/mcp/connect

Civify frontend sign-in/consent page; override only for staging

CIVIFY_DOWNLOAD_BASE_URL

OAuth public origin

Public HTTPS origin for temporary PDF links; can be configured independently

CIVIFY_OAUTH_STORE_KEY

unset

Required with OAuth: base64-encoded 32 random bytes

CIVIFY_OAUTH_STORE_PATH

./data/oauth.enc

Encrypted OAuth database

CIVIFY_TRUST_PROXY_HOPS

0

Trusted proxy hop count for OAuth rate limits; Compose uses one Traefik hop

CIVIFY_API_KEY

unset

Trusted local stdio only; never shared among remote users

Use a secret manager to provision the encryption key. Keep it stable across deploys and back it up separately. Compose requires it and mounts /app/data persistently. The database uses AES-256-GCM and atomic file replacement. Deploy one replica; multiple processes require a shared transactional store before scaling. Restarting preserves registered clients and tokens but cancels unfinished consent/code flows.

When deploying the Dockerfile directly through Dokploy, enter these settings in Dokploy too: Compose environment settings are not inherited by a Dockerfile build. These variables, including the encryption key, belong to the MCP gateway service, not the Java backend or frontend. The backend account-link service defaults to trusting https://mcp.civify.cv; staging can override Spring property civify.mcp.origin with CIVIFY_MCP_ORIGIN. Production requires Redis for atomic handoff consumption; Redis failures stop linking safely. No additional shared login secret is required.

After deploying, optionally run node scripts/check-deployment.mjs. It performs public, read-only checks and exits nonzero when OAuth discovery or PDF links are missing. It does not enable OAuth, push code or run during tool calls. An UP health response alone does not establish hosted-client readiness.

OAuth uses authorization-code flow with S256 PKCE, client and resource binding, one-use codes, one-hour access tokens, rotating refresh tokens and revocation. New account connections expire after 30 days; refresh cannot extend that approval. The resource is the public /mcp URL. Backend key scopes remain authoritative. The browser shows the account, requesting app, registered return address, permissions and credit impact. Users can revoke the dedicated MCP: <client> entry in Civify's account access/API-key settings. Deploy backend → frontend → gateway, then reconnect the connector with OAuth selected. Do not select “No authentication” for ChatGPT.

Endpoints:

  • /mcp: canonical Streamable HTTP, stateless in OAuth mode.

  • /: POST alias; GET discovery or the matching MCP stream.

  • /sse, /messages: legacy SSE compatibility.

  • /health: liveness, version and session counts.

  • /.well-known/oauth-protected-resource/mcp: OAuth resource metadata when enabled.

  • /.well-known/oauth-authorization-server: issuer, registration and token metadata.

  • /.well-known/mcp/server-card.json: public tool discovery.

Without OAuth enabled, trusted remote clients can configure X-API-KEY in their connection settings. Sessionless calls are supported, but tool-based login needs a persistent legacy session. Unknown stateful session IDs return 404: initialize again. Credentials must never be supplied in URL query parameters.

Local stdio

npm ci
npm run build
node dist/index.js

Leave PORT and TRANSPORT unset. A trusted client can set CIVIFY_API_KEY. Example:

{
  "mcpServers": {
    "civify": {
      "command": "npx",
      "args": ["-y", "@civify/mcp-server"]
    }
  }
}

The npx example runs the published package; local edits take effect only after a package release or by pointing the client at this checkout's dist/index.js. All diagnostics use stderr so stdout remains valid MCP protocol traffic.

Agent workflow and tools

Start with civify_get_started, connect an account, then check its credit balance. For analysis, parse once and pass the returned resumeData into scoring. For a tailored CV, submit the original directly to tailoring, then export. Track applications when requested. AI operations may consume credits. Do not automatically retry purchases, application creation or ambiguous credit-consuming requests.

Tools

Access

civify_get_started, civify_get_pay_per_cv_pricing, civify_scrape_job, civify_generate_pdf

Public

civify_get_account

account:read

civify_parse_cv, civify_tailor_cv, civify_score_ats, civify_mask_pii

cv:parse, cv:tailor, ats:score, pii:mask respectively

civify_check_cv_entitlement, civify_purchase_cv_pass

billing:read, billing:purchase

civify_list_applications, civify_track_application

apps:read, apps:write

civify_set_api_key, civify_login, civify_verify_2fa, civify_register, civify_logout

Local/legacy session auth; hidden and rejected in hosted OAuth mode

There are 13 tools in OAuth mode and 18 in local/legacy mode. Tool schemas, annotations and initialization instructions describe usage and side effects. Results include compatible text plus structuredContent.data, preserving the backend response envelope. Tool failures use isError: true even when HTTP succeeds. Missing OAuth authentication includes the MCP authentication challenge metadata.

ChatGPT tools declare openai/fileParams for a native file attachment containing download_url and file_id (optional mime_type and file_name). Other clients can send a real HTTPS file_url, the complete resume_text read from the attachment, or actual file_base64 bytes. Choose exactly one input; never invent URLs or base64. Claude remote connectors cannot read a sandbox path on this server. If a client cannot forward or read an attachment, provide readable text or a client-accessible file.

Downloads reject private/internal addresses, unsafe redirects, credentials and non-HTTPS URLs. Files are limited to 12 MiB; downloads have a 30-second deadline. The JSON body limit is 16 MiB including base64 overhead. Configure proxies accordingly.

Hosted PDF results contain a clickable download_url and an MCP resource_link, valid for 15 minutes or until restart. Anyone possessing the random link can download the PDF; links and signed attachment URLs are not logged. Output storage is capped at 64 MiB/200 files. If unavailable, pdf_base64 remains a compatibility fallback. CIVIFY_DOWNLOAD_BASE_URL can configure the public HTTPS origin independently of OAuth; otherwise downloads use CIVIFY_MCP_PUBLIC_URL. Keep one replica for this temporary in-memory store. Local stdio retains file input/output support.

Parsing is optional. An agent that can accurately read the attachment can provide resume_data directly to tailoring, scoring or PDF export. The discovered schema uses personalInfo and sections[].items; civify_get_started includes an example. For an original file or extracted text, tailoring performs its own extraction. Never invent missing CV details. Uploaded resumes and job text are untrusted data.

Tailoring returns a finished PDF by default under data.document.download_url, alongside data.tailoredCv. Set export_pdf: false for analysis only. If rendering fails, document.status is EXPORT_FAILED: call only civify_generate_pdf with the returned tailoredCv as resume_data. Repeating tailoring can charge again. Masking and standalone export return data.download_url directly. Expired tailored PDFs can be recreated from retained data; do not automatically repeat a paid mask.

Authenticated PDF requests carry the current account identity to Civify's renderer for watermark policy. Supply an existing resume_id, when known, to apply its export entitlement. Never invent an ID. Anonymous export uses public policy. Deploy the backend JSON-tailoring/watermark endpoints, then the frontend renderer, then gateway 1.4.0. An old backend does not support the new JSON tailoring contract; the gateway deliberately does not silently retry as a paid upload.

Onboarding results contain relevant Civify links with MCP campaign attribution. Measure website conversions and completed tool workflows separately from tool-list requests. Increased discovery traffic alone does not prove successful activation.

Validation and troubleshooting

npm test

This builds TypeScript and tests against a loopback mock backend: sessionless and stateful HTTP, legacy SSE, stdio, input validation, user isolation, scoring payloads, remote PDFs, OAuth consent/PKCE/replay/restart/refresh/revocation and secret containment. CI runs the suite before publishing an image. No real AI credits or purchases are used.

Use tool_start/tool_complete/tool_error events to diagnose actual user operations. Each operation has a request_id, propagated as X-Request-ID alongside the X-Civify-MCP-Tool label to backend calls. Backend request logs include the fixed operation name, HTTP status, outcome and duration without request bodies, query strings or credential headers. Labels are diagnostics, not authorization or idempotency keys. A timeout still has an unknown billing outcome; contact support before repeating paid work. These synchronous tools do not yet provide durable jobs. Idle-session eviction is normal. HTTP 200 can contain a tool error; inspect isError. After rollout, verify OAuth discovery and account linking from ChatGPT, then complete a workflow with an explicitly chosen test account. Preserve streaming and auth headers through the proxy. Legacy sessions need a single instance or sticky routing.

Shared workspace context: Knowledge, deployment runbook, backend contracts, and incident review. These references are in the parent workspace; the instructions above are standalone.

Compatibility references: OpenAI MCP server guidance and OpenAI authentication guidance.

MIT - Civify Engineering Team

Available Tools

8 tools
civify_get_accountA

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not state whether this is a read-only operation, whether authentication is required, what happens when not authenticated, or whether it hits rate limits. For a zero-param identity/balance tool these are relevant traits an agent would want to know.

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?

Single front-loaded sentence listing exactly what is returned. No filler, no restatement of the tool name.

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?

No output schema, so the description must explain what comes back, and it does list the returned fields. However, it says nothing about auth requirements, read-only nature, error behavior, or units for token/credit balances, which leaves gaps for a tool an agent will call to check state.

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?

Zero parameters, so baseline 4 applies. The description identifies what the single implicit input (the calling user) yields, which is all the parameter-semantic content a zero-param tool can have.

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 verb (Get) and resource (user account) and enumerates exactly what is returned: profile, subscription tier, token balance, and CV credits. The sibling tools are all action tools (parse, tailor, score, mask, scrape, track) or a pricing lookup, so this read-only account tool is clearly distinct.

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 usage (retrieve account info before doing work that consumes tokens or credits) but doesn't explicitly state when to use it versus alternatives. With no siblings competing for the same account-data purpose, the exclusion burden is low, but explicit when-to-use guidance is absent.

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_pricingB

Get localized Pay-Per-CV single unlock pricing (USD base and EGP regional pricing).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that pricing is localized with USD base and EGP regional currencies, which is useful behavioral context. However, it doesn't state whether pricing can change, whether it requires authentication, or how the result is structured. Adequate but with gaps for a no-annotation tool.

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 tight sentence that front-loads the verb and resource, then qualifies the currency scope. No waste.

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 zero-param, no-annotation, no-output-schema tool, the description covers what is fetched and the currency dimensions but omits authentication needs, rate limits, or how pricing is consumed. It is minimally adequate but leaves behavioral questions unanswered.

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?

There are zero parameters, so the baseline is 4. The description confirms no input is needed by describing a pure lookup, which aligns with the empty schema. No further parameter semantics are possible.

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?

States a specific verb (Get) and resource (Pay-Per-CV single unlock pricing), with the added scope of localization and currencies. It is distinguishable from siblings like civify_get_account or civify_score_ats, though it doesn't explicitly name an alternative. Clear but no explicit sibling differentiation beyond the resource name.

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?

No when-to-use or when-not-to-use guidance is provided. The agent must infer that this is called before a Pay-Per-CV unlock to determine cost, but nothing states that context or any prerequisites.

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

civify_mask_piiB

Upload a CV and produce a sanitized, PII-masked version (redacts email, phone, physical address).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to resume file to redact.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it only covers the redaction scope. It does not say whether the original file is modified or preserved, where the sanitized output goes, whether authentication is required, or what the tool returns — all important for an upload/mutation-style tool.

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 front-loaded sentence with no redundant clauses; the action and the redaction scope are both stated compactly and every element earns its place.

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 one-parameter tool with no output schema and no annotations, the description covers the input action and redaction behavior but omits the return value and output-format details the agent needs to chain it with follow-up tools. Adequate but with a clear gap.

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% for the single file_path parameter, so the schema already carries the parameter semantics. The description adds nothing about accepted formats or path conventions, making the baseline 3 appropriate 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 gives a specific verb pair (upload + produce) and a precisely scoped resource: a PII-masked CV with the redaction targets enumerated in parentheses (email, phone, physical address). This clearly separates it from siblings like civify_parse_cv or civify_tailor_cv, which handle the same CV artifact for different purposes.

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?

There is no when-to-use guidance and no mention of alternatives, despite several siblings operating on the same CV (parse_cv, tailor_cv, score_ats). The agent must infer from the name alone that this is the privacy/sanitization path rather than the generic parsing path.

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

civify_parse_cvB

Parse a resume document (PDF, DOCX, image) into structured JSON schema containing contact details, work experience, education, skills, and projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage code (e.g. 'en', 'ar', 'auto'). Default is 'auto'.auto
file_pathYesAbsolute or relative file path to the resume document (PDF, DOCX, image).

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the output contents (contact, experience, education, skills, projects), which is useful given no output schema. However it says nothing about cost, authentication, file-size limits, or failure modes, and a sibling pricing tool suggests the operation is paid.

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 front-loaded sentence with zero waste that names the input formats and the returned schema sections in one pass.

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?

Since no output schema exists, the description appropriately enumerates the returned fields, making it nearly self-sufficient for a 2-parameter parse tool. Only error behavior and size limits are absent.

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 both parameters are already documented. The description only echoes the format list from file_path and adds no extra meaning about language handling or path resolution.

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?

States a specific verb (parse) and resource (resume document) plus the supported formats and the resulting structured fields. It is clearly the extraction tool among siblings like tailor_cv, score_ats, and mask_pii, though it never names those alternatives.

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?

No guidance on when to choose this tool over siblings such as civify_tailor_cv or civify_score_ats, nor any prerequisites (e.g., payment via civify_get_pay_per_cv_pricing). Usage must be inferred from the name alone.

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

civify_score_atsB

Calculate general ATS compatibility score and structural audit without needing a full JD.

ParametersJSON Schema
NameRequiredDescriptionDefault
resume_idYesUUID of an existing resume in Civify.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only, what permissions are needed, how the score is returned, or whether the structural audit has side effects; the only extra context is that a full JD is not required.

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 with no filler. Every part of the sentence adds useful information: the action, the two outputs, and the key condition for using the tool.

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 one-parameter tool with a fully documented schema and no output schema, the description covers purpose and the main usage condition. It omits details about the score format and what the structural audit includes, but those are not essential for correct 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 coverage is 100%, and the single parameter 'resume_id' is fully documented in the schema as the UUID of an existing resume. The description adds no further parameter meaning, which is acceptable given the high schema coverage baseline.

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 states a specific verb ('Calculate') and two concrete outputs ('general ATS compatibility score and structural audit'), so the tool's purpose is clear. It does not explicitly distinguish itself from siblings by name, though the 'without needing a full JD' clause implies a contrast with tools that do require one.

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 phrase 'without needing a full JD' gives an implied usage condition: use this when the full job description is unavailable. However, it does not name alternatives, state when not to use it, or explain what to do if a JD is available.

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

civify_scrape_jobA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the job posting.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses a scope constraint by naming supported sources (LinkedIn, Greenhouse, Lever, Ashby, Wuzzuf), which hints at failure modes for unsupported sites, but it omits auth requirements, rate limits, and whether the scrape is live/network-dependent.

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

Conciseness4/5

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

A single efficient sentence with the core action front-loaded and the output fields enumerated compactly. The parenthetical platform list is slightly dense but earns its place by defining scope.

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 one-parameter tool with no output schema, the description adequately covers both the input (job URL) and the expected return (job description, company, requirements, responsibilities). Only the platform-failure behavior remains unaddressed.

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?

There is a single parameter whose schema description coverage is 100%, so the baseline is 3. The description adds only the notion that the URL points to a job posting and implies platform compatibility, but gives no syntax or format detail beyond the schema.

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 verb (scrape and extract) plus the resource (structured job data from a job URL) and enumerates the extracted fields. It is clearly distinct from siblings like civify_parse_cv, civify_tailor_cv, and civify_score_ats, which operate on CVs rather than job postings.

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?

Usage is only implied: an agent can infer it applies when it holds a job posting URL. There is no explicit when-to-use vs. when-not-to-use guidance, no prerequisites, and no mention of what to do with an unsupported URL even though the tool names specific supported platforms.

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

civify_tailor_cvB

Tailor a candidate's resume against a target job description. Optimizes bullet points, highlights matching skills, and generates an optional targeted cover letter.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNoPath to resume document file to tailor.
job_titleNoTarget job title.
company_nameNoTarget company name.
job_descriptionYesThe full text of the job description to tailor against.
generate_cover_letterNoWhether to generate a matching tailored cover letter.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the tailoring actions but not critical traits: whether the source file is overwritten or a new document is produced, what the response contains, or that this appears to be a paid operation (given the civify_get_pay_per_cv_pricing sibling).

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 tightly written sentences, front-loaded with the primary action and followed by the specific transformations, with zero filler.

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?

Adequate for the core purpose, but with no annotations and no output schema the description should say more about the result (does it return tailored text, a file path, a diff?) and cost/auth requirements implied by sibling pricing tools.

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 coverage is 100%, so the schema already documents all five parameters. The description reinforces the optional cover-letter toggle via 'optional targeted cover letter,' but adds no format, length, or content expectations beyond the schema.

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?

States a specific verb (tailor) and resource (resume/CV) against a target job description, and enumerates sub-actions: optimizing bullets, highlighting matching skills, and generating a cover letter. An agent can distinguish this from siblings like parse_cv or score_ats, though the description never explicitly names those alternatives.

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?

No guidance on when to choose this over civify_score_ats, civify_parse_cv, or civify_scrape_job, and no ordering/prerequisite hints (e.g., that a resume must be parsed first). Usage is implied by the verb only.

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

civify_track_applicationC

Record a job application in the candidate's Civify Application Kanban tracker.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
statusNoAPPLIED
job_urlNo
job_titleYes
company_nameYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It implies a write operation against a tracker but doesn't disclose key behaviors: how duplicates are handled, whether status transitions are validated, what side effects occur, or what the response contains.

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

Conciseness4/5

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

A single efficient sentence with the resource and verb front-loaded. No waste, though minimal content limits its usefulness.

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

Completeness2/5

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

For a 5-parameter mutation tool with zero schema descriptions, no annotations, and no output schema, the description is too thin. It omits parameter meanings, the status enum's role, and behavioral expectations the agent would need to call this correctly.

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

Parameters2/5

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

Schema coverage is 0%. Description mentions no parameters at all; the schema lists required company_name and job_title plus optional status enum, notes, and job_url but the description adds no semantics, no default status note, and no enumeration guidance.

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?

States a specific verb (record) and resource (a job application) with its destination (the Civify Application Kanban tracker). It's distinguishable from siblings like tailor_cv and score_ats, but doesn't explicitly delineate against 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?

No when-to-use guidance, no mention of alternatives, and no prerequisite context for recording versus other trackers. The description is purely declarative.

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. 8 tool updatesv1.0.0
    • First observedcivify_get_account
    • First observedcivify_get_pay_per_cv_pricing
    • First observedcivify_mask_pii
    • First observedcivify_parse_cv
    • First observedcivify_score_ats
    • First observedcivify_scrape_job
    • First observedcivify_tailor_cv
    • First observedcivify_track_application

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct action and resource: parsing, tailoring, ATS scoring, PII masking, job scraping, application tracking, account retrieval, and pricing are all clearly separate. No two tools overlap in purpose.

Naming Consistency5/5

All tools use the same civify_ prefix followed by a snake_case verb_noun pattern (e.g., civify_parse_cv, civify_tailor_cv). The convention is predictable and consistent throughout.

Tool Count5/5

Eight tools is well-scoped for a CV and job application assistant, with each tool covering a distinct part of the workflow. No tools feel redundant or extraneous.

Completeness3/5

Core operations for CV parsing, tailoring, ATS scoring, PII masking, job scraping, and application recording are present. However, the application tracker lacks list, update, and delete operations, and account management only supports retrieval, leaving notable lifecycle gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers