LucyESL — English teaching jobs in Korea
Server Details
Live English-teaching jobs in South Korea, with salary and disclosure statistics. Read-only, no key.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Two pairs of tools have overlapping purposes: fetch and get_job both retrieve a listing by id (plain-text vs structured), and search and search_jobs both find listings (ids/titles/URLs vs filtered structured records). While descriptions clarify the differences, an agent could still misselect between the pair.
Naming is mixed: disclosure_stats and salary_stats follow noun_verb pattern, fetch and search are bare verbs, get_job uses get_+noun, search_jobs uses verb_noun. No consistent convention, though each name is readable and not chaotic.
Six tools is well within the ideal 3-15 range for a domain-specific read-only job board. Each tool has a clear purpose, though some redundancy exists, the count is appropriate.
The surface covers the core read-only workflows: search, retrieve details, and statistics. No create/update/delete needed. The redundancy between fetch/get_job and search/search_jobs suggests slight over-engineering rather than missing functionality, but no critical gaps.
Available Tools
6 toolsdisclosure_statsDisclosure ratesBRead-onlyIdempotentInspect
How many live Korean ESL job adverts state the salary, hours, severance, pension, insurance, airfare, vacation and split shifts. CC BY 4.0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool safe (readOnlyHint, idempotentHint, destructiveHint false), so the description need not repeat that. It adds useful context about the data population and the counted attributes, but it does not describe the result shape or whether output is raw counts, percentages, or rates. Nothing contradicts the annotations.
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?
One dense sentence states the core purpose and lists the measured fields, followed by a brief license note. The list is necessary for scope precision, and the sentence is front-loaded with the query intent. Only the license line adds marginal value, but it is short.
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?
For a parameterless, read-only statistics tool, the description adequately specifies the population and the variables being counted. However, there is no output schema and the description does not clarify whether the result is a single count, per-field counts, or a percentage/rate, which leaves some ambiguity for an agent selecting or invoking the tool.
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?
The tool has zero parameters and the schema is empty, so parameter semantics are fully covered by the schema. The baseline for no parameters is 4; no additional explanation is required.
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 conveys a specific aggregation resource: counts of live Korean ESL job adverts that disclose each listed employment term. The verb is implicit ('how many' = count), but the resource and scope are clear enough to distinguish it from salary_stats, which concerns salary amounts rather than disclosure presence.
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?
There is no explicit guidance on when to use this tool versus siblings like salary_stats, search, or fetch. The intended use can be inferred from 'how many ... state ...', but no alternatives or exclusion conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch one listingBRead-onlyIdempotentInspect
Fetch one LucyESL job listing by id as a plain-text document with its facts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that the output is a plain-text document containing the listing's facts, but it does not describe error behavior or missing-id handling.
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?
One sentence with no filler, front-loading the verb and object. The length is appropriate for a simple one-parameter read tool.
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?
For a single-parameter read-only fetch with annotations covering safety, the description conveys the target resource and output format. It does not distinguish fetch from get_job or enumerate the 'facts' included, but nothing essential for invoking the tool is missing.
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%, so the description needed to clarify the id parameter. It only restates 'by id,' which adds little beyond the parameter name and type. No format, source, or validation details are given.
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 uses a specific verb ('Fetch'), identifies the resource ('LucyESL job listing'), specifies the retrieval key ('by id'), and names the output form ('plain-text document with its facts'). It is clear on its own, though it does not differentiate itself from the sibling get_job.
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 implies a lookup-by-id use case but provides no explicit guidance about when to use fetch instead of get_job, search_jobs, or search. No alternatives or exclusion conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobOne listing as a recordCRead-onlyIdempotentInspect
One live listing as a structured record.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds little beyond 'live' and 'structured record', which hints at freshness and return format but does not disclose pagination, error behavior, or whether the listing may be absent. With annotations covering the main behavioral traits, a 3 is appropriate.
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 a single short sentence with no wasted words. It is front-loaded with the key idea of a single live listing. However, it is so terse that it misses useful context, though this is more a completeness issue than a conciseness issue.
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?
For a single-record retrieval tool with one parameter and no output schema, the description is minimal. It does not explain what 'structured record' contains, how to handle a missing ID, or how this differs from search_jobs and fetch. The annotations cover safety, but the description leaves an agent guessing about the return value and selection criteria.
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%, so the description carries the burden for explaining the 'id' parameter, but it does not mention 'id' at all. The schema itself defines id as an integer with minimum 1, which is self-explanatory for a single-record lookup. The description adds no meaning beyond what the schema provides, so baseline 3 is appropriate.
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 'One live listing as a structured record' identifies the resource (a job listing) and the output form (structured record), but it does not use a specific verb like 'get' or 'fetch' and does not distinguish itself from sibling tools such as fetch or search_jobs. It is clear enough to know it returns a single listing, but vague about what makes it different from other retrieval tools.
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?
No guidance is given about when to use this tool versus siblings like search_jobs or fetch. The description does not state that it is for retrieving a single listing by ID, nor does it mention any exclusions or alternatives. An agent would have to infer usage from the parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
salary_statsSalary statisticsARead-onlyIdempotentInspect
English-teacher salary statistics for South Korea computed from the live listings: median, quartiles, by region, by employer type, effective pay per teaching hour, disclosure rates, housing. CC BY 4.0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior visa-vi hints. The description adds meaningful context beyond those hints: the statistics are computed from live listings, are licensed CC BY 4.0, and cover specific breakdowns. There is no contradiction with the annotations.
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?
A single dense sentence front-loads the subject and source, then uses a colon-separated list to enumerate the statistics. Every element earns its place, including the license note.
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?
For a parameterless, read-only statistics tool, the description covers scope, source, content, and licensing. It does not specify the exact output structure or statistical methodology, but the low complexity and strong annotations make this a minor, non-blocking gap.
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?
The tool has zero parameters, so input ambiguity is minimal and the baseline is 4. The description compensates by detailing what output dimensions are included, which is useful given there is no output schema.
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 identifies the resource: English-teacher salary statistics for South Korea, and enumerates the specific breakdowns and metrics included (median, quartiles, by region, effective pay, etc.). It lacks an explicit verb like 'returns' or 'provides', and it does not directly distinguish itself from the sibling disclosure_stats, which likely overlaps on disclosure rates.
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 implies this tool is for aggregate salary statistics rather than individual listings or searches, but it never explicitly states when to choose it over alternatives like search_jobs or disclosure_stats. No exclusions or routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch LucyESL jobsARead-onlyIdempotentInspect
Search live English-teaching jobs in South Korea on LucyESL by free text. Returns ids, titles and URLs; use fetch for a listing's details.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to repeat safety. It adds value by stating that the tool returns ids, titles, and URLs, and that results are 'live' (current) English-teaching jobs. This goes beyond annotations by disclosing the output format and data freshness, though it omits pagination or limit details.
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, front-loaded with the purpose and scope, followed by return format and a pointer to fetch for details. Every sentence adds essential information with no redundancy or filler.
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 simplicity (one parameter, no output schema) and annotations covering safety, the description provides the core purpose, return format, and a route to fetch details. However, it does not mention how it differs from search_jobs, which could confuse an agent deciding between the two. Since the tool is simple, this is a minor gap, so 4 is fair.
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%, so the description must compensate. It explains that the query is 'free text', which gives basic meaning to the query parameter, but it doesn't provide examples, constraints, or guidance on how to structure the query. This is minimal but sufficient to understand that the parameter is a search string, so a score of 3 is appropriate.
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 action (search), the resource (live English-teaching jobs in South Korea on LucyESL), and the method (free text). It distinguishes itself from fetch by noting it returns only ids, titles, and URLs, though it doesn't explicitly contrast with the sibling search_jobs, which may serve a similar purpose. The specificity of 'on LucyESL' helps differentiate, but not naming the sibling leaves some ambiguity.
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 gives a clear alternative for fetching details ('use fetch for a listing's details'), which is helpful. However, it does not address when to use this tool versus the sibling search_jobs, nor does it mention any exclusions or prerequisites. The guidance is partial, covering only the fetch alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jobsFilter the live boardARead-onlyIdempotentInspect
Filter the live LucyESL board of English-teaching jobs in South Korea: region, student age, housing, visa, schedule, contract, setting, direct hire, minimum salary, free text. Returns structured records; pay in KRW per month unless stated otherwise; null means the advert did not say.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words to match in the title, city or employer name | |
| age | No | Student age group; adults_only means adults and nobody younger | |
| page | No | ||
| visa | No | e2 = E-2 sponsorship, f = F-series visa holders | |
| limit | No | ||
| format | No | Class shape | |
| region | No | Region key | |
| housing | No | ||
| setting | No | ||
| contract | No | ||
| delivery | No | ||
| schedule | No | ||
| specialty | No | ||
| min_salary | No | Minimum monthly pay in KRW; snaps down to the board's steps 2000000, 2300000, 2600000, 3000000 | |
| direct_only | No | Only employers hiring directly (no recruiters or agencies) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent, and closed-world. The description adds useful context about return values (structured records, salary in KRW, null semantics) beyond the schema. However, it does not explain pagination or rate limits, and it does not contradict annotations. The behavioral disclosure is adequate given the annotations.
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 a single sentence that front-loads the core purpose and lists the filter dimensions without unnecessary verbiage. It is concise and structured for quick scanning, providing all essential information in one sentence.
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 complexity of 15 parameters and no output schema, the description is reasonably complete by summarizing the filter dimensions and noting the return structure. It could mention pagination or result ordering, but it covers the main aspects needed to call the tool effectively. The annotation coverage helps, so a 4 is appropriate.
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 47%, and the description provides a high-level list of filter dimensions but does not detail each parameter's semantics. Many parameters have enums with descriptions in the schema, so the description adds minimal value beyond that. It does mention 'minimum salary' snapping behavior, which is helpful, but overall it does not compensate fully for the low coverage.
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 filters the live LucyESL job board and enumerates the main filter dimensions (region, age, housing, etc.). It distinguishes itself from sibling tools like get_job (fetching a single job) and search (generic search) by specifying it filters the board.
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 explains what it filters but does not explicitly state when to use this tool versus alternatives, such as salary_stats or disclosure_stats. It implies usage for job searching, but there are no clear exclusions or conditions for sibling tools. Still, the coverage of filter dimensions provides context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- First observed
disclosure_stats - First observed
fetch - First observed
get_job - First observed
salary_stats - First observed
search - First observed
search_jobs
Related MCP Connectors
Live job postings from 30+ ATS feeds and job boards, one schema. Live results need a Bearer key.
Semantic search over 3.5M+ live US job postings pulled straight from company ATSes. Read-only.
Search 4,000+ live UX & product-design jobs from jobs.uxjobs.io. Read-only, no auth.
Official Korean apartment sale prices (MOLIT). Clean JSON, data global models cannot know — paid pe…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables read-only search and retrieval of KAMCO Onbid public auction property data, including listings, details, and bidding results, using user-provided API keys.MIT
- AlicenseAqualityAmaintenanceConnects to Korea's MOLIT real estate API to provide 14+ tools for live transaction data and financial scenarios like buy now, buy later, or invest only based on income and savings.16377MIT
- AlicenseAqualityBmaintenanceProvides real-time Seoul city data including population congestion, traffic, parking, transit, bikes, EV chargers, weather, events, commercial, accidents, alerts, and news across 121 locations using Seoul Open Data API.312 npm3MIT
- FlicenseNot gradedqualityCmaintenance22,000+ public facility data for foreign tourists in Seoul — restrooms, pharmacies, WiFi, AEDs, tourist info centers, and subway timetables. Bilingual (Korean/English).-
Glama MCP Gateway
Add one secure layer between your agents and this server.