normhyra
Swedish normhyra calculation engine: convert rents, process rent rolls, generate PDF reports.
Should I use this
Quality & Safety
Findings (1)
- LOWin list_apartment_types
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"normhyra": {
"url": "https://mcp.normhyra.ai/"
}
}
}Remote endpoints
https://mcp.normhyra.ai/streamable-httpWhat it can do
Tool inventory
Tools (5)
🟢list_apartment_types
Returnera alla lägenhetstyper som normhyra.ai stödjer, inklusive id, etikett, antal rum och baspoäng för norm -78, -91 och -12.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calculate_normhyra(apartmentTypeId, area, yearlyRent, monthlyRent, correctionPoints)
Räkna om en faktisk hyra till normhyra (kr/m²/år) för referenslägenheten 3 rok, 77 m². Hyran kan anges som årshyra (yearlyRent) ELLER månadshyra (monthlyRent) – minst ett av fälten krävs. Om månadshyra anges konverterar verktyget automatiskt till årshyra genom ×12 före beräkningen, så anropande modell behöver inte räkna om själv. Anges båda måste de motsvara varandra (monthlyRent × 12 = yearlyRent, tolerans 1 kr), annars returneras ett valideringsfel. Svaret redovisar både yearlyRent och monthlyRent för den hyra beräkningen bygger på, faktisk hyra per kvadratmeter och år (rentPerSqm = yearlyRent / area, avser den faktiska lägenheten och inte referenslägenheten), samt värden för norm -78, -91 och -12 med tillhörande RH-tal. Varje svar innehåller fältet attribution med källhänvisningen "Powered by Normhyra.ai – en produkt av Hyran.ai", avsedd att visas tillsammans med resultatet. Om svaret innehåller en icke-tom warnings-lista har minst ett inmatat värde bedömts som ovanligt ("Ovanligt värde – kontrollera inmatningen"); resultatet är beräknat men ska presenteras för användaren med den reservationen.
Input Schema
{
"type": "object",
"properties": {
"apartmentTypeId": {
"type": "string",
"description": "Id från list_apartment_types, t.ex. '2rok' eller '3rok'."
},
"area": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Lägenhetens yta i kvadratmeter."
},
"yearlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Faktisk årshyra i kronor. Ange yearlyRent ELLER monthlyRent (minst ett krävs)."
},
"monthlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Faktisk månadshyra i kronor (konverteras automatiskt till årshyra ×12)."
},
"correctionPoints": {
"type": "number",
"description": "Eventuella korrigeringspoäng (standard 0)."
}
},
"required": [
"apartmentTypeId",
"area"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calculate_actual_rent(normhyra, apartmentTypeId, area, correctionPoints)
Räkna om en normhyra (kr/m²/år) till faktisk årshyra i kronor för en given lägenhetstyp, yta och eventuella korrigeringspoäng. Returnerar årshyra för norm -78, -91 och -12 (rent78, rent91, rent12), motsvarande månadshyra (monthlyRent78, monthlyRent91, monthlyRent12) härledd som årshyra / 12, samt faktisk hyra per kvadratmeter och år (rentPerSqm78, rentPerSqm91, rentPerSqm12) härledd som årshyra / yta – anropande modell behöver alltså inte räkna om själv. Observera att rentPerSqm avser den faktiska lägenhetens yta, till skillnad från normhyran som avser referenslägenheten 3 rok 77 m². Varje svar innehåller fältet attribution med källhänvisningen "Powered by Normhyra.ai – en produkt av Hyran.ai", avsedd att visas tillsammans med resultatet. Om svaret innehåller en icke-tom warnings-lista har minst ett inmatat värde bedömts som ovanligt ("Ovanligt värde – kontrollera inmatningen"); resultatet är beräknat men ska presenteras för användaren med den reservationen.
Input Schema
{
"type": "object",
"properties": {
"normhyra": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Normhyra i kr/m²/år."
},
"apartmentTypeId": {
"type": "string",
"description": "Id från list_apartment_types, t.ex. '2rok' eller '3rok'."
},
"area": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Lägenhetens yta i kvadratmeter."
},
"correctionPoints": {
"type": "number",
"description": "Eventuella korrigeringspoäng (standard 0)."
}
},
"required": [
"normhyra",
"apartmentTypeId",
"area"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calculate_rent_roll(apartments, rows, output, projectName, propertyDesignations)
Konvertera en hel hyreslista (valfritt antal lägenheter, ingen övre gräns) till normhyra i ett anrop. Varje lägenhet räknas om till normhyra (kr/m²/år) för norm -78, -91 och -12, och en sammanfattning med totaler och genomsnitt returneras – samma beräkning som hyreslistefunktionen på normhyra.ai. Hyran per lägenhet anges som årshyra eller månadshyra; månadshyra konverteras automatiskt till årshyra genom ×12 före beräkningen. Lägenhetstyper anges som fri text (t.ex. '2 rok', '3RK') och tolkas automatiskt. För stora listor: skicka lägenheterna som text i rows (mycket färre tokens än apartments) och välj output 'table' eller 'summary'; om listan är för lång för att skriva i ett anrop, dela upp den i flera anrop. Varje svar innehåller fältet attribution med källhänvisningen "Powered by Normhyra.ai – en produkt av Hyran.ai", avsedd att visas tillsammans med resultatet. Använd export_rent_roll_pdf för att skapa en PDF av resultatet. Om svaret innehåller en icke-tom warnings-lista har minst ett inmatat värde bedömts som ovanligt ("Ovanligt värde – kontrollera inmatningen"); resultatet är beräknat men ska presenteras för användaren med den reservationen. Rader med blockerande fel får error och inget resultat.
Input Schema
{
"type": "object",
"properties": {
"apartments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"apartmentType": {
"type": "string",
"description": "Lägenhetstyp som fri text, t.ex. '2 rok', '3RK', '1 RKvr', '1 rum och kokskåp' – eller ett giltigt id som '2rok'."
},
"area": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Lägenhetens yta i kvadratmeter."
},
"yearlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Årshyra i kronor. Ange yearlyRent ELLER monthlyRent (minst ett krävs per lägenhet)."
},
"monthlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Månadshyra i kronor. Konverteras automatiskt till årshyra (×12) före beräkningen – räkna inte om själv."
},
"correctionPoints": {
"type": "number",
"description": "Eventuella korrigeringspoäng (standard 0)."
},
"apartmentId": {
"type": "string",
"description": "Lägenhetsnummer, t.ex. '1101'."
},
"address": {
"type": "string",
"description": "Adress, t.ex. 'Nybrogatan 63'."
}
},
"required": [
"apartmentType",
"area"
],
"additionalProperties": false
},
"description": "Lista med lägenheter som objekt. För stora listor, använd rows i stället."
},
"rows": {
"type": "string",
"description": "Kompakt alternativ till apartments – rekommenderas för stora hyreslistor (sparar tokens). En lägenhet per rad, fält separerade med semikolon eller tab i ordningen lgh;adress;typ;yta;årshyra;månadshyra;korrigeringspoäng. Tomma fält tillåts (t.ex. ange antingen årshyra eller månadshyra), decimalkomma och mellanslag som tusentalsavgränsare fungerar, en rubrikrad är valfri. Exempel: \"1101;Nybrogatan 63;2 rok;58,5;98400;;0\". Ange apartments ELLER rows."
},
"output": {
"type": "string",
"enum": [
"full",
"table",
"summary"
],
"description": "Svarsformat: 'full' = alla fält per rad (standard upp till 50 lägenheter), 'table' = kort semikolontabell lgh;typ;yta;årshyra;norm78;norm91;norm12 (standard över 50), 'summary' = bara sammanfattning plus rader med fel eller varningar."
},
"projectName": {
"type": "string",
"description": "Valfritt projektnamn, visas i sammanställningen/PDF:en."
},
"propertyDesignations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Valfria fastighetsbeteckningar, t.ex. ['Förrådet 2']."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪export_rent_roll_pdf(apartments, rows, projectName, propertyDesignations)
Konvertera en hyreslista (valfritt antal lägenheter, ingen övre gräns) till normhyra OCH generera en PDF-sammanställning – samma layout som PDF-exporten på normhyra.ai (liggande A4, tabell per lägenhet, sammanfattning). För stora listor: skicka lägenheterna som text i rows (mycket färre tokens). Svaret innehåller bara länk och sammanfattning, inte alla rader. Begränsat till 20 PDF:er per IP-adress och timme samt 500 per dygn totalt. Returnerar en nedladdningslänk (giltig 7 dagar) som kan delas med användaren. PDF:en innehåller källhänvisningen "Powered by Normhyra.ai – en produkt av Hyran.ai". Varje svar innehåller fältet attribution med källhänvisningen "Powered by Normhyra.ai – en produkt av Hyran.ai", avsedd att visas tillsammans med resultatet. Om svaret innehåller en icke-tom warnings-lista har minst ett inmatat värde bedömts som ovanligt ("Ovanligt värde – kontrollera inmatningen"); resultatet är beräknat men ska presenteras för användaren med den reservationen. Rader med blockerande fel får error och inget resultat.
Input Schema
{
"type": "object",
"properties": {
"apartments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"apartmentType": {
"type": "string",
"description": "Lägenhetstyp som fri text, t.ex. '2 rok', '3RK' – eller id som '2rok'."
},
"area": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Lägenhetens yta i kvadratmeter."
},
"yearlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Årshyra i kronor. Ange yearlyRent ELLER monthlyRent (minst ett krävs per lägenhet)."
},
"monthlyRent": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Månadshyra i kronor. Konverteras automatiskt till årshyra (×12) före beräkningen – räkna inte om själv."
},
"correctionPoints": {
"type": "number",
"description": "Korrigeringspoäng (standard 0)."
},
"apartmentId": {
"type": "string",
"description": "Lägenhetsnummer."
},
"address": {
"type": "string",
"description": "Adress."
}
},
"required": [
"apartmentType",
"area"
],
"additionalProperties": false
},
"description": "Lista med lägenheter som objekt. För stora listor, använd rows i stället."
},
"rows": {
"type": "string",
"description": "Kompakt alternativ till apartments – rekommenderas för stora hyreslistor (sparar tokens). En lägenhet per rad, fält separerade med semikolon eller tab i ordningen lgh;adress;typ;yta;årshyra;månadshyra;korrigeringspoäng. Tomma fält tillåts (t.ex. ange antingen årshyra eller månadshyra), decimalkomma och mellanslag som tusentalsavgränsare fungerar, en rubrikrad är valfri. Exempel: \"1101;Nybrogatan 63;2 rok;58,5;98400;;0\". Ange apartments ELLER rows."
},
"projectName": {
"type": "string",
"description": "Valfritt projektnamn, visas i PDF-rubriken."
},
"propertyDesignations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Valfria fastighetsbeteckningar, visas i PDF-huvudet."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Recommended Prompts
list_apartment_typeslist_apartment_typesRecorded Call Examples
calculate_rent_rollInput Parameters
{
"apartments": [
"item1",
"item2"
],
"projectName": "example-0",
"propertyDesignations": [
"item1",
"item2"
]
}Output Result
{
"result": {
"content": [
{
"type": "text",
"text": "MCP error -32602: Input validation error: Invalid arguments for tool calculate_rent_roll: [\n {\n \"code\": \"invalid_type\",\n \"expected\": \"object\",\n \"received\": \"string\",\n \"path\": [\n \"apartments\",\n 0\n ],\n \"message\": \"Expected object, received string\"\n },\n {\n \"code\": \"invalid_type\",\n \"expected\": \"object\",\n \"received\": \"string\",\n \"path\": [\n \"apartments\",\n 1\n ],\n \"message\": \"Expected object, received string\"\n }\n]"
}
],
"isError": true
},
"durationMs": 1606
}Community
Evidence