LocalSchema
Generate and validate LocalBusiness JSON-LD for local SEO. Free tools, no key needed.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"localschema": {
"url": "https://local-schema-beacon.lovable.app/mcp"
}
}
}원격 엔드포인트
https://local-schema-beacon.lovable.app/mcpstreamable-http할 수 있는 일
도구 목록
도구 (11)
🟢list_business_types
List the schema.org LocalBusiness subtypes LocalSchema supports (Dentist, Plumber, Restaurant, …). Use the most specific one as businessType.
입력 스키마
{
"type": "object",
"properties": {}
}🟢generate_schema(businessType, name, alternateName, legalName, description, ...)
Generate LocalBusiness JSON-LD (schema.org) from business details and validate it against Google's rich result rules. Returns the JSON-LD, a ready-to-paste <script> tag and issues to fix. No API key needed.
입력 스키마
{
"type": "object",
"properties": {
"businessType": {
"default": "LocalBusiness",
"description": "schema.org type, e.g. Dentist, Plumber, Restaurant. See /business-types.",
"type": "string",
"maxLength": 60
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Public business name"
},
"alternateName": {
"type": "string",
"maxLength": 200
},
"legalName": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"slogan": {
"type": "string",
"maxLength": 200
},
"url": {
"description": "Website URL (https://…)",
"type": "string",
"maxLength": 2000
},
"logo": {
"type": "string",
"maxLength": 2000
},
"images": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
}
},
"foundingDate": {
"type": "string",
"pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
},
"telephone": {
"description": "International format, e.g. +31 50 123 4567",
"type": "string",
"maxLength": 40
},
"email": {
"type": "string",
"maxLength": 200
},
"priceRange": {
"description": "e.g. €€ or €20-€80",
"type": "string",
"maxLength": 30
},
"currenciesAccepted": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"maxLength": 3
}
},
"paymentAccepted": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 60
}
},
"knowsLanguage": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"address": {
"type": "object",
"properties": {
"streetAddress": {
"type": "string",
"maxLength": 200
},
"addressLocality": {
"type": "string",
"maxLength": 120
},
"addressRegion": {
"type": "string",
"maxLength": 120
},
"postalCode": {
"type": "string",
"maxLength": 20
},
"addressCountry": {
"description": "ISO 3166-1 alpha-2, e.g. NL or US",
"type": "string",
"maxLength": 60
}
}
},
"serviceAreaOnly": {
"description": "True for service-area businesses without a storefront (address is hidden)",
"type": "boolean"
},
"geo": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
]
},
"hasMap": {
"type": "string",
"maxLength": 2000
},
"areaServed": {
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
},
"openingHours": {
"description": "Regular hours. Days not listed are closed. Use two entries for split hours.",
"maxItems": 21,
"type": "array",
"items": {
"type": "object",
"properties": {
"days": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Day names or ranges: \"Mo-Fr\", [\"Saturday\"]"
},
"opens": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"closes": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"allDay": {
"description": "Open 24 hours on these days",
"type": "boolean"
}
},
"required": [
"days"
]
}
},
"specialHours": {
"description": "Holiday exceptions (LocalSchema Pro — omitted from free output)",
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 80
},
"validFrom": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"validThrough": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"closed": {
"type": "boolean"
},
"opens": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"closes": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
}
},
"required": [
"validFrom"
]
}
},
"services": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"description": {
"type": "string",
"maxLength": 500
},
"price": {
"type": "number",
"minimum": 0
},
"priceMax": {
"type": "number",
"minimum": 0
},
"priceType": {
"type": "string",
"enum": [
"fixed",
"from",
"range"
]
},
"unitText": {
"type": "string",
"maxLength": 40
},
"url": {
"type": "string",
"maxLength": 2000
}
},
"required": [
"name"
]
}
},
"rating": {
"description": "LocalSchema Pro — omitted from free output",
"type": "object",
"properties": {
"ratingValue": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"reviewCount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"bestRating": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"ratingValue",
"reviewCount"
]
},
"reviews": {
"description": "LocalSchema Pro — omitted from free output",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"author": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"body": {
"type": "string",
"maxLength": 2000
},
"datePublished": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"required": [
"author",
"rating"
]
}
},
"sameAs": {
"description": "Google Business Profile, Yelp, Facebook, LinkedIn… profile URLs",
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
}
},
"servesCuisine": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 60
}
},
"menu": {
"type": "string",
"maxLength": 2000
},
"acceptsReservations": {
"type": "boolean"
},
"medicalSpecialty": {
"type": "string",
"maxLength": 80
},
"isAcceptingNewPatients": {
"type": "boolean"
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢validate_schema(code)
Validate existing LocalBusiness structured data: paste JSON-LD, a <script type="application/ld+json"> tag or a whole HTML page. Reports errors, missing recommended fields and best-practice warnings. No API key needed.
입력 스키마
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 600000,
"description": "JSON-LD text, a script tag, or full page HTML"
}
},
"required": [
"code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢validate_page(url)
Fetch a public web page and audit its structured data: every JSON-LD block and type, the LocalBusiness markup's errors and warnings, LocalSchema embeds on the page and concrete recommendations. No API key needed.
입력 스키마
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 4,
"maxLength": 2000,
"description": "Public http(s) address, e.g. https://example.com/contact"
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_embed_snippet(key)
Get the install snippet and live status for a LocalSchema hosted embed key (loc_… for one location, org_… for a client with several). Paste the script tag once; published updates reach the site automatically.
입력 스키마
{
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^(?:loc|org)_[a-z0-9]{6,32}$",
"description": "Hosted embed key"
}
},
"required": [
"key"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list_clients
List the agency's clients (brands) with their location counts, client-wide embed script and white-label report link. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {}
}🟡save_client(client_id, name, website, contact_name, contact_email, ...)
Create a client (brand) or update one by client_id, and optionally turn its white-label health report link on or off. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {
"client_id": {
"description": "Update this client. Omit to create one.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"description": "Client (brand) name. Required when creating; omit to keep it when updating.",
"type": "string",
"minLength": 1,
"maxLength": 160
},
"website": {
"description": "Brand website; links every branch to one Organization in the client embed. When updating, omit to keep it or send \"\" to clear it.",
"type": "string",
"maxLength": 500
},
"contact_name": {
"description": "Contact person. When updating, omit to keep it or send \"\" to clear it.",
"type": "string",
"maxLength": 160
},
"contact_email": {
"description": "Contact email. When updating, omit to keep it or send \"\" to clear it.",
"type": "string",
"maxLength": 255
},
"report": {
"description": "true turns the client's white-label health report link on, false turns it off. Omit to leave it.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list_locations(client_id)
List the business locations saved in the LocalSchema account: publish state, hosted embed script, website and latest health check score. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {
"client_id": {
"description": "Only this client's locations",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_location(location_id)
Get one saved location: its business fields (in the same shape save_location accepts), the current JSON-LD, the published JSON-LD, validation issues and embed details. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Location id from list_locations"
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡save_location(location_id, client_id, website_url, publish, business)
Save a business location to the LocalSchema account — create one, or update one by location_id (only the business fields you send change) — and optionally publish it to its hosted embed so the client's site updates without code changes. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {
"location_id": {
"description": "Update this location. Omit to create a new one (counts toward the plan's location limit).",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"client_id": {
"description": "Assign to a client (see list_clients); null removes the assignment. Omit to keep the current client.",
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"website_url": {
"description": "Page where the hosted embed is installed; health checks scan it. Defaults to business.url.",
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"publish": {
"description": "Publish to the hosted embed now. Default false (saved as a draft).",
"type": "boolean"
},
"business": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Business fields in the same shape as generate_schema (name, businessType, address, openingHours, services, …). When updating, only the fields you send change; address merges field by field, lists are replaced."
}
},
"required": [
"business"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢run_health_check(location_id)
Run a schema health check for a saved location: validates its markup, scans its website for the embed and conflicting hard-coded schema, detects unpublished changes and records the result in the dashboard and client reports. Needs a LocalSchema Pro API key in the request headers.
입력 스키마
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Location id from list_locations"
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}커뮤니티
증거