Skip to main content
Glama
Gaivoronsky

huntflow-mcp

by Gaivoronsky

huntflow-mcp

MCP server for HuntFlow ATS API v2 — vacancies, candidates, resumes, funnel stages, rejection reasons, comments, accounts. 16 tools, 3 prompts.

npm License: MIT

Works with HuntFlow v2 (api.huntflow.ru for Russia or api.huntflow.ai for international accounts). Transports: stdio and streamable HTTP. All data is read-only, except for adding comments.

Installation

🧑‍💼 Not a programmer? There is a step-by-step guide in plain language: INSTALL.md

In claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/):

{
  "mcpServers": {
    "huntflow": {
      "command": "npx",
      "args": ["-y", "@gaivoronsky/huntflow-mcp"],
      "env": {
        "HUNTFLOW_TOKEN": "your-token",
        "HUNTFLOW_BASE_URL": "https://api.huntflow.ai/v2"
      }
    }
  }
}

After editing the config, fully restart Claude Desktop (⌘Q and reopen).

From source (for development)

git clone https://github.com/Gaivoronsky/huntflow-mcp.git
cd huntflow-mcp
npm install
npm run build      # → dist/

Run from the built code with node dist/index.js. To connect to Claude Desktop from source, set "command" in the config to the absolute path to node (the GUI does not inherit the shell PATH; e.g. ~/.nvm/versions/node/<version>/bin/node) and "args" to ["/path/to/huntflow-mcp/dist/index.js"].

Streamable HTTP

HUNTFLOW_TOKEN=your-token node dist/index.js --http
# POST /mcp, GET /health on port 3000 (override with PORT=...)

Related MCP server: 100Hires MCP Server

Getting a token

  1. In HuntFlow: Settings → API → Add token.

  2. The system will issue a link like https://huntflow.ai/token_request/<hash>. Do not open it "just to check" — that deactivates it. Open it in a browser under your account and click Receive.

  3. Put the resulting access_token (a long string) into HUNTFLOW_TOKEN.

The access_token lives for 7 days, the refresh_token for 14. The server does not refresh the token automatically — once it expires, obtain a new token again.

Environment variables

Variable

Required

Description

HUNTFLOW_TOKEN

yes

API token (Settings → API)

HUNTFLOW_BASE_URL

no

Defaults to https://api.huntflow.ru/v2. For an international account — https://api.huntflow.ai/v2

HUNTFLOW_USER_AGENT

no

The User-Agent header (HuntFlow requires it). Default huntflow-mcp/<version> (+repo); a contact email is recommended

PORT

no

HTTP server port (defaults to 3000)

Tools (16)

Tool

Description

list_accounts

List of available accounts

list_vacancies

List of vacancies (open/all), pagination page/count

get_vacancy

Full information about a vacancy

list_applicants

Candidates filtered by vacancy/status, pagination (count≤30)

search_applicants

Full-text search of candidates (q, field), pagination (count≤100)

get_applicant

Full candidate card (external[], links[])

get_applicant_resume

Resume (CV) with body by external_id (from get_applicant)

list_stages

Recruiting funnel stages (statuses): code → name

list_rejection_reasons

Reference list of rejection reasons: code → name

list_account_sources

Resume sources (e.g. RG, HeadHunter): id → name/type. Use the id for account_source

list_applicant_comments

Comments about a candidate (log, defaults to type=COMMENT)

add_applicant_comment

✍️ Add a comment (write; editing/deletion is not available through the HuntFlow API)

create_applicant

✍️ Create a candidate card (write; first_name+last_name are required, resume as text/files; a repeat → duplicate, see doubles[])

attach_applicant_to_vacancy

✍️ Attach a candidate to a vacancy and place them on a stage (write; vacancy+status are required)

upload_resume

✍️ Upload a resume file (write, multipart; file_path or content_base64; parse recognizes the CV)

update_applicant_external

✍️ Update an existing resume/external (write, PUT): source, text, files (by external_id)

Prompts (3)

MCP prompts for typical recruiting scenarios:

Prompt

Description

skill-applicants

Candidates for a vacancy — a table with stages and a summary

skill-vacancy-stats

Vacancy statistics — funnel, timing, conversion

skill-vacancy-analytics

Analytics: days in progress, candidates at stages with the customer, timing for sending the CV to the client

Development

npm install
npm test           # vitest (unit tests, mocked fetch)
npm run dev        # tsx src/index.ts (run from TS without building)
npm run build      # tsc → dist/

