Levels.fyi

fyi.levels由 levels.fyi 發布官方發布者v1.0.0更新於 Oct 30, 2026

Salary, level and job data from 1M+ pay reports. Benchmark pay, evaluate offers, search open jobs.

已驗證Streamable HTTP可網頁執行效率與工作流金融

概覽

AI 產生的概覽

Levels.fyi 遠端 MCP 伺服器,根據百萬筆以上薪酬回報,讓助理查詢薪資基準、比較公司職級與地區薪酬並搜尋職缺。

可以做什麼
  • 將公司、地區、職務類別、職稱與專精領域解析為 slug,並查詢公司資料、內部職級名稱與公司分組
  • 薪酬基準:薪資百分位、依公司職級的中位數薪酬、高薪公司與高薪地區,以及單筆薪資回報
  • 查看股權歸屬(vesting)時程,並依歸屬特徵篩選公司
  • 搜尋職缺,並讀取職缺詳情及其標示的薪酬區間
  • 讀取已登入使用者的職涯檔案、新增或取代履歷,並提交使用者本人的薪資或 offer
  • 解釋薪酬指標與 Levels.fyi 資料模型,並回報錯誤或缺漏的資料
適用情境
適合在評估 offer 或現有薪酬是否具競爭力、跨公司/職級/地區比較薪酬,或尋找標示薪酬區間的職缺時使用。這是給個人的免費版本,不適合雇主做薪酬基準分析。
執行需求
遠端 MCP 伺服器,位址為 API 金鑰。提問不需帳號;提交薪資只需電子郵件;讀取個人檔案或上傳履歷則需登入。呼叫有頻率限制,免費版回傳結果刻意有所限制。
安裝前請注意
此伺服器會寫入資料:add-salary-submission 會公開使用者本人的薪資或 offer,upload-resume 會取代已儲存的履歷,send-feedback 會將回饋送給 Levels.fyi。履歷與檔案屬個人資料;回饋中除選填的聯絡電子郵件外不應包含個人資訊。免費版結果有上限,工具輸出中也會推廣付費的雇主產品。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Levels.fyi,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/fyi.levels%2Flevels-fyi/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "levels-fyi": {
      "type": "http",
      "url": "https://mcp.levels.fyi/"
    }
  }
}

README

Levels.fyi plugin for Claude, ChatGPT, Codex, Cursor and Antigravity

[skills.sh]

Salaries, jobs and career insights from Levels.fyi, right in your AI assistant. Benchmark your compensation, evaluate and compare job offers, compare company levels and pay by location, search open jobs, and add your own salary.

The plugin bundles the Levels.fyi MCP server (https://mcp.levels.fyi/) with skills that teach the assistant how to use it. No account is needed to ask questions, and adding your own salary needs only an email. Sign in to read your profile or upload a resume.

This is the free version of Levels.fyi for individuals. It has pay by job family, location and company level.

Install

AppHow
Claude (web, desktop, Cowork)Customize > Plugins, then add Levels.fyi from the directory. For the connector only, add it in one click
Claude Code/plugin install levels-fyi --marketplace Levels-fyi/levels-fyi-plugin
ChatGPTAdd Levels.fyi from the plugin directory
Codexcodex plugin marketplace add Levels-fyi/levels-fyi-plugin, then install Levels.fyi
CursorDashboard > Plugins & MCPs > Add Marketplace > Import from Repo, then enter https://github.com/Levels-fyi/levels-fyi-plugin. For the MCP server only, add it in one click
GeminiIn Gemini Developer Mode, add https://mcp.levels.fyi/ as a custom app
Any MCP clientAdd https://mcp.levels.fyi/ as a remote MCP server, for example claude mcp add --transport http levels-fyi https://mcp.levels.fyi/
Other agents (skills)npx skills add Levels-fyi/levels-fyi-plugin, then add https://mcp.levels.fyi/ as a remote MCP server, or let the agent connect it on first use

What's inside

SkillWhat it does
evaluate-offerChecks a job offer against Levels.fyi pay data for the company, level and location
compare-offersCompares two or more offers side by side, yearly and over four years
benchmark-my-payBenchmarks your current pay, a raise, a promotion or a comp statement against your company's levels
contribute-salaryAdds your salary or offer to Levels.fyi, after you confirm a preview

See plugin/README.md for example prompts and what data the plugin sends.

For employers

Levels.fyi has paid products for compensation, HR and recruiting teams:

  • API and MCP. 40 tools for Claude, ChatGPT, Cursor or your own agents, with more filters for precise compensation benchmarking, full results and competitive intelligence on other companies. Also available as a REST API, or a CLI on request.
  • Compensation Data. Benchmarks and the Data Explorer for setting and reviewing pay bands, with percentiles refreshed daily.
  • Interactive Offers. Offer letters that candidates actually understand.

Book a demo or email [email protected].

Development

listing.json is the single source for every listing. The build generates the manifests in plugin/ and the marketplaces from it. Edit the skills in plugin/skills/.

bash
npm run build:strict   # generate plugin/, the marketplaces and CHANGELOG.mdnpm run validate       # run Claude's directory checks

License

See LICENSE. "Levels.fyi" and the Levels.fyi logos are trademarks of Levels.fyi.

來源:README.md,提交 10f71d9

工具

30

get-permissions

Check Connection & Limits

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.

輸入參數message

get-salary-percentiles

Get Median Total Compensation

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 pay by level, use get-salaries-by-company-level instead. Free limit: Median (p50) total compensation for one job family in one location. No other percentiles, sample size, level split, or company, focus area or funding filters. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: jobFamilySlug, locationSlug.

輸入參數locationSlug必填jobFamilySlug必填

get-salaries-by-company-level

Get Pay 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 level structure. Free limit: Total compensation per level for one company and job family. No percentiles or counts. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: jobFamilySlug, locationSlug, companySlug.

輸入參數companySlug必填locationSlug必填jobFamilySlug必填

search-raw-data-points

Search Recent Salary Submissions

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 was submitted in. Returns { total, rows }; total counts matches up to 250, and only the newest rows are returned. Free limit: The 3 newest submissions, with base salary and total compensation only. No text search, level, years-of-experience, sort or paging. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: jobFamilySlug.

輸入參數companySluglocationSlugjobFamilySlug必填

get-company

Get Company Profile

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: companyNameOrSlug.

輸入參數companyNameOrSlug必填

get-company-levels

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-salaries-by-company-level. Returns an empty list with an explanation when the company has no known level structure. Free limit: Full level data for Amazon, Google, Microsoft, Meta and Apple. Other companies: level names only. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: companySlug, jobFamilySlug.

輸入參數companySlug必填jobFamilySlug必填

get-company-group

Resolve 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, AUTOMOTIVE, SPACE, SOCIAL_MEDIA, AI, AI_PLUS, FINTECH, FAANG_PLUS, HEDGE_FUNDS, SEMICONDUCTOR, BIOTECH, WEB3, TRADING_FIRMS, DEFENSE.

輸入參數group

search-companies

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 its old name. Returns an array of { name, slug } matches. If this returns no matches, fall back to search-all, which searches every entity type and applies a fuzzy fallback. REQUIRED arguments: searchText.

輸入參數limitsearchText必填

search-companies-by-vesting

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 their decoded vesting schedules.

輸入參數limithasCliffmaxYearsminYearsvestingTypevestingPattern

search-top-companies

Top-Paying 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. No sample size, level or years-of-experience filter. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: jobFamilySlug, countrySlug.

輸入參數countrySlug必填jobFamilySlug必填

get-location

Get Location Details

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) must be passed as arrays, even for a single value.

輸入參數locationSlugs必填

get-location-stats

Top-Paying Locations

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-percentiles (the last 12 months), so the same location can show a different median: quote get-salary-percentiles for one location's pay. Free limit: Median (p50) total compensation for the top locations in one country. No company or level filter. Pass canonical slugs (jobFamilySlug, locationSlug, countrySlug, companySlug): resolve names first with search-job-families, search-locations and search-companies; never guess a slug. REQUIRED arguments: jobFamilySlug, countrySlug.

輸入參數countrySlug必填jobFamilySlug必填

search-locations

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 its location type. Optionally restrict to one type. Without a type, a name that matches no country, metro or state is searched as a city: each city comes with its parent location (a metro, or the country where there is none), which is the slug to pass to the pay tools. Several places can share a name: pick the one the user means from context, and ask if unsure. If this returns no matches, fall back to search-all, which searches every entity type and applies a fuzzy fallback. REQUIRED arguments: searchText.

輸入參數typelimitsearchText必填

get-job-family

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. REQUIRED arguments: jobFamilySlug.

輸入參數jobFamilySlug必填

search-job-families

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 title (e.g. "UX designer") is not a job family: if this returns no matches, use search-role-terms, which returns the title with its job family slug, then search-all. REQUIRED arguments: searchText.

輸入參數limitsearchText必填

search-job-titles

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 excludeFamilyLikeTitles to drop titles that are effectively just the job family. If this returns no matches, fall back to search-all, which searches every entity type and applies a fuzzy fallback. REQUIRED arguments: searchText.

輸入參數limitsearchText必填excludeFamilyLikeTitles

search-focus-areas

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 this returns no matches, fall back to search-all, which searches every entity type and applies a fuzzy fallback. REQUIRED arguments: searchText.

輸入參數limitsearchText必填

search-role-terms

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 right one to the benchmark tools. REQUIRED arguments: searchText.

輸入參數limitsearchText必填

get-profile

Get My 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 uploaded. Never returns contact details or the resume file. Use it to personalize answers about the user's own pay, level or career.

無需輸入參數。

upload-resume

