Skip to main content
Glama

Check a stay's government registration (South Korea)

verify_listing_registration
Read-onlyIdempotent

Check whether a short-term rental listing (Airbnb, guesthouse, hanok stay, homestay, pension) is licensed and registered with the government, using official government registry records that are hard to access directly. SelectBNBs Verify covers South Korea today; more countries are coming. Use it when someone asks whether a Korean Airbnb or guesthouse is legal, licensed, registered or real. Pass the listing's 'Registration details' box exactly as shown (Region of issuance, Licence type, Licence number). If the traveler has not copied it yet, ask them to; a registered name or Korean road address is a weaker fallback. Returns the official permit status and its as-of date, the registered business name, permit category and address, a link to the public record page, and what the traveler should compare with their listing. One listing per call; no bulk search.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
countryYesISO 3166-1 alpha-2 code of the country where the stay is, e.g. KR. Only KR (South Korea) is covered today; other countries return 'not covered yet'.
languageNoLanguage for explanations and next steps: en (default), ja or zh-Hant.en
listing_detailsYesText copied from ONE listing, as shown: ideally the whole Registration details box (e.g. 'Region of issuance: 서울특별시 종로구 / Licence type: 외국인관광도시민박업 / Licence number: 2025-000006'). A registered name, Korean road address or government management number also works, less reliably.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
as_ofNoDate of the official source data, when available.
errorNo
detailNo
sourceNo
statusNoResult status, e.g. FOUND_ACTIVE, NOT_FOUND, AMBIGUOUS or COUNTRY_NOT_COVERED.
countryNoISO 3166-1 alpha-2 code of the stay's country.
recordsNo
languageNo
next_stepNo
check_pageNo
explanationNo
status_labelNo
issuing_areasNoAreas whose governments use a shared management number (names only).
records_totalNo
identity_labelNo
identity_statusNoHow far the submitted details match the record, e.g. MATCH or PARTIAL.
covered_countriesNo
listing_candidatesNo
issuing_areas_totalNo
identity_explanationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / listing_details / description
      Previous value: -"Text copied from ONE listing, as shown: ideally the whole Registration details box (e.g. 'Region of issuance: 서울특별시 종로구 / Licence type: 외국인관광도시민박업 / Licence number: 2025-000006'), and/or the listing URL, registered name, road address or government management number."New value: +"Text copied from ONE listing, as shown: ideally the whole Registration details box (e.g. 'Region of issuance: 서울특별시 종로구 / Licence type: 외국인관광도시민박업 / Licence number: 2025-000006'). A registered name, Korean road address or government management number also works, less reliably."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "PermitRecordSummary": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "category_en": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Category En"
      +        },
      +        "category_ko": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Category Ko"
      +        },
      +        "issuing_authority_code": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Issuing Authority Code"
      +        },
      +        "management_number": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Management Number"
      +        },
      +        "permit_date": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Permit Date"
      +        },
      +        "record_url": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "description": "Public record page on selectbnbs.com.",
      +          "title": "Record Url"
      +        },
      +        "registered_name": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "description": "Business name filed with the local government; it often differs from the listing title.",
      +          "title": "Registered Name"
      +        },
      +        "registry_type": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Registry Type"
      +        },
      +        "requires_confirmation": {
      +          "anyOf": [
      +            {
      +              "type": "boolean"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Requires Confirmation"
      +        },
      +        "road_address": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Road Address"
      +        },
      +        "road_address_romanized": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Road Address Romanized"
      +        },
      +        "status": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "description": "Official operating status code.",
      +          "title": "Status"
      +        },
      +        "status_as_of": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "description": "Date of the official source data, when available.",
      +          "title": "Status As Of"
      +        },
      +        "status_label": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Status Label"
      +        }
      +      },
      +      "title": "PermitRecordSummary",
      +      "type": "object"
      +    }
      +  },
      +  "additionalProperties": true,
      +  "description": "One checked listing, COUNTRY_NOT_COVERED, or an error (error, detail, next_step).",
      +  "properties": {
      +    "as_of": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Date of the official source data, when available.",
      +      "title": "As Of"
      +    },
      +    "check_page": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Check Page"
      +    },
      +    "country": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "ISO 3166-1 alpha-2 code of the stay's country.",
      +      "title": "Country"
      +    },
      +    "covered_countries": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Covered Countries"
      +    },
      +    "detail": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Detail"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Error"
      +    },
      +    "explanation": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Explanation"
      +    },
      +    "identity_explanation": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Identity Explanation"
      +    },
      +    "identity_label": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Identity Label"
      +    },
      +    "identity_status": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "How far the submitted details match the record, e.g. MATCH or PARTIAL.",
      +      "title": "Identity Status"
      +    },
      +    "issuing_areas": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": true,
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Areas whose governments use a shared management number (names only).",
      +      "title": "Issuing Areas"
      +    },
      +    "issuing_areas_total": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Issuing Areas Total"
      +    },
      +    "language": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Language"
      +    },
      +    "listing_candidates": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": true,
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Listing Candidates"
      +    },
      +    "next_step": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Next Step"
      +    },
      +    "records": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/PermitRecordSummary"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Records"
      +    },
      +    "records_total": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Records Total"
      +    },
      +    "source": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Source"
      +    },
      +    "status": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Result status, e.g. FOUND_ACTIVE, NOT_FOUND, AMBIGUOUS or COUNTRY_NOT_COVERED.",
      +      "title": "Status"
      +    },
      +    "status_label": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Status Label"
      +    }
      +  },
      +  "title": "VerifyListingResult",
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), but the description adds real context beyond them: South Korea is the only covered country today, other countries return 'not covered yet', and the operation is strictly one listing per call with no bulk mode. It stops short of disclosing rate limits, latency, or auth requirements.

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 purpose, then usage trigger, then input guidance, then return content — a sensible ordering with no filler sentences. It is on the long side (seven sentences) and the return-value sentence partly duplicates the output schema, but nothing is off-topic.

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

Completeness5/5

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

For a read-only verification tool with a full output schema, the description covers everything an agent needs: what it verifies, country coverage limits, the exact input to pass, the fallback input, and the one-listing-per-call constraint. Return values are described even though the output schema makes that optional.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely useful input nuance: pass the Registration details box 'exactly as shown' with its three sub-fields, and that a registered name or Korean road address is a weaker fallback. It also tells the agent to prompt the traveler to copy the box first, which is workflow guidance the schema does not carry.

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 a specific verb and resource ('Check whether a short-term rental listing ... is licensed and registered with the government') and even enumerates the listing types covered (Airbnb, guesthouse, hanok stay, homestay, pension). It is immediately distinguishable from a generic lookup tool, but it never references the sibling get_permit_record, so the agent gets no help telling the two apart.

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

Usage Guidelines4/5

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

It gives a clear triggering condition ('Use it when someone asks whether a Korean Airbnb or guesthouse is legal, licensed, registered or real') plus a prerequisite (one listing per call, no bulk search). What is missing is any explicit routing against the alternative get_permit_record, which is exactly the ambiguity an agent would face here.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources