search_talents_by_filters tool searches the Kalent talent database with structured Kalent filters — the same filter model used by the Kalent app and by the POST /v1/search/talents API.
Do not use this tool for ordinary talent searches. When a user asks to find or search talents in natural language (for example “cherche des talents”, “find a senior React developer in Paris”), the assistant must call search_talents_by_prompt instead. Call search_talents_by_filters only when the user explicitly asks to search with structured Kalent filters (a filters array, filterType, isRequired, isExcluded, isExactMatch, radius, or the Kalent filter model).
It returns up to 5 matching profiles with full career details.
This tool was previously available in development environments as
search_talents_with_filters. It is now exposed to every MCP client under the
name search_talents_by_filters.How it works
- The user explicitly asks to search with structured Kalent filters, or provides a filter list.
- The AI builds a
filtersarray, choosing the filter types, values, and modifiers (isRequired,isExcluded,isExactMatch,radius,history). - The MCP server executes the search and returns matching profiles.
- The AI presents a formatted table and can answer follow-up questions using the full profile data.
Every criterion you mention is treated as a requirement by default
(
isRequired: true). If you want a criterion to be a nice-to-have rather than
mandatory, say so explicitly (e.g., “ideally with experience in fintech” or
“bonus if they speak Spanish”) — the AI then sets isRequired: false on
that filter. How optional filters affect results depends on mode — see
Search modes. The default is gate.When to use this tool vs. search_talents_by_prompt
Input
Search modes
mode is optional. If omitted, the search runs in gate. The gate and rank modes work exactly as in the HTTP API: see Search modes.
Accepted values for enumerated filters (languages, industries, ranges, …) are listed in Accepted filter values.
Filter Types
The AI selects from the following filter types:Filter Modifiers
Each filter supports the following modifiers:Response
Each search returns two content blocks:1. Structured JSON
Complete profile data for each matching talent, including:searchTransactionId— unique identifier for this search (used for pagination)estimationCount— the total estimated number of talents matching the filters in the database, not just the ones returned in this batch. The estimate is capped at 10,000: a value of 10,000 means “10,000 or more”, and search and pagination can continue beyond it.resultCompleteness—status(completeorpartial),requestedCount,returnedCountand, when partial, areason(pool_exhausted,safety_budget_reached,insufficient_ready_profiles,insufficient_credits,search_interrupted)credits— credits consumed by this search and remaining balance- Full name, location, headline
- Current job title and organization
- Work experiences (company, title, location, dates, description)
- Education (school, degree, major, dates)
- Skills
- Languages and proficiency levels
- Professional certifications
- LinkedIn profile URL
searchTransactionId is used internally for pagination (see below). The estimationCount helps convey how large the overall talent pool is for the given criteria. The estimate is capped at 10,000: a value of 10,000 means “10,000 or more”, and search and pagination can continue beyond it. When resultCompleteness.status is partial, the tool explains in plain language how many profiles were delivered out of the requested number and what to do next.
Only ready profiles are returned: talents that are already up to date, or that were synchronously refreshed and passed refiltering. The tool accepts an optional nbToFetch (1 to 5, default 5) and keeps fetching until that many ready profiles are found or an internal page/time budget is reached. An asynchronous refresh is omitted from this response and can appear on a later call.
2. Markdown Summary Table
A formatted table displayed directly in the conversation:Errors
If the search engine times out, the tool returnsisError: true with a message asking you to try again and a ref: line containing the request debugTrackingCode for support.
If a LinkedIn relationship filter is used but no LinkedIn account is connected, the tool returns an error asking you to connect LinkedIn in Kalent settings before filtering by your network.
If a LOCATION filter cannot be resolved (for example Singapore), the tool returns isError: true with Unsupported location: Singapore. Remove or rephrase that location. Retrying the same value will not succeed.
Credits
Each search consumes API search credits. The number of credits consumed corresponds to the number of profiles returned (up to 5 per search). The response includes acredits object showing how many credits were used and how many remain.
If you run out of credits, the tool will return an error prompting you to purchase more at https://app.kalent.ai/settings/billing.
Pagination
When you ask for more results, the AI automatically handles pagination by passing previoussearchTransactionId values via the relatedSearchTransactionIds parameter. relatedSearchTransactionIds is an array of searchTransactionId strings from previous search_talents_by_filters calls — talents already returned in those earlier searches are excluded from the new results, so you always see fresh profiles.
You: Search with Kalent filters for React developers in Paris. [5 results displayed — estimationCount: 120] You: Show me more. [5 new, different results displayed — no duplicates from the first batch]The AI collects
searchTransactionId values from each response and passes them in subsequent requests so you never see the same talent twice. The array accepts at most 300 IDs. The estimationCount tells you how many total matches exist, helping you decide whether to paginate further. The estimate is capped at 10,000: a value of 10,000 means “10,000 or more”, and search and pagination can continue beyond it.
Non-deterministic Results
Example Conversations
These examples assume the user asked to search with structured Kalent filters.
If they only described the talent they need, use
search_talents_by_prompt.Finding engineers with specific company experience
You: Search with structured Kalent filters: software engineers who have worked at OpenAI for at least 3 years. Assistant: I’ll build a Kalent filter array for software engineers with OpenAI experience and at least 3 years in the role. [Results displayed as a table with 5 matching profiles] I found 5 software engineers who match your criteria. Would you like me to look into any of these profiles in more detail, or would you like to refine the search?
Location-based search with skills
You: Use Kalent filters: talent in Paris (within 20km radius) with expertise in SEO and marketing strategies. Assistant: I’ll search with structured LOCATION and KEYWORD filters for marketing professionals near Paris with SEO expertise. [Results displayed] Here are 5 professionals in the Paris area with SEO and marketing strategy skills. Several of them also have experience in content marketing and digital analytics.
Combining experience, role, and company type
You: Search with Kalent filters: 10+ years of experience as a UX designer who has worked for a YC startup. Assistant: I’ll build structured filters for senior UX designers with Y Combinator startup experience. [Results displayed] I found 5 UX designers with 10+ years of experience and ties to Y Combinator startups. Want me to narrow down by location or specific skills?
Tips for Better Results
Be specific about requirements
Mention specific job titles, companies, locations, and skills. The more
precise you are, the better the results.
Mark nice-to-haves explicitly
All criteria are treated as mandatory by default. Use words like “ideally”,
“bonus”, or “nice-to-have” for optional preferences.
Use follow-up prompts
Refine your search iteratively. Ask to narrow down by adding criteria, or
broaden by relaxing constraints.
Combine multiple filters
You can combine as many filters as needed in a single call: job title +
location + skills + experience + company type.

