Developer
Hand visa-sponsor data to Claude, Cursor, or any MCP-compatible AI client and let it do the searching for you. 17 tools covering everything you can do over REST, plus your own bookmarks and saved alerts. The API key and credit budget are shared with REST, so you can mix the two however you want. Set up your client • View the REST API reference
Get your API key
Create an API key from the Developer Dashboard. API access is included in Pro and Agency plans. The same key works for both REST and MCP.
Connect your MCP client
The Developer Dashboard has copy-paste config for Claude Desktop, Claude Code, and Cursor. Most people are done in under a minute. Clients that speak Streamable-HTTP (Claude Code, Cursor) point straight at https://huntukvisasponsors.com/mcp. Claude Desktop only does stdio, so its config goes through mcp-remote as a bridge — that's why you'll see it in the snippet.
Call a tool
Once connected, your client picks up all 17 tools automatically. Try something like “find me UK companies sponsoring data engineer roles, then show me which ones have actually issued visas in the last year.” The AI will chain search_jobs, get_company, and get_company_visa_stats by itself. Every call costs credits from the same pool you use for REST.
Same key, same budget. An MCP call to search_jobs costs the same as GET /public/v1/search/jobs over REST. Tier budgets, the 429 response, and the X-RateLimit-* headers all live in the REST rate-limiting section. Your current balance is on the Developer Dashboard whenever you need it.
search_jobsSearch for UK visa sponsorship job listings. Returns jobs from licensed sponsor companies scraped from LinkedIn, ranked by relevance or recency.
| Name | Type | Required | Description |
|---|---|---|---|
cursor | string | no | Pagination cursor from a previous response's endCursor |
include_recruitment_agency | boolean | no | Include jobs from recruitment agencies. Default false. |
keyword | string | no | Free-text search query (e.g. 'software engineer', 'data scientist London') |
location | string[] | no | Filter by location names (e.g. ['London', 'Manchester']) |
min_sponsor_score | number | no | Minimum sponsor score (0-100). Higher means stronger sponsorship signal. |
occupation_code | string[] | no | Filter by SOC occupation codes (e.g. ['2137', '2134']) |
page_size | number | no | Number of results per page (1-50, default 10) |
posted_within | enum | no | Only return jobs posted within this time window |
visa_type | string | no | Filter by visa/licence type slug (e.g. 'skilled-worker') |
{
"name": "search_jobs",
"arguments": {
"cursor": "example",
"include_recruitment_agency": false
}
}search_companiesSearch for UK companies that are licensed visa sponsors. Returns companies ranked by sponsor score.
| Name | Type | Required | Description |
|---|---|---|---|
company_size | string[] | no | Filter by company size buckets. Valid values: '1-50', '51-200', '201-1000', '1001+' |
cursor | string | no | Pagination cursor from a previous response's endCursor |
include_recruitment_agency | boolean | no | Include recruitment agencies. Default false. |
industries | string[] | no | Filter by SIC section industry names |
location | string[] | no | Filter by company city/location names |
min_recent_visa_count | number | no | Minimum number of recent visa issuances |
page_size | number | no | Number of results per page (1-50, default 10) |
query | string | no | Free-text search query (company name, keyword, etc.) |
visa_type | string[] | no | Filter by visa/licence type slugs |
{
"name": "search_companies",
"arguments": {
"company_size": [
"example"
],
"cursor": "example"
}
}search_locationsSearch for job locations by name. Returns locations with active job counts.
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | no | Maximum number of results (1-100, default 10) |
query | string | yes | Location name to search for (e.g. 'London', 'Manchester') |
{
"name": "search_locations",
"arguments": {
"query": "example"
}
}get_job_facetsGet available filter facets for job search, including location counts, company sizes, industries, and posted-within options.
{
"name": "get_job_facets",
"arguments": {}
}get_company_facetsGet available filter facets for company search, including location counts, company sizes, industries, and visa types.
{
"name": "get_company_facets",
"arguments": {}
}get_visa_typesList all UK visa/licence types with the number of sponsor companies for each type.
{
"name": "get_visa_types",
"arguments": {}
}get_sic_sectionsList all SIC (Standard Industrial Classification) sections. Useful for filtering companies by industry.
{
"name": "get_sic_sections",
"arguments": {}
}get_platform_statsGet aggregate platform statistics: total company count, job counts, and last company sync time.
{
"name": "get_platform_stats",
"arguments": {}
}get_companyGet detailed information about a specific company including address, visa types, SIC codes, job count, and sponsor score.
| Name | Type | Required | Description |
|---|---|---|---|
id_or_slug | string | yes | Company ID (CUID) or URL slug |
{
"name": "get_company",
"arguments": {
"id_or_slug": "example"
}
}get_company_jobsList job postings from a specific company and its related entities (canonical group).
| Name | Type | Required | Description |
|---|---|---|---|
cursor | string | no | Pagination cursor from a previous response's endCursor |
id_or_slug | string | yes | Company ID (CUID) or URL slug |
page_size | number | no | Number of results per page (1-100, default 20) |
{
"name": "get_company_jobs",
"arguments": {
"id_or_slug": "example"
}
}get_company_visa_statsGet visa issuance statistics (trends) for a specific company. Shows historical visa sponsorship counts by period.
| Name | Type | Required | Description |
|---|---|---|---|
id_or_slug | string | yes | Company ID (CUID) or URL slug |
{
"name": "get_company_visa_stats",
"arguments": {
"id_or_slug": "example"
}
}get_related_companiesGet companies related to a given company (alternate sponsor licence listings under the same canonical entity).
| Name | Type | Required | Description |
|---|---|---|---|
id_or_slug | string | yes | Company ID (CUID) or URL slug |
{
"name": "get_related_companies",
"arguments": {
"id_or_slug": "example"
}
}get_jobGet detailed information about a specific job posting including full description, company info, and sponsor score.
| Name | Type | Required | Description |
|---|---|---|---|
id_or_slug | string | yes | Job ID (CUID) or URL slug |
{
"name": "get_job",
"arguments": {
"id_or_slug": "example"
}
}list_bookmarked_jobsList the authenticated user's bookmarked jobs. Returns full job details for each bookmark.
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | no | Maximum number of results (1-100, default 20) |
offset | number | no | Number of results to skip for pagination (default 0) |
{
"name": "list_bookmarked_jobs",
"arguments": {
"limit": 10,
"offset": 10
}
}list_bookmarked_companiesList the authenticated user's bookmarked companies. Returns company details for each bookmark.
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | no | Maximum number of results (1-100, default 20) |
offset | number | no | Number of results to skip for pagination (default 0) |
{
"name": "list_bookmarked_companies",
"arguments": {
"limit": 10,
"offset": 10
}
}list_job_alertsList the authenticated user's saved job alerts with their filter criteria and delivery frequency.
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | no | Maximum number of results (1-100, default 20) |
offset | number | no | Number of results to skip for pagination (default 0) |
{
"name": "list_job_alerts",
"arguments": {
"limit": 10,
"offset": 10
}
}list_applied_jobsList the jobs the authenticated user has marked as applied, ordered by most recent first.
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | no | Maximum number of results (1-100, default 20) |
offset | number | no | Number of results to skip for pagination (default 0) |
{
"name": "list_applied_jobs",
"arguments": {
"limit": 10,
"offset": 10
}
}When a tool call fails, the MCP server returns a result with isError: true and a plain-English message. Your client passes that straight to the model, which usually means the AI fixes the bad argument and tries again without you noticing.
Running out of credits is the same event you'd hit on REST. Same monthly budget, same reset on the 1st. The error reads rate limit exceeded. If you keep hitting it, you probably want a bigger plan; upgrade on the Developer Dashboard.