Structure: a thin HTTP client src/client.ts (Bearer + User-Agent, passing through API error bodies, retries only for GET), tools in src/tools/*.ts, server assembly in src/index.ts.

License

MIT. Based on theYahia/huntflow-mcp (MIT) with adaptations for the real HuntFlow v2 API.

Available Tools

16 tools
add_applicant_commentA

Add a comment to an applicant (WRITE operation: creates a log entry; it cannot be edited or deleted via the API).

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesComment text
vacancyNoTie the comment to a vacancy (ID). Without it — a personal note
account_idYesHuntFlow account ID
applicant_idYesApplicant ID

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states it is a WRITE operation, creates a log entry, and the comment cannot be edited or deleted via the API. This provides essential behavioral transparency, though auth requirements or rate limits are not mentioned.

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 purpose and follows with critical behavioral details. There is no superfluous content; every word adds value.

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 simple write tool with no output schema, the description covers the core action, data persistence, and immutability. It does not specify the return value or error conditions, but the tool name implies successful addition, making it fairly 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 coverage is 100% with descriptions for each parameter. The description adds behavioral context (write operation, immutability) but does not enhance parameter meaning further. Baseline of 3 is appropriate as schema already documents all parameters.

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 action (Add a comment), the resource (applicant), and distinguishes it from sibling tools like list_applicant_comments by highlighting it as a WRITE operation. It also adds key behavioral context about immutability.

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 use for adding comments but does not explicitly compare with other write tools like create_applicant or attach_applicant_to_vacancy. It lacks guidance on when not to use this tool or prerequisites.

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

attach_applicant_to_vacancyA

Attach an applicant to a vacancy and place them on a funnel stage (WRITE operation). vacancy + status (stage ID from list_stages) are required. For rejection — rejection_reason; for hiring — fill_quota + employment_date.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoIDs of attached files
statusYesPipeline stage ID from list_stages (required)
commentNoComment for the transition
vacancyYesVacancy ID (required)
account_idYesHuntFlow account ID
fill_quotaNoQuota ID — for the hiring stage
applicant_idYesApplicant ID (from create_applicant → id)
employment_dateNoEmployment start date YYYY-MM-DD
rejection_reasonNoRejection reason ID (list_rejection_reasons) — for the rejection stage

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses that this is a WRITE operation and specifies conditionally required fields, but does not mention potential side effects, permission requirements, or error behavior. Adequate but not fully transparent.

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, front-loaded with the action, no wasted words. Efficient and to the point.

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?

With 9 parameters, no output schema, and no annotations, the description covers the main use cases but does not explain parameters like files and comment. The agent may need additional context for complete understanding.

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 coverage is 100%, so baseline is 3. The description adds value by grouping parameters by scenario (rejection vs hiring) and referencing list_stages, which provides context beyond the schema descriptions.

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 action: attach an applicant to a vacancy and place them on a funnel stage. It uses specific verb+resource and distinguishes from sibling tools by explicitly marking as WRITE operation and mentioning required parameters.

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 for when to use the tool: it lists required parameters (vacancy, status) and conditional parameters for rejection and hiring scenarios. However, it does not explicitly state when not to use this tool or list alternatives among siblings.

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

create_applicantA

Create an applicant card (WRITE operation: POST /applicants). first_name+last_name are required. Resume — as text (externals[].data.body) and/or file IDs from upload_resume. Repeating creates a DUPLICATE (no idempotency) — check doubles[] in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNoSites/links
emailNoEmail
moneyNoSalary expectations as a string, e.g. "200000 RUB"
phoneNoPhone
photoNoID of the uploaded photo (from upload_resume → id)
socialNoSocial networks/messengers
companyNoCurrent/last company
birthdayNoDate of birth ISO YYYY-MM-DD (single field, NOT day/month/year)
positionNoDesired position
externalsNoApplicant's resume (text and/or file IDs)
last_nameYesLast name (required)
account_idYesHuntFlow account ID
first_nameYesFirst name (required)
middle_nameNoMiddle name

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behavioral traits: it's a write operation, creates duplicates on repeat calls (no idempotency), and the response includes a 'doubles[]' array. This goes beyond minimal requirements given the lack of 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 three concise sentences covering purpose, required fields, resume integration, and duplicate behavior. It is front-loaded with the core action and contains no redundant or irrelevant information.

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 14 parameters, full schema coverage, and no output schema, the description sufficiently covers key aspects: required fields, resume handling, and duplicate detection. Minor gap: it doesn't describe the full response structure beyond 'doubles[]', but this is acceptable for a create tool with a well-documented schema.

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 baseline is 3. The description adds value beyond schema by explaining how to provide resume text (externals[].data.body) and file IDs (from upload_resume), highlighting non-idempotency, and directing attention to 'doubles[]' in the response. This clarifies usage patterns not obvious from schema alone.

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 explicitly states the tool creates an applicant card via POST /applicants, specifying it as a WRITE operation. It clearly distinguishes from sibling tools (list, search, get, update) by being the only creation endpoint for applicants.

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 required fields (first_name, last_name) and explains resume handling via text and file IDs. It warns about duplicate creation and mentions checking the 'doubles[]' response field. While it doesn't explicitly state when not to use it, as the sole applicant creation tool, the context is clear.

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

get_applicantC

Full applicant card (external[], links[]).

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesAccount ID
applicant_idYesApplicant ID

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits such as read-only nature or error behavior. It only mentions output fields (external[], links[]) but fails to state that this is a read operation, what happens if IDs are invalid, or any side effects.

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

Conciseness3/5

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

The description is very short (one line) but sacrifices clarity for brevity. Terms like 'external[]' and 'links[]' may be ambiguous. Could be more informative without being verbose.

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?

Given no output schema, the description should fully explain the return object. Merely mentioning two array fields is insufficient for a 'full applicant card'. Missing details on other fields, errors, and permissions.

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?

Input schema provides clear parameter descriptions (Account ID, Applicant ID). The description adds no extra meaning beyond the schema, so with 100% schema coverage, score is at baseline 3.

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 'Full applicant card' combined with the tool name clearly indicates retrieval of a complete applicant record. Including '(external[], links[])' hints at specific fields, distinguishing it from list tools. However, it could be more explicit like 'Retrieve full applicant details by ID.'

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 use this tool versus siblings like list_applicants or search_applicants. The description lacks context for appropriate usage scenarios or prerequisites.

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

get_applicant_resumeA

Applicant resume (CV) with body. external_id is taken from get_applicant → external[].id.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesHuntFlow account ID
external_idYesResume ID (external). Taken from get_applicant → external[].id
applicant_idYesApplicant ID

TDQS

A4/5.0
Behavior3/5

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

No annotations provided. Description adds that the tool returns the resume body, but does not disclose any further behavioral traits such as authorization needs or response format.

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, no redundancy, front-loaded with the core purpose and a key usage hint.

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 no output schema, the description mentions the resume includes a body, providing some expectation of return value. Could be more explicit about the returned data structure, but adequate for a simple retrieval tool.

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% with descriptions for all parameters. The tool description repeats the schema's instruction for external_id, adding no new parameter-level information beyond what the schema already provides.

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?

Description clearly states it retrieves an applicant resume/CV with its body, and provides a specific source for the external_id, distinguishing it from sibling tools like upload_resume.

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?

Explicitly states that external_id comes from get_applicant, implying a prerequisite call. However, it does not explicitly list when to use vs alternatives.

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

get_vacancyC

Full information about a vacancy.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesAccount ID
vacancy_idYesVacancy ID

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It only says 'Full information' without specifying if it is a read-only operation, what data is returned, or any side effects. This is insufficient.

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

Conciseness3/5

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

The description is extremely concise (one sentence), but it lacks structure and fails to provide necessary details. Conciseness alone does not compensate for missing information.

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?

Without an output schema, the description should explain what 'full information' entails. It does not describe the return format or fields, making it incomplete for an agent to understand the tool's output.

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 baseline is 3. The description adds no additional meaning to the parameters beyond what is already in the schema, which is adequate but not enhanced.

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?

Description clearly states it retrieves 'full information about a vacancy,' which is a specific verb-resource pair. However, it does not differentiate from the sibling tool 'list_vacancies' which lists vacancies.

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 use this tool versus alternatives like 'list_vacancies' or 'get_applicant'. The agent must infer from parameter requirements that it is for a single vacancy.

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

list_accountsB

List of available HuntFlow accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 must cover behavior. It only states 'list of available accounts' with no detail on pagination, ordering, authentication, or side effects. Lacks transparency for a tool with no annotations.

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

Conciseness4/5

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

The description is a single, clear sentence. It is concise and front-loaded, but adds no extra context.

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?

Given no output schema and sibling tools like list_account_sources, the description is minimal but functional. It could specify the return structure or scope (e.g., all accounts for user). Adequate but not complete.

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 no parameters (0 params), so the input schema is trivial. The description adds the meaning 'list accounts', which suffices since baseline is 4 for zero parameters.

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 'List of available HuntFlow accounts' clearly states the verb (list) and resource (accounts). It is straightforward but does not differentiate from sibling tools like list_account_sources.

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 use this tool versus alternatives. It does not mention prerequisites, filters, or when not to use it.

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

list_account_sourcesA

Applicant resume sources (e.g. "RG", "HeadHunter"): id → name/type. Use the numeric id for create_applicant → externals[].account_source and update_applicant_external.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesHuntFlow account ID

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It describes the output format but does not mention ordering, pagination, or authentication requirements. For a simple read tool, this is minimally adequate.

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

Conciseness4/5

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

The description is concise at one sentence with an example and usage hint. It front-loads the key purpose and is efficient, though it could be split for clarity.

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?

Considering the simplicity of the tool (one parameter, no output schema), the description provides sufficient context about what it returns and how to use the results. It could mention if the list is sorted or exhaustive, but is largely 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 coverage is 100% as account_id has a description. The description adds no additional parameter details beyond the schema, so baseline score of 3 is appropriate.

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 it lists applicant resume sources with an id to name/type mapping. It distinguishes from siblings as no other tool deals with sources.

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?

It instructs to use the numeric id for create_applicant and update_applicant_external, providing clear context for when to use the tool. It does not explicitly mention when not to use it.

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

list_applicant_commentsB

Comments about an applicant (log, by default only type=COMMENT). Pagination page/count≤100.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
countNoItems per page (max 100)
vacancyNoFilter by vacancy ID (cannot be used together with personal)
personalNoOnly personal notes not tied to a vacancy (cannot be used together with vacancy)
all_typesNoShow all journal entry types. By default only comments (type=COMMENT)
account_idYesHuntFlow account ID
applicant_idYesApplicant ID

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses pagination limits and default filtering, which are key behaviors. However, it omits details like sorting order, error handling, or whether the function is read-only (no annotations provided).

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?

Extremely concise at two sentences, with no redundant information. The first sentence covers purpose and default behavior; the second covers pagination. Efficient but could be more structured.

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?

Given no output schema, the description does not explain the return format or field contents. It provides enough for basic use but lacks details on response structure or data meaning.

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% with descriptions; the description adds little beyond what the schema already provides (e.g., default filter and pagination limits are stated in schema properties).

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 what the tool does: listing comments about an applicant. It specifies the default filter (type=COMMENT) and pagination, making it distinct from sibling tools like add_applicant_comment.

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 use this tool versus alternatives (e.g., when to use all_types). No mention of prerequisites or context for choosing this over sibling tools.

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

list_applicantsA

Account applicants filtered by vacancy and/or status (stage). Pagination: page, count≤30. For "applicants for vacancy X" pass vacancy.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
countNoItems per page (max 30)
statusNoFilter by status (stage) ID. Cannot be used together with agreement_state
vacancyNoFilter by vacancy ID
account_idYesHuntFlow account ID
agreement_stateNoFilter by consent to personal data processing. Cannot be used together with status

TDQS

A4.2/5.0
Behavior3/5

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

No annotations; description covers pagination constraints (page, count≤30) and filter behavior (status/agreement_state mutual exclusivity). Lacks details on idempotency, consistency, or side effects. Adequate but not thorough.

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 efficiently convey core functionality, filters, pagination, and a usage hint. No unnecessary words; well front-loaded.

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 list tool with 6 parameters and no output schema, description adequately covers filtering, pagination, and mutual exclusivity. Could mention that results are sorted or default ordering, but not essential.

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 covers 100% of parameters, so baseline is 3. Description adds value by explaining pagination limits (count≤30), conditional filtering (mutual exclusivity of status and agreement_state), and usage tip for vacancy.

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?

Description clearly states the tool lists account applicants with filtering by vacancy and/or status. It specifies pagination and gives an example use case, distinguishing it from siblings like search_applicants and get_applicant.

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?

Provides guidance on when to use (e.g., pass vacancy for vacancy-specific list) and pagination limits. Does not explicitly contrast with alternatives like search_applicants, but context suffices.

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

list_rejection_reasonsC

Directory of rejection reasons: code → name.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesHuntFlow account ID

TDQS

C2.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 must disclose behavioral traits. It only states the mapping nature, omitting whether the operation is read-only, requires specific permissions, or any side effects.

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?

Extremely concise at one sentence. The structure is front-loaded with the core purpose. It could be slightly more informative without breaking conciseness.

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?

Given the lack of output schema and annotations, the description is too sparse. It does not explain the output format, use in rejection workflows, or any relation to other tools like list_applicants.

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% for the single required parameter account_id. The description adds no extra meaning beyond the schema's 'HuntFlow account ID', but for a simple parameter, the schema suffices.

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 'Directory of rejection reasons: code → name.' clearly states the tool returns a mapping of codes to names for rejection reasons. It uses a noun phrase but implies a list operation, distinguishing it from sibling tools that deal with accounts, vacancies, or applicants.

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 use this tool versus alternatives like list_account_sources or list_stages. No context about prerequisites or typical use cases.

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

list_stagesC

Recruitment funnel stages (vacancy statuses): code → name.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesHuntFlow account ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations exist, and the description does not disclose any behavioral traits such as read-only nature, permissions, or side effects. For a list tool, this is a minimal disclosure.

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 extremely concise with a single sentence that conveys purpose without waste. Every word earns its place.

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?

Given the absence of an output schema, the description should explain the return format (e.g., array of objects with code and name). It only hints at mapping, which is insufficient for complete understanding.

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% with parameter descriptions, so the schema handles parameter semantics. The tool description does not add extra meaning beyond the schema, meeting the baseline for high coverage.

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 states that the tool lists recruitment funnel stages with code-to-name mapping, which is specific and distinguishes it from sibling tools like list_accounts or list_vacancies. However, it could be more descriptive about what stages represent.

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 is provided on when or why to use this tool. With many sibling tools, explicit usage context would be helpful but is absent.

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

list_vacanciesC

List of vacancies (open/all), with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
countNoNumber of items per page
openedNoOnly open vacancies
account_idYesHuntFlow account ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions pagination but lacks details on sorting, rate limits, or what constitutes 'open' vs 'all'. The behavior of pagination (e.g., default page size, maximum) is partially covered in the schema, but the description adds minimal transparency.

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

Conciseness4/5

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

The description is a single sentence that is concise and front-loaded with the purpose. While it could be more structured (e.g., separate sentences for different aspects), it avoids verbosity and earns its place.

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?

The tool has 4 parameters, no output schema, and no annotations. The description only covers basic purpose and pagination, but misses important context like the required account_id parameter, what constitutes 'open' vs 'all', and any side effects or limitations.

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 baseline is 3. The description adds 'open/all' which maps to the 'opened' parameter, but provides no additional meaning beyond the schema. No new context for other parameters.

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 states the action (list) and resource (vacancies), and mentions filtering by open/all and pagination. It effectively communicates the tool's purpose but does not differentiate from sibling tools like 'get_vacancy' or 'list_accounts'.

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 is provided on when to use this tool versus alternatives like 'get_vacancy' for a single vacancy or 'search_applicants' for filtering. It does not specify context or prerequisites (e.g., that account_id is required).

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

search_applicantsC

Text search for applicants (name/email/resume). Pagination: page, count≤100. The q parameter actually filters results.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch string (name, email, resume text)
pageNoPage number (1-based)
countNoItems per page (max 100)
fieldNoWhere to search: all | education | experience | positionall
statusNoFilter by status (stage) IDs
vacancyNoFilter by vacancy IDs
account_idYesHuntFlow account ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations, so description must cover behaviors. Mentions pagination and that q filters results, but doesn't disclose behavior when q is empty, search scope defaults, or performance implications. Missing critical details.

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?

Very concise at two sentences, front-loaded with purpose. Could include a bit more detail without being verbose.

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?

No output schema, so description should explain return format or behavior. Missing info on default behavior without q, interaction with status/vacancy filters, and search scope. Incomplete for a 7-parameter tool.

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 baseline 3. Description adds minimal nuance: 'q parameter actually filters results' and pagination details, but parameters are already well-described in 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?

Clearly states 'Text search for applicants (name/email/resume)', specifying the verb and resource. Distinguishes from siblings like list_applicants by implying search vs list, but could be more explicit.

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 use search_applicants vs list_applicants or other siblings. Mentions pagination but no context for appropriate use.

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

update_applicant_externalA

Update an EXISTING resume (external) of an applicant (WRITE operation: PUT). Set the source (account_source from list_account_sources), resume text (body) and/or files. external_id comes from get_applicant → external[].id. NOTE: there is no API to ADD a new resume to an applicant created without one — attach the resume at creation via create_applicant → externals[].

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesResume text (required) — maps to data.body
filesNoIDs of attached files (from upload_resume → id)
account_idYesHuntFlow account ID
external_idYesResume (external) ID — from get_applicant → external[].id
applicant_idYesApplicant ID
account_sourceYesSource ID (required) — numeric id from list_account_sources

TDQS

A4.4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It states WRITE operation and PUT method, but does not fully clarify whether partial updates are allowed or if omitted fields are reset. The 'and/or' suggests partial update, but not explicitly stated. Missing details on permissions, idempotency, or side effects.

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 paragraph with clear, front-loaded purpose. Each sentence adds necessary information: operation type, configurable fields, parameter sources, and a critical limitation. No 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?

Given 6 parameters (5 required) and no output schema, description covers prerequisites, value sources, and a key limitation. Minor gap: no hint about return value or success indicator, but overall complete for agent decision-making.

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 coverage is 100%, baseline is 3. Description adds value by specifying sources: external_id from get_applicant, account_source from list_account_sources, and files from upload_resume. This contextualizes parameters beyond schema descriptions.

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?

Description explicitly states 'Update an EXISTING resume (external) of an applicant (WRITE operation: PUT)', clearly specifying the verb (update), resource (existing resume), and method (PUT). It distinguishes from sibling tools like create_applicant which would add a new resume at creation.

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 clear guidance: external_id comes from get_applicant, account_source from list_account_sources, and a critical note that there is no API to add a resume later, so attach at creation. This helps the agent decide when to use this tool vs create_applicant.

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

upload_resumeA

Upload a resume file (WRITE operation: multipart). Source: file_path (local path) OR content_base64+file_name. parse=true parses the CV (returns text/fields/photo). Put the id from the response into create_applicant → externals[].files / photo.

ParametersJSON Schema
NameRequiredDescriptionDefault
parseNoParse the resume (X-File-Parse). Returns text/fields/photo to populate the applicant card
file_nameNoFile name for content_base64 (e.g. resume.pdf). For file_path it is taken from the path
file_pathNoLocal path to the file (the server will read the bytes). Alternatively use content_base64
account_idYesHuntFlow account ID
content_typeNoMIME type (e.g. application/pdf). Defaults to application/octet-stream
content_base64NoFile contents in base64 (alternative to file_path). Requires file_name

TDQS

A4.8/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses WRITE operation, multipart encoding, parse behavior returning text/fields/photo, and the response id usage. However, it omits error handling, idempotency, and permission requirements.

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?

Three concise sentences, no wasted words. First sentence states purpose, second explains source options, third covers parse and follow-up. Front-loaded with essential info.

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 no output schema, description explains the response contains an id and parse returns text/fields/photo, and provides concrete next-step guidance (create_applicant). Covers all key aspects for effective use.

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

Parameters5/5

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

Schema coverage is 100%, but description adds significant value: clarifies mutual exclusivity of source parameters, explains parse=true behavior, and indicates default for content_type, going well beyond the schema descriptions.

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 'Upload a resume file' with a specific verb and resource, and distinguishes itself from sibling tools like 'get_applicant_resume' (read) by emphasizing it is a WRITE operation.

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?

Explicitly provides when-to-use guidance: two mutually exclusive source methods (file_path vs content_base64+file_name), explains parse parameter, and instructs how to use the returned id with create_applicant, covering downstream integration.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct purpose: listing sources, accounts, vacancies, applicants, stages, rejection reasons, comments; getting details; creating/appending data. No two tools overlap in functionality, and descriptions clearly differentiate similar operations like list_applicants vs search_applicants.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, using verbs like list, get, search, add, create, attach, upload, update. No mixing of conventions, making it predictable for agents.

Tool Count5/5

16 tools cover the core recruitment workflow: accounts, vacancies, applicants, resumes, comments, stages, and rejection reasons. This is well-scoped for an ATS integration, not excessive nor sparse.

Completeness3/5

Coverage includes listing and creating applicants, uploading resumes, and attaching to vacancies, but missing updates for applicants and vacancies, no deletion operations, and no way to add a resume post-creation. These are notable gaps that could cause agent failures.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Official Model Context Protocol server for 100Hires — the applicant tracking system for recruiting teams. Exposes the full 100Hires API v2 as 130 MCP tools, enabling AI assistants to manage candidates, jobs, applications, interviews, messages, and more.
    100
    14
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Minimal MCP server for integrating with amoCRM (API v4): manage deals, contacts, notes, and OAuth2 authentication.
    10
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for VK Ads API: manage ad plans, ad groups, banners, and statistics.
    18
    80
    4
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gaivoronsky/huntflow-mcp'

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