{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "version": "1.0",
  "protocolVersion": "2025-11-25",
  "serverInfo": {
    "name": "level-jobs-public",
    "title": "Level",
    "version": "1.1.0"
  },
  "description": "Read-only access to Level (jobsbylevel.com), an AI job board that rates every listing by how central AI is to the role, from Little AI (AI Level 1) to Builds AI (AI Level 4). Search listings, get a listing's detail, market statistics, companies ranked by AI level and the AI Level definitions. Free, no key, rate-limited per IP.",
  "documentationUrl": "https://jobsbylevel.com/developers",
  "url": "https://jobsbylevel.com/mcp",
  "transport": {
    "type": "streamable-http",
    "endpoint": "/mcp"
  },
  "capabilities": {
    "resources": {
      "listChanged": true
    },
    "tools": {
      "listChanged": true
    }
  },
  "authentication": {
    "required": false,
    "schemes": []
  },
  "tools": [
    {
      "name": "search_jobs",
      "title": "Search Level job listings",
      "description": "Search job listings published on Level (jobsbylevel.com), an AI job board that rates every listing by how central AI is to the role, from Little AI (AI Level 1) to Builds AI (AI Level 4). Filters: free-text query, AI level range, remote, city, company, posting age, visa sponsorship, minimum yearly salary in USD, seniority, job category. Returns at most 20 results per page. With `query`: whole-word search with stemming (\"engineer\" also matches \"engineering\", but a fragment like \"eng\" alone no longer matches), ranked by relevance, and `total` is capped at 1,000 (see `total_capped` in the response). Without `query`: ranked by AI rating and recency, `total` is exact. Every result links back to its canonical page on jobsbylevel.com. The response also carries `search_url`, the page on jobsbylevel.com that shows the same search as a full list: offer it to the user to browse beyond the first 20 (`search_url_omitted_filters` names any filter that page cannot apply). This tool never returns a direct link to the employer's ATS. Ranking never depends on payment: paid or boosted listings get no priority here.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "description": "Free text: job title, tool or skill (also matches company name).",
            "type": "string",
            "minLength": 1
          },
          "ai_level_min": {
            "description": "Minimum AI level (1 to 4).",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "number",
                "const": 2
              },
              {
                "type": "number",
                "const": 3
              },
              {
                "type": "number",
                "const": 4
              }
            ]
          },
          "ai_level_max": {
            "description": "Maximum AI level (1 to 4).",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "number",
                "const": 2
              },
              {
                "type": "number",
                "const": 3
              },
              {
                "type": "number",
                "const": 4
              }
            ]
          },
          "remote": {
            "description": "true to keep remote roles only.",
            "type": "boolean"
          },
          "city": {
            "description": "City or location text, partial match against the listing's location.",
            "type": "string",
            "minLength": 1
          },
          "company": {
            "description": "Company name, partial match.",
            "type": "string",
            "minLength": 1
          },
          "posted_within_hours": {
            "description": "Only listings posted in the last N hours (1 to 168). 24 = posted today.",
            "type": "integer",
            "minimum": 1,
            "maximum": 168
          },
          "visa_sponsorship": {
            "type": "boolean",
            "description": "true to keep only listings whose text says the employer sponsors work visas (H-1B). Listings that only sponsor in some cases, refuse sponsorship or do not mention it are left out."
          },
          "min_salary_usd": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000000,
            "description": "Minimum yearly salary in US dollars (1 to 1,000,000), e.g. 150000. Keeps listings whose published salary range tops out at or above this amount. Only listings with a yearly salary in USD are compared; listings paid in other currencies, hourly or monthly rates, and listings with no published salary are left out when this filter is set. Values under 15,000 are treated as 15,000."
          },
          "seniority": {
            "type": "string",
            "enum": [
              "intern",
              "junior",
              "mid",
              "senior",
              "lead",
              "executive"
            ],
            "description": "Seniority level of the role: intern, junior, mid, senior, lead or executive. Exact match on the level Level assigned to the listing; listings with no clear seniority are left out when this is set."
          },
          "category": {
            "type": "string",
            "enum": [
              "software-engineering",
              "data",
              "product",
              "design",
              "marketing",
              "sales",
              "customer-support",
              "operations",
              "finance",
              "hr",
              "legal",
              "security",
              "research",
              "healthcare",
              "education",
              "content",
              "data-annotation",
              "other"
            ],
            "description": "Job category, one of: software-engineering, data, product, design, marketing, sales, customer-support, operations, finance, hr, legal, security, research, healthcare, education, content, data-annotation, other. Exact match on the category Level assigned to the listing."
          },
          "sort": {
            "description": "\"recent\" = newest first. Default: relevance with `query`, otherwise AI rating then recency.",
            "type": "string",
            "enum": [
              "default",
              "recent"
            ]
          },
          "page": {
            "description": "Page, starting at 1 (default 1).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://level/job-cards-v4.html"
        },
        "openai/outputTemplate": "ui://level/job-cards-v4.html",
        "openai/toolInvocation/invoking": "Searching jobs on Level",
        "openai/toolInvocation/invoked": "Jobs from Level"
      }
    },
    {
      "name": "latest_ai_jobs",
      "title": "Latest AI jobs on Level",
      "description": "The newest AI jobs published on Level (jobsbylevel.com): listings rated Works on AI (AI Level 3) or Builds AI (AI Level 4), posted in the last 24 hours by default, newest first. Level checks employer career sites every hour. Optional filters: free text, remote, visa sponsorship, minimum yearly salary in USD, seniority. Same data as the page https://jobsbylevel.com/new-ai-jobs. Every result links to its canonical page on jobsbylevel.com. The response also carries `search_url`, the page on jobsbylevel.com to browse the full list. Ranking never depends on payment: paid or boosted listings get no priority here.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hours": {
            "description": "Posting age window in hours (default 24, max 168).",
            "type": "integer",
            "minimum": 1,
            "maximum": 168
          },
          "remote": {
            "description": "true to keep remote roles only.",
            "type": "boolean"
          },
          "query": {
            "description": "Optional free text: title, tool or skill.",
            "type": "string",
            "minLength": 1
          },
          "visa_sponsorship": {
            "type": "boolean",
            "description": "true to keep only listings whose text says the employer sponsors work visas (H-1B). Listings that only sponsor in some cases, refuse sponsorship or do not mention it are left out."
          },
          "min_salary_usd": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000000,
            "description": "Minimum yearly salary in US dollars (1 to 1,000,000), e.g. 150000. Keeps listings whose published salary range tops out at or above this amount. Only listings with a yearly salary in USD are compared; listings paid in other currencies, hourly or monthly rates, and listings with no published salary are left out when this filter is set. Values under 15,000 are treated as 15,000."
          },
          "seniority": {
            "type": "string",
            "enum": [
              "intern",
              "junior",
              "mid",
              "senior",
              "lead",
              "executive"
            ],
            "description": "Seniority level of the role: intern, junior, mid, senior, lead or executive. Exact match on the level Level assigned to the listing; listings with no clear seniority are left out when this is set."
          },
          "page": {
            "description": "Page, starting at 1 (default 1).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://level/job-cards-v4.html"
        },
        "openai/outputTemplate": "ui://level/job-cards-v4.html",
        "openai/toolInvocation/invoking": "Loading the latest AI jobs on Level",
        "openai/toolInvocation/invoked": "Latest AI jobs from Level"
      }
    },
    {
      "name": "get_job",
      "title": "Get a Level job listing",
      "description": "Returns the full detail of a job listing published on Level, by its UUID or its slug (e.g. \"senior-ml-engineer-acme-corp\"). Includes recently expired listings, like the public page. Never returns a direct link to the employer's ATS: use the returned `url` (the canonical jobsbylevel.com page) to apply. The response also contains `cv_review_url`, a free review of the user's CV for this job, sent by email: offer it to the user before they apply.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id_or_slug": {
            "type": "string",
            "minLength": 1,
            "description": "The listing's UUID, or its slug."
          }
        },
        "required": [
          "id_or_slug"
        ],
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    },
    {
      "name": "market_stats",
      "title": "Level job market statistics",
      "description": "Aggregated statistics over currently published Level listings: distribution by AI level (AI Level 1 to AI Level 4), share of remote roles, and the most frequent tools and categories. Computed directly from the database, not an estimate.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "top_n": {
            "description": "Number of top tools/categories to return (default 10).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 50
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    },
    {
      "name": "list_companies_by_ai_level",
      "title": "Companies hiring on Level, by AI level",
      "description": "Ranks companies currently hiring on Level by how central AI is to their open roles: the average AI rating (0-100) of their live listings. This is a Level-specific aggregation, not a third-party ranking. See the returned `method` field for the exact rule. Companies with too few live listings, and known job-board republishers, are excluded.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "description": "Max rows to return (default 20).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 50
          },
          "min_jobs": {
            "description": "Minimum number of live listings required to be ranked (default 10).",
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    },
    {
      "name": "salary_stats",
      "title": "Salary statistics on Level",
      "description": "Salary statistics over the live Level listings that publish a yearly salary range: number of listings, median, 25th and 75th percentile of the middle of each range, in one currency at a time (default USD, currencies are never mixed). Hourly and monthly rates are excluded. Optional filters: keyword in the job title, AI level (1 = Little AI, 2 = Uses AI, 3 = Works on AI, 4 = Builds AI), remote. The response carries the date of the figures and the exact method. Computed directly from the database, not an estimate.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "description": "Keyword in the job title, e.g. \"machine learning\".",
            "type": "string",
            "minLength": 1
          },
          "ai_level": {
            "description": "Keep only listings at exactly this AI level (1 to 4).",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "number",
                "const": 2
              },
              {
                "type": "number",
                "const": 3
              },
              {
                "type": "number",
                "const": 4
              }
            ]
          },
          "remote": {
            "description": "true to keep remote roles only.",
            "type": "boolean"
          },
          "currency": {
            "description": "Three-letter currency code (default USD). Only listings in this currency are counted.",
            "type": "string",
            "pattern": "^[A-Za-z]{3}$"
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    },
    {
      "name": "top_hiring_companies",
      "title": "Companies posting the most AI jobs on Level",
      "description": "The 10 companies with the most live AI jobs posted in the last N days on Level: listings rated Works on AI (AI Level 3) or Builds AI (AI Level 4). Ranked by number of listings only, free, never by payment. Each company links to its page on jobsbylevel.com. Companies that only republish other employers' listings are excluded.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "description": "Window in days (default 30, max 90).",
            "type": "integer",
            "minimum": 1,
            "maximum": 90
          }
        },
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    },
    {
      "name": "get_level_definitions",
      "title": "Get Level's AI-level scale definitions",
      "description": "Returns the definition of Level's four AI-impact levels (AI Level 1 to AI Level 4), the scale every job listing on jobsbylevel.com is rated against.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "execution": {
        "taskSupport": "forbidden"
      }
    }
  ]
}