Skip to content

Level

by jobsbylevel.com · remote · no sign-in to list tools · v1.1.0 · published by com.jobsbylevel

Free, read-only access to job listings rated by AI level, from Little AI to Builds AI.

Changes · 42 high findings

8 tools: 4 change things and 4 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http level-jobs https://jobsbylevel.com/mcp

Findings

Matches of fixed checks, with the text they matched.

2 high
  • The input schema at properties.visa_sponsorship.description contains "do not mention it", an instruction to keep something from the user.

    Matched text

    inputSchema.properties.visa_sponsorship.description: "...or in some cases, refuse sponsorship or do not mention it are left out."

    What this check looks for
  • The input schema at properties.visa_sponsorship.description contains "do not mention it", an instruction to keep something from the user.

    Matched text

    inputSchema.properties.visa_sponsorship.description: "...or in some cases, refuse sponsorship or do not mention it are left out."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

8 tools

Changes things 4Claude Code: ask
  • latest_ai_jobsThe 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.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The input schema at properties.visa_sponsorship.description contains "do not mention it", an instruction to keep something from the user.

      Matched text

      inputSchema.properties.visa_sponsorship.description: "...or in some cases, refuse sponsorship or do not mention it are left out."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • market_statsAggregated 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 categorie…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • salary_statsSalary 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…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • top_hiring_companiesThe 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).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 4Claude Code: allow
  • get_jobReturns the full detail of a job listing published on Level, by its UUID or its slug (e.g.No findings

    Why it is in this group

    • The name "get_job" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_level_definitionsReturns 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.No findings

    Why it is in this group

    • The name "get_level_definitions" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_companies_by_ai_levelRanks companies currently hiring on Level by how central AI is to their open roles: the average AI rating (0-100) of their live listings.No findings

    Why it is in this group

    • The name "list_companies_by_ai_level" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_jobsSearch 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 Le…1 finding

    Why it is in this group

    • The name "search_jobs" says "search": a word for reading.

    Findings

    • High

      The input schema at properties.visa_sponsorship.description contains "do not mention it", an instruction to keep something from the user.

      Matched text

      inputSchema.properties.visa_sponsorship.description: "...or in some cases, refuse sponsorship or do not mention it are left out."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http level-jobs https://jobsbylevel.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__level-jobs__search_jobs",
      "mcp__level-jobs__get_job",
      "mcp__level-jobs__list_companies_by_ai_level",
      "mcp__level-jobs__get_level_definitions"
    ],
    "ask": [
      "mcp__level-jobs__latest_ai_jobs",
      "mcp__level-jobs__market_stats",
      "mcp__level-jobs__salary_stats",
      "mcp__level-jobs__top_hiring_companies"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as level-jobs. Review it before you use it.