Appearance
Tools
The server has nine tools. All are read-only except enrich_lead, which spends a credit. Each tool returns a JSON object as structured content, with the same JSON as text for clients that only read text.
Conventions
- IDs are short opaque strings such as
lead_idandcompany_id. Use them as returned. Don't build them yourself. - Pagination. Search tools return up to
page_sizeresults (1–25, default 10) and anext_cursor. To get the next page, pass it back ascursorwith exactly the same filters. A cursor from a different search is rejected. Only the first 1,000 results of a search can be paged. Narrow the filters to see more. - Filter values are fixed lists, given below and returned by
get_filter_options. quotain metered results shows today's quota after the call:used,limit,remainingandresets_at. Anulllimit means unlimited. See Usage and limits.notesexplain anything the assistant should know about a result, for example that a page was shortened or a role has closed.
Shared values
| Filter | Values |
|---|---|
experience_level | Entry, Mid, Senior, Lead, Executive |
work_type | Remote, Hybrid, On-site |
employment_type | Full-time, Part-time, Contract, Internship, Temporary, Freelance |
company_size | startup, scale_up, small, medium, enterprise |
salary_currency, currency | GBP, EUR, USD |
Leads
search_leads
Search open tech roles, newest first. Each lead returned counts as one lead explore.
| Parameter | Type | Description |
|---|---|---|
title | string | Job title keywords, for example data engineer |
location | string | City, region or country, for example London |
radius_km | number, 1–200 | Radius around a city |
skills | string[], up to 10 | Roles needing any of these skills, for example ["Python", "AWS"] |
experience_level | enum | See shared values |
work_type | enum | See shared values |
employment_type | enum | See shared values |
industry | string | Industry keyword, for example fintech |
company_id | id | Only roles at this company |
company_size | enum | See shared values |
posted_within_days | integer, 1–365 | Only roles posted in this window |
min_annual_salary, max_annual_salary | integer | Annual salary bounds, in salary_currency |
salary_currency | enum | Currency of the salary filters. Default GBP |
include_recruitment_agencies | boolean | Include roles posted by staffing agencies. Default false |
page_size | integer, 1–25 | Default 10 |
cursor | string | next_cursor from the previous page |
Returns total (open roles matching the filters), returned, leads, next_cursor, quota and notes. Each lead has the fields of a lead card in the Estel app:
| Field | Description |
|---|---|
id | Pass to get_lead or enrich_lead |
title, location, posted_date | |
company | id (pass to get_company, or null if the company has no Estel profile yet), name, logo_url |
work_type, employment_type, experience_level | |
salary | min, max, currency, period (year, month, week, day or hour) and a readable display |
estimated_fee | Estimated placement fee: min, max, currency, rate_percent of annual salary |
skills | Hard skills |
enriched | true if your account has already unlocked this lead |
get_lead
The lead preview: the card fields plus is_open, summary of the role, soft_skills, about_company and other_locations (the same role in other cities, with their lead ids). Counts as one lead explore.
| Parameter | Type | Description |
|---|---|---|
lead_id | id | Required |
Returns lead and notes. lead.enrichment_cost_credits is what enrich_lead would charge now: 1, or 0 if already unlocked. If you've already enriched the lead, lead.details holds the unlocked details. Otherwise it's null.
enrich_lead
Unlock a lead's full details. Costs 1 credit from your account's monthly credits, the same pool the Estel app uses. It's free if the lead is already unlocked, whether through MCP or by engaging with it in the app. Needs the leads:enrich scope.
| Parameter | Type | Description |
|---|---|---|
lead_id | id | Required. The role must still be open |
Returns lead with details filled in, already_enriched, charged_credits (0 or 1) and credits (your remaining credits). The details are:
| Field | Description |
|---|---|
job_links | Links to the original job postings |
experience_years | Years of experience required |
industry, applicants | |
job_tags, company_tags | |
company | website_url, size, size_band, is_blue_chip and social_links (network, url) |
Fails with insufficient_credits when you have no credits left, insufficient_scope without leads:enrich, invalid_argument if the role has closed, and quota_exceeded after 300 enrichments in a day.
Companies
search_companies
Find companies by what they are hiring for, ordered by the number of matching open roles. Each company returned counts as one company explore.
| Parameter | Type | Description |
|---|---|---|
name | string | Part of the company name |
industry | string | Industry keyword |
location | string | Count only roles in this place |
skills | string[], up to 10 | Count only roles needing any of these skills |
hiring_for_title | string | Count only roles with this title |
company_size | enum | See shared values |
min_open_roles | integer, 1–1000 | Default 1 |
posted_within_days | integer, 1–365 | Count only roles posted in this window |
include_recruitment_agencies | boolean | Default false |
page_size, cursor | See conventions |
Returns total, returned, companies, next_cursor, quota and notes. Each company has id, name, logo_url, website_url, industry, sector, size, size_band, location and open_roles (roles matching your filters).
get_company
A company profile with its hiring summary. Counts as one company explore.
| Parameter | Type | Description |
|---|---|---|
company_id | id | Required |
Returns company and quota. The company has:
- Profile:
id,name,logo_url,website_url,industry,sector,size,size_band,headquarters,founded,about,specialties,is_blue_chip,office_locations. - Hiring:
open_roles, plus counts inopen_roles_by_experience_level,open_roles_by_work_type,top_titles,top_skillsandtop_locations. Each count is a{ "label": ..., "count": ... }object. - Latest activity:
recent_leads, as lead cards, andrecent_signals.
Signals
search_signals
Recent company news that predicts hiring, newest first. Not metered.
| Parameter | Type | Description |
|---|---|---|
countries | string[] | GB, IE, DE, AT, CH, PL, RO, BG |
categories | string[] | funding, grant, investor_fund, new_location, acquisition, c_level_change, layoff, technology_change, outsourcing |
polarity | enum | positive, negative, neutral |
company_id | id | Signals for one company |
company_name | string | Part of the company name |
company_size | enum | See shared values |
announced_within_days | integer, 1–365 | Only signals announced in this window |
page_size, cursor | See conventions |
Returns returned, signals and next_cursor. Each signal has id, company (id, name, logo_url), category, polarity, title, summary, url (the news source), country (ISO 3166-1 alpha-2) and announced_on.
Market insights
get_market_insights
Aggregate statistics over open roles: counts, shares, trends and salary benchmarks. Group by one dimension, optionally broken down by a second. Takes the same filters as search_leads. Counts as one market insight query, however many rows it returns.
| Parameter | Type | Description |
|---|---|---|
group_by | enum, required | experience_level, work_type, employment_type, company, skill, city, country, industry, title, posted_week, posted_month |
metric | enum | count (default) or salary |
breakdown_by | enum | experience_level, work_type, employment_type, country |
currency | enum | Currency for salary figures. Default GBP |
limit | integer, 1–50 | Maximum groups. Default 10 |
| Filters | title, location, radius_km, skills, experience_level, work_type, employment_type, industry, company_id, company_size, posted_within_days, include_recruitment_agencies |
See the market insights guide for outputs, methodology and examples.
Account
get_account_usage
Your remaining enrichment credits, today's quotas, your plan, and the scopes of the credential in use. No parameters. Not metered.
Returns plan, subscription_status, credential (type, which is api_key or oauth, and scopes), enrichment_credits, daily_quotas (lead_explores, company_explores, insight_queries, enrichments), calls_per_minute and notes.
get_filter_options
Valid values for every filter, plus the most common industries. No parameters. Not metered.
Returns:
- Lead filters:
experience_levels,work_types,employment_types,company_size_bands(value to label),salary_currencies. - Signal filters:
signal_categories,signal_polarities,signal_countries(code to name). - Insight options:
insight_group_by,insight_breakdown_by. - Industries:
top_industries.