UniAffitti Room Finder
Find, rank, and compare student rooms from UniAffitti public listings.
Should I use this
Quality & Safety
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": {
"room-finder": {
"url": "https://www.uniaffitti.com/mcp/"
}
}
}Remote endpoints
https://www.uniaffitti.com/mcp/streamable-httpWhat it can do
Tool inventory
Tools (21)
π’search_rooms(query, city, country_code, limit, offset, ...)
Search approved, available student rooms by budget, type, university, optional campus, distance, and features. Results include public listing content submitted by UniAffitti users.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free text search over title, description, university, location, and campus."
},
"city": {
"type": "string",
"description": "Optional city filter selected from the assisted location search."
},
"country_code": {
"type": "string",
"description": "Optional ISO 3166-1 alpha-2 country filter."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 8
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
},
"university_id": {
"type": "integer",
"minimum": 1
},
"campus_id": {
"type": "integer",
"minimum": 1
},
"room_type": {
"type": "string",
"enum": [
"single",
"double",
"bed"
]
},
"min_price": {
"type": "number",
"minimum": 0
},
"max_price": {
"type": "number",
"minimum": 0
},
"available_from": {
"type": "string",
"description": "YYYY-MM-DD."
},
"max_distance_km": {
"type": "number",
"minimum": 0
},
"features": {
"type": "object",
"additionalProperties": true
},
"order_by": {
"type": "string",
"enum": [
"newest",
"price_asc",
"price_desc",
"distance_asc",
"distance_desc"
],
"default": "newest"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"deposit_amount": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": "string"
},
"room_type": {
"type": [
"string",
"null"
]
},
"min_stay_months": {
"type": [
"integer",
"null"
]
},
"available_from": {
"type": [
"string",
"null"
]
},
"occupancy_status": {
"type": "string"
},
"room_city": {
"type": [
"string",
"null"
]
},
"room_country_code": {
"type": [
"string",
"null"
]
},
"university_name": {
"type": [
"string",
"null"
]
},
"university_city": {
"type": [
"string",
"null"
]
},
"university_country_code": {
"type": [
"string",
"null"
]
},
"zone_name": {
"type": [
"string",
"null"
]
},
"location_label": {
"type": [
"string",
"null"
]
},
"campus_name": {
"type": [
"string",
"null"
]
},
"landlord_name": {
"type": "string"
},
"landlord_avatar_url": {
"type": "string"
},
"landlord_role": {
"type": "string"
},
"landlord_is_verified": {
"type": "boolean"
},
"landlord_rating_average": {
"type": [
"number",
"null"
]
},
"landlord_rating_count": {
"type": "integer"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
},
"location_name": {
"type": "string"
},
"public_url": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency",
"room_type",
"location_name",
"public_url"
]
}
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"has_more": {
"type": "boolean"
}
},
"required": [
"rooms",
"limit",
"offset",
"has_more"
],
"additionalProperties": false
}π’rank_room_matches(limit, campus_id, preferred_room_type, max_budget, max_distance_km, ...)
Find public, approved room listings and score them against preferences such as budget, campus distance, room type, and trust signals. Listing content is submitted by UniAffitti users.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 8
},
"campus_id": {
"type": "integer",
"minimum": 1
},
"preferred_room_type": {
"type": "string",
"enum": [
"single",
"double",
"bed"
]
},
"max_budget": {
"type": "number",
"minimum": 0
},
"max_distance_km": {
"type": "number",
"minimum": 0
},
"available_from": {
"type": "string",
"description": "YYYY-MM-DD."
},
"features": {
"type": "object",
"additionalProperties": true
},
"query": {
"type": "string"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"deposit_amount": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": "string"
},
"room_type": {
"type": [
"string",
"null"
]
},
"min_stay_months": {
"type": [
"integer",
"null"
]
},
"available_from": {
"type": [
"string",
"null"
]
},
"occupancy_status": {
"type": "string"
},
"room_city": {
"type": [
"string",
"null"
]
},
"room_country_code": {
"type": [
"string",
"null"
]
},
"university_name": {
"type": [
"string",
"null"
]
},
"university_city": {
"type": [
"string",
"null"
]
},
"university_country_code": {
"type": [
"string",
"null"
]
},
"zone_name": {
"type": [
"string",
"null"
]
},
"location_label": {
"type": [
"string",
"null"
]
},
"campus_name": {
"type": [
"string",
"null"
]
},
"landlord_name": {
"type": "string"
},
"landlord_avatar_url": {
"type": "string"
},
"landlord_role": {
"type": "string"
},
"landlord_is_verified": {
"type": "boolean"
},
"landlord_rating_average": {
"type": [
"number",
"null"
]
},
"landlord_rating_count": {
"type": "integer"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
},
"location_name": {
"type": "string"
},
"public_url": {
"type": "string"
},
"match_score": {
"type": "integer"
},
"match_reasons": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency",
"room_type",
"location_name",
"public_url",
"match_score",
"match_reasons"
]
}
}
},
"required": [
"rooms"
],
"additionalProperties": false
}π’get_room_details(room_id)
Return public details for one approved room, including user-submitted description, media, features, and limited landlord trust information.
Input Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer",
"minimum": 1
}
},
"required": [
"room_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"room": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"deposit_amount": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": "string"
},
"room_type": {
"type": [
"string",
"null"
]
},
"min_stay_months": {
"type": [
"integer",
"null"
]
},
"available_from": {
"type": [
"string",
"null"
]
},
"occupancy_status": {
"type": "string"
},
"room_city": {
"type": [
"string",
"null"
]
},
"room_country_code": {
"type": [
"string",
"null"
]
},
"university_name": {
"type": [
"string",
"null"
]
},
"university_city": {
"type": [
"string",
"null"
]
},
"university_country_code": {
"type": [
"string",
"null"
]
},
"zone_name": {
"type": [
"string",
"null"
]
},
"location_label": {
"type": [
"string",
"null"
]
},
"campus_name": {
"type": [
"string",
"null"
]
},
"landlord_name": {
"type": "string"
},
"landlord_avatar_url": {
"type": "string"
},
"landlord_role": {
"type": "string"
},
"landlord_is_verified": {
"type": "boolean"
},
"landlord_rating_average": {
"type": [
"number",
"null"
]
},
"landlord_rating_count": {
"type": "integer"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
},
"location_name": {
"type": "string"
},
"public_url": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency",
"room_type",
"location_name",
"public_url"
]
},
"landlord": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"avatar_url": {
"type": "string"
},
"role": {
"type": "string"
},
"is_verified": {
"type": "boolean"
},
"rating_average": {
"type": [
"number",
"null"
]
},
"rating_count": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"name",
"avatar_url",
"role",
"is_verified",
"rating_average",
"rating_count"
]
},
"media": {
"type": "array",
"items": {
"type": "object",
"properties": {
"media_type": {
"type": "string"
},
"url": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"media_type",
"url"
]
}
},
"features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"label": {
"type": "string"
},
"type": {
"type": "string"
},
"unit": {
"type": [
"string",
"null"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"value_label": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"code",
"label",
"type",
"unit",
"value",
"value_label"
]
}
},
"contact_available": {
"type": "boolean"
}
},
"required": [
"room",
"landlord",
"media",
"features",
"contact_available"
],
"additionalProperties": false
}π’compare_rooms(room_ids, campus_id)
Compare selected public room listings side by side for price, distance, type, availability, features, and trust signals.
Input Schema
{
"type": "object",
"properties": {
"room_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 8
},
"campus_id": {
"type": "integer",
"minimum": 1
}
},
"required": [
"room_ids"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"deposit_amount": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": "string"
},
"room_type": {
"type": [
"string",
"null"
]
},
"min_stay_months": {
"type": [
"integer",
"null"
]
},
"available_from": {
"type": [
"string",
"null"
]
},
"occupancy_status": {
"type": "string"
},
"room_city": {
"type": [
"string",
"null"
]
},
"room_country_code": {
"type": [
"string",
"null"
]
},
"university_name": {
"type": [
"string",
"null"
]
},
"university_city": {
"type": [
"string",
"null"
]
},
"university_country_code": {
"type": [
"string",
"null"
]
},
"zone_name": {
"type": [
"string",
"null"
]
},
"location_label": {
"type": [
"string",
"null"
]
},
"campus_name": {
"type": [
"string",
"null"
]
},
"landlord_name": {
"type": "string"
},
"landlord_avatar_url": {
"type": "string"
},
"landlord_role": {
"type": "string"
},
"landlord_is_verified": {
"type": "boolean"
},
"landlord_rating_average": {
"type": [
"number",
"null"
]
},
"landlord_rating_count": {
"type": "integer"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
},
"location_name": {
"type": "string"
},
"public_url": {
"type": "string"
},
"feature_summary": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"label": {
"type": "string"
},
"type": {
"type": "string"
},
"unit": {
"type": [
"string",
"null"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"value_label": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"code",
"label",
"type",
"unit",
"value",
"value_label"
]
}
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency",
"room_type",
"location_name",
"public_url",
"feature_summary"
]
}
},
"comparison": {
"type": "object",
"properties": {
"lowest_price_room_id": {
"type": [
"integer",
"null"
]
},
"closest_room_id": {
"type": [
"integer",
"null"
]
},
"most_reviewed_landlord_room_id": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": false,
"required": [
"lowest_price_room_id",
"closest_room_id",
"most_reviewed_landlord_room_id"
]
}
},
"required": [
"rooms",
"comparison"
],
"additionalProperties": false
}π’list_search_metadata(university_query, university_country_code, university_limit, university_offset)
List a paginated slice of the global university catalog, optional campuses, and feature filters for room search. The catalog is not limited to 500 records.
Input Schema
{
"type": "object",
"properties": {
"university_query": {
"type": "string",
"description": "Filter universities by name, city, country, or alias."
},
"university_country_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code."
},
"university_limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"university_offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"universities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"country_code": {
"type": [
"string",
"null"
]
},
"country_name": {
"type": [
"string",
"null"
]
},
"default_latitude": {
"type": [
"number",
"null"
]
},
"default_longitude": {
"type": [
"number",
"null"
]
},
"website_url": {
"type": [
"string",
"null"
]
},
"email_domain": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"id",
"name",
"city",
"country_code",
"country_name"
]
}
},
"universities_pagination": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"has_more": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"total",
"limit",
"offset",
"has_more"
]
},
"campuses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"university_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"address": {
"type": [
"string",
"null"
]
},
"campus_type": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"is_verified": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"id",
"university_id",
"name",
"latitude",
"longitude",
"is_verified"
]
}
},
"features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"code": {
"type": "string"
},
"label": {
"type": "string"
},
"feature_type": {
"type": "string"
},
"unit": {
"type": [
"string",
"null"
]
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value_code": {
"type": "string"
},
"value_label": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"value_code",
"value_label"
]
}
}
},
"additionalProperties": false,
"required": [
"id",
"code",
"label",
"feature_type"
]
}
},
"room_types": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"value",
"label"
]
}
}
},
"required": [
"universities",
"universities_pagination",
"campuses",
"features",
"room_types"
],
"additionalProperties": false
}π’search_universities(query, country_code, city, limit, offset)
Search the complete active UniAffitti university catalog worldwide with pagination and total count.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"country_code": {
"type": "string"
},
"city": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 30
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"universities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"city": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"country_code": {
"type": [
"string",
"null"
]
},
"country_name": {
"type": [
"string",
"null"
]
},
"default_latitude": {
"type": [
"number",
"null"
]
},
"default_longitude": {
"type": [
"number",
"null"
]
},
"website_url": {
"type": [
"string",
"null"
]
},
"email_domain": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"id",
"name",
"city",
"country_code",
"country_name"
]
}
},
"total": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"has_more": {
"type": "boolean"
}
},
"required": [
"universities",
"total",
"limit",
"offset",
"has_more"
],
"additionalProperties": false
}π’search_cities(query, country_code, limit, offset)
Search cities represented in the active university catalog and public room listings, with country and university counts for assisted room search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"country_code": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 12
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"region": {
"type": [
"string",
"null"
]
},
"country_code": {
"type": [
"string",
"null"
]
},
"country_name": {
"type": [
"string",
"null"
]
},
"universities_count": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"city",
"region",
"country_code",
"country_name",
"universities_count"
]
}
},
"total": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"has_more": {
"type": "boolean"
}
},
"required": [
"cities",
"total",
"limit",
"offset",
"has_more"
],
"additionalProperties": false
}π’list_university_campuses(university_id)
List active campuses for a selected university so the user can refine the room search.
Input Schema
{
"type": "object",
"properties": {
"university_id": {
"type": "integer",
"minimum": 1
}
},
"required": [
"university_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"university_id": {
"type": "integer"
},
"campuses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"university_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"address": {
"type": [
"string",
"null"
]
},
"campus_type": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"is_verified": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"id",
"university_id",
"name",
"latitude",
"longitude",
"is_verified"
]
}
}
},
"required": [
"university_id",
"campuses"
],
"additionalProperties": false
}π’get_my_profile
When the user asks to access or connect UniAffitti, call this tool. It starts secure OAuth account connection when needed, then returns only first and last name, email, role, and email-verification status; it does not return phone, photos, account IDs, credentials, or secrets.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"profile": {
"type": "object",
"properties": {
"role": {
"type": "string"
},
"name": {
"type": "string"
},
"surname": {
"type": "string"
},
"email": {
"type": "string"
},
"email_verified": {
"type": "boolean"
}
},
"additionalProperties": false,
"required": [
"role",
"name",
"surname",
"email",
"email_verified"
]
}
},
"required": [
"profile"
],
"additionalProperties": false
}π’list_my_messages(conversation_id, limit, messages_limit, unread_only)
Read the authenticated userβs UniAffitti conversations from the same chat used by the web app. Without a conversation_id return fast conversation summaries and last-message previews; with one load the complete recent messages for that conversation.
Input Schema
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"description": "Optional Firebase conversation/thread id."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 12
},
"messages_limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 30
},
"unread_only": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"conversations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"conversation_id": {
"type": "string"
},
"room_title": {
"type": "string"
},
"room_cover_url": {
"type": "string"
},
"other_participant": {
"type": "object",
"properties": {
"role": {
"type": "string"
},
"name": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"role",
"name"
]
},
"last_message": {
"type": "string"
},
"last_message_at": {
"type": [
"string",
"null"
]
},
"unread_count": {
"type": "integer"
},
"messages_loaded": {
"type": "boolean"
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sender_name": {
"type": "string"
},
"is_from_me": {
"type": "boolean"
},
"message_type": {
"type": "string"
},
"text": {
"type": "string"
},
"created_at": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"sender_name",
"is_from_me",
"message_type",
"text",
"created_at"
]
}
}
},
"additionalProperties": false,
"required": [
"conversation_id",
"room_title",
"room_cover_url",
"other_participant",
"last_message",
"last_message_at",
"unread_count",
"messages_loaded",
"messages"
]
}
},
"total_conversations": {
"type": "integer"
},
"returned_conversations": {
"type": "integer"
},
"unread_messages": {
"type": "integer"
},
"unread_only": {
"type": "boolean"
},
"limit": {
"type": "integer"
},
"messages_limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"conversation_id": {
"type": [
"string",
"null"
]
}
},
"required": [
"conversations",
"total_conversations",
"returned_conversations",
"unread_messages",
"unread_only",
"limit",
"messages_limit",
"has_more",
"conversation_id"
],
"additionalProperties": false
}π΄send_room_message(room_id, message)
Send and permanently store a message to the landlord of an approved available room from the authenticated UniAffitti account. The landlord receives a notification; messages cannot be recalled with this tool. Do not include passwords, payment-card details, government identifiers, health or biometric data.
Input Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer",
"minimum": 1
},
"message": {
"type": "string",
"description": "Message to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data.",
"minLength": 1,
"maxLength": 4000
}
},
"required": [
"room_id",
"message"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"sent": {
"type": "boolean"
},
"conversation_id": {
"type": "string"
},
"room_title": {
"type": "string"
},
"landlord_name": {
"type": "string"
},
"web_chat_url": {
"type": "string"
}
},
"required": [
"sent",
"conversation_id",
"room_title",
"landlord_name",
"web_chat_url"
],
"additionalProperties": false
}π’get_my_conversation_messages(conversation_id, messages_limit)
Load the recent messages for one authenticated UniAffitti conversation. This is a data-only tool intended to be called by the messages UI after the user selects a conversation.
Input Schema
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"description": "Firebase conversation/thread id."
},
"messages_limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
"required": [
"conversation_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"conversations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"conversation_id": {
"type": "string"
},
"room_title": {
"type": "string"
},
"room_cover_url": {
"type": "string"
},
"other_participant": {
"type": "object",
"properties": {
"role": {
"type": "string"
},
"name": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"role",
"name"
]
},
"last_message": {
"type": "string"
},
"last_message_at": {
"type": [
"string",
"null"
]
},
"unread_count": {
"type": "integer"
},
"messages_loaded": {
"type": "boolean"
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sender_name": {
"type": "string"
},
"is_from_me": {
"type": "boolean"
},
"message_type": {
"type": "string"
},
"text": {
"type": "string"
},
"created_at": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"sender_name",
"is_from_me",
"message_type",
"text",
"created_at"
]
}
}
},
"additionalProperties": false,
"required": [
"conversation_id",
"room_title",
"room_cover_url",
"other_participant",
"last_message",
"last_message_at",
"unread_count",
"messages_loaded",
"messages"
]
}
},
"total_conversations": {
"type": "integer"
},
"returned_conversations": {
"type": "integer"
},
"unread_messages": {
"type": "integer"
},
"unread_only": {
"type": "boolean"
},
"limit": {
"type": "integer"
},
"messages_limit": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"conversation_id": {
"type": [
"string",
"null"
]
}
},
"required": [
"conversations",
"total_conversations",
"returned_conversations",
"unread_messages",
"unread_only",
"limit",
"messages_limit",
"has_more",
"conversation_id"
],
"additionalProperties": false
}π’list_my_favorites
List the authenticated userβs saved available rooms.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"favorites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency"
]
}
}
},
"required": [
"favorites"
],
"additionalProperties": false
}π‘add_favorite(room_id)
Save an approved room to the authenticated userβs favorites.
Input Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer",
"minimum": 1
}
},
"required": [
"room_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"added": {
"type": "boolean"
},
"room_id": {
"type": "integer"
}
},
"required": [
"added",
"room_id"
],
"additionalProperties": false
}π΄remove_favorite(room_id)
Remove a room from the authenticated userβs favorites.
Input Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer",
"minimum": 1
}
},
"required": [
"room_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"removed": {
"type": "boolean"
},
"room_id": {
"type": "integer"
}
},
"required": [
"removed",
"room_id"
],
"additionalProperties": false
}π’list_my_requests(direction)
List rental requests sent or received by the authenticated user.
Input Schema
{
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"sent",
"received",
"all"
],
"default": "all"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"requests": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"message": {
"type": [
"string",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"duration_months": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"room_title": {
"type": "string"
},
"student_name": {
"type": "string"
},
"landlord_name": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id",
"message",
"start_date",
"duration_months",
"status",
"room_title",
"student_name",
"landlord_name"
]
}
},
"direction": {
"type": "string"
}
},
"required": [
"requests",
"direction"
],
"additionalProperties": false
}π΄create_rental_request(room_id, message, start_date, duration_months)
Create and send a rental request for an approved available room using the authenticated UniAffitti account. The landlord is notified, and the request remains in the account until its status changes. Do not include passwords, payment-card details, government identifiers, health or biometric data in the optional message.
Input Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer",
"minimum": 1
},
"message": {
"type": "string",
"description": "Optional message to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data.",
"maxLength": 4000
},
"start_date": {
"type": "string",
"description": "YYYY-MM-DD."
},
"duration_months": {
"type": "integer",
"minimum": 1,
"maximum": 120
}
},
"required": [
"room_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"request_id": {
"type": "integer"
},
"room_title": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"request_id",
"room_title",
"status"
],
"additionalProperties": false
}π΄update_rental_request_status(request_id, status, available_from)
Change a rental request to in review, accepted, rejected, or cancelled according to the authenticated userβs role. Acceptance marks the room as rented; status changes may notify the other participant.
Input Schema
{
"type": "object",
"properties": {
"request_id": {
"type": "integer",
"minimum": 1
},
"status": {
"type": "string",
"enum": [
"in_review",
"accepted",
"rejected",
"cancelled"
]
},
"available_from": {
"type": "string",
"description": "YYYY-MM-DD; required when accepting."
}
},
"required": [
"request_id",
"status"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"request_id": {
"type": "integer"
},
"status": {
"type": "string"
},
"available_from": {
"type": [
"string",
"null"
]
}
},
"required": [
"request_id",
"status",
"available_from"
],
"additionalProperties": false
}π’list_my_listings
List the authenticated userβs own listings and moderation status.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"listings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"price_monthly": {
"type": [
"number",
"null"
]
},
"price_currency": {
"type": [
"string",
"null"
]
},
"room_type": {
"type": [
"string",
"null"
]
},
"available_from": {
"type": [
"string",
"null"
]
},
"occupancy_status": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"country_code": {
"type": [
"string",
"null"
]
},
"moderation_status": {
"type": [
"string",
"null"
]
},
"rejection_reason": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"required": [
"id",
"title",
"price_monthly",
"price_currency",
"room_type",
"available_from",
"occupancy_status",
"city",
"country_code",
"moderation_status",
"rejection_reason"
]
}
}
},
"required": [
"listings"
],
"additionalProperties": false
}π‘create_listing(title, description, address_full, location_label, city, ...)
Create a listing draft for UniAffitti moderation. It is not public until approved. The draft stores the full property address and coordinates; university and campus IDs remain unset. Do not include passwords, payment-card details, government identifiers, health or biometric data in the description.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 190
},
"description": {
"type": "string",
"description": "Describe the room and rental terms only. Do not include passwords, payment-card details, government identifiers, health or biometric data.",
"minLength": 1
},
"address_full": {
"type": "string",
"description": "Full address of the property being listed; shared with the connector when you create this listing.",
"minLength": 1,
"maxLength": 500
},
"location_label": {
"type": "string",
"maxLength": 190
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"country_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code."
},
"latitude": {
"type": "number",
"description": "Exact latitude of the property being listed.",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"description": "Exact longitude of the property being listed.",
"minimum": -180,
"maximum": 180
},
"property_type": {
"type": "string",
"enum": [
"apartment",
"house",
"other"
],
"default": "apartment"
},
"property_floor": {
"type": "integer",
"minimum": -2,
"maximum": 20
},
"price_monthly": {
"type": "number",
"minimum": 0
},
"deposit_amount": {
"type": "number",
"minimum": 0
},
"price_currency": {
"type": "string",
"default": "EUR"
},
"room_type": {
"type": "string",
"enum": [
"single",
"double",
"bed"
]
},
"min_stay_months": {
"type": "integer",
"minimum": 0
},
"available_from": {
"type": "string",
"description": "YYYY-MM-DD."
},
"occupancy_status": {
"type": "string",
"enum": [
"available",
"reserved",
"rented",
"unavailable"
],
"default": "available"
},
"features": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"title",
"description",
"address_full",
"city",
"country_code",
"latitude",
"longitude",
"property_floor",
"price_monthly",
"room_type"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"room_id": {
"type": "integer"
},
"moderation_status": {
"type": "string"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"country_code": {
"type": "string"
},
"location_label": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"city",
"country_code",
"location_label"
]
},
"next_step": {
"type": "string"
}
},
"required": [
"room_id",
"moderation_status",
"location",
"next_step"
],
"additionalProperties": false
}π’get_account_links
Return deep links for account, listing creation, messages, requests, and favorites in the full UniAffitti web app.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"web_app": {
"type": "string"
},
"dashboard": {
"type": "string"
},
"favorites": {
"type": "string"
},
"requests": {
"type": "string"
},
"messages": {
"type": "string"
},
"my_listings": {
"type": "string"
},
"create_listing": {
"type": "string"
},
"profile": {
"type": "string"
}
},
"required": [
"web_app",
"dashboard",
"favorites",
"requests",
"messages",
"my_listings",
"create_listing",
"profile"
],
"additionalProperties": false
}Community
Evidence