Skip to main content
Glama

SPACEXPLORATION

Server Details

Search commercial real estate listings. Reads need no token; authoring is self-serve OAuth (DCR).

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
99.6% over 59 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct resource and action, and overlapping-looking flows are explicitly differentiated in descriptions: attach_listing_photo vs the sign/confirm upload pair, and update_listing vs set_listing_attributes. Search helpers (interpret_search, get_registry, search_listings) are also clearly separated by purpose.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun pattern, with list_my_* used uniformly for authenticated user-scoped collections. There are no mixed conventions or vague verb-only names.

Tool Count4/5

At 20 tools, the server is slightly over the typical 3-15 range, but each tool maps to a distinct operation across listings, search, attachments, saved searches, and publishing. No tools appear redundant, though some convenience helpers (e.g. attach_listing_photo alongside sign/confirm) contribute to the higher count.

Completeness4/5

Coverage is strong for listing creation, retrieval, update, publishing, withdrawal, search, attachments, and saved searches. Minor gaps remain, such as no hard delete_listing (only terminal withdraw), no update_saved_search, and no standalone attachment-metadata update, but agents can work around these.

Available Tools

20 tools
attach_listing_photoAttach listing photoAInspect

Attach a photo to a listing you own directly from its public URL — one call, no separate sign/upload/confirm. The server fetches the image and ingests it with auto-generated thumbnail/hero/full variants. Only https image URLs whose host is publicly routable are accepted. The photo is content-moderated (must be real-estate related and safe) before it can appear publicly — the returned snapshot includes the moderation_status (approved / rejected / escalated) and moderation_reason. A rejected or escalated photo will not be publicly visible and will block publishing until removed or replaced.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesHashid of the listing to attach the photo to.
source_urlYesPublic https URL of the image to fetch and attach. Must point directly at an image (jpeg, png, webp, gif, avif, heic/heif) on a publicly-routable host.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), it discloses server-side fetching, auto-generated thumbnail/hero/full variants, content moderation, the moderation_status values, and the fact that a rejected/escalated photo blocks publishing. That is exactly the consequence-level detail an agent needs.

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?

The core action and its single-call advantage are front-loaded, and the remaining sentences cover constraints and moderation outcomes. It is dense rather than padded, though a touch long for a two-parameter tool.

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

Completeness5/5

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

With no output schema, the description compensates by describing the returned snapshot and moderation_status/moderation_reason fields, plus the publishing impact. Nothing an agent needs to invoke it correctly is missing.

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 100% and both parameters are fully documented there, so the baseline is 3. The description restates the https/routable-host constraint already in the schema rather than adding new meaning, so it does not exceed the baseline.

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?

States a specific verb (attach) and resource (photo to a listing you own) and explicitly contrasts the single-call URL ingestion with the separate 'sign/upload/confirm' flow, which lets an agent distinguish it from sign_attachment_upload and confirm_attachment_upload without opening their schemas.

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 clearly frames when to use this tool — direct ingestion from a public URL rather than the multi-step sign/upload/confirm path — and states acceptance conditions (https, publicly routable host). It doesn't name the sibling tools outright, so the routing 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.

confirm_attachment_uploadConfirm attachment uploadA
Idempotent
Inspect

Finalize an out-of-band upload after the file bytes have been PUT to the presigned URL. Verifies the stored object matches what was signed (size and content-type) and marks the attachment ready. Returns the attachment snapshot with its public variant URLs. Idempotent: confirming an already-confirmed upload returns the same snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYesThe attachment_id (ULID) returned by sign_attachment_upload. Confirm only after the file bytes have been successfully PUT to the presigned URL.

TDQS

A4.2/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: it verifies the stored object against what was signed on size and content-type before marking the attachment ready, and describes the returned snapshot including public variant URLs. Idempotency is repeated from idempotentHint but is made concrete ('returns the same snapshot'). It stops short of saying what happens on a verification mismatch or whether any auth/ownership check applies.

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?

Four short sentences, front-loaded with the action and its precondition, then behavior, then return value, then idempotency. Every sentence carries distinct information with no filler.

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 one-parameter mutation tool with no output schema, it covers the precondition, the verification behavior, the return shape, and idempotency. The remaining gap is failure semantics (what a size/content-type mismatch produces) and permission requirements, which an agent would need to handle errors correctly.

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?

With a single parameter at 100% schema coverage, the schema already documents attachment_id as the ULID from sign_attachment_upload and states the PUT precondition. The description restates essentially the same information, adding no format, validation, or edge-case detail beyond it, so the baseline of 3 applies.

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?

States a specific verb+resource ('Finalize/confirm an out-of-band upload') and places it precisely in the workflow after the bytes have been PUT to the presigned URL. This distinguishes it cleanly from the sibling sign_attachment_upload, which produces the URL and id rather than finalizing.

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?

Gives explicit sequencing guidance: confirm only after the file bytes have been successfully PUT to the presigned URL, and it names the source of the id (sign_attachment_upload). It does not state any when-not conditions (e.g., what to do if the upload failed or the object was already confirmed outside the tool), so it stops short of full routing guidance.

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

create_listingCreate listingAInspect

Create a new draft listing. Returns the full created listing exactly as stored, including its hashid and status. Pass an idempotency_key (any client-generated string, e.g. a UUID) to make the call safe to retry — re-sending the same key returns the original listing instead of creating a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
apnNoThe county assessor parcel number (APN / parcel ID), if known. Used with the county to find the building if another listing already has it.
cityYesCity.
unitNoUnit or suite number, if applicable.
stateYesState (2-letter abbreviation).
countyYesCounty.
latitudeYesLatitude coordinate.
place_idNoPlace ID from geocoder.
longitudeYesLongitude coordinate.
postal_codeYesZIP/postal code.
listing_typeYesListing type: sale or lease.
property_typeYesProperty type. Allowed values are listed under the property_type attribute returned by get_registry (e.g. industrial, office, retail, land).
street_addressYesStreet address of the property.
idempotency_keyNoOptional client-generated key (e.g. a UUID) making this create safe to retry: re-sending the same key within 24 hours returns the originally created listing instead of a duplicate.
formatted_addressNoFull formatted address string from geocoder.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds genuinely useful behavior: the exact return shape (full listing with hashid and status) and retry semantics. It stops short of explaining permissions required or what the draft state implies next, so it is not fully exhaustive.

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 front-loaded sentences with no filler: purpose, return shape, then retry safety. The idempotency explanation is somewhat duplicated by the schema, which keeps this from being a clean 5, but nothing is wasted.

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 14-parameter, 9-required creation tool with no output schema, the description usefully describes the return payload (hashid, status) and idempotency window. It does not address the required-vs-optional split or draft lifecycle, but the schema and annotations cover the rest adequately.

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 100%, with each of the 14 parameters documented inline, so the schema carries the load. The description restates the idempotency_key behavior rather than adding syntax or edge cases beyond it, giving baseline value only.

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?

States a specific verb and resource ('Create a new draft listing'), and the word 'draft' distinguishes it from publish_listing and update_listing. It also states what comes back, so the agent knows this is a creation entry point rather than a mutation of an existing listing.

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 name and by the idempotency_key guidance ('Pass an idempotency_key ... to make the call safe to retry'), but there is no explicit when-to-use/when-not guidance relative to siblings like update_listing or publish_listing. Draft-vs-publish sequencing is left for the agent to infer.

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

delete_attachmentDelete attachmentA
DestructiveIdempotent
Inspect

Delete an attachment you own by its ULID. Soft-deletes the row so it no longer appears on the listing. Use this to clean up an abandoned upload (one you signed but never finished) or a photo you no longer want. Idempotent: deleting an already-deleted attachment succeeds.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYesThe attachment_id (ULID) of the attachment to delete, as returned by sign_attachment_upload / confirm_attachment_upload or listed in get_listing.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds genuinely new behavior by disclosing that this is a SOFT delete (the row persists but drops off the listing) and that ownership is required. The idempotency sentence restates the annotation rather than adding to it, keeping this from a 5.

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

Conciseness4/5

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

Four short sentences, front-loaded with the core action and identifier. The final idempotency sentence largely duplicates the annotation's idempotentHint and is the one mildly redundant piece.

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 single-parameter destructive tool with no output schema, the description covers prerequisites (ownership), effect (soft-delete, removal from listing), retry semantics, and intended use cases. The only gap is not stating the return value or whether the ID becomes reusable, which is minor here.

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 100%, so the single attachment_id parameter is fully documented in the schema itself. The description adds only the ownership constraint ('you own'), not new format or syntax detail, so the baseline 3 applies.

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?

States a specific verb (delete), resource (attachment), ownership scope ('you own'), and identifier type (ULID) in the first sentence. An agent can distinguish this from attach_listing_photo, confirm_attachment_upload, and sign_attachment_upload without opening any schema.

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

Usage Guidelines4/5

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

Explicitly names two use cases – cleaning up an abandoned signed-but-unfinished upload, or removing an unwanted photo – which routes the agent well versus sibling attachment tools. It lacks any when-not guidance or explicit alternative-tool disambiguation (e.g. 'to remove a photo from a live listing, use update_listing'), 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.

geocode_addressGeocode addressA
Read-only
Inspect

Geocode a free-form US address into coordinates and structured components (street_address, city, county, state, postal_code) plus a formatted address and place_id — exactly the identity fields create_listing requires. Use this first, then pass the result straight into create_listing instead of supplying your own coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesFree-form address to geocode, e.g. "3763 Imperial St, Frederick, CO 80516".

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety and external-lookup behavior are covered. The description adds useful context beyond those annotations by disclosing what fields are returned and that the output is meant to feed create_listing, though it does not discuss geocoding ambiguity, failures, 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.

Conciseness5/5

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

The description is a single, front-loaded sentence that moves from the core action to the returned components to the downstream create_listing workflow. Every clause earns its place and no information is repeated from the tool title or schema.

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

Completeness5/5

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

There is no output schema, so the description usefully enumerates the return shape: coordinates, structured components, formatted address, and place_id. For a simple one-parameter geocoding tool with full schema coverage and read-only annotations, this gives the agent everything needed to call it and use the result.

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?

The schema has one parameter with 100% description coverage, including an example address, so the structured data already carries parameter semantics. The description adds no additional syntax or format guidance for the 'address' parameter beyond saying it is free-form and US-specific.

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 states a specific verb and resource ('Geocode a free-form US address') and explicitly enumerates the returned identity fields (street_address, city, county, state, postal_code) plus formatted address and place_id. It distinguishes this tool from the listing-management siblings by tying its output directly to create_listing's required fields.

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

Usage Guidelines5/5

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

It gives explicit sequencing and routing guidance: 'Use this first, then pass the result straight into create_listing instead of supplying your own coordinates.' That is a clear when-to-use instruction and a named alternative behavior, leaving little to inference.

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

get_listingGet listing
Read-only
Inspect

Retrieve the full details of a single listing by its hashid. Returns the complete ListingResource projection including parcel data, all attribute details, and attachments: photos, plus the public documents the broker attached (brochures, offering memoranda, site plans) with their filename and a direct download URL. Broker contact is included only when the requesting user is authorised to manage the listing; such a user also gets every lease suite with its id and status, the rows update_listing takes back.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesThe short hashid of the listing (e.g. "a1b2c3d4"). Found in listing URLs and search hits.
get_publish_statusGet publish statusA
Read-only
Inspect

Get the status of your listing publishes. Pass a listing hashid for the detailed status of that listing's latest publish run — overall state (pending/running/completed/failed), current phase, per-step progress, and any failure reason. Omit the hashid to list your recent publish runs across all your listings. Use this to track a publish_listing call to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidNoOptional. Hashid of a listing to get its latest publish run in detail. Omit to list your recent publish runs across all your listings.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the enumerated overall states (pending/running/completed/failed), the notion of a current phase, per-step progress, and failure reasons — which matters since there is no output schema.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, then the two modes, then the workflow hook. No filler or repetition; every sentence earns its place.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating what is returned (overall state, phase, per-step progress, failure reason) and covers both invocation modes. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single hashid parameter is fully documented in the schema; the description's phrasing ('Pass a listing hashid... Omit the hashid...') largely restates it. Baseline 3 is appropriate since the schema already carries the parameter semantics.

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?

States a specific verb+resource ('Get the status of your listing publishes') and clearly distinguishes the two operating modes: single-listing detail vs. cross-listing run list. An agent can tell it apart from siblings like publish_listing or get_listing without opening the schema.

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?

Explicitly ties the tool to a workflow ('Use this to track a publish_listing call to completion') and explains the condition that selects each mode (pass hashid vs. omit it). It names the triggering sibling but gives no explicit when-not-use or exclusion guidance.

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

get_registryGet attribute registryA
Read-only
Inspect

Returns the full attribute registry — every searchable and filterable field, its type, allowed values, and display label. Read this first to understand the schema before calling search_listings with attribute filters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds that the result is a complete registry listing rather than a filtered subset, but says nothing about size, caching, or stability of the returned schema. Useful addition, but not rich behavioral context.

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, fully front-loaded: the first states what is returned, the second states when to call it. No filler, no restatement of the title.

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

Completeness5/5

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

With no input parameters and no output schema, the description must explain the return shape on its own, and it does: fields, types, allowed values, and display labels. The ordering advice toward search_listings closes the loop for an agent deciding whether it needs this call first.

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 and the schema is an empty object at 100% coverage, so there is no parameter semantics burden to carry. Baseline 4 applies.

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?

States a specific verb and resource ('Returns the full attribute registry') and enumerates exactly what the payload contains: every searchable and filterable field, its type, allowed values, and display label. An agent can distinguish this reference/schema endpoint from mutating siblings like set_listing_attributes without opening any schema.

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

Usage Guidelines4/5

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

Gives explicit sequencing guidance ('Read this first ... before calling search_listings with attribute filters'), which tells the agent when to invoke it and which sibling it feeds. It stops short of stating when not to call it (e.g. if the attribute set is already known), so it is clear context without exclusions.

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-only
Inspect

