LivinIsto — home watch
Watches Slovak home listings for a buyer. Takes no contact; active only after e-mail opt-in.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"intents": {
"url": "https://www.livinisto.sk/mcp/zamery"
}
}
}远程端点
https://www.livinisto.sk/mcp/zamerystreamable-http它能做什么
工具清单
工具(4)
🟡intent_publish_intent(statement, niceToHave, buyBy, hiddenLimitEur)
Use this when the user asks LivinIsto to keep watching Slovak property listings (flats, houses, cottages, plots; for sale or rent) for them over time (e.g. "let me know until March about a 2-room flat in Žilina under 150 000 €"). This does NOT start watching by itself and takes no e-mail address or other personal data: it returns a consentUrl on www.livinisto.sk that the user must open themselves, enter their own e-mail there and confirm by clicking the link LivinIsto e-mails them. Never ask the user for their e-mail in the conversation and never open the link for them. An unconfirmed draft is deleted after 24 hours. Matching properties are e-mailed to the user and can also be read with intent_list_matches using the returned intentCode — keep it in the conversation. hiddenLimitEur is optional: the most the user would pay (for a rental, per month), stored encrypted and never shown to sellers or returned by any tool; pass it only if the user said it. Matches come from listings LivinIsto aggregates from the Slovak market (its own listings and public listings from Slovak property portals), so they cover only properties listed on LivinIsto (Slovakia only, EUR) and may be incomplete.
输入模式
{
"type": "object",
"properties": {
"statement": {
"type": "string",
"minLength": 2,
"maxLength": 300,
"description": "What the property MUST be, as one short Slovak phrase, e.g. \"2-izbový byt Žilina do 150 000 €\" or \"prenájom 1-izbový byt Bratislava do 700 €\"."
},
"niceToHave": {
"description": "Wishes that are not required (never filters), e.g. \"balkón, výťah\".",
"type": "string",
"maxLength": 300
},
"buyBy": {
"description": "Date (YYYY-MM-DD) by which the user wants to buy or rent; watching stops after it.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"hiddenLimitEur": {
"description": "Optional private maximum price in EUR (for a rental, per month); encrypted on receipt and never returned by any tool.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000000
}
},
"required": [
"statement"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"intentCode": {
"type": "string",
"description": "Secret code of this intent; use it with intent_get_intent, intent_list_matches and intent_withdraw_intent."
},
"status": {
"type": "string",
"enum": [
"awaiting_consent",
"awaiting_email_confirmation",
"active",
"expired",
"withdrawn"
],
"description": "awaiting_consent = the user has not confirmed on the LivinIsto page yet; awaiting_email_confirmation = the user filled in the page and must click the link in the e-mail; active = LivinIsto is watching; expired = the confirmation link, the buy-by date or the intent's validity ran out; withdrawn = cancelled."
},
"consentUrl": {
"type": "string",
"description": "Page on www.livinisto.sk where the USER confirms the intent with their own e-mail. Show it unchanged."
},
"consentExpiresAt": {
"type": "string",
"description": "ISO time after which the unconfirmed draft is deleted."
},
"statement": {
"type": "string"
},
"niceToHave": {
"type": [
"string",
"null"
]
},
"buyBy": {
"type": [
"string",
"null"
]
},
"hasHiddenLimit": {
"type": "boolean",
"description": "Whether a hidden limit was stored. Its value is never returned."
},
"understood": {
"type": "array",
"items": {
"type": "string"
},
"description": "What LivinIsto will watch for, read from the statement (in Slovak). Tell the person before they confirm."
},
"notUnderstood": {
"type": "array",
"items": {
"type": "string"
},
"description": "Words of the statement that are NOT watched for as a filter. Tell the person."
}
},
"required": [
"intentCode",
"status",
"consentUrl",
"consentExpiresAt",
"statement",
"niceToHave",
"buyBy",
"hasHiddenLimit",
"understood",
"notUnderstood"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢intent_get_intent(intentCode)
Use this to check whether an intent created with intent_publish_intent is already confirmed by the user and active, waiting, expired or withdrawn. Requires the intentCode; returns the statement and dates only — never the user's e-mail, the hidden limit or any other personal data.
输入模式
{
"type": "object",
"properties": {
"intentCode": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{32}$",
"description": "The intentCode returned by intent_publish_intent."
}
},
"required": [
"intentCode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"status": {
"description": "awaiting_consent = the user has not confirmed on the LivinIsto page yet; awaiting_email_confirmation = the user filled in the page and must click the link in the e-mail; active = LivinIsto is watching; expired = the confirmation link, the buy-by date or the intent's validity ran out; withdrawn = cancelled.",
"type": "string",
"enum": [
"awaiting_consent",
"awaiting_email_confirmation",
"active",
"expired",
"withdrawn"
]
},
"statement": {
"type": "string"
},
"niceToHave": {
"type": [
"string",
"null"
]
},
"buyBy": {
"type": [
"string",
"null"
]
},
"validUntil": {
"description": "Date (YYYY-MM-DD) until which the intent is watched (before confirmation: until the draft is deleted).",
"type": "string"
},
"activeSince": {
"type": [
"string",
"null"
]
},
"hasHiddenLimit": {
"type": "boolean"
}
},
"required": [
"found"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢intent_list_matches(intentCode, since)
Use this when the user asks what LivinIsto has found for an intent created with intent_publish_intent. These are the same properties LivinIsto e-mails to the user; this server cannot send messages into the conversation by itself. Requires the intentCode; optional since (ISO time) returns only newer matches. Returns at most 20 newest matches with the price and LivinIsto price verdict (per m², against comparable properties nearby) at the time of the match and a link. Before the user confirms the intent there are no matches. Matches come from listings LivinIsto aggregates from the market, so they cover only properties listed on LivinIsto and may be incomplete; a property may already be sold or rented.
输入模式
{
"type": "object",
"properties": {
"intentCode": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{32}$",
"description": "The intentCode returned by intent_publish_intent."
},
"since": {
"description": "Only matches found after this ISO time.",
"type": "string",
"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|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"intentCode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"status": {
"description": "awaiting_consent = the user has not confirmed on the LivinIsto page yet; awaiting_email_confirmation = the user filled in the page and must click the link in the e-mail; active = LivinIsto is watching; expired = the confirmation link, the buy-by date or the intent's validity ran out; withdrawn = cancelled.",
"type": "string",
"enum": [
"awaiting_consent",
"awaiting_email_confirmation",
"active",
"expired",
"withdrawn"
]
},
"matches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"propertyId": {
"type": "string"
},
"title": {
"type": "string",
"description": "Built from LivinIsto's own fields (type, rooms, place), never the seller's headline."
},
"propertyType": {
"type": "string",
"enum": [
"byt",
"dom",
"chata",
"pozemok",
"apartman"
]
},
"transaction": {
"type": "string",
"enum": [
"sale",
"rent"
]
},
"rooms": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"roomOnly": {
"type": "boolean",
"description": "True when the rent is for a room in a shared flat, not the whole flat."
},
"areaM2": {
"type": [
"number",
"null"
]
},
"landAreaM2": {
"type": [
"number",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"cityPart": {
"type": [
"string",
"null"
]
},
"district": {
"type": [
"string",
"null"
]
},
"priceEur": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Asking price today; per month for a rental. Null when the listed number is not the price of the whole property (a share, an auction, a short stay) — check the listing."
},
"priceIsMonthly": {
"type": "boolean"
},
"priceEurAtMatch": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"priceVerdictAtMatch": {
"anyOf": [
{
"type": "string",
"enum": [
"below_market",
"around_market",
"above_market"
]
},
{
"type": "null"
}
]
},
"matchedAt": {
"type": "string"
},
"stillListed": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "Link to the property on www.livinisto.sk — show it unchanged."
}
},
"required": [
"propertyId",
"title",
"propertyType",
"transaction",
"rooms",
"roomOnly",
"areaM2",
"landAreaM2",
"city",
"cityPart",
"district",
"priceEur",
"priceIsMonthly",
"priceEurAtMatch",
"priceVerdictAtMatch",
"matchedAt",
"stillListed",
"url"
],
"additionalProperties": false
}
},
"more": {
"description": "More matches exist than returned; call again with since.",
"type": "boolean"
}
},
"required": [
"found"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴intent_withdraw_intent(intentCode)
Use this when the user wants LivinIsto to stop watching for an intent created with intent_publish_intent. Takes effect immediately; nothing more is e-mailed for it. Requires the intentCode.
输入模式
{
"type": "object",
"properties": {
"intentCode": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{32}$",
"description": "The intentCode returned by intent_publish_intent."
}
},
"required": [
"intentCode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"status": {
"type": "string",
"enum": [
"withdrawn"
]
}
},
"required": [
"found"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}社区
证据