fyi.levels/levels-fyi · v1.0.0 · productivity
Levels.fyi is healthy: it completed an MCP handshake in 1689 ms and exposes 30 tools.
Salary, level and job data from 1M+ pay reports. Benchmark pay, evaluate offers, search open jobs.
Endpoint: https://mcp.levels.fyi/ (streamable-http)
Repository · Website · JSON · Add to my inventory
| Users (last 30 days) | 0 |
| Handshake | Healthy |
| Auth needed | None |
| Tool count | 30 |
| Latency | 1689 ms |
| Last checked (UTC) | 2026-10-30T01:05:26.126Z |
| Checked (UTC) | Status | Latency | Error |
|---|---|---|---|
| 2026-10-30T01:05:26.126Z | Healthy | 1689 |
get-permissions | Connectivity check for the Levels.fyi MCP server. Returns "pong", echoes an optional message, and lists what each tool returns and the rate limits. Call it when a result looks smaller than expected, instead of retrying. |
get-salary-percentiles | Get the median (p50) yearly total compensation in USD for a job family in one location, across all levels, from submissions in the last 12 months. This is the figure to quote for one location's pay; get-location-stats ranks locations over a longer window, so its medians can differ. For one company's |
get-salaries-by-company-level | Get median (p50) yearly total compensation in USD for each of ONE company's internal levels (e.g. Google L3/L4/L5, Meta E3/E4/E5) for a job family in one location, from submissions in the last 12 months. Call get-company-levels first to learn the company's level names. The company must have a known |
search-raw-data-points | Get the newest individual salary submissions for a job family, optionally narrowed to one location and/or one company. Each row has the company, title, level, location, years of experience, base salary and total compensation. Every amount is in USD; originalCurrency is only the currency the salary w |
get-company | Look up a single company by its slug (preferred) or name, returning its full profile: name, slug, employee count, headquarters, founding year, ticker, company type, and estimated valuation. Use search-companies first if you only have a name and need the exact slug. REQUIRED arguments: companyNameOrS |
get-company-levels | Get a company's INTERNAL level names for a job family, ordered by seniority (e.g. Google L3/L4/L5, Meta E3/E4/E5, Stripe IC1/IC2/IC3), with any alternate names per level. Use this FIRST when a question names a specific level at a specific company (e.g. "what does a Meta E5 make"), then call get-sala |
get-company-group | Resolve a named company group (e.g. "FAANG", "AI", "Fintech") into its list of company slugs, for use in the benchmark tools' companySlugs filter. Matching is case- and separator-insensitive. Omit "group" (or pass an unknown one) to get the list of available group names. Available groups: FAANG, AUT |
search-companies | Search companies using searchText input (required) and get their Levels.fyi slugs. Use this FIRST to resolve a company name (e.g. "Google", "Meta") into the slug that the benchmark tools require in their companySlugs filter. Also matches former names and aliases, so a renamed company is found under |
search-companies-by-vesting | Find companies by their equity vesting characteristics: vesting/equity type (e.g. "RSU"), vesting shape (frontloaded, backloaded like Amazon, linear, one/two/three_year, or extended 5+ years), total years, and whether there's a 1-year cliff. Returns matching companies (most data-rich first) with the |
search-top-companies | Get the top-paying companies for a job family within one country, ranked by median (p50) yearly total compensation in USD. Returns up to 10 companies with their median. Companies with too few submissions are left out. Free limit: Median (p50) total compensation for the top companies in one country. |
get-location | Look up one or more location slugs and get their details: name, type (country / metro-DMA / state), parent country, currency, and coordinates. Use search-locations first if you only have a name. Errors if any slug is invalid. REQUIRED arguments: locationSlugs. Array-typed arguments (locationSlugs) m |
get-location-stats | Get the top-paying locations for a job family within one country, ranked by median (p50) yearly total compensation in USD from submissions in the last 2 years. Returns up to 10 locations with their median. Use it to compare where a role pays most inside a country. Its window differs from get-salary- |
search-locations | Search locations (countries, metro areas / DMAs, and US states) using searchText input (required) and get their Levels.fyi slugs. Use this to resolve a location name (e.g. "San Francisco", "United States") into the slug the benchmark tools require in their locationSlugs filter. Each result includes |
get-job-family | Look up a job family by its slug and get its focus areas (specializations) with their titles, plus untagged titles. Use this to discover the focus tags and titles available within a role (e.g. to find focusTagSlugs for the benchmark tools). Use search-job-families first if you only have a name. REQU |
search-job-families | Search job families / roles using searchText input (required) and get their Levels.fyi slugs. Use this to resolve a role name (e.g. "software engineer", "product manager", "data scientist") into the jobFamilySlug the benchmark tools require. Returns matching job families with their slugs. A specific |
search-job-titles | Search specific job titles by name. Each result includes its id (the titleId the benchmark tools accept in the jobTitleIds filter) and its parent job family, so use this to narrow a benchmark query to an exact title (e.g. "Forward Deployed Software Engineer") within a job family. Set excludeFamilyLi |
search-focus-areas | Search focus tags (specializations within a role, e.g. "mobile-ios-android", "ml-ai", "devops", "security") using searchText input (required) and get their slugs. Use this to resolve a specialization into the focusTagSlugs the benchmark tools accept. Returns matching focus tags with their slugs. If |
search-role-terms | Resolve a role term by searching job families, job titles, and focus tags TOGETHER in one call. Use this when you're unsure whether a term (e.g. "ML engineer", "mobile", "SRE") is a job family, a specific title, or a specialization — each result is tagged with its type and slug so you can feed the r |
get-profile | Get the signed-in user's own Levels.fyi career profile: current title, company, career level, job family, focus area, location, years of experience, skills, certifications and work history, plus the status of their resume (none, pending while it is being parsed, parsed, or failed) and when it was up |
upload-resume | Add or replace the signed-in user's resume on Levels.fyi. Call this only when the user asks to upload their resume. Before you call, tell the user Levels.fyi uses it to fill in their profile and match them with jobs and recruiters. Never upload a resume for another person. Accepts a PDF (at most 5 |
add-salary-submission | Add the user's own compensation to Levels.fyi: pay they earn now or a job offer they received. Call this only when the user is evaluating their compensation, asks to add their pay, or says yes when you offer. Adding compensation is how the data stays useful for everyone, the user included. Write a |
get-salary-submission-by-id | Get a single salary submission by its UUID: company, title, level, location, years of experience, offer date, base salary and total compensation. Every amount is in USD; originalCurrency is only the currency the salary was submitted in. Use the uuid from a search-raw-data-points row. Free limit: Bas |
get-vesting-schedules | Get equity vesting schedules for one or more companies, decoded into structured data: per-year vesting percent and frequency (cliff/quarterly/monthly), whether there's a 1-year cliff, whether it's backloaded (e.g. Amazon 5/15/40/40) / frontloaded / linear, plus a plain-English description and vestin |
search-jobs | Search open jobs on Levels.fyi, with the pay range each posting states. Returns { jobs, totalMatchingJobs, nextOffset }; each job has its title, company, locations, work arrangement, posting date, pay range, url (the Levels.fyi job page) and applyUrl. Simplify the user's request to role names and t |
get-job | Get one job posting by its jobId from search-jobs: the full description as text, locations, work arrangement, employment type, the pay range the posting states, Levels.fyi's estimated total compensation by level for the role (USD; matchesThisPosting marks the level the posting is for), the company, |
send-feedback | Report wrong or missing Levels.fyi data, or a missing feature, to the Levels.fyi team. Call it only after telling the user what you will send and getting their agreement. Never include personal details; contactEmail only when the user wants a reply and gives it. Returns { received, id }. REQUIRED ar |
search-all | Search across ALL entity types at once (companies, job families, job titles, focus tags, locations, and industries) by passing searchText (required) and get a single ranked list, each result tagged with its type and slug/id. Use this when you don't yet know which track an entity belongs to, or to di |
get-available-filters | List which inputs and filter values the free tier can use. The free inputs are jobFamilySlug, one locationSlug or countrySlug, and companySlug; every result is total compensation from the last 12 months. Dimensions marked free: false (levels, years of experience, focus areas, titles, company size, f |
get-metric-explanation | Explain a Levels.fyi compensation metric or concept (e.g. "TC" / total_compensation, base salary, total_cash, tc_first_year, vesting, sign_on, target_bonus) — its meaning, formula, and caveats. Pass an unknown metric to get the list of known ones. REQUIRED arguments: metric. |
get-domain-knowledge | Get reference knowledge about the Levels.fyi data model, by topic: compensation, levels, vesting, company_groups, locations, job_families, enums, negotiation_coaching. Covers compensation concepts, the standard level ladder, vesting patterns, company groups, and how to resolve locations / job famili |