Skip to main content
Glama

LucyESL — English teaching jobs in Korea

Server Details

English-teaching jobs in South Korea: salary, disclosure and by-region stats. Read-only, no key.

Ownership verified
Status
Healthy
Uptime
100.0% over 40 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation3/5

The set contains two near-pairs: `search` vs `search_jobs` (plain-language query vs structured filters) and `fetch` vs `get_job` (document form vs structured record). Descriptions do explicitly signal the difference ('document' vs 'structured record', 'plain-language query' vs 'filter'), which saves it, but an agent can still easily pick the wrong twin for the same intent. The three *_stats tools are cleanly distinct from each other.

Naming Consistency3/5

Three patterns coexist: noun_stats (disclosure_stats, market_stats, salary_stats), verb_noun (get_job, search_jobs), and bare verbs (search, fetch). Also inconsistent plurality (get_job returns one, search_jobs returns many, yet search is the singleton query). Readable but not predictable.

Tool Count5/5

Seven tools for a job-board-plus-analytics server is well scoped; each stat dimension (salary, market, disclosure) and each access mode (search, fetch, structured get) earns its place. No filler tools.

Completeness4/5

Search, retrieval, and three analytics views cover the stated purpose well, but there is no way to browse expired/closed listings or employers, and no time-series/trend comparison across snapshots. These are workaroundable gaps rather than dead ends.

Available Tools

7 tools
disclosure_statsDisclosure ratesA
Read-onlyIdempotent
Inspect

How many live Korean ESL job adverts state the salary, hours, severance, pension, insurance, airfare, vacation and split shifts: for each, the number that state it, out of how many, and the percentage. CC BY 4.0.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuine extra context: only 'live' (not expired) adverts are counted, and the data is CC BY 4.0 licensed, which matters for downstream attribution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the scope and enumerates the measured fields, with the license tucked at the end. Slightly list-heavy phrasing but no wasted clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: per field, the count that disclose it, the denominator, and the percentage. The one real gap is temporal scope — whether the figures are all-time, current, or over a window.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so there is nothing for the description to disambiguate; the baseline applies. The enumerated metric list does clarify what the (absent) filters would otherwise have scoped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (live Korean ESL job adverts) and the exact measurement (count and percentage disclosing salary, hours, severance, pension, insurance, airfare, vacation, split shifts). A verb is implied rather than stated and it never names how it differs from the sibling salary_stats, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The domain ('live Korean ESL job adverts') implies when the tool applies, but there is no explicit when-to-use, when-not, or routing versus salary_stats and market_stats, which are the obvious overlapping siblings. The agent must infer the choice from the field list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchFetch one listingB
Read-onlyIdempotent
Inspect

Fetch one live LucyESL job listing by its id as a document with its title, its URL and a plain-text body giving the employer, pay, hours, housing, visas, benefits, dates and the facts the advert left unstated. An id that has closed or expired returns an error naming it.

NameRequiredDescriptionDefault
idYesThe listing's numeric id, such as "290"

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds real value beyond that: it discloses the return shape (a document with title, URL and a plain-text body) and the failure mode (closed/expired ids error and the message names the id). It does not say whether closed listings can ever be retrieved by other means, nor whether the body is truncated, which are the remaining behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no boilerplate, and the core operation plus return shape is front-loaded in the first clause. The field enumeration is long but earns its place because there is no output schema to describe the returned document.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read with annotations covering the safety profile and no output schema, the description does the necessary work by explaining the returned document and the error case. The one thing an agent still needs is how this differs from get_job.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single required parameter at 100% schema coverage, the schema already defines the id including its format ("290"). The description adds only the qualifier that the listing must be live — a semantic constraint worth noting, but thin beyond baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetch one live job listing by id, and enumerates what the returned document contains (title, URL, plain-text body covering employer, pay, hours, housing, visas, benefits, dates). However, it never distinguishes itself from the sibling get_job, which on its name alone looks like the same operation, so the agent cannot tell the two apart from this text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus search/search_jobs (the discovery path) or get_job. The only conditional given is a failure case — an id that has closed or expired returns an error — which is behavioral, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobGet one listing as a recordA
Read-onlyIdempotent
Inspect

Get one live LucyESL job listing by its numeric id as a structured record: employer and employer type, region, pay in KRW, teaching and on-site hours, housing, visas, benefits, contract length, start date, dates, and the facts the advert left unstated (null means not stated). An id that has closed or expired returns an error naming it.

NameRequiredDescriptionDefault
idYesThe listing's numeric id, such as 290

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: null fields mean the advert left the fact unstated, and a closed/expired id returns an error naming that id. That error contract is exactly the kind of context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb, resource, and identifier, then the return contents and the failure case. The field enumeration is long but each item is informative; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly enumerates the returned fields and null semantics, plus the error case for stale ids. Only the interplay with search/search_jobs (how an id is obtained) is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the id parameter is already documented with an example ('such as 290'), so the baseline is 3. The description only reinforces 'numeric id' and adds the live-listing constraint, adding little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get one live LucyESL job listing by its numeric id as a structured record') and the cardinality ('one') implicitly separates it from the plural search/search_jobs siblings. An agent can tell immediately this is a single-record lookup, not a query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'by its numeric id' signals it is a follow-up call after obtaining an id, but no sibling is named and no when-not-to-use is given (e.g. 'use search_jobs when you don't have an id'). This is minimum-viable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_statsThe job market by regionA
Read-onlyIdempotent
Inspect

Live English-teaching job adverts in South Korea counted by region: how many in each, direct hire against recruiters, how many state total on-site hours, and the median advertised salary where the sample allows. Counts of adverts, not of employers. CC BY 4.0.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe-read profile (readOnly, idempotent, closed-world), so the bar is lower, yet the description still adds real context: data is 'live', counts are of adverts rather than employers, and the median salary is only reported 'where the sample allows'. That last point usefully warns about missing values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the scope (South Korea, by region) and then enumerates the metrics, closing with the licence. Efficient, though the mid-sentence clause stack is slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the burden of describing what comes back, and it does so by naming the four reported measures plus the advert-vs-employer caveat. A note on granularity (e.g. region unit) or sample-size threshold would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond confirming the tool is parameterless and returns a fixed aggregate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise resource (live English-teaching job adverts in South Korea) and the exact aggregation (counts by region, direct-hire vs recruiter split, on-site hours, median advertised salary). It is clearly distinguishable from siblings like salary_stats or disclosure_stats by naming the region-and-metric scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the aggregation framing, but there is no explicit when-to-use or when-not-to-use guidance, and no sibling (e.g. salary_stats, disclosure_stats) is named as the alternative for a different question. An agent must infer that this is the region-breakdown aggregate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salary_statsSalary statisticsA
Read-onlyIdempotent
Inspect

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. Each median comes with the number of adverts behind it. CC BY 4.0.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so behaviour is largely covered structurally. The description still adds real value beyond them: it discloses data provenance ('computed from the live listings'), the statistical caveat that each median reports its underlying advert count, and a CC BY 4.0 licensing/attribution requirement. No return format or caching/freshness detail, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope, then a compact metric list; the sample-size caveat and licence are tacked on as short clauses that each carry information. It reads as fragments rather than full sentences, but no clause is filler and it is well under the length where truncation risk matters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the return shape, and it does by naming every metric returned plus the per-median sample size. What is missing is any hint about output structure/format or how fresh the underlying listings are, which an agent deciding between this and market_stats would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly implies a single global aggregate with no filtering arguments, consistent with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (English-teacher salaries in South Korea) and enumerates the exact statistics produced: median, quartiles, region, employer type, effective hourly pay, disclosure rates, housing. That is far more than a restatement of the title. It stops short of 5 because it never distinguishes itself from siblings like market_stats or disclosure_stats, which plausibly cover overlapping ground.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is implied by the scope statement – it is the tool for pay figures rather than individual listings – but there is no explicit 'use this when…' or exclusion against market_stats or disclosure_stats, despite obvious topical overlap. The agent has to infer routing from the sibling names alone.

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 boardA
Read-onlyIdempotent
Inspect

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 the number that match and a page of structured records; pay in KRW per month unless stated otherwise; null means the advert did not say.

NameRequiredDescriptionDefault
qNoWords to match in the title, city or employer name
ageNoStudent age group; adults_only means adults and nobody younger
pageNoPage of results, from 1
visaNoe2 = E-2 sponsorship, f = F-series visa holders
limitNoRecords per page: 25 by default, at most 50
formatNoClass shape: group, small group (up to 4) or one to one
regionNoRegion of South Korea (gyeonggi includes Incheon)
housingNoHousing provided, an allowance instead, or none
settingNoWhere the teaching happens: the academy, a company, a school or a student's home
contractNoAn employment contract (employee) or a contractor agreement
deliveryNoIn person, online or hybrid
scheduleNoFull-time, part-time, camp or substitute
specialtyNoWhat is taught besides general English, such as IELTS, business English or phonics
min_salaryNoMinimum monthly pay in KRW; snaps down to the board's steps 2000000, 2300000, 2600000, 3000000
direct_onlyNoOnly employers hiring directly (no recruiters or agencies)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is not obligated there. It nonetheless adds genuinely useful result semantics absent from annotations and schema: it returns a match count plus a page, pay is KRW per month unless stated otherwise, and null means the advert was silent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the filter scope before the return-shape note. The enumerations are dense but every clause maps to actual parameters; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 15 optional parameters and no output schema, the description does the important work of explaining the response shape (count + record page) and the null/pay conventions. Minor omissions remain: no default sort order, no statement of what an unfiltered call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with 10 enums fully documented, so the schema carries parameter meaning. The description's list of filter dimensions largely restates the schema, and the one extra fact (KRW per month) concerns output rather than inputs. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Filter the live LucyESL board of English-teaching jobs in South Korea', then enumerates the dimensions it filters on. It is clearly a filtered-listing tool, though it never names how it differs from the overlapping `search` and `fetch` siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the enumerated filter dimensions and the note that it returns a count plus a page of records, which suggests browsing/discovery. But there is no explicit when-to-use guidance and no exclusion against `search`, `fetch` or `get_job`, which is a real gap given the sibling set.

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.

  1. 4 tool updates
    • Changedfetch1 field changed
      • addedInput schema / properties / id / description
        Added value: +"The listing's numeric id, such as \"290\""
    • Changedget_job1 field changed
      • addedInput schema / properties / id / description
        Added value: +"The listing's numeric id, such as 290"
    • Changedsearch1 field changed
      • addedInput schema / properties / query / description
        Added value: +"What to look for, in plain words, such as \"kindergarten jobs in Seoul with housing\""
    • Changedsearch_jobs10 fields changed
      • addedInput schema / properties / contract / description
        Added value: +"An employment contract (employee) or a contractor agreement"
      • addedInput schema / properties / delivery / description
        Added value: +"In person, online or hybrid"
      • changedInput schema / properties / format / description
        Previous value: -"Class shape"New value: +"Class shape: group, small group (up to 4) or one to one"
      • addedInput schema / properties / housing / description
        Added value: +"Housing provided, an allowance instead, or none"
      • addedInput schema / properties / limit / description
        Added value: +"Records per page: 25 by default, at most 50"
      • addedInput schema / properties / page / description
        Added value: +"Page of results, from 1"
      • changedInput schema / properties / region / description
        Previous value: -"Region key"New value: +"Region of South Korea (gyeonggi includes Incheon)"
      • addedInput schema / properties / schedule / description
        Added value: +"Full-time, part-time, camp or substitute"
      • addedInput schema / properties / setting / description
        Added value: +"Where the teaching happens: the academy, a company, a school or a student's home"
      • addedInput schema / properties / specialty / description
        Added value: +"What is taught besides general English, such as IELTS, business English or phonics"
  2. 1 tool update
    • Addedmarket_stats
  3. 6 tool updates
    • First observeddisclosure_stats
    • First observedfetch
    • First observedget_job
    • First observedsalary_stats
    • First observedsearch
    • First observedsearch_jobs

Publisher details

Operator
LucyESL · Publisher source
Operator website
https://lucyesl.com
Vendor relationship
First-party
Trust center
Not available
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying real disclosed salary data across 20 regions, with tools to search jobs, retrieve salary statistics, and find similar roles.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables searching, retrieving, and analyzing South Korean national statistics through the KOSIS OpenAPI, including trend, change-rate, and CAGR calculations. Results can be explored by topic or organization and exported to Excel or CSV.
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables searching and retrieving South Korean national statistics tables, inspecting table metadata and values, and exporting results to xlsx/csv/json/sqlite, with automatic time-period splitting when responses exceed 40,000 cells.
    11
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources