myFlohmarkt Flea Market Catalog
Server Details
Search German flea markets (Flohmarkt, Trödelmarkt) by city, PLZ, date range or radius.
- Status
- Healthy
- Uptime
- 98.4% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- My Flohmarkt
TDQS
Scored across 3 tools
Each tool has a distinct role: search_events for filtered queries, recently_updated_events for browsing new entries without a query, and get_event for detailed retrieval by UUID. Descriptions clearly state when to use each, so there is little risk of misselection.
Two tools follow the verb_noun pattern (get_event, search_events), but recently_updated_events is a noun phrase lacking a verb, a minor deviation. All names use consistent snake_case.
Three tools is on the low end but each earns its place in a read-only catalog. The set is slightly under-scoped but reasonable given the narrow domain.
Covers search, detail retrieval, and recent updates, which are core for a public catalog. Missing pagination or bulk retrieval for searches exceeding 50 results, but agents can work around this by narrowing filters.
Available Tools
3 toolsget_eventGet flea market detailsARead-onlyIdempotentInspect
Get the full public details of one German flea market by its UUID, as returned in the id field of search_events or recently_updated_events: description text, street address, date and opening times, market type and topics, entrance fee and seller stand fee, stand sizes and table rental, whether sellers can still sign up, and the public my-flohmarkt.de event URL. Use it when a search hit is not enough to answer about price, address or what is sold. Unknown or non-public UUIDs return not_found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| event | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond them: unknown or non-public UUIDs return a not_found result, which is useful failure-mode behavior an agent should anticipate. The enumerated return fields add some value but overlap with the existing output schema.
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?
Front-loaded with purpose, then usage, then failure behavior. The long clause enumerating every returned field is the weakest part, since an output schema already exists and re-listing fields is partly redundant.
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-param lookup with an output schema and full annotations, the description covers what is fetched, when to use it, where the id comes from, and the not_found failure mode. Nothing an agent needs to call it correctly 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?
The single param has 0% schema description coverage, so the description must carry the meaning. It does: the id is identified as the UUID format and, more importantly, as the value returned in the id field of search_events or recently_updated_events, which is provenance the schema cannot convey.
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?
States a specific verb and resource ('Get the full public details of one German flea market by its UUID') and enumerates the returned domain fields, so the agent knows exactly what this retrieves. It explicitly names the sibling tools whose id field feeds it, distinguishing it from search_events and recently_updated_events.
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?
Gives a clear selection rule: 'Use it when a search hit is not enough to answer about price, address or what is sold,' which tells the agent to reach for this after a search. It also names where the required id comes from. No explicit when-not condition is given, but the routing is unambiguous in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recently_updated_eventsList recently added or updated flea marketsARead-onlyIdempotentInspect
List the most recently added or updated German flea markets in the public my-flohmarkt.de catalogue, newest change first. Use this to see what is new without a search query; use search_events when you know the city, PLZ, date range or area.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| dataAsOf | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the result ordering is newest-change-first and the corpus is limited to the public catalogue. It stops short of describing pagination or the meaning of the limit parameter.
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?
Two tightly written sentences: the first front-loads what the tool returns and in what order, the second handles routing. No filler or repetition of the name/title.
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?
An output schema exists, so return values need not be explained. Purpose, scope, ordering and the sibling alternative are all present; the only gap is the absence of any statement about the limit parameter's effect or default.
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 single parameter 'limit' has 0% schema description coverage and is not mentioned anywhere in the description. The schema's default/min/max make it largely self-explanatory, but the rubric requires the description to compensate at low coverage, and it does not (e.g. it never says how many results are returned by default or how to page).
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?
States a specific verb and resource ('List the most recently added or updated German flea markets'), plus the scope ('public my-flohmarkt.de catalogue') and ordering ('newest change first'). This is clearly distinguishable from get_event and search_events without opening any schema.
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?
Explicitly names the use case ('see what is new without a search query') and the alternative with its selecting condition ('use search_events when you know the city, PLZ, date range or area'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch flea markets in GermanyARead-onlyIdempotentInspect
Search German flea markets (Flohmarkt, Trödelmarkt, Hofflohmarkt, Kinderflohmarkt, Antik- und Sammlermarkt) from the public my-flohmarkt.de catalogue. Filter by free text, by city name or postal code (PLZ) via the city argument, by date range, or by radius around a coordinate. Radius searches require lat, lng, and radiusKm together (max 100 km). Each hit carries title, date, start and end time, PLZ, city, coordinates, market type and the public event URL. Returns at most 50 results plus a dataAsOf timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lng | No | ||
| city | No | ||
| limit | No | ||
| query | No | ||
| dateTo | No | ||
| dateFrom | No | ||
| radiusKm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| dataAsOf | No | |
| totalIsLowerBound | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds behavior beyond that: the 50-result cap, the dataAsOf freshness timestamp, the 100 km radius ceiling, and the source of truth for the data. It does not discuss error behavior or empty-result handling, keeping it just under 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler: purpose and source first, then the filtering modes and the radius constraint, then the return-shape summary. Every sentence adds information an agent needs to call the tool correctly.
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?
An output schema exists, yet the description still usefully previews the hit fields (title, date, times, PLZ, city, coordinates, market type, URL), the result cap and the dataAsOf timestamp. Combined with the filter and radius constraints, nothing needed to invoke this read-only search correctly 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 must carry all parameter meaning, and it largely does: query = free text, city = city name or PLZ, dateFrom/dateTo = date range, and the coupled lat/lng/radiusKm triple with its 100 km maximum. Only limit's default of 10 is not restated, but the 50-result hard cap is disclosed instead.
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?
Names a specific verb and resource ('Search German flea markets') and pins the source catalogue (my-flohmarkt.de), including the German market-type vocabulary it covers. An agent can distinguish this list/search tool from get_event (single market) and recently_updated_events without opening a schema.
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?
Gives concrete usage context: filter by free text, city/PLZ, date range, or radius, and states the hard requirement that radius searches need lat, lng and radiusKm together (max 100 km). It stops short of naming when to prefer a sibling such as get_event, so it is clear context without explicit alternatives or exclusions.
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 tool update
- Changed
get_event2 fields changed- added
Output schema / properties / event / properties / primarySourceAdded value: +{ + "additionalProperties": false, + "properties": { + "name": { + "minLength": 1, + "type": "string" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "url" + ], + "type": "object" +} - added
Output schema / properties / event / properties / publicNoticeAdded value: +{ + "additionalProperties": false, + "properties": { + "kind": { + "const": "secondary_cancellation", + "type": "string" + }, + "observedAt": { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", + "type": "string" + }, + "sourceName": { + "minLength": 1, + "type": "string" + }, + "sourceUrl": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "kind", + "sourceName", + "sourceUrl", + "observedAt" + ], + "type": "object" +}
3 tool updates
- Changed
get_event46 fields changed- removed
Output schema / properties / event / properties / allowSellerSignup / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / allowSellerSignup / typeAdded value: +[ + "boolean", + "null" +] - removed
Output schema / properties / event / properties / city / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / date / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / description / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / entranceFee / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / entranceFee / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / fee / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / fee / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / houseNumber / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / houseNumber / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / imageUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / imageUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / lat / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / lat / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / event / properties / lng / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / lng / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / event / properties / marketType / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / marketType / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / orgType / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / orgType / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / participants / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / participants / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / plz / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / plz / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / raumtyp / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / raumtyp / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / scope / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / scope / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / sellerFee / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / sellerFee / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / street / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / street / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / timeFrom / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / timeFrom / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / timeTo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / timeTo / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / tischausleihe / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / tischausleihe / typeAdded value: +[ + "boolean", + "null" +] - removed
Output schema / properties / event / properties / topic / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / topic / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / event / properties / updatedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / event / properties / updatedAt / typeAdded value: +[ + "string", + "null" +]
- Changed
recently_updated_events24 fields changed- removed
Output schema / properties / dataAsOf / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / dataAsOf / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / city / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / date / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / imageUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / imageUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / lat / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / lat / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / items / items / properties / lng / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / lng / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / items / items / properties / marketType / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / marketType / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / participants / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / participants / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / plz / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / plz / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / timeFrom / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / timeFrom / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / timeTo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / timeTo / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / updatedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / updatedAt / typeAdded value: +[ + "string", + "null" +]
- Changed
search_events24 fields changed- removed
Output schema / properties / dataAsOf / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / dataAsOf / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / city / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / city / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / date / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / imageUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / imageUrl / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / lat / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / lat / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / items / items / properties / lng / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / lng / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / items / items / properties / marketType / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / marketType / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / participants / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / participants / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / plz / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / plz / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / timeFrom / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / timeFrom / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / timeTo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / timeTo / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / items / items / properties / updatedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / updatedAt / typeAdded value: +[ + "string", + "null" +]
3 tool updates
- First observed
get_event - First observed
recently_updated_events - First observed
search_events
Related MCP Connectors
Find concerts, parties, club nights, festivals and more across Germany.
Free German neighborhood marketplace: search local help requests and providers by postal code.
Waste collection dates for German addresses from municipal authority calendars.
Live kleinanzeigen.de search, ad, seller, category and location data for AI clients
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables read-only access to Kleinanzeigen.de listings, including compact search, listing details, availability checks, and route calculations with optional distance and driving information.-
- AlicenseNot gradedqualityBmaintenanceSearch Kleinanzeigen.de, Germany's largest classifieds site, via MCP tools without API keys.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search Kleinanzeigen listings by keyword, category, location, price and seller type, with extra server-side filtering for title matches and required or excluded terms. It also retrieves full ad details, downloadable photos for visual inspection, category attributes, and seller reputation information.3MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search public classified listings and read individual listing details through a local browser session, with filters for location, radius, price, and sort order. Read-only and user-directed: no login, no account, no messaging, and no bulk scraping.213 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.