Upload My 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 pages) or a DOCX, at most 4.5 MB. Set fileType from the file's actual extension: the upload must be a file of that format, or it cannot be read. Returns two ways to upload: - upload: a presigned S3 upload that expires in 10 minutes. Use it only if you can read the user's file and make HTTP requests yourself, e.g. a terminal agent with the file on disk: send an HTTP POST with multipart/form-data to upload.url, with every entry of upload.fields as form fields, followed by the file in a field named "file". A 201 response means it worked; a larger file is refused. - webUploadUrl: otherwise, give the user this link to upload the file themselves after signing in. Never paste the resume's text or contents anywhere else. The resume is parsed in the background, usually within a couple of minutes. Call get-profile afterwards to check it; until parsing finishes, it can still show the previous resume. REQUIRED arguments: fileType.

輸入參數fileType必填

add-salary-submission

Add My Salary

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 complete submission. Resolve the company, job family and focus area to slugs with the search tools first, and the location with search-locations and type "city". Every number must come from the user's own words or from a document the user shared; ask for each required field that is missing. Gather the details conversationally, a question or two at a time, starting with the company, role and location; do not list every field up front. Write text fields in English. Call once with confirm=false and show the preview to the user, then call again with the same arguments and confirm=true only after a clear yes. If the user isn't signed in, ask for their email before the confirm=true call and send it in email; signing in isn't needed. Amounts are in the submission's own currency. Stock options go in the option fields (totalOptionsGranted for an offer, avgAnnualOptionsGranted for current pay, with the strike and preferred price), not in otherDetails; option prices may use optionPriceCurrency. If the user wants enhanced anonymity, set anonymise=true; the preview shows it. Do not submit: pay for another person, a number you estimated or took from Levels.fyi data, a range from a job posting, a hypothetical or negotiation target, or a test entry. One submission per distinct job or offer per conversation, and at most 5 confirmed submissions per 60s. Never repeat a confirmed submission; if a call fails, retry with the same submissionId. A submission is reviewed before it counts in the data. Nobody replies here, and submitting does not end your turn: keep working on the user's task. REQUIRED arguments: jobFamilySlug, title, locationSlug, compensationPerspective, currency, baseSalaryVal

輸入參數teamemailleveltitle必填source必填confirmcurrency必填anonymisestockTypesourceDatecompanyNamecompanySlug另有 24 個

get-salary-submission-by-id

Get Salary Submission

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: Base salary and total compensation only, in USD. REQUIRED arguments: uuid.

輸入參數uuid必填

get-vesting-schedules

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 vesting type (RSU, options). Pass company slugs (use search-companies to resolve names first). REQUIRED arguments: companySlugs. Array-typed arguments (companySlugs) must be passed as arrays, even for a single value.

輸入參數companySlugs必填

search-jobs

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 terms that appear in job posts. Pass at most one location per call, and only one the user named: resolve it with search-locations, and never use the user's own position. Resolve companies and job families with search-companies and search-job-families. If nothing matches, widen the search (drop a filter or simplify the query) and try once more; if there's still nothing, say so rather than listing unrelated jobs. When the user asks for jobs without saying which role, offer to search from their Levels.fyi profile. If they agree, call get-profile and draft the query from its title, job family and location (locationSlug). Before searching, show the user the values you will use and ask them to confirm or change them: a profile describes the job they have, not necessarily the one they want next. Do not call get-profile without asking. Results come up to 2 jobs per company; limit counts companies, except with a single companySlug, where it counts jobs. A page can hold fewer than limit; keep paging while nextOffset is not null. Put each job's url on its title and keep URLs complete. When the client shows results as cards, do not list them again in text: summarise the patterns instead. Call get-job for a posting's full description. REQUIRED arguments: query. Array-typed arguments (e.g. companySlugs, jobFamilySlugs) must be passed as arrays, even for a single value.

輸入參數limitquery必填offsetsortBycompanySlugslocationSlugjobFamilySlugsstandardLevelsemploymentTypespostedWithinDaysworkArrangementsminBaseCompensation另有 1 個

get-job

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, the url of the Levels.fyi job page, and applyUrl to apply on the employer's site. REQUIRED arguments: jobId.

輸入參數jobId必填

send-feedback

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 arguments: kind, message.

輸入參數kind必填message必填toolNamecompanySlugcontactEmaillocationSlugjobFamilySlug

search-all

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 disambiguate an ambiguous name; once the type is known, prefer the type-specific tools (search-companies, search-job-titles, search-locations, search-job-families, search-focus-areas) for tighter results. If a match is found under a DIFFERENT entity type than the user expected, do not silently substitute it — surface that mismatch and confirm with the user before proceeding. REQUIRED arguments: searchText.

輸入參數limitsearchText必填excludeFamilyLikeTitles

get-available-filters

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, funding stage, revenue, valuation, work arrangement, offer vs employee) are not accepted by any tool here. Call this before building a query if unsure what a tool accepts.

無需輸入參數。

get-metric-explanation

Explain Compensation Metric

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.

輸入參數metric必填

get-domain-knowledge

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 families / enums. negotiation_coaching describes Levels.fyi's offer negotiation coaching: use it only when the user asks for help negotiating. Omit "topic" to get every data-model topic.

輸入參數topic

版本歷史

1
  1. v1.0.0最新Oct 30, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。

其他 Levels 整合