sponsor-check
Click on "Deploy 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., "@sponsor-check Can Octopus Energy sponsor a Skilled Worker visa?"
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.
sponsor-check
Can this UK employer sponsor my visa? Ask Claude, get an answer from the official Home Office register in seconds.
Live demo: sponsor-check.onrender.com (free hosting, so the first visit after a quiet spell can take up to a minute to wake up)
sponsor-check is an MCP server, command-line tool and web app that checks
employers against the
Register of licensed sponsors: workers,
which UK Visas and Immigration republishes almost every working day. It also checks a salary
against the published Skilled Worker thresholds and going rates.
$ sponsor-check check "Synthesia"
YES: Synthesia / Skilled Worker (register 2026-09-28)
Synthesia Limited (London) score 100
- Skilled Worker [A]
$ sponsor-check salary 45000 2136
YES: £45,000 for occupation code 2136 (IT quality and testing professionals)
required: £41,700
rule: Standard rate: the higher of the £41,700 general salary threshold and the £41,200
going rate for occupation code 2136 (IT quality and testing professionals).Why
Checking the register by hand means downloading a ~10 MB CSV and Ctrl+F-ing it for every application. That breaks in predictable ways:
Trading names vs legal names. Job ads use the brand; the register uses the legal entity, often as
LEGAL NAME LTD T/A Brand. sponsor-check indexes both halves.Inconsistent data entry.
CAKE GLORY LTD LTD,F-Secure (UK) Limited,2i Limitedvs2I LIMITED. Names are normalised (case, punctuation, legal suffixes, accents,&) before matching.One row per route. The same employer appears once per visa route. Results are grouped per organisation, with each route and its A/B rating.
Downgraded licences. B-rated and provisional licences are flagged, because they change what you should ask the employer.
Related MCP server: hsm-mcp
Use it from Claude
Claude Code
claude mcp add sponsor-check -- sponsor-check-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"sponsor-check": { "command": "sponsor-check-mcp" }
}
}Then ask things like "Can Octopus Energy sponsor a Skilled Worker visa?" or paste a job ad and ask whether the employer is on the register.
Tool | What it does |
| Verdict: |
| Ranked fuzzy matches with routes and ratings |
| Verdict: |
| Register and thresholds dates, sizes and GOV.UK source URLs |
All tools are read-only.
Command line
pip install git+https://github.com/sauravss98/sponsor-check
sponsor-check update # download today's register
sponsor-check check "Octopus Energy" # exit code 0 only if licensed
sponsor-check check "Mode Agence" --route "Creative Worker"
sponsor-check search "octopus" -n 10 --json
sponsor-check salary 45000 2136 # exit code 0 only if the salary meets it
sponsor-check salary 62000 1111 --new-entrant --jsonThe register is cached in ~/.cache/sponsor-check (override with SPONSOR_CHECK_HOME) and
refreshed automatically when it is more than 24 hours old. If GOV.UK is unreachable, the last
good copy is used.
How it works
GOV.UK Content API ──► find today's CSV URL ──► download (atomic swap)
│
▼
parse ► group rows by organisation ► SQLite
│
aliases: full name, legal part, trading part(s)
│
query ► normalise ► exact alias lookup ─┴─► RapidFuzz WRatio over aliases ► verdictThe CSV link changes with every publication, so it is discovered through the GOV.UK Content API, with an HTML fallback.
Exact alias hits score 100. Fuzzy hits are capped at 99 so a guess is never reported as a confirmed licence; names that start with the query get a boost.
A name that only matches once words like "the" are dropped is not confirmed: "Amazon" is a possible match for "... t/a The Amazon", not an exact one. "UK" is still ignored, so "Google" confirms "Google (UK) Limited".
Verdict bands: 100 =
licensed, 90 to 99 =possible_match, below that =not_found(closest names still shown).
Salary thresholds
The salary requirement is the higher of a flat general threshold and the occupation's going
rate, and both move with the Immigration Rules. No figure is hardcoded: they are scraped from
the published GOV.UK guidance into src/sponsor_check/data/thresholds.json, which records the
source URL and publication date of every table it used. Every answer repeats that date, names
the rule that produced it, and lists the lower rates the job could qualify for, such as the new
entrant, PhD, immigration salary list and temporary shortage list rates.
Refresh the data after a rules change with python scripts/refresh_thresholds.py, then commit
the diff. The script fails loudly rather than writing a half-empty file if a page changes shape.
Web app
Try it at sponsor-check.onrender.com. A React frontend in
web/ talks to a small FastAPI wrapper (src/sponsor_check/api.py) over the same register.py/salary.py logic the CLI and MCP
server use, so all three surfaces always agree.
pip install -e ".[dev]"
sponsor-check-api # http://127.0.0.1:8000
cd web
npm install
npm run dev # http://localhost:5173, proxies /api to the server aboveSee web/README.md for more.
Versioned API (/v1)
A stable JSON API for other clients, such as the Sponsor Badge browser extension. Unlike
/api, which changes with the web app, /v1 only ever gains fields.
Endpoint | Returns |
|
|
| Whether the salary clears the general threshold and the new entrant floor, with the source and date of both, plus the hours-per-week and weeks-per-year basis for annualising an hourly rate. These are floors only: the occupation's going rate also applies |
|
|
confidence is 100 only for an exact match on a legal or trading name, so a fuzzy guess is
never reported as licensed. Lookups are cached on the normalised name. /v1 is limited to
60 requests a minute per IP across all its endpoints (SPONSOR_CHECK_RATE_LIMIT changes this),
and over the limit it returns 429 with Retry-After. Browser clients on another origin must be
listed in SPONSOR_CHECK_CORS_ORIGINS (comma-separated, e.g. chrome-extension://<id>).
Deploying
The Dockerfile builds everything into one container: FastAPI serves /api and
the built frontend from the same origin, so no CORS setup is needed. The register is downloaded
at build time, so a cold start serves straight away, and the running server refreshes it in the
background once it is more than 24 hours old.
docker build -t sponsor-check .
docker run -p 8000:8000 sponsor-check # http://localhost:8000render.yaml deploys it to Render's free tier: in the Render dashboard choose
New > Blueprint and pick this repository. Free services sleep when idle, so the first visit
after a quiet spell takes a little while to wake up.
Development
pip install -e ".[dev]"
pytestTests run against a fixture of real rows taken from the published register, plus clearly
fictional Example ... rows for the B-rated case. They are offline: the salary tests read the
committed thresholds file, and scripts/refresh_thresholds.py is the only thing that talks to
GOV.UK at build time.
Roadmap
Salary check against Skilled Worker thresholds by occupation code
Web app: FastAPI + React frontend, live at sponsor-check.onrender.com
check_jobtool: extract employer and salary from a pasted job ad, run both checksCompanies House lookup to resolve brand names to legal entities
Publish to PyPI and the MCP registry
Disclaimer
Not legal or immigration advice. A licence means an employer can sponsor, not that it will sponsor a particular role. Always confirm with the employer.
Register data and salary thresholds: UK Visas and Immigration, published on GOV.UK under the Open Government Licence v3.0. Code: MIT.
Available Tools
4 toolscheck_salaryARead-only
Check a salary against the Skilled Worker salary requirement for an occupation.
The requirement is the higher of a general threshold and the occupation's published going rate, so both the salary and the occupation code are needed.
Args: salary: Gross annual salary offered, in pounds. soc_code: 4-digit SOC 2020 occupation code for the job, e.g. "2136". Ask the user or the employer for it; do not guess a code from the job title. new_entrant: True if the applicant qualifies for the new entrant rate, e.g. under 26, a recent UK student or graduate, in professional training, or in an eligible postdoctoral role.
Returns a verdict (meets, below, occupation_ineligible, going_rate_unavailable, unknown_occupation), the required salary and the rule that produced it, the other discount options the job could qualify under, and the date the thresholds were published.
Inputs: salary (required), soc_code (required), new_entrant.
check_sponsorARead-only
Check whether a UK employer is licensed to sponsor visas on a given route.
Args: company: Employer name as it appears in a job ad (legal or trading name). route: Visa route, e.g. "Skilled Worker" (default), "Global Business Mobility: Senior or Specialist Worker", "Scale-up", "Creative Worker".
Returns a verdict (licensed, licensed_other_routes, possible_match, not_found), the matching register entries with their routes and A/B ratings, and caveats.
Inputs: company (required), route.
register_infoBRead-only
Dates and sources of the loaded data: the sponsor register and the salary thresholds.
Inputs: no named parameters.
search_sponsorsBRead-only
Fuzzy-search the register and return the closest organisations, best first.
Inputs: query (required), limit. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
check_sponsor and search_sponsors both query the register and could be momentarily confused, but check_sponsor returns a verdict while search_sponsors returns ranked candidates, and the descriptions make this distinction clear. check_salary and register_info are clearly distinct.
check_sponsor, check_salary, and search_sponsors follow a verb_noun pattern, but register_info breaks it with a noun-only name and there's a minor plural inconsistency (sponsor vs sponsors). Still largely predictable and readable.
Four tools is a tight, well-scoped set for a focused sponsor/salary checking domain, with little redundancy. It sits slightly at the thin end but each tool earns its place.
The surface covers the key workflows: verifying a sponsor, fuzzy-discovering registered sponsors, validating salary against SOC codes, and checking data provenance. Minor gaps like route enumeration or bulk checking exist but core agent workflows are supported.
Maintenance
Related MCP Connectors
UK immigration tools: going rates by SOC, sponsor licence check, visa fees, employer right to work.
UK sponsor licence checks, Skilled Worker going rates by SOC code and live visa-sponsored jobs.
Check whether a company holds a UK or Netherlands work-visa sponsorship licence.
Salary and H-1B disclosed-wage data as agent tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables searching and analyzing H-1B visa sponsoring companies using U.S. Department of Labor data. Supports filtering by job role, location, and salary with natural language queries to find direct employers and export results.17MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying the Dutch IND public register of recognised sponsors for work/residence permits. Offers tools to search sponsors by name or KvK number and check register status.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets AI assistants search the UK Register of Licensed Visa Sponsors (125,000+ companies), enabling queries about company sponsorship, location, visa routes, and ratings.1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to evaluate job postings under a UK visa constraint, including sponsor-licence checks with confidence grades, screening for seniority and hard requirements, and role searches that exclude recruitment agencies. It also tracks application history to help avoid duplicate applications.472 npmMIT