Find clinics, treatments, prices and free times on GLØDI in Norway, with booking links.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The map of everything public here: every list page with its count, and the treatment categories, body areas and skin concerns with their slugs, for vague needs ("pigmentering", "acne"). Also the contact facts and, on glodi.no, GLØDI's plans for clinics.
Answer language: nb (Norwegian) or en.
The map of everything public here: every list page with its count, and the treatment categories, body areas and skin concerns with their slugs, for vague needs ("pigmentering", "acne"). Also the contact facts and, on glodi.no, GLØDI's plans for clinics.
| Argument | Type | Description |
|---|---|---|
| locale | string | Answer language: nb (Norwegian) or en. |
{
"type": "object",
"required": [],
"properties": {
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"additionalProperties": false
}Find clinics near a place, in a town or by name, nearest first. Each clinic has its clinic_id, address, distance, phone numbers with call/SMS/WhatsApp channels, hours today, open now and rating. Give near (latitude/longitude) or place (a town, place name or four-digit postal code). With treatment_id, only clinics that offer it now, with their price from.
| Argument | Type | Description |
|---|---|---|
| near | object | A position. It wins over place. |
| page | integer | |
| place | string | A town or place name ("Asker", "Lierskogen") or a four-digit postal code ("3420"). |
| query | string | A clinic name or a town. A town without a clinic of that name is searched as a place. |
| locale | string | Answer language: nb (Norwegian) or en. |
| open_on | string | Only clinics open on this day (YYYY-MM-DD). |
| open_now | boolean | Only clinics open at this moment (Europe/Oslo). |
| page_size | integer | |
| radius_km | number | Search radius around the position. |
| treatment_id | string | Only clinics that offer this treatment now. |
{
"type": "object",
"required": [],
"properties": {
"near": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "WGS84 longitude, for example 10.33."
}
},
"description": "A position. It wins over place.",
"additionalProperties": false
},
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"query": {
"type": "string",
"maxLength": 160,
"description": "A clinic name or a town. A town without a clinic of that name is searched as a place."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"open_on": {
"type": "string",
"format": "date",
"description": "Only clinics open on this day (YYYY-MM-DD)."
},
"open_now": {
"type": "boolean",
"default": false,
"description": "Only clinics open at this moment (Europe/Oslo)."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"radius_km": {
"type": "number",
"default": 25,
"maximum": 500,
"minimum": 0.5,
"description": "Search radius around the position."
},
"treatment_id": {
"type": "string",
"maxLength": 200,
"description": "Only clinics that offer this treatment now."
}
},
"additionalProperties": false
}Which days have a free time for one option_id, for up to 60 days, at clinic_id or at the three nearest clinics to near or place. For one practitioner_id or anyone; add_on_ids lengthen the visit. No free day gives a waitlist_url.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days to check. |
| near | object | A position. It wins over place. |
| place | string | A town or place name ("Asker", "Lierskogen") or a four-digit postal code ("3420"). |
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| from_date | string | First day (YYYY-MM-DD); default today. |
| option_id* | integer | The option_id get_treatment returns. |
| add_on_ids | array | Add-on ids from get_booking_choices. Their minutes lengthen each time. |
| practitioner_id |
The free times on a date (or up to 7 days) for one option_id at clinic_id, with the practitioners free at each time and their prices. Every time has a booking_url that opens the booking lightbox with the option, practitioner, day, time and add-ons chosen. A time is not held until the person books it.
| Argument | Type | Description |
|---|---|---|
| date | string | One day (YYYY-MM-DD). |
| days | integer | How many days from from_date. |
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| from_date | string | First day of a range (YYYY-MM-DD); default today. |
| option_id* | integer | The option_id get_treatment returns. |
| add_on_ids | array | Add-on ids from get_booking_choices. Their minutes lengthen each time. |
| part_of_day | string | morning: before 12:00; afternoon: 12:00-17:00; evening: from 17:00. |
Find a practitioner by name (at least two letters) and the clinics where each can be booked now. For who can do one treatment option, with prices, use get_booking_choices.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| query | string | At least two letters of the practitioner name. |
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| page_size | integer |
{
"type": "object",
"required": [],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 160,
"description": "At least two letters of the practitioner name."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
}
},
"additionalProperties": false
}The choices the booking lightbox offers for one option_id. Without a clinic: every clinic that can book it, with distance, practitioner count and prices. With clinic_id: the practitioners with their own prices (practitioner_id), add-ons, packages, party size, cancellation notice and payment methods.
| Argument | Type | Description |
|---|---|---|
| near | object | A position. It wins over place. |
| place | string | A town or place name ("Asker", "Lierskogen") or a four-digit postal code ("3420"). |
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| option_id* | integer | The option_id get_treatment returns. |
{
"type": "object",
"required": [
"option_id"
],
"properties": {
"near": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "WGS84 longitude, for example 10.33."
}
},
"description": "A position. It wins over place.",
"additionalProperties": false
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
}
},
"additionalProperties": false
}One clinic's facts: address, phones, the week's opening hours (also odd and even weeks), closed days, parking, team, treatment categories with prices, current offers, payment methods, cancellation notice, gift cards and subscriptions.
| Argument | Type | Description |
|---|---|---|
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
{
"type": "object",
"required": [],
"properties": {
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
}
},
"additionalProperties": false
}One treatment: what it is, the procedure, recovery and safety, sessions and interval, its options with option_id, price, offer price and duration, the clinics that offer it and its reviews. Every option has a booking_url.
| Argument | Type | Description |
|---|---|---|
| near | object | A position. It wins over place. |
| place | string | A town or place name ("Asker", "Lierskogen") or a four-digit postal code ("3420"). |
| locale | string | Answer language: nb (Norwegian) or en. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| treatment_id* | string | The treatment_id search_treatments returns. |
{
"type": "object",
"required": [
"treatment_id"
],
"properties": {
"near": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "WGS84 longitude, for example 10.33."
}
},
"description": "A position. It wins over place.",
"additionalProperties": false
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"treatment_id": {
"type": "string",
"maxLength": 200,
"description": "The treatment_id search_treatments returns."
}
},
"additionalProperties": false
}Upcoming arrangements and courses, GLØDI's own and the clinics', with sessions, seats left, price from and registration state. event_id reads one event with its program, prerequisites and price tiers.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| type | string | Arrangements or courses. |
| locale | string | Answer language: nb (Norwegian) or en. |
| event_id | string | One event with its program. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| from_date | string | Only sessions from this day (YYYY-MM-DD); default today. |
| page_size | integer |
{
"type": "object",
"required": [],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"type": {
"enum": [
"event",
"course"
],
"type": "string",
"description": "Arrangements or courses."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"event_id": {
"type": "string",
"maxLength": 200,
"description": "One event with its program."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"from_date": {
"type": "string",
"format": "date",
"description": "Only sessions from this day (YYYY-MM-DD); default today."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
}
},
"additionalProperties": false
}The live offers (campaigns), with each treatment or product, its price before and after, and until when it holds. Filter by clinic_id, item_type or item_slug; offer_id reads one offer.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| locale | string | Answer language: nb (Norwegian) or en. |
| offer_id | string | One offer with all its items. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| item_slug | string | Offers on this treatment or product. |
| item_type | string | Offers on treatments or products. |
| page_size | integer |
{
"type": "object",
"required": [],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"offer_id": {
"type": "string",
"format": "uuid",
"description": "One offer with all its items."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"item_slug": {
"type": "string",
"maxLength": 200,
"description": "Offers on this treatment or product."
},
"item_type": {
"enum": [
"service",
"product"
],
"type": "string",
"description": "Offers on treatments or products."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
}
},
"additionalProperties": false
}Published reviews and their summary (average, count, distribution) for one clinic_id, practitioner, treatment_id or product_id.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| locale | string | Answer language: nb (Norwegian) or en. |
| rating | integer | Only reviews with this rating. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| page_size | integer | |
| product_id | string | |
| practitioner | string | The practitioner page slug (/behandler/<slug>). |
| treatment_id | string |
{
"type": "object",
"required": [],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Only reviews with this rating."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"product_id": {
"type": "string",
"maxLength": 200
},
"practitioner": {
"type": "string",
"maxLength": 200,
"description": "The practitioner page slug (/behandler/<slug>)."
},
"treatment_id": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
}Read one public page, normally a URL another answer returned: its text sections, links, schema.org facts and typed data for the page type (clinic, treatment, practitioner, offer, product, brand, event, guide, article, ingredient or job).
| Argument | Type | Description |
|---|---|---|
| url* | string | A public page URL, normally one another answer returned. |
| locale | string | Answer language: nb (Norwegian) or en. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "A public page URL, normally one another answer returned."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"additionalProperties": false
}Search skincare and retail products: GLØDI's marketplace on glodi.no and each clinic's shop on its own site. Filter by brand, category or stock. product_id reads one product with its description, sellers, subscription options, matching treatments and reviews.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| brand | string | A brand name or slug. |
| query | string | Product, brand or ingredient words in Norwegian or English. Leave empty to browse. |
| locale | string | Answer language: nb (Norwegian) or en. |
| category | string | A product category name or slug. |
| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| page_size | integer | |
| product_id | string | One product with its sellers. |
| in_stock_only | boolean | Only products in stock now. |
Search treatments in Norwegian and English at once; spelling mistakes and compound words are handled. Each result has its treatment_id, category path, price from-to, offer price, duration, clinic count and, with near or place, the nearest clinics. Filter by category, body_area or skin_concern (browse_site lists them). Treatments no clinic can book now are left out unless include_unbookable is true. Without a match: suggestions and categories.
| Argument | Type | Description |
|---|---|---|
| near | object | A position. It wins over place. |
| page | integer | |
| place | string | A town or place name ("Asker", "Lierskogen") or a four-digit postal code ("3420"). |
| query | string | Treatment words in Norwegian or English. Leave empty to browse. |
| locale | string | Answer language: nb (Norwegian) or en. |
| category | string | A category slug from browse_site, or its slug path ("ansikt/laser"). |
| on_offer | boolean | Only treatments with an active offer. |
| body_area | string | A body area slug from browse_site. |
| integer |
| One practitioner; omit for anyone. |
{
"type": "object",
"required": [
"option_id"
],
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 60,
"minimum": 1,
"description": "How many days to check."
},
"near": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "WGS84 longitude, for example 10.33."
}
},
"description": "A position. It wins over place.",
"additionalProperties": false
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"from_date": {
"type": "string",
"format": "date",
"description": "First day (YYYY-MM-DD); default today."
},
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
},
"add_on_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 10,
"description": "Add-on ids from get_booking_choices. Their minutes lengthen each time."
},
"practitioner_id": {
"type": "integer",
"minimum": 1,
"description": "One practitioner; omit for anyone."
}
},
"additionalProperties": false
}| practitioner_id | integer | One practitioner; omit for anyone. |
{
"type": "object",
"required": [
"option_id"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "One day (YYYY-MM-DD)."
},
"days": {
"type": "integer",
"default": 1,
"maximum": 7,
"minimum": 1,
"description": "How many days from from_date."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"from_date": {
"type": "string",
"format": "date",
"description": "First day of a range (YYYY-MM-DD); default today."
},
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
},
"add_on_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 10,
"description": "Add-on ids from get_booking_choices. Their minutes lengthen each time."
},
"part_of_day": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string",
"description": "morning: before 12:00; afternoon: 12:00-17:00; evening: from 17:00."
},
"practitioner_id": {
"type": "integer",
"minimum": 1,
"description": "One practitioner; omit for anyone."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"brand": {
"type": "string",
"maxLength": 120,
"description": "A brand name or slug."
},
"query": {
"type": "string",
"maxLength": 160,
"description": "Product, brand or ingredient words in Norwegian or English. Leave empty to browse."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"category": {
"type": "string",
"maxLength": 120,
"description": "A product category name or slug."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"product_id": {
"type": "string",
"maxLength": 200,
"description": "One product with its sellers."
},
"in_stock_only": {
"type": "boolean",
"default": false,
"description": "Only products in stock now."
}
},
"additionalProperties": false
}| clinic_id | string | The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none. |
| page_size | integer |
| skin_concern | string | A skin concern slug from browse_site. |
| max_price_nok | number | Only treatments with a price from at most this. |
| include_unbookable | boolean | Also treatments no clinic can book now. |
{
"type": "object",
"required": [],
"properties": {
"near": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "WGS84 longitude, for example 10.33."
}
},
"description": "A position. It wins over place.",
"additionalProperties": false
},
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"query": {
"type": "string",
"maxLength": 160,
"description": "Treatment words in Norwegian or English. Leave empty to browse."
},
"locale": {
"enum": [
"nb",
"en"
],
"type": "string",
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
},
"category": {
"type": "string",
"maxLength": 200,
"description": "A category slug from browse_site, or its slug path (\"ansikt/laser\")."
},
"on_offer": {
"type": "boolean",
"default": false,
"description": "Only treatments with an active offer."
},
"body_area": {
"type": "string",
"maxLength": 120,
"description": "A body area slug from browse_site."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"skin_concern": {
"type": "string",
"maxLength": 120,
"description": "A skin concern slug from browse_site."
},
"max_price_nok": {
"type": "number",
"minimum": 0,
"description": "Only treatments with a price from at most this."
},
"include_unbookable": {
"type": "boolean",
"default": false,
"description": "Also treatments no clinic can book now."
}
},
"additionalProperties": false
}