Skip to main content
Glama

UniAffitti Room Finder

Server Details

Find, rank, and compare student rooms from UniAffitti public listings.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 52 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.3/5.0

Scored across 21 tools

Disambiguation3/5

Some tools overlap: list_my_messages and get_my_conversation_messages both load conversation messages, and list_search_metadata/search_universities/list_university_campuses/search_cities all surface university or city catalog data. Descriptions provide guidance, but an agent could still misselect between these catalog and messaging tools.

Naming Consistency4/5

All names use consistent snake_case verb_noun phrasing (add_favorite, create_listing, list_my_requests, search_rooms). Minor variation in using my_ for authenticated-user resources versus not, but still readable and predictable.

Tool Count3/5

21 tools is on the heavy side for a room-finder, with some redundancy (two message-reading tools, several catalog/search tools) that could be consolidated. The count is not extreme but sits in the borderline 16–25 range.

Completeness4/5

Core workflows are well covered: search, compare, favorite, rank, rental request create/update/list, messaging, profile/account links. Minor gaps exist around listing lifecycle—create_listing and list_my_listings but no update or delete listing—and no profile update, but agents can work around these.

Available Tools

21 tools
add_favoriteSave a roomB
Idempotent
Inspect

Save an approved room to the authenticated user’s favorites.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedYes
room_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write nature (readOnlyHint=false), idempotency, and safe/non-destructive behavior, so the safety profile is covered. The description adds only the 'approved room' precondition and the auth scope, but leaves unclear what 'approved' means or what happens on a duplicate/already-favorited call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-formed sentence with the action and target front-loaded and no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the safety profile, so return values need not be explained. However, the description omits error conditions, the meaning of 'approved', and param provenance, leaving meaningful gaps for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds no meaning beyond the schema's room_id (integer, minimum 1). It does not say where the room_id comes from (e.g., get_room_details or search_rooms), so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Save an approved room to the authenticated user's favorites.' An agent can identify the operation clearly, but the description does not name how it differs from siblings like remove_favorite or list_my_favorites, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as remove_favorite (to undo) or list_my_favorites (to verify). The agent must infer the usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_roomsCompare roomsB
Read-onlyIdempotent
Inspect

Compare selected public room listings side by side for price, distance, type, availability, features, and trust signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idsYes
campus_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
roomsYes
comparisonYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile needs no repeating. The description adds one genuine behavioral nugget — only 'public' listings are comparable — but says nothing about the 2–8 room bounds, error behavior for private/invalid IDs, or result ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, verb-first, no filler, and the enumerated dimensions give the reader immediate value. Nothing to trim and nothing relevant repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 no explanation, and the listed dimensions roughly preview it. However, for a tool with two undocumented parameters and hard cardinality limits, the description omits constraints an agent must know to call it successfully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, so the description must carry the burden and largely fails: room_ids is only obliquely implied by 'selected ... listings' and campus_id is never mentioned at all. Neither the minItems=2/maxItems=8 limits nor the campus scoping semantics are surfaced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare) and resource (public room listings) and enumerates the compared dimensions. The 'side by side' framing implicitly separates it from single-room tools like get_room_details, but it never names an alternative, so sibling differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no stated prerequisites, and no mention of the practical constraints (min 2 / max 8 rooms, or how campus_id affects the comparison). The agent is left to infer the intended invocation context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_listingCreate a listingAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYes
titleYes
featuresNo
latitudeYesExact latitude of the property being listed.
longitudeYesExact longitude of the property being listed.
room_typeYes
descriptionYesDescribe the room and rental terms only. Do not include passwords, payment-card details, government identifiers, health or biometric data.
address_fullYesFull address of the property being listed; shared with the connector when you create this listing.
country_codeYesISO 3166-1 alpha-2 country code.
price_monthlyYes
property_typeNoapartment
available_fromNoYYYY-MM-DD.
deposit_amountNo
location_labelNo
price_currencyNoEUR
property_floorYes
min_stay_monthsNo
occupancy_statusNoavailable

Output Schema

ParametersJSON Schema
NameRequiredDescription
room_idYes
locationYes
next_stepYes
moderation_statusYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent, openWorld). The description adds real context beyond that: the object is a draft, invisible until approved, stores full address and coordinates, leaves university/campus IDs unset, and carries a PII prohibition. It does not touch idempotency (duplicate drafts on re-call), which the annotation covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the create action and draft state, followed by storage behavior and the compliance constraint. No filler, though the PII sentence duplicates the schema's description-field note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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, and the moderation/draft lifecycle is covered. However, for an 18-parameter create tool with low schema coverage, the description omits guidance on most inputs and on re-call/idempotency behavior, leaving a noticeable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% across 18 parameters (10 required, 3 enums), so the description must compensate heavily and does not. It speaks only to address_full, coordinates, and an out-of-schema note about university/campus IDs; price_currency, room_type, occupancy_status, property_type, and other required fields get no added meaning, and the PII advice for description merely repeats the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Create) and resource (a listing draft) and scopes it to a named workflow (UniAffitti moderation). No sibling tool creates listings, so it is unambiguously distinguishable from create_rental_request and the list/update siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies that the result is a non-public draft pending approval, which implies when this is appropriate, but it never states when to use this over an alternative or any prerequisite for calling it. With no explicit alternative named, usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_rental_requestSend a rental requestA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional message to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data.
room_idYes
start_dateNoYYYY-MM-DD.
duration_monthsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
request_idYes
room_titleYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=true, idempotent=false, openWorld=true), so the bar is lower. The description adds genuinely non-redundant behavior: the landlord is notified and the request persists in the account until its status changes, plus a PII prohibition. It stops short of describing failure behavior or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, then behavior, then the safety constraint. Every sentence carries weight, though the PII sentence partially duplicates the schema's message description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, and annotations cover the destructive/open-world profile. The description covers notification and persistence, leaving only edge cases (failure, duplicate requests, approval-state enforcement) unspecified for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only message and start_date are documented in-schema). The description reiterates that message is optional with the same PII warning already in the schema, and ties room_id to an approved available room, but says nothing extra about start_date or duration_months semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create and send a rental request') and narrows the scope to 'an approved available room' under the authenticated UniAffitti account. It does not name the closest sibling (send_room_message) to explain the difference, so an agent must infer the distinction from the resource noun.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for an approved available room' is an implicit precondition that constrains when the tool is valid, which is useful. However, there is no explicit when/when-not guidance and no routing to alternatives such as send_room_message or update_rental_request_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_conversation_messagesRead one UniAffitti conversationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messages_limitNo
conversation_idYesFirebase conversation/thread id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
has_moreYes
unread_onlyYes
conversationsYes
messages_limitYes
conversation_idYes
unread_messagesYes
total_conversationsYes
returned_conversationsYes

TDQS

A3.5/5.0
Behavior3/5

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 the 'data-only' framing (no side effects) and the UI-driven invocation model, but says nothing about result ordering or what happens when messages_limit truncates the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and resource before the invocation context. No filler, though it is thin enough that a few more decisive details could have been added at no structural cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 no explanation, and the read-only safety profile is covered by annotations. For a 2-parameter read tool the description is nearly complete, with the only meaningful gap being ordering/limit behavior for messages_limit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: conversation_id is documented in the schema, while messages_limit carries only a default/min/max with no description. The phrase 'recent messages' hints at recency ordering but does not explain that messages_limit caps how many are returned, so the description does not fully compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Load the recent messages for one authenticated UniAffitti conversation.' The 'one ... conversation' scoping implicitly separates it from the list_my_messages sibling, though that sibling is never named, so it stops short of explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a usage context ('intended to be called by the messages UI after the user selects a conversation'), which implies the trigger condition. It never states when not to use it or names the alternative for browsing conversations, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_profileGet my profileA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: it may initiate an OAuth connection as a side effect, and it explicitly scopes the returned data for privacy. There is mild tension worth noting — an OAuth handshake with an external provider versus openWorldHint=false — but this is not a clear contradiction of any stated annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded: the first establishes the trigger condition and the OAuth behavior, the second enumerates the returned and withheld fields. No filler, and every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format need not be explained; the description nonetheless usefully summarizes the returned and non-returned fields as a privacy contract. For a zero-parameter read tool this is close to complete, though it says nothing about what happens if the OAuth connection fails or is declined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. The description reinforces this by confirming the tool operates purely on the authenticated user's own profile with no filtering inputs required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (returns) and resource (the authenticated user's profile) and enumerates the exact fields returned plus a secondary behavior (starting OAuth connection). It distinguishes the tool's scope from risky siblings by listing what it deliberately never returns (phone, photos, account IDs, credentials). It does not, however, contrast itself with close siblings like get_account_links, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition: 'When the user asks to access or connect UniAffitti, call this tool.' That is a concrete when-to-use rule rather than an inference. It names no alternatives or exclusions (e.g., when get_account_links would be preferred), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_room_detailsGet room detailsA
Read-onlyIdempotent
Inspect

Return public details for one approved room, including user-submitted description, media, features, and limited landlord trust information.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
roomYes
mediaYes
featuresYes
landlordYes
contact_availableYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuinely new context: results are public-only, restricted to 'approved' rooms, and landlord trust info is deliberately 'limited', which tells the agent what it will and won't get back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that lists the returned content with zero filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 re-explained, yet the description usefully previews them. Annotations cover safety. The only omission is behavior on failure (missing or unapproved room_id), which keeps it short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter at 0% schema description coverage; the description never mentions room_id or its semantics. However, the name is self-explanatory and the schema constrains it to an integer >= 1, so the gap is minor rather than damaging.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Return public details for one approved room') and enumerates the payload (description, media, features, trust info). It implies single-record retrieval, distinguishing it from search_rooms, but never names or contrasts the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — an agent infers you call this with a room_id when you need one room's detail page. There is no statement of when to prefer it over search_rooms or compare_rooms, and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_favoritesList my favoritesA
Read-onlyIdempotent
Inspect

List the authenticated user’s saved available rooms.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
favoritesYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint, so safety is covered. The description adds two useful facts: the list is scoped to the authenticated user and only 'available' rooms appear — implying unavailable saved favorites are excluded. It says nothing about ordering, paging, or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. Every word carries meaning, and the scoping terms (authenticated user, saved, available) come before any trailing detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and zero parameters removes schema risk. The remaining question — what 'available' filters out and how the list is ordered — is a minor gap for a simple zero-arg list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to explain; baseline 4 applies. No syntax or filter options are implied that the schema would need to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (the authenticated user's saved available rooms), which is unambiguous. It does not explicitly contrast with siblings like add_favorite or remove_favorite, but the verb makes the read-vs-mutate distinction obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this over alternatives, no preconditions, no mention of paging or filtering behavior. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_listingsList my listingsA
Read-onlyIdempotent
Inspect

List the authenticated user’s own listings and moderation status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
listingsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds two useful facts beyond that: the result is scoped to the authenticated user (auth requirement) and includes moderation status. It does not add anything about ordering, pagination, or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero padding, front-loading the action and scope. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with a rich annotation set and an output schema covering return values, the description is essentially sufficient: it says whose data and what extra field comes back. Only minor omissions (result scope/volume, ordering) remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. Schema coverage is also 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (listings) restricted to the authenticated user, plus the extra payload detail 'moderation status'. The 'own' scoping implicitly separates it from search_rooms or get_room_details, though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, prerequisites, or alternative-tool guidance is given. The scope 'authenticated user's own listings' hints at the use case, but the agent must infer it against siblings like search_rooms or list_my_favorites with no stated rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_messagesRead my messagesB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
unread_onlyNo
messages_limitNo
conversation_idNoOptional Firebase conversation/thread id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
has_moreYes
unread_onlyYes
conversationsYes
messages_limitYes
conversation_idYes
unread_messagesYes
total_conversationsYes
returned_conversationsYes

TDQS

B3.4/5.0
Behavior3/5

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 useful mode context ('fast conversation summaries' vs 'complete recent messages' and web-app parity), but does not address truncation behavior, auth failure, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the dual-mode distinction front-loaded and no padding. It is dense but every clause carries information, though the clause ordering mixes scope and mode slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required. The description covers the mode split but leaves the limit/messages_limit and unread_only semantics unexplained, which is a meaningful gap for a 4-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%; only conversation_id is documented in the schema. The description does not explain limit versus messages_limit (the distinction an agent most needs), nor unread_only, so three parameters remain ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (authenticated user's UniAffitti conversations) and clarifies the dual-mode behavior: summaries without conversation_id, full messages with it. It does not, however, distinguish itself from the sibling get_my_conversation_messages, which appears to cover the same with-id case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains the two calling modes and what each returns, so an agent knows which parameters select which behavior. It stops short of naming an alternative tool or stating exclusions, leaving the overlap with get_my_conversation_messages unresolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_requestsList my rental requestsB
Read-onlyIdempotent
Inspect

List rental requests sent or received by the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
requestsYes
directionYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description contributes the authenticated-user scoping, which is useful, but says nothing about ordering, pagination, or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the scope constraint front-loaded and no wasted words. It is efficient, though perhaps too terse for the parameter it leaves unexplained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 described, and annotations cover the safety profile. What remains unaddressed is the semantics of the direction filter and any limits or ordering on results, leaving the definition adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 the parameter burden, yet it only echoes the sent/received notions and never explains the 'all' value, the default, or what direction filtering actually changes. One documented enum exists in the schema but the description adds no real meaning on top of it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (rental requests) with the scope qualifier 'sent or received by the authenticated user', which tells an agent exactly what set is returned. It does not, however, differentiate itself from similar 'my' siblings (list_my_favorites, list_my_listings) beyond the resource noun.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no mention of alternatives such as create_rental_request or update_rental_request_status, and no conditions under which a different tool should be chosen. Usage is only inferable from the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_search_metadataList search metadataC
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
university_limitNo
university_queryNoFilter universities by name, city, country, or alias.
university_offsetNo
university_country_codeNoISO 3166-1 alpha-2 country code.

Output Schema

ParametersJSON Schema
NameRequiredDescription
campusesYes
featuresYes
room_typesYes
universitiesYes
universities_paginationYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description does add two useful behavioral facts beyond that — results are paginated and the catalog is not capped at 500 records — but the '500 records' reference is unexplained and no other behavior (auth, response shape) is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, with the core purpose front-loaded — that part is efficient. However, the second sentence about the 500-record cap appears with no antecedent or rationale, reading as an unexplained aside that weakens structure rather than adding value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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, and annotations cover safety; that lowers the burden. Still, for a tool whose name says 'search metadata' and whose siblings overlap heavily, the description should clarify the relationship to search_universities and list_university_campuses — that gap remains unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: university_query and university_country_code are documented in-schema, while university_limit and university_offset have only defaults/bounds. The phrase 'paginated slice' hints at limit/offset semantics but does not add format, default, or interaction detail beyond what the schema already states, so this sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb (list) and resources (university catalog, campuses, feature filters), but it conflates three different things and never explains what 'search metadata' in the tool name refers to. With siblings like search_universities and list_university_campuses present, an agent cannot confidently tell this tool apart from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given. The description does not state whether this is the discovery/prep step before search_rooms, or how it relates to search_universities or list_university_campuses, leaving the agent to guess which sibling to call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_university_campusesList university campusesA
Read-onlyIdempotent
Inspect

List active campuses for a selected university so the user can refine the room search.

ParametersJSON Schema
NameRequiredDescriptionDefault
university_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
campusesYes
university_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds one behavioral fact: only active campuses are returned, implying inactive ones are filtered out. It does not cover ordering, pagination, or what happens for an invalid university_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and scope, with the purpose clause placed last. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, and the tool is a simple single-param read. The only gap is that the description does not say where university_id comes from, which for a low-coverage schema would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single required university_id, so the description must compensate. It does convey that the parameter selects a university (implying the ID originates from search_universities), but adds no detail on ID format or validation beyond the schema's integer/minimum=1 constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (campuses) with a clear scope qualifier ('active', 'for a selected university'). It is distinguishable from siblings like search_universities, though it does not explicitly contrast with any of them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing clause 'so the user can refine the room search' implies the workflow position (after picking a university, before searching rooms), but no alternatives are named and no when-not-to-use condition is given. Usage must be inferred from the purpose clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_room_matchesRank room matchesB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
featuresNo
campus_idNo
max_budgetNo
available_fromNoYYYY-MM-DD.
max_distance_kmNo
preferred_room_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
roomsYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world, non-destructive, so the safety profile is covered. The description adds that only 'public, approved' listings are considered and that content is user-submitted (a reliability caveat), which is real value, but it omits how scoring/ranking works and any ordering or result-count behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler, and the core purpose is front-loaded. The user-submitted caveat is placed at the end, which is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 no explanation, and annotations cover safety. However, for an 8-parameter tool with 13% schema coverage, the description leaves several parameters and the sibling-choice question unaddressed, making it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 13%, so the schema does little lifting. The description loosely maps to some parameters (budget=max_budget, campus distance=max_distance_km, room type=preferred_room_type) but ignores query, limit, campus_id, available_from, and the nested features object, so the gap is only partly filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (find and score) and resource (public, approved room listings) with the scoring dimensions called out. It is clear what the tool returns, though it never explicitly distinguishes itself from the sibling search_rooms or compare_rooms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and never names an alternative, despite siblings like search_rooms and compare_rooms that an agent must choose between. Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_favoriteRemove a saved roomB
DestructiveIdempotent
Inspect

Remove a room from the authenticated user’s favorites.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedYes
room_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds 'authenticated user's', implying an auth requirement, but says nothing about behavior when the room isn't favorited or what the response contains beyond what annotations supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, appropriate for a one-parameter tool. It is efficient but perhaps slightly under-specified rather than erring on the side of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be described, and annotations cover the mutation/idempotency profile. For a simple one-parameter tool the description is nearly sufficient, with only the parameter format and any error behavior left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single room_id parameter. It does not — it never explains the identifier format or constraints beyond what the bare integer schema already shows, leaving the parameter semantics thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a room') plus scope ('from the authenticated user's favorites'), which cleanly distinguishes it from add_favorite and list_my_favorites. It stops short of explicitly naming the sibling alternative, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the inverse of add_favorite and the 'authenticated user's favorites' scope, so an agent can infer when to call it. However, there is no explicit when-to-use, no exclusion conditions, and no named alternative, leaving the routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_citiesSearch citiesC
Read-onlyIdempotent
Inspect

Search cities represented in the active university catalog and public room listings, with country and university counts for assisted room search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo
country_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
totalYes
citiesYes
offsetYes
has_moreYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds that results carry country and university counts, which is useful return-content context, but it says nothing about pagination despite limit/offset parameters existing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is tight, but the compression comes at the cost of omitting routing and parameter detail rather than by economizing on redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 restated, and annotations cover safety. However, for a four-parameter search tool inside a 21-tool family with zero schema documentation, the description leaves both filtering semantics and sibling choice unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters (query, limit, offset, country_code), so the description must compensate and largely does not. "Country and university counts" faintly suggests a country dimension, but no parameter's meaning, matching behavior, or default handling is clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Search cities") with a stated data scope: the active university catalog and public room listings. It implicitly separates itself from search_universities and search_rooms by naming the entity it returns and where it draws from, though it never names those siblings directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage cue is the trailing "for assisted room search," which implies a discovery step before a room search but states no when/when-not condition or alternative. With search_rooms, search_universities, and list_search_metadata available, an agent gets no routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_roomsSearch roomsB
Read-onlyIdempotent
Inspect

Search approved, available student rooms by budget, type, university, optional campus, distance, and features. Results include public listing content submitted by UniAffitti users.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoOptional city filter selected from the assisted location search.
limitNo
queryNoFree text search over title, description, university, location, and campus.
offsetNo
featuresNo
order_byNonewest
campus_idNo
max_priceNo
min_priceNo
room_typeNo
country_codeNoOptional ISO 3166-1 alpha-2 country filter.
university_idNo
available_fromNoYYYY-MM-DD.
max_distance_kmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
roomsYes
offsetYes
has_moreYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value by scoping results to 'approved, available' rooms and disclosing that content is user-submitted ('public listing content submitted by UniAffitti users'), but it says nothing about pagination behavior despite limit/offset parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste. The filterable dimensions are front-loaded and the provenance note about user-submitted content follows immediately. Nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required, and the read-only annotations cover the safety dimension. However, for a 14-parameter tool with only 29% schema coverage and no usage guidance, the description leaves meaningful gaps in how to drive the filters correctly, making it only adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (29%), with only city, query, country_code, and available_from documented in the schema. The description partially compensates by grouping the filterable dimensions (budget, type, university, campus, distance, features), which maps to max/min_price, room_type, university_id, campus_id, max_distance_km, and features, but it adds no format or syntax detail, leaving the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Search) and resource (student rooms) and enumerates the filterable dimensions: budget, type, university, campus, distance, and features. It is clear on its own, but it never names or contrasts itself with close siblings like rank_room_matches, compare_rooms, or get_room_details, so an agent cannot tell from the description alone which one to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. The description implies a general browse/search entry point, but it does not mention alternatives (rank_room_matches, compare_rooms, get_room_details) or prerequisites, leaving the agent to infer routing from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_universitiesSearch universitiesB
Read-onlyIdempotent
Inspect

Search the complete active UniAffitti university catalog worldwide with pagination and total count.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
limitNo
queryNo
offsetNo
country_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
totalYes
offsetYes
has_moreYes
universitiesYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, idempotentHint=true, destructiveHint=false, so safety profile is clear. The description adds that it's 'active' records only and supports pagination/total count, which is useful context. However, it doesn't describe return format details or rate limits, so it's modest value on top of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the core action and scope. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Has an output schema, so return values needn't be explained. However, the description omits parameter semantics entirely and provides no usage guidance for a search tool with multiple optional filters. Given the 0% schema coverage, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the 5 parameters (city, country_code, limit, offset, query) are entirely undocumented in the schema. The description mentions 'pagination and total count', hinting at limit/offset, but provides no meaning for city, country_code, or query. With low coverage, the description should compensate but largely fails to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (Search) and resource (universities), and specifies scope (complete active UniAffitti university catalog worldwide). Distinguishes itself from siblings implicitly via the 'universities' resource, though it doesn't explicitly contrast with search_cities or list_university_campuses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this tool versus alternatives like list_university_campuses or search_cities. The description doesn't mention filters (city, country_code, query) as usage conditions. An agent must infer usage entirely from the name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_room_messageContact landlordA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesMessage to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data.
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sentYes
room_titleYes
web_chat_urlYes
landlord_nameYes
conversation_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=true and non-idempotent, so the safety profile is covered. The description adds real value beyond them: the message is permanently stored, the landlord is notified, it cannot be recalled, and sensitive data types are prohibited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action and recipient, then consequences, then the data-handling rule. Minor redundancy: the PII prohibition duplicates verbatim text already in the message parameter's schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and annotations cover the destructive/non-idempotent profile. The description supplies the consequential details an agent needs (permanence, notification, no recall) but leaves room_id validity only loosely implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% and room_id carries no schema description, so the description's 'approved available room' constraint is the only hint about valid room_id values, partially compensating. The PII warning merely repeats the message parameter's own schema description, adding no new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Send and permanently store a message') plus the exact recipient ('the landlord of an approved available room') and the acting identity ('authenticated UniAffitti account'). It is unambiguous versus read-oriented siblings like get_my_conversation_messages or list_my_messages, though it never names an alternative directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scoping phrase 'approved available room' and the note that messages 'cannot be recalled with this tool,' which hints at deliberation before calling. There is no explicit when-to-use/when-not guidance or named alternative for messaging versus requesting or favoriting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_rental_request_statusUpdate rental request statusA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
request_idYes
available_fromNoYYYY-MM-DD; required when accepting.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
request_idYes
available_fromYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=false and openWorld=true, but the description adds real value beyond them: authorization depends on the caller's role, accepting has a side effect on the room ('marks the room as rented'), and other participants may be notified. It does not say whether transitions can be reversed or which transitions are legal from a given state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the operation and its allowed target states come first, and the consequential behavior (room marked rented, notifications) follows. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the destructive/non-idempotent nature is covered by annotations plus the side-effect and notification notes. The remaining gap is the conditional available_from requirement and the legal transition rules, which an agent would want before mutating state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 33%, with only available_from documented. The description restates the enum values already in the schema and never mentions available_from or that it is conditionally required when accepting, so it does not compensate for the coverage gap beyond what the schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Change a rental request') and enumerates the valid target statuses, which cleanly separates it from siblings like create_rental_request and list_my_requests. It stops short of naming any sibling explicitly, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'According to the authenticated user's role' signals a permission constraint on who may perform which transition, which is useful context. However, it never states when to prefer this tool over alternatives or when a transition is disallowed, leaving usage guidance implied rather than explicit.

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. 21 tool updates
    • Changedadd_favorite1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "added": {
        +      "type": "boolean"
        +    },
        +    "room_id": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "added",
        +    "room_id"
        +  ],
        +  "type": "object"
        +}
    • Changedcompare_rooms1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "comparison": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "closest_room_id": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "lowest_price_room_id": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "most_reviewed_landlord_room_id": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "lowest_price_room_id",
        +        "closest_room_id",
        +        "most_reviewed_landlord_room_id"
        +      ],
        +      "type": "object"
        +    },
        +    "rooms": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "available_from": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "campus_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "cover_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "deposit_amount": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "description": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "distance_km": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "feature_summary": {
        +            "items": {
        +              "additionalProperties": false,
        +              "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"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "code",
        +                "label",
        +                "type",
        +                "unit",
        +                "value",
        +                "value_label"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "landlord_avatar_url": {
        +            "type": "string"
        +          },
        +          "landlord_is_verified": {
        +            "type": "boolean"
        +          },
        +          "landlord_name": {
        +            "type": "string"
        +          },
        +          "landlord_rating_average": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "landlord_rating_count": {
        +            "type": "integer"
        +          },
        +          "landlord_role": {
        +            "type": "string"
        +          },
        +          "location_label": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "location_name": {
        +            "type": "string"
        +          },
        +          "min_stay_months": {
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "occupancy_status": {
        +            "type": "string"
        +          },
        +          "price_currency": {
        +            "type": "string"
        +          },
        +          "price_monthly": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "public_url": {
        +            "type": "string"
        +          },
        +          "room_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "university_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "zone_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "price_monthly",
        +          "price_currency",
        +          "room_type",
        +          "location_name",
        +          "public_url",
        +          "feature_summary"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "rooms",
        +    "comparison"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_listing5 fields changed
      • addedInput schema / properties / address_full / description
        Added value: +"Full address of the property being listed; shared with the connector when you create this listing."
      • addedInput schema / properties / description / description
        Added value: +"Describe the room and rental terms only. Do not include passwords, payment-card details, government identifiers, health or biometric data."
      • addedInput schema / properties / latitude / description
        Added value: +"Exact latitude of the property being listed."
      • addedInput schema / properties / longitude / description
        Added value: +"Exact longitude of the property being listed."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "location": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "city": {
        +          "type": "string"
        +        },
        +        "country_code": {
        +          "type": "string"
        +        },
        +        "location_label": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "city",
        +        "country_code",
        +        "location_label"
        +      ],
        +      "type": "object"
        +    },
        +    "moderation_status": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "room_id": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "room_id",
        +    "moderation_status",
        +    "location",
        +    "next_step"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_rental_request2 fields changed
      • addedInput schema / properties / message / description
        Added value: +"Optional message to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "request_id": {
        +      "type": "integer"
        +    },
        +    "room_title": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "request_id",
        +    "room_title",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedget_account_links1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "create_listing": {
        +      "type": "string"
        +    },
        +    "dashboard": {
        +      "type": "string"
        +    },
        +    "favorites": {
        +      "type": "string"
        +    },
        +    "messages": {
        +      "type": "string"
        +    },
        +    "my_listings": {
        +      "type": "string"
        +    },
        +    "profile": {
        +      "type": "string"
        +    },
        +    "requests": {
        +      "type": "string"
        +    },
        +    "web_app": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "web_app",
        +    "dashboard",
        +    "favorites",
        +    "requests",
        +    "messages",
        +    "my_listings",
        +    "create_listing",
        +    "profile"
        +  ],
        +  "type": "object"
        +}
    • Changedget_my_conversation_messages1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "conversation_id": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "conversations": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "conversation_id": {
        +            "type": "string"
        +          },
        +          "last_message": {
        +            "type": "string"
        +          },
        +          "last_message_at": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "messages": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "created_at": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "is_from_me": {
        +                  "type": "boolean"
        +                },
        +                "message_type": {
        +                  "type": "string"
        +                },
        +                "sender_name": {
        +                  "type": "string"
        +                },
        +                "text": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "sender_name",
        +                "is_from_me",
        +                "message_type",
        +                "text",
        +                "created_at"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "messages_loaded": {
        +            "type": "boolean"
        +          },
        +          "other_participant": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "role": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "role",
        +              "name"
        +            ],
        +            "type": "object"
        +          },
        +          "room_cover_url": {
        +            "type": "string"
        +          },
        +          "room_title": {
        +            "type": "string"
        +          },
        +          "unread_count": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "conversation_id",
        +          "room_title",
        +          "room_cover_url",
        +          "other_participant",
        +          "last_message",
        +          "last_message_at",
        +          "unread_count",
        +          "messages_loaded",
        +          "messages"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "has_more": {
        +      "type": "boolean"
        +    },
        +    "limit": {
        +      "type": "integer"
        +    },
        +    "messages_limit": {
        +      "type": "integer"
        +    },
        +    "returned_conversations": {
        +      "type": "integer"
        +    },
        +    "total_conversations": {
        +      "type": "integer"
        +    },
        +    "unread_messages": {
        +      "type": "integer"
        +    },
        +    "unread_only": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "conversations",
        +    "total_conversations",
        +    "returned_conversations",
        +    "unread_messages",
        +    "unread_only",
        +    "limit",
        +    "messages_limit",
        +    "has_more",
        +    "conversation_id"
        +  ],
        +  "type": "object"
        +}
    • Changedget_my_profile1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "profile": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "email": {
        +          "type": "string"
        +        },
        +        "email_verified": {
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "role": {
        +          "type": "string"
        +        },
        +        "surname": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "role",
        +        "name",
        +        "surname",
        +        "email",
        +        "email_verified"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "profile"
        +  ],
        +  "type": "object"
        +}
    • Changedget_room_details1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "contact_available": {
        +      "type": "boolean"
        +    },
        +    "features": {
        +      "items": {
        +        "additionalProperties": false,
        +        "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"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "label",
        +          "type",
        +          "unit",
        +          "value",
        +          "value_label"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "landlord": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "avatar_url": {
        +          "type": "string"
        +        },
        +        "is_verified": {
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "rating_average": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "rating_count": {
        +          "type": "integer"
        +        },
        +        "role": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "avatar_url",
        +        "role",
        +        "is_verified",
        +        "rating_average",
        +        "rating_count"
        +      ],
        +      "type": "object"
        +    },
        +    "media": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "media_type": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "media_type",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "room": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "available_from": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "campus_name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "cover_url": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "deposit_amount": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "description": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "distance_km": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "type": "integer"
        +        },
        +        "landlord_avatar_url": {
        +          "type": "string"
        +        },
        +        "landlord_is_verified": {
        +          "type": "boolean"
        +        },
        +        "landlord_name": {
        +          "type": "string"
        +        },
        +        "landlord_rating_average": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "landlord_rating_count": {
        +          "type": "integer"
        +        },
        +        "landlord_role": {
        +          "type": "string"
        +        },
        +        "location_label": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "location_name": {
        +          "type": "string"
        +        },
        +        "min_stay_months": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "occupancy_status": {
        +          "type": "string"
        +        },
        +        "price_currency": {
        +          "type": "string"
        +        },
        +        "price_monthly": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "public_url": {
        +          "type": "string"
        +        },
        +        "room_city": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "room_country_code": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "room_type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "type": "string"
        +        },
        +        "university_city": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "university_country_code": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "university_name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "zone_name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "title",
        +        "price_monthly",
        +        "price_currency",
        +        "room_type",
        +        "location_name",
        +        "public_url"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "room",
        +    "landlord",
        +    "media",
        +    "features",
        +    "contact_available"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_my_favorites1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "favorites": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "type": "integer"
        +          },
        +          "price_currency": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "price_monthly": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "price_monthly",
        +          "price_currency"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "favorites"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_my_listings1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "listings": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "available_from": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "moderation_status": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "occupancy_status": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "price_currency": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "price_monthly": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "rejection_reason": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "price_monthly",
        +          "price_currency",
        +          "room_type",
        +          "available_from",
        +          "occupancy_status",
        +          "city",
        +          "country_code",
        +          "moderation_status",
        +          "rejection_reason"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "listings"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_my_messages1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "conversation_id": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "conversations": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "conversation_id": {
        +            "type": "string"
        +          },
        +          "last_message": {
        +            "type": "string"
        +          },
        +          "last_message_at": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "messages": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "created_at": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "is_from_me": {
        +                  "type": "boolean"
        +                },
        +                "message_type": {
        +                  "type": "string"
        +                },
        +                "sender_name": {
        +                  "type": "string"
        +                },
        +                "text": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "sender_name",
        +                "is_from_me",
        +                "message_type",
        +                "text",
        +                "created_at"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "messages_loaded": {
        +            "type": "boolean"
        +          },
        +          "other_participant": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "role": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "role",
        +              "name"
        +            ],
        +            "type": "object"
        +          },
        +          "room_cover_url": {
        +            "type": "string"
        +          },
        +          "room_title": {
        +            "type": "string"
        +          },
        +          "unread_count": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "conversation_id",
        +          "room_title",
        +          "room_cover_url",
        +          "other_participant",
        +          "last_message",
        +          "last_message_at",
        +          "unread_count",
        +          "messages_loaded",
        +          "messages"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "has_more": {
        +      "type": "boolean"
        +    },
        +    "limit": {
        +      "type": "integer"
        +    },
        +    "messages_limit": {
        +      "type": "integer"
        +    },
        +    "returned_conversations": {
        +      "type": "integer"
        +    },
        +    "total_conversations": {
        +      "type": "integer"
        +    },
        +    "unread_messages": {
        +      "type": "integer"
        +    },
        +    "unread_only": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "conversations",
        +    "total_conversations",
        +    "returned_conversations",
        +    "unread_messages",
        +    "unread_only",
        +    "limit",
        +    "messages_limit",
        +    "has_more",
        +    "conversation_id"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_my_requests1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "direction": {
        +      "type": "string"
        +    },
        +    "requests": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "duration_months": {
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "landlord_name": {
        +            "type": "string"
        +          },
        +          "message": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_title": {
        +            "type": "string"
        +          },
        +          "start_date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "status": {
        +            "type": "string"
        +          },
        +          "student_name": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "message",
        +          "start_date",
        +          "duration_months",
        +          "status",
        +          "room_title",
        +          "student_name",
        +          "landlord_name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "requests",
        +    "direction"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_search_metadata1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "campuses": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "address": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "campus_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "is_verified": {
        +            "type": "boolean"
        +          },
        +          "latitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "university_id": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "university_id",
        +          "name",
        +          "latitude",
        +          "longitude",
        +          "is_verified"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "features": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "code": {
        +            "type": "string"
        +          },
        +          "feature_type": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "label": {
        +            "type": "string"
        +          },
        +          "options": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "value_code": {
        +                  "type": "string"
        +                },
        +                "value_label": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "value_code",
        +                "value_label"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "unit": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "code",
        +          "label",
        +          "feature_type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "room_types": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "label": {
        +            "type": "string"
        +          },
        +          "value": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value",
        +          "label"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "universities": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "default_latitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "default_longitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "email_domain": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "region": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "website_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "city",
        +          "country_code",
        +          "country_name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "universities_pagination": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "has_more": {
        +          "type": "boolean"
        +        },
        +        "limit": {
        +          "type": "integer"
        +        },
        +        "offset": {
        +          "type": "integer"
        +        },
        +        "total": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "total",
        +        "limit",
        +        "offset",
        +        "has_more"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "universities",
        +    "universities_pagination",
        +    "campuses",
        +    "features",
        +    "room_types"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_university_campuses1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "campuses": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "address": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "campus_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "is_verified": {
        +            "type": "boolean"
        +          },
        +          "latitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "longitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "university_id": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "university_id",
        +          "name",
        +          "latitude",
        +          "longitude",
        +          "is_verified"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "university_id": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "university_id",
        +    "campuses"
        +  ],
        +  "type": "object"
        +}
    • Changedrank_room_matches1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "rooms": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "available_from": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "campus_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "cover_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "deposit_amount": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "description": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "distance_km": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "landlord_avatar_url": {
        +            "type": "string"
        +          },
        +          "landlord_is_verified": {
        +            "type": "boolean"
        +          },
        +          "landlord_name": {
        +            "type": "string"
        +          },
        +          "landlord_rating_average": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "landlord_rating_count": {
        +            "type": "integer"
        +          },
        +          "landlord_role": {
        +            "type": "string"
        +          },
        +          "location_label": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "location_name": {
        +            "type": "string"
        +          },
        +          "match_reasons": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "match_score": {
        +            "type": "integer"
        +          },
        +          "min_stay_months": {
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "occupancy_status": {
        +            "type": "string"
        +          },
        +          "price_currency": {
        +            "type": "string"
        +          },
        +          "price_monthly": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "public_url": {
        +            "type": "string"
        +          },
        +          "room_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "university_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "zone_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "price_monthly",
        +          "price_currency",
        +          "room_type",
        +          "location_name",
        +          "public_url",
        +          "match_score",
        +          "match_reasons"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "rooms"
        +  ],
        +  "type": "object"
        +}
    • Changedremove_favorite1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "removed": {
        +      "type": "boolean"
        +    },
        +    "room_id": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "removed",
        +    "room_id"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_cities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "cities": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "city": {
        +            "type": "string"
        +          },
        +          "country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "region": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "universities_count": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "city",
        +          "region",
        +          "country_code",
        +          "country_name",
        +          "universities_count"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "has_more": {
        +      "type": "boolean"
        +    },
        +    "limit": {
        +      "type": "integer"
        +    },
        +    "offset": {
        +      "type": "integer"
        +    },
        +    "total": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "cities",
        +    "total",
        +    "limit",
        +    "offset",
        +    "has_more"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_rooms1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "has_more": {
        +      "type": "boolean"
        +    },
        +    "limit": {
        +      "type": "integer"
        +    },
        +    "offset": {
        +      "type": "integer"
        +    },
        +    "rooms": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "available_from": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "campus_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "cover_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "deposit_amount": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "description": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "distance_km": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "landlord_avatar_url": {
        +            "type": "string"
        +          },
        +          "landlord_is_verified": {
        +            "type": "boolean"
        +          },
        +          "landlord_name": {
        +            "type": "string"
        +          },
        +          "landlord_rating_average": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "landlord_rating_count": {
        +            "type": "integer"
        +          },
        +          "landlord_role": {
        +            "type": "string"
        +          },
        +          "location_label": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "location_name": {
        +            "type": "string"
        +          },
        +          "min_stay_months": {
        +            "type": [
        +              "integer",
        +              "null"
        +            ]
        +          },
        +          "occupancy_status": {
        +            "type": "string"
        +          },
        +          "price_currency": {
        +            "type": "string"
        +          },
        +          "price_monthly": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "public_url": {
        +            "type": "string"
        +          },
        +          "room_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "room_type": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "university_city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "university_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "zone_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "price_monthly",
        +          "price_currency",
        +          "room_type",
        +          "location_name",
        +          "public_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "rooms",
        +    "limit",
        +    "offset",
        +    "has_more"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_universities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "has_more": {
        +      "type": "boolean"
        +    },
        +    "limit": {
        +      "type": "integer"
        +    },
        +    "offset": {
        +      "type": "integer"
        +    },
        +    "total": {
        +      "type": "integer"
        +    },
        +    "universities": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "city": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_code": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "country_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "default_latitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "default_longitude": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "email_domain": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "region": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "website_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "city",
        +          "country_code",
        +          "country_name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "universities",
        +    "total",
        +    "limit",
        +    "offset",
        +    "has_more"
        +  ],
        +  "type": "object"
        +}
    • Changedsend_room_message2 fields changed
      • addedInput schema / properties / message / description
        Added value: +"Message to the landlord. Do not include passwords, payment-card details, government identifiers, health or biometric data."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "conversation_id": {
        +      "type": "string"
        +    },
        +    "landlord_name": {
        +      "type": "string"
        +    },
        +    "room_title": {
        +      "type": "string"
        +    },
        +    "sent": {
        +      "type": "boolean"
        +    },
        +    "web_chat_url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "sent",
        +    "conversation_id",
        +    "room_title",
        +    "landlord_name",
        +    "web_chat_url"
        +  ],
        +  "type": "object"
        +}
    • Changedupdate_rental_request_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available_from": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "request_id": {
        +      "type": "integer"
        +    },
        +    "status": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "request_id",
        +    "status",
        +    "available_from"
        +  ],
        +  "type": "object"
        +}
  2. 1 tool update
    • Addedget_my_conversation_messages
  3. 1 tool update
    • Changedlist_my_messages1 field changed
      • changedInput schema / properties / limit / default
        Previous value: -20New value: +12
  4. 1 tool update
    • Addedlist_my_messages
  5. 4 tool updates
    • Addedlist_university_campuses
    • Addedsearch_cities
    • Changedsearch_rooms2 fields changed
      • addedInput schema / properties / city
        Added value: +{
        +  "description": "Optional city filter selected from the assisted location search.",
        +  "type": "string"
        +}
      • addedInput schema / properties / country_code
        Added value: +{
        +  "description": "Optional ISO 3166-1 alpha-2 country filter.",
        +  "type": "string"
        +}
    • Addedsend_room_message
  6. 12 tool updates
    • Addedadd_favorite
    • Addedcreate_listing
    • Addedcreate_rental_request
    • Addedget_account_links
    • Addedget_my_profile
    • Addedlist_my_favorites
    • Addedlist_my_listings
    • Addedlist_my_requests
    • Changedlist_search_metadata4 fields changed
      • addedInput schema / properties / university_country_code
        Added value: +{
        +  "description": "ISO 3166-1 alpha-2 country code.",
        +  "type": "string"
        +}
      • addedInput schema / properties / university_limit
        Added value: +{
        +  "default": 50,
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / university_offset
        Added value: +{
        +  "default": 0,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / university_query
        Added value: +{
        +  "description": "Filter universities by name, city, country, or alias.",
        +  "type": "string"
        +}
    • Addedremove_favorite
    • Addedsearch_universities
    • Addedupdate_rental_request_status
  7. 1 tool update
    • Changedsearch_rooms3 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Free text search over title, description, zone, and campus."New value: +"Free text search over title, description, university, location, and campus."
      • addedInput schema / properties / university_id
        Added value: +{
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / zone_id
        Removed value: -{
        -  "minimum": 1,
        -  "type": "integer"
        -}
  8. 5 tool updates
    • First observedcompare_rooms
    • First observedget_room_details
    • First observedlist_search_metadata
    • First observedrank_room_matches
    • First observedsearch_rooms

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search Dutch housing listings on Kamernet.nl, retrieve full listing details, and optionally reply to landlords; designed for personal use in finding rooms, studios, and apartments.
    3
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Submarket-level US residential rental intelligence for AI agents. Search, compare, rank, and analyze rent data, trends, vacancy, affordability, and days on market across 1,000+ named submarkets in the 20+ largest US metros. ZIP-level and metro-level queries included. Always current, always expanding. Free tier available.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Search for Airbnb listings and get detailed information about specific properties. Effortlessly plan your next trip with structured data and no API key required, while respecting Airbnb's guidelines.
    2
    2,720 npm
    549
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources