MyPlayground
This server lets you query real compensation data from levels.fyi for tech roles. It's recommended to call get_level_mapping first to understand a company's internal leveling structure before querying offers.
get_level_mapping: Find how a company names its internal levels (e.g., 'L5', 'SDE II', 'E4') for a given job family (e.g., Software Engineer, Product Manager).get_recent_offers: Fetch the most recent salary offers for a given company, role, and level, optionally filtered by location — useful for understanding current market rates and total compensation trends.
Allows querying compensation data from levels.fyi.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MyPlaygroundadd 15 and 27"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
levels-fyi-mcp
MCP Server for querying compensation data from levels.fyi.
What this server provides
Server name: LevelsFyi
Tools:
get_recent_offers(company_name: str, role: str, level: str, location: str = None) -> dict(Hit levels.fyi salary search API to find the recent offer data for given company, role, level, location)get_level_mapping(company_name: str, role: str = "Software Engineer") -> dict(Get the level mapping for a given job family at a company)
Related MCP server: FastMCP Demo Server
End User Installation
This section is for users who only want to install and run the MCP server in Cursor.
Requirements
Python
>=3.11
Installing the MCP
This MCP is hosted on Prefect Horizon, which is a low-code/no-code way to host MCP servers for LLMs to be able to use. The MCP URL is https://levels-fyi.fastmcp.app/mcp, so you should be able to use this server address to add to Codex, Claude Code, OpenAI SDK, Cursor, Gemini CLI.
For example, in Claude Code, you can reference this wiki for how to install the MCP server. You can run claude mcp add --transport http levels-mcp https://levels-fyi.fastmcp.app/mcp to install the MCP server.
If you're on Cursor, you can visit this link and follow the on-screen instructions
Developer Setup
This section is for contributors working on code changes.
Install dependencies
From the project root:
uv syncRun server locally
uv run python main.pyAdd or update dependencies
uv add <package>
uv syncQuick environment check
uv run python -c "import fastmcp; print('fastmcp ok')"Project structure
.
├── main.py
├── src/
├── pyproject.toml
└── README.mdTroubleshooting
Failed to spawn: fastmcp (os error 2)
Cause: Cursor cannot find the fastmcp executable.
Fix:
Prefer Cursor config with
uv run python main.py, orInstall global tool with
uv tool install fastmcpand ensure PATH includes the uv tool bin (commonly~/.local/bin).
Contributing
If you have a feature request, please create a GitHub issue to triage the requests
Feel free to fix any issues but please raise a Pull Request so that I can review it prior to deployment
Available Tools
2 toolsget_level_mappingA
REQUIRED: Call this tool FIRST to find the company's specific level names (e.g., '63', 'L5', 'E4') versus the industry 'Standard' ladder. 'role' must be the full name: 'Software Engineer', 'Product Manager', etc.
| Name | Required | Description | Default |
|---|---|---|---|
| company_name | Yes | ||
| role | No | Software Engineer |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool should be called first (a behavioral trait) but does not mention side effects, permissions, rate limits, or output structure beyond 'find level names'. The lack of behavioral details reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The first sentence front-loads the requirement and purpose. The second gives a concrete parameter rule. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (though not shown), the description adequately covers the tool's role as a prerequisite mapping function. It explains the core action and parameter requirements, sufficient for an agent to use it correctly in context with its sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It adds meaning for 'role' (must be full name, gives examples) and implies 'company_name' as the company. This provides significant guidance beyond the raw schema, though company_name is not explicitly described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'find the company's specific level names versus the industry Standard ladder.' It uses a specific verb 'find' and resource 'level mapping', distinguishing it from the sibling tool 'get_recent_offers'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this tool FIRST' and specifies that 'role must be the full name'. It implies a prerequisite relationship to other tools, but does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_offersB
Fetch the most recent specific salary offers for a given role to gauge current market trends. Example: company_name='Amazon', role='Software Engineer', level='SDE II'
Location must be a single city name (e.g., 'Seattle'). If the city is ambiguous, the most major tech hub will be chosen by default
| Name | Required | Description | Default |
|---|---|---|---|
| company_name | Yes | ||
| role | Yes | ||
| level | Yes | ||
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions location ambiguity handling but fails to disclose any other behavioral traits like data freshness, number of offers returned, or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences plus an example, with no redundant information. It is front-loaded and gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks important context such as how 'recent' is defined, the number of offers fetched, and any default behavior for the optional location parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only adds meaning for 'location' (single city name) and indirectly for the other parameters through the example. It provides minimal additional semantics beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'specific salary offers' with a purpose 'to gauge current market trends'. It distinguishes from the sibling 'get_level_mapping' by focusing on offers for a given role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example and a note on location format and ambiguity resolution, but does not explicitly state when to use this tool versus alternatives or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The two tools have completely distinct purposes: one maps company-specific levels to standard ladders, the other fetches recent salary offers. No overlap in functionality.
Both tools use a consistent verb_noun pattern in snake_case: get_level_mapping and get_recent_offers, following the same style.
With only 2 tools, the server feels underdeveloped for its likely domain (compensation research). More tools like search by company or role would be expected, but the set is not extreme.
The surface covers level mapping and recent offers but lacks tools for discovering companies, roles, or historical salary trends. Some standard operations are missing, but core use cases are addressed.
Maintenance
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
Generate synthetic random user data for testing, demos, and development without using real persona.
Generate IDs, QR codes, and hashes, encode values, geolocate IPs, plus gated host diagnostics.
Developer utilities: color conversion, WCAG contrast, timestamps, UUIDs, and hashing.
Geocoding, weather forecasts, and timezone lookups
Related MCP Servers
- AlicenseCqualityDmaintenanceA simple demonstration project for the Model Control Protocol (MCP) server that provides tools for AI assistants to fetch news articles, perform calculations, retrieve weather data, and generate personalized greetings.3MIT
- FlicenseBqualityDmaintenanceA demonstration server showcasing MCP capabilities with basic tools including addition calculations and weather API integration for fetching city weather data.22
- AlicenseAqualityCmaintenanceProvides utility tools including random jokes, current weather, and name-based age prediction.3MIT
- FlicenseNot gradedqualityDmaintenanceProvides tools for calculating math expressions and querying weather, demonstrating how to build an MCP server using FastMCP or raw SDK.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/karkir0003/levels-fyi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server