List all listings owned or brokered by the authenticated user. Optionally filter by status. Requires authentication.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by listing status. Omit to return all statuses.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false, closed world). The description adds the authentication requirement, which is genuinely useful, but says nothing about result size, pagination, or ordering.

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 short, front-loaded sentences with no filler; the scope statement leads and the filter/auth constraints follow. Efficient, though slightly telegraphic.

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 simple single-parameter list tool with no output schema and full annotation coverage, the description supplies the essentials: scope, optional filter, auth requirement. Missing only minor operational detail such as ordering or pagination.

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 100% with a fully documented enum, so the schema carries the parameter semantics. The description only restates 'optionally filter by status' without adding format or behavior detail beyond the schema.

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 (list listings) with clear scope: owned or brokered by the authenticated user. This cleanly separates it from get_listing (single) and search_listings (catalog-wide), though the sibling alternatives are not named 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?

Implies usage via 'owned or brokered by the authenticated user' and notes the optional status filter, but never says when to prefer this over search_listings or get_listing, nor any exclusions. Adequate but leaves routing to inference.

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

list_my_saved_searchesList my saved searchesA
Read-only
Inspect

List the authenticated user's saved searches, including their filters and alert schedule. Requires authentication.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the authentication requirement and telling the agent what the results contain (filters and alert schedule), which the annotations do not convey.

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 names the action, the resource, the returned data, and the auth requirement with no filler. 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?

With no output schema, the description usefully summarizes what comes back (filters and alert schedule), and the auth requirement is disclosed. It is slightly thin on things like result ordering or pagination for a user with many saved searches, but for a zero-parameter read-only list this is close to sufficient.

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 disambiguate; per the baseline for 0-param tools this is a 4. The description correctly refrains from inventing parameter semantics that don't exist.

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?

States a specific verb ('List') and resource ('the authenticated user's saved searches') with scope, and even names the payload content (filters and alert schedule). The verb clearly separates it from the sibling write operations save_search and delete_saved_search, so an agent can route without opening schemas.

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 by the name and the verb contrast with save_search/delete_saved_search; there is no explicit when-to-use statement, no exclusion of the other search tools (search_listings, interpret_search), and no alternative named. The only guidance offered is the authentication prerequisite, which is a precondition rather than a routing rule.

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

publish_listingPublish listingA
Destructive
Inspect

Kick off the publish pipeline for a draft listing. Enriches with AI, gathers market data, then transitions the listing to Active. Returns the pipeline ID to track progress. Fails with the unmet readiness checklist if the listing is not ready (including any photo that has not cleared content moderation).

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesHashid of the listing to publish.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare readOnly=false, destructive=true, openWorld=true; the description goes well beyond by detailing the async pipeline steps, the returned pipeline ID for progress tracking, and the exact failure mode (unmet readiness checklist, content-moderation-blocked photos). That is rich behavioral context an agent cannot get from the structured fields.

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?

Three tight sentences, front-loaded with the action and followed by the outcome, return value, and failure condition. No filler; every sentence 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?

For a complex async mutation with no output schema, the description covers the workflow, the return (pipeline ID), and the error path well. It stops short of telling the agent how to subsequently track progress (e.g., via get_publish_status) or whether publishing is reversible, which keeps it from 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?

Single parameter with 100% schema coverage, so the baseline is 3. The description adds only the implicit constraint that the hashid must reference a draft listing, which is marginal added meaning over the schema's 'Hashid of the listing to publish.'

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?

States a specific verb (kick off the publish pipeline) and resource (draft listing), plus the full outcome: AI enrichment, market data gathering, transition to Active. The 'draft listing' scoping and the pipeline-ID tracking detail implicitly separate it from update_listing and get_publish_status.

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 implies usage conditions (listing must be a draft) and states a failure condition (unmet readiness checklist), which is helpful. However, it never explicitly says when to call this versus alternatives like get_publish_status or withdraw_listing, nor does it direct the agent to check readiness before calling.

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

search_listingsSearch listingsA
Read-only
Inspect

Search commercial real estate listings. Returns paginated hits with facet counts; every hit carries the public url to cite and its listed_at / updated_at stamps. For AI-driven search, call interpret_search first to convert a natural-language query into structured filters, then pass those filters — and its bounds, when present — here.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based). Defaults to 1.
sortNoSort key. Valid values from get_registry sort_options (e.g. "listed_at:desc", "price:asc").
queryNoFree-text search query (street address, city, or keyword). Omit or pass null for no text filter.
boundsNoGeographic bounding box (degrees) limiting hits to an area. Forward the bounds returned by interpret_search verbatim to honour "near <place>" intent; omit for a nationwide search.
filtersNoStructured filter map keyed by Typesense field name. Ranges as {min?, max?}, multi-select as string[], booleans as true/false. Call get_registry to see valid field names and allowed values.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the description's added value is the return contract: paginated hits, facet counts, a public url for citation, and listed_at/updated_at stamps. With no output schema, this disclosure is genuinely useful, though pagination limits and rate behavior remain unspecified.

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?

Three sentences, each earning its place: purpose, return contract, then the recommended workflow. Purpose is front-loaded and there is no filler.

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

Completeness5/5

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

For a 5-param, zero-required, fully schema-documented read tool with no output schema, the description supplies the missing pieces: what comes back (hits, facets, citable url, timestamps) and how to sequence it with interpret_search. An agent has everything needed to call it correctly.

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 100%, so page, sort, query, bounds, and filters are already documented in the schema. The description reiterates the bounds-forwarding rule that the schema itself already states ('Forward the bounds returned by interpret_search verbatim'), so it adds little beyond the baseline.

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?

States a specific verb and resource ('Search commercial real estate listings') and distinguishes itself from siblings like get_listing and list_my_listings by scope. It also specifies the return shape (paginated hits with facet counts) up front.

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

Usage Guidelines5/5

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

Gives an explicit workflow rule: for AI-driven search, call interpret_search first to convert natural language into structured filters, then pass those filters and bounds here. This names the prerequisite sibling tool and the condition that triggers it.

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

send_feedbackSend feedbackAInspect

File feedback or a support ticket with the SPACEXPLORATION team: a bug report, feature request, or question about the app or this MCP server. Works anonymously — include a contact email if you want a reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoOptional contact email if you or your human want a reply. Authenticated callers default to their account email.
messageYesThe feedback itself — what happened, or what should change about the app or the MCP server. Plain text, max 5000 characters.
categoryNoWhat kind of feedback this is. Defaults to "other".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=false), and the description adds genuinely new context: submission works anonymously and a reply only occurs if an email is supplied. It stops short of saying where the ticket goes or what acknowledgement the caller receives, but the anonymity/reply semantics are the important disclosure for this operation.

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, front-loaded with the action and recipient, followed by the anonymity/reply condition. Nothing is padded and no sentence is redundant.

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

Completeness5/5

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

For a three-parameter, fire-and-forget submission tool with no output schema, the description covers purpose, accepted categories, and contact/reply behavior — everything an agent needs to call it correctly. No return-value explanation is required.

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 100%, so the schema already documents email, message (plain text, 5000-char cap) and the category enum with its default. The description only restates the email-for-reply behavior, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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?

Names a specific verb (file) and resource (feedback/support ticket) plus the recipient team, and enumerates the accepted kinds (bug, feature request, question). This clearly separates it from every listing-management sibling in the set.

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?

States the contexts in which to use it (bugs, feature requests, questions about the app or this MCP server) and the condition for supplying a contact email. It gives no explicit 'do not use for X' exclusion, but the tool is standalone and the accepted categories effectively bound its use.

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

set_listing_attributesSet listing attributesA
DestructiveIdempotent
Inspect

Set broker-authored attributes on a listing you own. Pass attributes as a map of registry field name to value (the field names get_registry returns, e.g. {"attr_parking_spaces": 40, "attr_office_class": "Class A"}). Only fields get_registry marks "writable":true can be set; publish-time computed fields and hot columns (use update_listing for those) are rejected with guidance. Enum fields take the allowed value (or an array for multiselect); send null to clear a field. Returns the full updated listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesHashid of the listing to update.
attributesYesMap of registry field name to value, e.g. {"attr_parking_spaces": 40, "attr_office_class": "Class A", "attr_industrial_rail_access": true}. Only fields get_registry marks "writable":true are accepted. Multiselect enum fields take an array of allowed values. Send null to clear a field.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare non-read-only, destructive, idempotent behavior, so the bar is lower. The description adds real context: invalid fields are rejected with guidance, null clears a field, and the call returns the full updated listing. It stops short of naming permission/auth requirements beyond 'a listing you own'.

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?

Front-loads the action, then the parameter format, then the constraints, then the return value, in four tight sentences with no filler. Every sentence carries distinct information.

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

Completeness5/5

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

With no output schema, the description supplies the return contract ('full updated listing') and the failure mode (rejection of non-writable/computed fields with guidance). Nothing an agent needs to call this correctly is missing.

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?

Schema coverage is 100%, so baseline is 3, but the description adds the registry-name convention (attr_* keys), a concrete example map, the enum/multiselect/null conventions, and the cross-reference to get_registry that the schema only restates. The added value is real but partially duplicative of the schema text.

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?

States a precise verb+resource (set broker-authored attributes on a listing you own) and explicitly distinguishes itself from update_listing for hot columns and publish-time computed fields. An agent can route between this and update_listing without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit prerequisites (field names must come from get_registry and be marked writable:true), an explicit exclusion (publish-time computed fields and hot columns -> use update_listing), and the selection rule for enum vs multiselect vs null. When-to-use and when-not-to-use are both covered.

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

sign_attachment_uploadSign attachment uploadAInspect

Begin an out-of-band file upload. Returns a presigned R2 PUT URL and the headers to use; the file bytes are uploaded directly to storage, never through this channel. After PUTting the file, call confirm_attachment_upload with the returned attachment_id. Supports listings (photos, documents), users (avatar), and pages (cover, photos). Avatars pass an automated content check before they appear publicly.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeYesExact byte size of the file. Verified against the uploaded object at confirm time, so it must be accurate.
filenameYesOriginal filename including extension, e.g. "front-elevation.jpg". Used to derive the storage key and extension.
collectionNoOptional explicit collection: "photos", "documents", "avatar", or "cover". Omit to auto-route by MIME (images→photos, PDFs→documents; documents are PDF only). Singleton slots (avatar/cover) must be set explicitly.
content_typeYesMIME type of the file, e.g. "image/jpeg" or "application/pdf". Must match the collection whitelist.
attachable_idYesIdentifier of the attachable resource. For "listing" pass the listing hashid (e.g. "d5yqqgoa") — the same id every read tool returns. For "user" pass "me" to attach to yourself. For "page" pass its numeric id.
attachable_typeYesMorph alias of the resource to attach to: "listing", "user", or "page".

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the out-of-band data flow (bytes go directly to storage, never through this channel), the required follow-up confirmation, the return payload (presigned PUT URL plus headers), and an avatar content-check behavior. These are exactly the operational traits annotations cannot convey.

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?

Front-loads purpose, then return value, then the required follow-up call, then supported targets and the avatar caveat. Every sentence contributes distinct information with no redundancy.

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

Completeness5/5

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

No output schema exists, and the description compensates by describing the returned artifacts (presigned URL, headers, attachment_id). Together with 100% schema coverage and clear workflow sequencing, an agent has everything needed to call the tool and chain it correctly.

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 100%, so every parameter is already documented, including collection routing and attachable_id conventions. The description restates the attachable types and collections but adds no syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema carries the load.

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?

States a specific verb and resource ("Begin an out-of-band file upload") and immediately clarifies the mechanism: returns a presigned R2 PUT URL. It names the sibling tool confirm_attachment_upload as the next step, so an agent can distinguish this signing step from the confirmation step without opening either schema.

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?

Gives a clear two-step workflow: PUT the file, then call confirm_attachment_upload with the returned attachment_id. It also enumerates supported attachable targets (listings, users, pages). It does not, however, explain when to prefer this over the sibling attach_listing_photo, leaving that alternative unaddressed.

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

update_listingUpdate listing
DestructiveIdempotent
Inspect

Update a listing's parcel, pricing, or marketing data, or a lease's suites. Pass at least one group (parcel, pricing, marketing, spaces); send each group whole, not just the changed field. Returns the full updated listing exactly as stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesHashid of the listing to update.
parcelNoParcel/address fields to update: street_address, city, county, state, postal_code, latitude, longitude, and optionally unit, lot_size (INTEGER SQUARE FEET — convert acres × 43,560), lot_size_unit (the unit the size was stated in: sqft | acres | sqm | hectares; display-only), year_built, property_type, place_id (from geocode_address — when the address moves, it matches the listing to a building already on file).
spacesNoA lease's suites, as the whole list: a suite left out is removed, and an empty list removes them all. A whole building leased as one is a single suite. To change suites, start from the spaces get_listing returns to you as the owner: a suite sent with its id is updated, and any field it leaves out keeps its stored value; a suite without an id is added. Publishing a lease needs at least one available suite with available_sqft and a lease_rate or price_on_request=true.
pricingNoPricing fields to update: listing_type (sale|lease). For a sale set sale_price (dollars), or omit it and set price_on_request=true for "price upon request". A lease is priced per suite (see spaces); lease_rate_period (per_sqft_year|per_sqft_month|per_month|per_year, default per_sqft_year) is the basis every suite's rate is quoted in. A lease with at most one suite, such as a whole building leased as one, can instead be priced here: lease_rate and available_sqft (INTEGER SQUARE FEET), or price_on_request=true, set that one suite, creating it when there is none. Optionally expires_at (ISO date).
marketingNoMarketing copy to update: headline, summary, title_override, highlights (string[]).
withdraw_listingWithdraw listingA
Destructive
Inspect

Withdraw a listing, removing it from public search. This is a terminal status — the listing cannot be re-activated; create a new listing instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashidYesHashid of the listing to withdraw.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered. The description adds genuinely new behavioral context beyond that: withdrawal is terminal and irreversible, which is more specific than 'destructive' and directly affects agent decision-making. It does not mention permissions or side effects on related data, keeping it short of a 5.

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

Conciseness5/5

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

Two sentences, zero filler, with the primary action and its effect front-loaded and the irreversibility warning immediately after. 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?

For a one-parameter mutation with annotations covering the destructive profile and no output schema, the definition covers what an agent needs to call it safely. Minor omissions remain, such as whether the withdrawn listing is still retrievable via get_listing or what happens to attached photos.

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 100% with a single documented 'hashid' parameter, so the schema already carries the semantics. The description adds no format, source, or lookup guidance for the hashid beyond what the schema states — the baseline 3 applies.

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 pairs a specific verb (Withdraw) with a specific resource (a listing) and adds the observable effect — removal from public search — which separates it from reversible siblings like update_listing. The terminal-status note further distinguishes it from create_listing/publish_listing, so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

It states the condition for use (removing a listing from public search), the condition against reuse (cannot be re-activated), and the named alternative path ('create a new listing instead'). This is explicit when/when-not/alternative guidance rather than implied context.

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. 1 tool update
    • Changedupdate_listing2 fields changed
      • changedInput schema / properties / pricing / description
        Previous value: -"Pricing fields to update: listing_type (sale|lease); for a sale set sale_price (dollars), for a lease set lease_rate (per the lease_rate_period basis, default per_sqft_year) and optionally lease_rate_period (per_sqft_year|per_sqft_month|per_month|per_year). Omit the price and set price_on_request=true for \"price upon request\". Optionally expires_at (ISO date)."New value: +"Pricing fields to update: listing_type (sale|lease). For a sale set sale_price (dollars), or omit it and set price_on_request=true for \"price upon request\". A lease is priced per suite (see spaces); lease_rate_period (per_sqft_year|per_sqft_month|per_month|per_year, default per_sqft_year) is the basis every suite's rate is quoted in. A lease with at most one suite, such as a whole building leased as one, can instead be priced here: lease_rate and available_sqft (INTEGER SQUARE FEET), or price_on_request=true, set that one suite, creating it when there is none. Optionally expires_at (ISO date)."
      • addedInput schema / properties / spaces
        Added value: +{
        +  "description": "A lease's suites, as the whole list: a suite left out is removed, and an empty list removes them all. A whole building leased as one is a single suite. To change suites, start from the spaces get_listing returns to you as the owner: a suite sent with its id is updated, and any field it leaves out keeps its stored value; a suite without an id is added. Publishing a lease needs at least one available suite with available_sqft and a lease_rate or price_on_request=true.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "available_date": {
        +        "description": "ISO date the suite is available from.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "available_sqft": {
        +        "description": "Available space in INTEGER SQUARE FEET.",
        +        "type": [
        +          "integer",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "The suite's id, as get_listing returns it to you as the owner. Omit to add a suite.",
        +        "type": "integer"
        +      },
        +      "lease_rate": {
        +        "description": "Asking rate in the listing's lease_rate_period basis, e.g. 24.5 for $24.50/SF/yr. Null when quoted on request.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "lease_type": {
        +        "description": "How operating expenses are split: nnn, fsg (full service gross), mg (modified gross), or gross.",
        +        "enum": [
        +          "nnn",
        +          "fsg",
        +          "mg",
        +          "gross",
        +          null
        +        ],
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "max_term_months": {
        +        "description": "Longest lease term offered, in months.",
        +        "type": [
        +          "integer",
        +          "null"
        +        ]
        +      },
        +      "min_term_months": {
        +        "description": "Shortest lease term offered, in months.",
        +        "type": [
        +          "integer",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "Suite label, e.g. \"Suite 200\" or \"Floor 3\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "price_on_request": {
        +        "description": "true when the rate is quoted on request.",
        +        "type": "boolean"
        +      },
        +      "space_type": {
        +        "description": "Use of the space: a value from the space_type attribute get_registry returns.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "status": {
        +        "description": "available (a new suite's default), pending, or leased. Only available suites are shown and priced.",
        +        "enum": [
        +          "available",
        +          "pending",
        +          "leased"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
  2. 1 tool update
    • Changedlist_my_listings2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"Filter by listing status. One of: draft, pending_payment, active, suspended, sold, leased, withdrawn. Omit to return all statuses."New value: +"Filter by listing status. Omit to return all statuses."
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "draft",
        +  "pending_payment",
        +  "active",
        +  "suspended",
        +  "sold",
        +  "leased",
        +  "withdrawn"
        +]
  3. 1 tool update
    • Changedsign_attachment_upload1 field changed
      • changedInput schema / properties / collection / description
        Previous value: -"Optional explicit collection: \"photos\", \"documents\", \"avatar\", \"logo\", or \"cover\". Omit to auto-route by MIME (images→photos, PDFs→documents; documents are PDF only). Singleton slots (avatar/cover/logo) must be set explicitly."New value: +"Optional explicit collection: \"photos\", \"documents\", \"avatar\", or \"cover\". Omit to auto-route by MIME (images→photos, PDFs→documents; documents are PDF only). Singleton slots (avatar/cover) must be set explicitly."
  4. 1 tool update
    • Changedsign_attachment_upload1 field changed
      • changedInput schema / properties / collection / description
        Previous value: -"Optional explicit collection: \"photos\", \"documents\", \"avatar\", \"logo\", or \"cover\". Omit to auto-route by MIME (images→photos, docs→documents). Singleton slots (avatar/cover/logo) must be set explicitly."New value: +"Optional explicit collection: \"photos\", \"documents\", \"avatar\", \"logo\", or \"cover\". Omit to auto-route by MIME (images→photos, PDFs→documents; documents are PDF only). Singleton slots (avatar/cover/logo) must be set explicitly."
  5. 1 tool update
    • Changedsend_feedback1 field changed
      • changedInput schema / properties / message / description
        Previous value: -"The feedback itself — what happened, or what you would improve about the app or the MCP experience. Plain text, max 5000 characters."New value: +"The feedback itself — what happened, or what should change about the app or the MCP server. Plain text, max 5000 characters."
  6. 2 tool updates
    • Changedcreate_listing1 field changed
      • addedInput schema / properties / apn
        Added value: +{
        +  "description": "The county assessor parcel number (APN / parcel ID), if known. Used with the county to find the building if another listing already has it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedupdate_listing1 field changed
      • changedInput schema / properties / parcel / description
        Previous value: -"Parcel/address fields to update: street_address, city, county, state, postal_code, latitude, longitude, and optionally unit, lot_size (INTEGER SQUARE FEET — convert acres × 43,560), lot_size_unit (the unit the size was stated in: sqft | acres | sqm | hectares; display-only), year_built, property_type."New value: +"Parcel/address fields to update: street_address, city, county, state, postal_code, latitude, longitude, and optionally unit, lot_size (INTEGER SQUARE FEET — convert acres × 43,560), lot_size_unit (the unit the size was stated in: sqft | acres | sqm | hectares; display-only), year_built, property_type, place_id (from geocode_address — when the address moves, it matches the listing to a building already on file)."
  7. 1 tool update
    • Changedupdate_listing1 field changed
      • changedInput schema / properties / parcel / description
        Previous value: -"Parcel/address fields to update: street_address, city, county, state, postal_code, latitude, longitude, and optionally unit, lot_acres, year_built, property_type."New value: +"Parcel/address fields to update: street_address, city, county, state, postal_code, latitude, longitude, and optionally unit, lot_size (INTEGER SQUARE FEET — convert acres × 43,560), lot_size_unit (the unit the size was stated in: sqft | acres | sqm | hectares; display-only), year_built, property_type."
  8. 5 tool updates
    • Addeddelete_attachment
    • Addedget_publish_status
    • Addedpublish_listing
    • Addedsend_feedback
    • Addedwithdraw_listing
  9. 1 tool update
    • Changedcreate_listing1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional client-generated key (e.g. a UUID) making this create safe to retry: re-sending the same key within 24 hours returns the originally created listing instead of a duplicate.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  10. 10 tool updates
    • Addedattach_listing_photo
    • Addedconfirm_attachment_upload
    • Addedcreate_listing
    • Removedcreate-listing-tool
    • Removedget_pipeline_status
    • Removedpublish-listing-tool
    • Addedsign_attachment_upload
    • Addedupdate_listing
    • Removedupdate-listing-tool
    • Removedwithdraw-listing-tool
  11. 1 tool update
    • Changedsearch_listings1 field changed
      • addedInput schema / properties / bounds
        Added value: +{
        +  "description": "Geographic bounding box (degrees) limiting hits to an area. Forward the bounds returned by interpret_search verbatim to honour \"near <place>\" intent; omit for a nationwide search.",
        +  "properties": {
        +    "ne_lat": {
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "ne_lng": {
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    },
        +    "sw_lat": {
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "sw_lng": {
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
  12. 15 tool updates
    • First observedcreate-listing-tool
    • First observeddelete_saved_search
    • First observedgeocode_address
    • First observedget_listing
    • First observedget_pipeline_status
    • First observedget_registry
    • First observedinterpret_search
    • First observedlist_my_listings
    • First observedlist_my_saved_searches
    • First observedpublish-listing-tool
    • First observedsave_search
    • First observedsearch_listings
    • First observedset_listing_attributes
    • First observedupdate-listing-tool
    • First observedwithdraw-listing-tool

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables searching Zillow for-sale, for-rent, and sold listings with rich filters and retrieving complete property details as structured JSON, with no Zillow account required.
    2
    50 npm
    11
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Search Redfin for-sale, for-rent, and sold listings with Redfin's full visitor filter set, and retrieve complete property pages as structured JSON, through any MCP client and without an MLS license.
    2
    69 npm
    40 PyPI
    11
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables users to search synthetic property listings, retrieve full listing records, and answer factual inquiries from the record while escalating viewings, negotiation, legal, complaints, personal-data, and other out-of-record requests to a human. The human hand-off creates a ticket with a fixed reason code and rejects unknown listing ids.
    3
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Enables access to Idealista API for searching and retrieving property listings across Spain, Portugal, and Italy. Supports various property types including homes, apartments, garages, commercial properties, offices, and land with detailed filtering options.
    14
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources