Skip to main content
Glama
ashev87

Propstack MCP

by ashev87

Propstack MCP Server

Connect AI assistants (Claude, ChatGPT) to your Propstack real estate CRM.

Verbinden Sie KI-Assistenten mit Ihrem Propstack-CRM — Kontakte verwalten, Objekte durchsuchen, Deals pflegen, Besichtigungen planen und Suchprofile erstellen, alles per Sprache oder Chat.

What you can do / Was Sie damit machen koennen

  • Contact management — search, create, update, and tag contacts with GDPR tracking

  • Property search & management — filter by price, rooms, area, status; create and update listings

  • Deal pipeline — create deals, move through stages, track win/loss rates

  • Buyer matching — create search profiles from natural language ("3-Zimmer in Berlin, bis 400k, mit Balkon") and auto-match to new listings

  • Task & calendar — log call notes, set follow-up reminders, schedule viewings

  • Email — send templated emails linked to contacts and properties

  • 360-degree contact view — get a complete briefing before every call

  • Pipeline dashboards — deal counts and values per stage, stale deal alerts

  • Lead intake — one-call workflow: dedup, create contact, log notes, create deal, set reminder

Data protection (DSGVO): Using this server sends personal data from your Propstack CRM into the LLM you connect (Claude, ChatGPT, …). You — the Propstack customer — remain the data controller. See Datenschutz (DSGVO) for responsibility, legal basis, the fields data-minimization parameter, and notes on automated decisions.

Related MCP server: 0nMCP

Quick Start

1. Set your API key

export PROPSTACK_API_KEY=your_api_key_here

2a. Claude Desktop

Add to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "propstack": {
      "command": "npx",
      "args": ["-y", "propstack-mcp-server"],
      "env": {
        "PROPSTACK_API_KEY": "your_api_key_here"
      }
    }
  }
}

2b. Claude Code (CLI)

Add to your project's .mcp.json:

{
  "mcpServers": {
    "propstack": {
      "command": "npx",
      "args": ["-y", "propstack-mcp-server"],
      "env": {
        "PROPSTACK_API_KEY": "your_api_key_here"
      }
    }
  }
}

2c. ChatGPT

  1. Go to Settings > Connectors > Developer Mode

  2. Add a new MCP connector

  3. Set the command to npx -y propstack-mcp-server

  4. Add environment variable PROPSTACK_API_KEY

2d. Cursor IDE

  1. Open Settings (Ctrl+,) → search "MCP"

  2. Edit MCP Servers JSON, or add mcp.json in project root / .cursor/

Option A — local project (after npm run build):

{
  "mcpServers": {
    "propstack": {
      "command": "node",
      "args": ["./dist/index.js"],
      "cwd": "C:/Users/you/path/to/propstack_mcp",
      "env": {
        "PROPSTACK_API_KEY": "your_api_key_here"
      }
    }
  }
}

Or use .env in project root — the server loads it automatically; you can omit the env block.

Option B — npx (published package or npx from local):

{
  "mcpServers": {
    "propstack": {
      "command": "npx",
      "args": ["-y", "propstack-mcp-server"],
      "env": {
        "PROPSTACK_API_KEY": "your_api_key_here"
      }
    }
  }
}

2e. Run directly

npm install propstack-mcp-server
PROPSTACK_API_KEY=your_key npx propstack-mcp-server

API Key / API-Schluessel

Get your Propstack API key:

  1. Log in to crm.propstack.de

  2. Go to Verwaltung > API-Schluessel (Administration > API Keys)

  3. Create or copy your V1 API key

Hinweis: Der API-Schluessel bestimmt die Berechtigungen. Stellen Sie sicher, dass Lese- und Schreibzugriff fuer die benoetigten Endpunkte aktiviert ist.

Available Tools (49)

Contacts (Kontakte)

Tool

Description

search_contacts

Search and filter contacts by name, email, phone, status, tags, broker, GDPR status, custom fields

get_contact

Get full details of a single contact with related data

create_contact

Create a new contact (auto-dedup by email)

update_contact

Update contact details, tags, GDPR status, broker assignment

delete_contact

Soft-delete a contact (30-day recycle bin)

get_contact_sources

List lead sources (ImmoScout24, Website, Empfehlung, etc.)

search_contacts_by_phone

Look up a contact by phone number (formatting-insensitive)

Properties (Objekte)

Tool

Description

search_properties

Search properties with 11 range filters, 17 sort fields, custom-field filters

get_property

Get full property details including media and custom fields

create_property

Create a new property listing

update_property

Update price, status, description, broker assignment

get_property_statuses

List property statuses (Verfuegbar, Reserviert, Verkauft, etc.)

Tasks (Aufgaben & Notizen)

Tool

Description

create_task

Create a note, to-do, appointment, or cancellation (polymorphic)

update_task

Mark done, reschedule, update notes

get_task

Get task details with linked contacts, properties, projects

Deals (Pipeline)

Tool

Description

search_deals

Search deals by stage, pipeline, category, broker, feeling score

create_deal

Link a contact to a property at a pipeline stage

update_deal

Move deal through pipeline stages, update price/notes

Search Profiles (Suchprofile)

Tool

Description

list_search_profiles

List what buyers/renters are looking for

create_search_profile

Capture buyer criteria from natural language

update_search_profile

Adjust budget, cities, room count, features

delete_search_profile

Remove a search profile

Projects (Projekte)

Tool

Description

list_projects

List development projects with unit counts

get_project

Get project details with all units, media, documents

Activities & Events (Aktivitaeten & Termine)

Tool

Description

search_activities

Full activity timeline for a contact, property, or project

list_events

Calendar events — viewings, meetings, filtered by date/state

Emails (E-Mails)

Tool

Description

send_email

Send email using a Propstack template (snippet)

update_email

Mark read/archived, categorize, link to CRM records

Documents (Dokumente)

Tool

Description

list_documents

List files attached to a property, project, or contact

upload_document

Upload a document (base64 data URI)

Relationships (Beziehungen)

Tool

Description

create_ownership

Link a contact as property owner (Eigentuemer)

create_partnership

Link a contact as buyer, tenant, etc. (Kaeufer, Mieter)

Lookups (Konfiguration)

Tool

Description

list_pipelines

Get deal pipelines with stages (IDs, names, positions)

get_pipeline

Get a single pipeline with stage details

list_tags

List tags/groups (Merkmale) — filter contacts by group IDs

create_tag

Create a new tag for contacts, properties, or activities

list_activity_types

List note/todo/event templates for create_task

list_contact_statuses

List contact statuses for search/assign

list_reservation_reasons

List deal cancellation reasons

list_custom_fields

Discover custom field definitions (names, types, options)

list_users

List all brokers/agents with contact info

list_teams

List teams/departments with member assignments

list_locations

List geographic areas (Geolagen) for location matching

Smart Composites (Intelligente Workflows)

Tool

Description

full_contact_360

Complete contact dossier — info, search profiles, deals, activity

property_performance_report

Days on market, inquiry count, pipeline breakdown, activity summary

pipeline_summary

Deals per stage, total values, stale deals needing attention

smart_lead_intake

Full lead workflow: dedup, create/update, log notes, deal, reminder

match_contacts_to_property

Find buyers whose search profiles match a property

Admin (Verwaltung)

Tool

Description

list_webhooks

List all configured webhook subscriptions

create_webhook

Subscribe to CRM events (CLIENT_CREATED, PROPERTY_UPDATED, etc.)

delete_webhook

Remove a webhook subscription

get_contact_favorites

Get properties a contact has favorited

Example Conversations / Beispiel-Konversationen

Morning Briefing / Morgen-Briefing

You: What's on my calendar today?

AI: calls list_events with today's date range — You have 3 viewings scheduled...

Du: Gibt es neue Leads seit gestern?

KI: ruft search_contacts mit created_at_from=gestern auf — 5 neue Kontakte...

Lead Intake / Leaderfassung

You: I just got off the phone with Maria Schmidt, +49 157 1234 5678. She's looking for a 3-room apartment in Berlin, budget 300-400k, must have a balcony. She found us on ImmoScout.

AI: calls smart_lead_intake — Contact created (ID: 4521), call note logged, follow-up reminder set for tomorrow 9:00. Would you like me to create a search profile for her criteria?

Property Matching / Objekt-Matching

Du: Wir haben ein neues Listing: 3-Zimmer-Wohnung in Charlottenburg, 385.000 EUR. Wer kommt als Kaeufer in Frage?

KI: ruft match_contacts_to_property auf — 12 passende Suchprofile gefunden. Top 3: Herr Weber (Score 95%), Frau Mueller (Score 88%), Herr Kim (Score 85%)...

Pipeline Review

You: How's our sales pipeline looking? Any stale deals?

AI: calls pipeline_summary — 47 active deals, total value 12.3M EUR. 5 deals haven't been updated in 14+ days...

Pre-Call Briefing / Vor dem Anruf

Du: Gib mir alles ueber Kontakt 3847 — ich rufe gleich an.

KI: ruft full_contact_360 auf — Herr Weber, Rating 3 Sterne, sucht 3-Zimmer in Berlin/Potsdam bis 400k. 2 aktive Deals, letzte Aktivitaet vor 3 Tagen...

Datenschutz (DSGVO)

English summary: Using this MCP server sends personal data from your Propstack CRM into whichever LLM you connect. You (the Propstack customer) are the data controller (Verantwortlicher) under Art. 4(7) GDPR — the tool author hosts and processes nothing. The German section below covers controller responsibility, the legal basis your LLM processing needs, the fields parameter for data minimization, automated-decision notes for match_contacts_to_property, and audit logging. These points apply to any LLM tool handling customer data; they are stated here because they are easy to overlook.

Verantwortlichkeit

Dies ist ein quelloffenes Werkzeug (Open Source). Jeder Nutzer verbindet es über seinen eigenen API-Schluessel mit seinem eigenen Propstack-Konto. Der Server ist zustandslos, laeuft lokal beim jeweiligen Nutzer und speichert keine Daten. Es werden keine Daten durch den Autor des Werkzeugs gehostet oder verarbeitet. Der Propstack-Kunde, der dieses Werkzeug einsetzt, ist der Verantwortliche im Sinne von Art. 4 Nr. 7 DSGVO.

Verarbeitung durch das LLM

Bei der Nutzung dieses Werkzeugs werden personenbezogene Daten (Namen, Adressen, Kontaktdaten sowie je nach Tool auch Finanz- bzw. Deal-Daten) in das Kontextfenster des jeweils verbundenen LLM (Claude, ChatGPT usw.) uebertragen. Dies stellt einen Verarbeitungsvorgang im Sinne von Art. 4 Nr. 2 DSGVO dar. Der Verantwortliche benoetigt hierfuer:

  • eine Rechtsgrundlage nach Art. 6 DSGVO,

  • eine entsprechende Angabe in der eigenen Datenschutzerklaerung (Transparenzpflichten nach Art. 13/14 DSGVO gegenueber den betroffenen Personen),

  • gegebenenfalls einen Auftragsverarbeitungsvertrag (AVV) mit dem LLM-Anbieter.

Dies gilt fuer jedes LLM-gestuetzte Werkzeug, das Kundendaten verarbeitet, und ist nicht spezifisch fuer diesen MCP-Server — es wird hier dennoch ausdruecklich genannt, da es leicht uebersehen wird.

Hinweis zu automatisierten Entscheidungen (match_contacts_to_property)

Das Tool match_contacts_to_property erzeugt einen Uebereinstimmungs-Score (Ranking) zwischen Kontakten und einem Objekt — zur Vorlage fuer eine menschliche Pruefung. Es ist als Entscheidungsunterstuetzung konzipiert, nicht als autonomer Entscheider: Der Makler prueft die Ergebnisse und handelt manuell. Dadurch faellt die Nutzung nicht unter Art. 22 DSGVO (der ausschliesslich automatisierte Entscheidungen mit rechtlicher oder aehnlich erheblicher Wirkung betrifft). Der Verantwortliche sollte jedoch sicherstellen, dass das Tool auch tatsaechlich so eingesetzt wird — also nicht ohne menschliche Pruefung in eine vollstaendig automatisierte Ansprache eingebunden wird.

Datenminimierung (fields-Parameter)

Die Tools, die personenbezogene Daten in groesserem Umfang zurueckgeben — search_contacts, search_properties, search_deals und full_contact_360 — unterstuetzen einen optionalen fields-Parameter. Damit lassen sich gezielt nur die benoetigten Felder abrufen (z. B. ["first_name", "last_name", "email"]). Ohne fields bleibt das Verhalten unveraendert (alle Felder werden zurueckgegeben). Es wird empfohlen, dass Verantwortliche fields nutzen, um nur die fuer den jeweiligen Zweck erforderlichen Daten zu verarbeiten — im Sinne von Datenschutz durch Technikgestaltung (Art. 25 DSGVO).

Audit-Logging / Zugriffskontrolle

Protokollierung von Zugriffen und Zugriffskontrolle liegen in der Verantwortung des Verantwortlichen — etwa ueber die Berechtigungssteuerung von Propstack (API-Schluessel-Berechtigungen) oder ueber Protokollierung auf Client- bzw. Sitzungsebene. Da der Server zustandslos ist und lokal beim jeweiligen Nutzer laeuft, ist eine solche Protokollierung nicht im Werkzeug selbst enthalten.

Development

git clone <repo-url>
cd propstack-mcp-server
npm install
npm run build    # tsc → dist/
npm start        # requires PROPSTACK_API_KEY

Project Structure

src/
  index.ts                 # Server entry point (stdio transport)
  propstack-client.ts      # HTTP client with auth, retry, error handling
  types/
    propstack.ts           # TypeScript interfaces for all API responses
  tools/
    helpers.ts             # Shared formatting utilities
    contacts.ts            # 7 contact tools
    properties.ts          # 5 property tools
    tasks.ts               # 3 task tools (polymorphic: note/todo/event/cancel)
    deals.ts               # 3 deal pipeline tools
    search-profiles.ts     # 4 search profile tools
    projects.ts            # 2 project tools
    activities.ts          # 2 activity/event tools
    emails.ts              # 2 email tools
    documents.ts           # 2 document tools
    relationships.ts       # 2 relationship tools (ownership/partnership)
    lookups.ts             # 8 lookup/config tools
    composites.ts          # 5 smart composite tools
    admin.ts               # 5 admin tools (webhooks, export, favorites)

License

MIT

Available Tools

53 tools
create_contactA

Create a new contact in Propstack CRM.

Use this tool to:

  • Register a new lead after a phone call

  • Create a contact from a web form submission

  • Add a new property owner

Auto-upserts: if a contact with the same email or old_crm_id already exists, it will be updated instead of creating a duplicate.

Use get_contact_sources first to find valid source IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoEmail address (also used for dedup/upsert matching)
phoneNoPhone number
ratingNoContact rating: 0 (none) to 3 (top priority)
companyNoCompany name
languageNoLanguage code (e.g. 'de', 'en')
positionNoJob position/title
broker_idNoID of the assigned broker/agent
group_idsNoTag/group IDs to assign to this contact
home_cityNoHome address: city
last_nameNoLast name
first_nameNoFirst name
newsletterNoNewsletter opt-in
salutationNoSalutation: mr (Herr) or ms (Frau)
descriptionNoFree-text description or notes about the contact
home_streetNoHome address: street
office_cityNoOffice address: city
home_countryNoHome address: country code
home_zip_codeNoHome address: postal code
office_streetNoOffice address: street
academic_titleNoAcademic title (e.g. 'Dr.', 'Prof.')
accept_contactNoContact permission granted
office_countryNoOffice address: country code
office_zip_codeNoOffice address: postal code
client_source_idNoLead source ID (use get_contact_sources to look up)
client_status_idNoContact status ID
home_house_numberNoHome address: house number
office_house_numberNoOffice address: house number
partial_custom_fieldsNoCustom field values as key-value pairs (use list_custom_fields to discover available fields)

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description fully carries the burden. It discloses the auto-upsert behavior (if email or old_crm_id exists, updates instead of creates). However, it does not mention required permissions, idempotency, or error handling.

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?

Extremely concise: one sentence for purpose, a bullet list for use cases, and one sentence each for auto-upsert and prerequisite. Front-loaded and every sentence earns its place.

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?

Given 28 parameters and no output schema, the description covers the key behavioral trait (upsert) and prerequisite. However, it omits what the tool returns (e.g., contact ID) and does not address error scenarios or rate limits. Adequate but not comprehensive.

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 baseline is 3. Description adds value by explaining the auto-upsert reliance on email and that client_source_id requires get_contact_sources lookup. No additional semantics for other parameters.

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 clearly states 'Create a new contact in Propstack CRM' and provides specific use cases like registering a lead after a phone call, creating from a web form, and adding a property owner. It distinguishes from siblings (e.g., update_contact) by mentioning auto-upsert behavior.

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?

Explicitly lists when to use (after phone call, web form submission, add owner) and provides a prerequisite: 'Use get_contact_sources first to find valid source IDs.' It also explains auto-upsert behavior, guiding the agent on when the tool will update instead of create.

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

create_dealA

Create a deal linking an interested contact to a property in Propstack.

A deal represents a contact's interest in a property and tracks it through pipeline stages (e.g. Anfrage → Besichtigung → Reserviert → Notartermin → Verkauft).

Use this tool after:

  • A viewing to formalize interest

  • A contact inquiry about a property

  • Moving a lead into the sales pipeline

Requires client_id, property_id, and deal_stage_id. Use list_pipelines or get_pipeline to find valid pipeline and stage IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDeal date (ISO 8601)
noteNoFree-text note about this deal
feelingNoFeeling score: 0=none, 1=cold, 2=warm, 3=hot
broker_idNoAssigned broker ID
client_idYesContact ID (required)
sold_priceNoExpected or agreed price
property_idYesProperty ID (required)
deal_stage_idYesPipeline stage ID (required — use list_pipelines or get_pipeline to look up)
deal_pipeline_idNoPipeline ID (if multiple pipelines exist)

TDQS

A4.6/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It discloses that deals track through pipeline stages and gives example stages, but could be more explicit about side effects or state changes beyond creation.

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?

Approximately 80 words, with the core purpose stated first, followed by usage scenarios and requirements. No unnecessary sentences, every part 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?

Given 9 parameters and no output schema, the description covers required fields, usage scenarios, and references helper tools. It provides sufficient context for the create operation, though return behavior is not explained.

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. The description adds meaning by explaining the required parameters' roles and referencing helper tools for ID lookups, going beyond the schema descriptions.

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 clearly states it creates a deal linking a contact to a property, with a specific resource ('deal') and verb ('create'). It differentiates from sibling tools like create_contact and create_property by focusing on the deal object and its pipeline tracking.

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?

Explicitly lists when to use this tool: after a viewing, contact inquiry, or moving a lead into the pipeline. It also directs users to list_pipelines or get_pipeline for valid IDs, providing clear context and alternatives.

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

create_ownershipA

Link a contact as the OWNER (Eigentümer) of a property.

Use this tool to:

  • Record property ownership ("Herr Müller owns Hauptstraße 12")

  • Set up owner relationships for acquisition properties

  • Link sellers to their properties

The ownership appears on both the contact's and the property's record.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYesContact ID (the owner)
property_idYesProperty ID (the owned property)

TDQS

A3.8/5.0
Behavior3/5

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

Discloses that ownership appears on both records, but lacks details on side effects like overwriting or prerequisites, which is important for a mutation tool without annotations.

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?

Concise, front-loaded, uses bullet points effectively. No unnecessary information.

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?

Adequate for a simple tool with two parameters, but missing prerequisite information (e.g., contact and property must exist).

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 schema descriptions are clear. Description adds examples but no additional parameter-specific meaning beyond 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?

Clearly states verb 'Link' and resource 'ownership', includes examples and distinguishes from sibling tools like create_contact and create_partnership.

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?

Provides clear use cases with bullet points but does not explicitly exclude alternatives or specify when not to use this tool.

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

create_partnershipA

Link a contact as a PARTNER (buyer, tenant, etc.) to a property.

Use this tool to:

  • Link a buyer to a property ("Frau Schmidt is the buyer of Hauptstraße 12")

  • Link a tenant to a rental property

  • Create any named contact↔property relationship

The name field describes the role (e.g. "Käufer", "Mieter", "Verwalter").

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRole name (e.g. 'Käufer', 'Mieter', 'Verwalter')
client_idYesContact ID (the partner)
property_idYesProperty ID

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It describes the core function but omits details such as whether it overwrites existing partnerships, required permissions, side effects, or error conditions. Only the function is stated.

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 very concise: two main sentences followed by bullet points. Every sentence adds value, and the structure front-loads the purpose with examples. No superfluous text.

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 create tool with three parameters and no output schema, the description covers the essentials: purpose, parameters, and examples. It could mention the expected return value (e.g., created partnership object) but is otherwise complete.

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 input schema covers all three parameters with descriptions, but the description adds meaningful context: it explains that 'name' represents a role (e.g., 'Käufer', 'Mieter') and provides examples. This goes beyond the schema's explanation of 'Role name'.

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 clearly states that the tool links a contact as a partner (buyer, tenant, etc.) to a property, with concrete examples like 'Frau Schmidt is the buyer of Hauptstraße 12'. It distinguishes from sibling tools like 'create_ownership' or 'create_contact' by focusing on relationship creation.

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?

The description explicitly lists three use cases (link buyer, tenant, any relationship) and explains the 'name' field. However, it does not provide guidance on when *not* to use this tool or mention alternative tools like 'create_ownership' for ownership-specific roles.

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

create_propertyA

Create a new property (Objekt) in Propstack CRM.

Use this tool to:

  • List a new property from an acquisition call

  • Create a listing from an owner inquiry

  • Add a property to a project

Use get_property_statuses to look up valid status IDs. Use the relationships_attributes array to link an owner contact on creation.

rs_type values: APARTMENT, HOUSE, TRADE_SITE, GARAGE, SHORT_TERM_ACCOMODATION, OFFICE, GASTRONOMY, INDUSTRY, STORE, SPECIAL_PURPOSE, INVESTMENT.

rs_category provides sub-types (e.g. PENTHOUSE, VILLA, MAISONETTE for APARTMENT/HOUSE).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude
lngNoLongitude
cityNoCity
floorNoFloor number
priceNoPurchase price (EUR)
titleNoProperty title / headline
statusNoProperty status ID (use get_property_statuses to look up)
streetNoStreet name
countryNoCountry code (e.g. 'DE')
rs_typeNoProperty type (e.g. APARTMENT, HOUSE, OFFICE)
courtageNoCommission amount or percentage
zip_codeNoPostal code
base_rentNoBase rent (EUR/month)
broker_idNoAssigned broker ID
plot_areaNoPlot area (m²)
other_noteNoAdditional notes text
project_idNoProject ID this property belongs to
total_rentNoTotal rent including utilities (EUR/month)
object_typeNoObject category: LIVING, COMMERCIAL, or INVESTMENT
rs_categoryNoProperty sub-type (e.g. PENTHOUSE, VILLA, MAISONETTE, SINGLE_FAMILY_HOUSE)
house_numberNoHouse number
living_spaceNoLiving space (m²)
courtage_noteNoCommission details/notes
location_noteNoLocation description text
marketing_typeNoMarketing type: BUY (Kauf) or RENT (Miete)
furnishing_noteNoFurnishing/equipment description text
number_of_roomsNoNumber of rooms
description_noteNoProperty description text (HTML allowed)
construction_yearNoYear of construction
number_of_bed_roomsNoNumber of bedrooms
number_of_bath_roomsNoNumber of bathrooms
partial_custom_fieldsNoCustom field values as key-value pairs
relationships_attributesNoLink contacts on creation, e.g. [{internal_name: "owner", related_client_id: 123}]

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description discloses some behavior (creation with optional owner linking and status lookup) but omits details on side effects, idempotency, auth requirements, or response format. It adds moderate value beyond the tool name.

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 description is well-structured with bullet points and front-loaded purpose. It efficiently covers key aspects, though some sentences could be merged for brevity.

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?

For a creation tool with 33 parameters and no output schema, the description does not explain the return value (e.g., created property ID) or error handling. It covers parameter usage well but lacks output and completeness details.

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 each parameter has a description. The description adds contextual guidance (e.g., listing rs_type enum values and examples for rs_category) but mostly reinforces schema info. Baseline of 3 is appropriate.

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 clearly states 'Create a new property (Objekt) in Propstack CRM' and provides specific use cases like 'List a new property from an acquisition call', distinguishing it from sibling tools such as update_property or search_properties.

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?

The description offers clear usage context (acquisition, owner inquiry, project addition) and directs to use get_property_statuses for status IDs and relationships_attributes for linking owners. It does not explicitly state when not to use this tool, but the context is sufficient.

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

create_search_profileA

Create a search profile (Suchprofil) for a contact in Propstack.

This is THE killer feature for an AI real estate assistant. When a buyer or renter describes what they're looking for in natural language, map it to structured search criteria:

Example conversation: "Herr Weber sucht eine 3-Zimmer-Wohnung in Berlin oder Potsdam, Budget 300.000–400.000 €, muss einen Balkon haben" → client_id: <Herr Weber's ID> marketing_type: "BUY" rs_types: ["APARTMENT"] cities: ["Berlin", "Potsdam"] number_of_rooms: 3, number_of_rooms_to: 3 price: 300000, price_to: 400000 balcony: "true"

Mapping guide:

  • "Wohnung" / "apartment" → rs_types: ["APARTMENT"]

  • "Haus" / "house" → rs_types: ["HOUSE"]

  • "kaufen" / "buy" → marketing_type: "BUY"

  • "mieten" / "rent" → marketing_type: "RENT"

  • "3 Zimmer" → number_of_rooms: 3, number_of_rooms_to: 3

  • "3-4 Zimmer" → number_of_rooms: 3, number_of_rooms_to: 4

  • "bis 400k" → price_to: 400000

  • "mind. 80m²" → living_space: 80

  • "mit Balkon" → balcony: "true"

  • "mit Aufzug" → lift: "true"

  • "mit Garten" → garden: "true"

  • "mit EBK" → built_in_kitchen: "true"

  • "Neubau" → construction_year: 2020

Feature booleans use strings: "true" = required, "false" = excluded, omit = don't care.

Use radius search (lat/lng/radius) for "within 5km of Alexanderplatz".

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude for radius search center
lngNoLongitude for radius search center
liftNoLift/elevator required: 'true', 'false', or omit for any
noteNoFree-text note about this search profile
floorNoMinimum floor
priceNoMinimum purchase price (EUR)
activeNoWhether the search profile is active (default: true)
cellarNoCellar required: 'true', 'false', or omit for any
citiesNoCity names to search in (e.g. ['Berlin', 'Potsdam'])
gardenNoGarden required: 'true', 'false', or omit for any
radiusNoSearch radius in meters from lat/lng center
rentedNoCurrently rented: 'true', 'false', or omit for any
balconyNoBalcony required: 'true', 'false', or omit for any
regionsNoRegion names to search in
floor_toNoMaximum floor
price_toNoMaximum purchase price (EUR)
rs_typesNoProperty types (e.g. ['APARTMENT', 'HOUSE'])
base_rentNoMinimum base rent (EUR/month)
client_idYesContact ID this search profile belongs to (required)
group_idsNoTag/group IDs to assign
plot_areaNoMinimum plot area (m²)
total_rentNoMinimum total rent (EUR/month)
base_rent_toNoMaximum base rent (EUR/month)
living_spaceNoMinimum living space (m²)
location_idsNoPropstack location/district IDs
plot_area_toNoMaximum plot area (m²)
yield_actualNoMinimum actual yield (%)
price_per_sqmNoMinimum price per m² (EUR)
rs_categoriesNoProperty categories (e.g. ['APARTMENT_NORMAL', 'HOUSE_DETACHED'])
total_rent_toNoMaximum total rent (EUR/month)
marketing_typeNoMarketing type: BUY (Kauf) or RENT (Miete)
living_space_toNoMaximum living space (m²)
number_of_roomsNoMinimum number of rooms
yield_actual_toNoMaximum actual yield (%)
built_in_kitchenNoBuilt-in kitchen required: 'true', 'false', or omit for any
price_multiplierNoMinimum price multiplier (Vervielfältiger)
price_per_sqm_toNoMaximum price per m² (EUR)
construction_yearNoMinimum construction year
number_of_rooms_toNoMaximum number of rooms
number_of_bed_roomsNoMinimum number of bedrooms
price_multiplier_toNoMaximum price multiplier
construction_year_toNoMaximum construction year
number_of_bed_rooms_toNoMaximum number of bedrooms

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description should cover behavioral aspects. It discloses that feature booleans use strings ('true'/'false'/omit) and that radius search uses lat/lng/radius. However, it does not mention error conditions, permissions, or whether creation overwrites or merges with existing profiles.

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 description is front-loaded with the core purpose, then uses bullet points and examples. It is longer than necessary but well-organized, with the mapping guide making it highly useful. Could be slightly trimmed but remains effective.

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?

Given the high parameter count (43) and no output schema, the description covers key aspects: required client_id, mapping guide, radius search, boolean conventions. It does not describe the return value or error handling, but this is acceptable for a create tool with many optional fields.

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 description coverage is 100% (all 43 parameters have descriptions). The description adds significant value by providing a natural language mapping guide for many parameters (e.g., '3 Zimmer' → number_of_rooms). This translates user intent into parameter values, which is beyond what the schema provides.

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 clearly states 'Create a search profile (Suchprofil) for a contact in Propstack' and provides a detailed mapping guide with example. This specific verb+resource combination distinguishes it from sibling tools like list_search_profiles or update_search_profile.

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?

The description explicitly frames this as 'THE killer feature for an AI real estate assistant' and shows how to map natural language to structured criteria. While it provides strong context, it does not explicitly state when NOT to use this tool or mention alternatives like update_search_profile for existing profiles.

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

create_tagA

Create a new tag/label (Merkmal) in Propstack.

Tags are used to categorize contacts, properties, and activities. Optionally assign to a parent super-group (Obermerkmal) for hierarchy.

Examples: "Penthouse-Käufer", "VIP", "Kapitalanleger", "Erstbezug".

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTag name
entityYesWhich entity type this tag applies to
super_group_idNoParent super-group ID (Obermerkmal) for hierarchy

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It only states the basic create action without disclosing side effects, permissions, rate limits, uniqueness constraints, or return behavior. Lacks depth for a mutation tool.

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, no wasted words. The core action is front-loaded, followed by context and examples. Highly efficient.

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?

Given the tool's simplicity, the description covers the primary purpose and parameter context. However, it does not describe the return value (no output schema) or any constraints (e.g., unique name). Slightly incomplete but adequate for a straightforward create operation.

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%, but the description adds meaningful context: it explains the 'entity' parameter's purpose (tagging contacts, properties, activities) and clarifies that 'super_group_id' is optional for hierarchy. This goes beyond the brief schema descriptions.

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 clearly states 'Create a new tag/label (Merkmal) in Propstack.' and explains the purpose of tags (categorizing contacts, properties, activities). It provides specific examples and mentions optional hierarchy, distinguishing it from other create tools that create different entities.

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 description implies usage (creating tags for categorization) but does not explicitly state when to use this tool versus alternatives (e.g., other creation or categorization methods). No when-not or alternative guidance is given.

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

create_taskA

Create a task (note, to-do, appointment, or cancellation) in Propstack.

This is the central write endpoint for ALL activity types. The mode is determined by which flags you set:

MODE 1 — Note (Notiz): Just provide title + body. No special flags needed. Example: log a call note after a conversation.

MODE 2 — To-do (Aufgabe): Set is_reminder: true + due_date. Example: "remind me to call Herr Müller back tomorrow"

MODE 3 — Appointment (Termin): Set is_event: true + starts_at + ends_at. Example: "schedule a viewing at Musterstr 12 at 3pm"

MODE 4 — Cancellation (Absage): Set reservation_reason_id to a valid reason. Example: "cancel deal — buyer withdrew financing"

Always link tasks to contacts/properties/projects via the *_ids arrays so they appear in the correct activity feeds.

The body field accepts HTML content.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoTask body (HTML allowed). Call notes, meeting minutes, etc.
doneNoMark to-do as completed (default: false)
rruleNoiCal RRULE for recurring events (e.g. 'FREQ=WEEKLY;COUNT=4')
stateNoEvent state (e.g. 'neutral', 'took_place', 'cancelled')
titleYesTask title / subject line
all_dayNoAll-day event flag
ends_atNoEvent end time (ISO 8601). Requires is_event: true
privateNoPrivate event — hidden from other brokers
due_dateNoDue date for to-do (ISO 8601). Requires is_reminder: true
is_eventNoSet true to create an Appointment/Termin (MODE 3)
locationNoEvent location (address or description)
broker_idNoID of the assigned broker/agent
recurringNoRecurring event flag
remind_atNoReminder notification time (ISO 8601). Requires is_reminder: true
starts_atNoEvent start time (ISO 8601). Requires is_event: true
client_idsNoContact IDs to link this task to
is_reminderNoSet true to create a To-do/Aufgabe (MODE 2)
project_idsNoProject IDs to link this task to
note_type_idNoActivity type ID (e.g. for note, brief, SMS subtypes)
property_idsNoProperty IDs to link this task to
reservation_reason_idNoCancellation reason ID — setting this activates MODE 4 (Absage)

TDQS

A4.8/5.0
Behavior4/5

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

Without annotations, the description effectively discloses key behaviors: the mode is determined by flags, body accepts HTML, and tasks are linked via IDs. It covers the four distinct creation behaviors. However, it does not mention side effects like notifications or idempotency, which would improve transparency.

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 well-structured with clear sections for each mode, using bold headers and bullet points. It is concise despite the complexity, with every sentence contributing value (e.g., examples, mode definitions). No redundant or vague statements.

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?

Given the tool's complexity (21 parameters, 4 modes) and the absence of an output schema, the description is adequate. It covers all key use cases, provides examples, and explains parameter dependencies. The agent can correctly invoke the tool for any of the four activity types without additional information.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema by grouping parameters into modes and providing concrete examples. It clarifies conditional requirements (e.g., due_date requires is_reminder; starts_at requires is_event). This helps the agent understand parameter relationships and usage context.

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 clearly states the tool creates a task, which can be a note, to-do, appointment, or cancellation. It uses the verb 'create' and specifies the resource 'task' in Propstack. It distinguishes itself from sibling tools like update_task and get_task by being the central write endpoint for all activity types.

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?

The description provides explicit usage guidelines by defining four modes with examples for each: note, to-do, appointment, cancellation. It explains how to set specific flags to achieve each mode, and advises linking tasks to contacts, properties, or projects via *_ids arrays. This helps the agent choose the correct mode and parameters.

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

create_webhookA

Create a webhook to subscribe to Propstack CRM events.

Propstack will POST a JSON payload to target_url whenever the event fires. Use HMAC verification (secret in response) to validate payloads.

Common events:

  • CLIENT_CREATED — new contact added

  • CLIENT_UPDATED — contact details changed

  • PROPERTY_UPDATED — property details or status changed

Use this to set up automation triggers, e.g.: "Notify me when any property status changes" "Alert when a new contact is created"

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYesEvent name (e.g. 'CLIENT_CREATED', 'CLIENT_UPDATED', 'PROPERTY_UPDATED')
target_urlYesURL that Propstack will POST to when the event fires

TDQS

A4.5/5.0
Behavior4/5

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

Describes that Propstack will POST to target_url and mentions HMAC verification with secret, providing good behavioral context beyond the input schema. No annotations exist to contradict.

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?

Concise yet informative: purpose stated first, then behavior, event list, and examples—all in a well-structured manner 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?

Comprehensive for a 2-param tool with no output schema: covers purpose, behavior, events, and usage examples, leaving no obvious gaps.

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% and description adds value by listing common events and explaining the target_url's purpose, going beyond the schema descriptions.

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 clearly states it creates a webhook to subscribe to CRM events, differentiating it from sibling tools like delete_webhook and list_webhooks.

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?

Provides clear context on when to use the tool with examples of automation triggers and events, but does not explicitly state when not to use it or mention alternatives.

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

delete_contactA

Delete a contact from Propstack CRM (soft delete).

The contact is moved to a 30-day recycle bin and can be restored.

Use this tool for:

  • GDPR deletion requests (Art. 17 DSGVO)

  • Removing duplicate contacts

  • Cleaning up test data

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact ID to delete

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully reveals the behavioral trait: it's a soft delete that moves the contact to a 30-day recycle bin with restore capability. This goes beyond the basic schema and is critical for the agent to understand consequences.

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 concise sentences: first states the primary action, second explains the behavior, third lists use cases. No wasted words, efficiently structured.

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 one-parameter tool with no output schema, the description covers the essential behavior (soft delete, recycle bin, use cases) completely. No gaps given the tool's simplicity.

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 already covers the single parameter 'id' with 100% description coverage. The description adds no additional semantics beyond the soft-delete context. Baseline 3 is appropriate.

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 clearly states the action 'Delete a contact' and specifies it's a soft delete, distinguishing it from potential permanent deletions. It uniquely identifies the resource and verb, and no sibling tool performs the same function.

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?

The description lists three explicit use cases (GDPR deletion, removing duplicates, cleaning test data), providing good guidance on when to use. It could be improved by mentioning when not to use (e.g., for urgent permanent removal), but the context is clear.

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

delete_search_profileA

Delete a search profile from Propstack.

Use this tool when:

  • A contact has found a property and is no longer searching

  • The search profile was created in error

  • A contact explicitly asks to stop receiving matching notifications

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSearch profile ID to delete

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states 'Delete a search profile' without mentioning permanence, required permissions, or side effects like cessation of notifications.

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 two sentences plus a bullet list, with no unnecessary words. It is front-loaded with the tool's core action and immediately provides usage guidance.

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 delete tool with one parameter and no output schema, the description covers purpose and usage scenarios adequately. It lacks some behavioral details like irreversibility, but remains fairly 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?

The input schema fully describes the single parameter 'id' as 'Search profile ID to delete'. The description adds no further parameter-level detail, so baseline score of 3 is appropriate.

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 clearly specifies the verb 'Delete' and the resource 'search profile from Propstack'. It distinguishes itself from sibling tools like create_search_profile, update_search_profile, and list_search_profiles.

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?

The description provides explicit usage scenarios: when a contact found a property, profile created in error, or contact asks to stop notifications. It lacks explicit when-not-to-use or alternative tool references, but the stated conditions are helpful.

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

delete_webhookA

Delete a webhook subscription from Propstack.

Removes the webhook so Propstack will stop sending events to its URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook ID to delete

TDQS

A3.8/5.0
Behavior3/5

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

Describes effect of stopping events, but no details on irreversibility or confirmation. Adequate given simple delete 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 concise sentences: first states purpose, second explains effect. No filler words.

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?

Complete for a simple deletion tool. Could mention valid ID requirement but not necessary. No output schema needed.

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 provides 100% coverage for parameter 'id' with description 'Webhook ID to delete'. Description adds no extra meaning, baseline 3.

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?

Clearly specifies verb 'Delete', resource 'webhook subscription', and domain 'Propstack'. Distinguishes from sibling tools like create_webhook and list_webhooks.

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?

No explicit when-to-use or alternatives. Usage is implied but lacks guidance on prerequisites like obtaining the webhook ID.

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

export_dataA

Bulk export an entire data table from Propstack as JSON.

Useful for reporting, backup, migration, or analytics. Returns the full contents of the selected table.

Available tables:

  • Core: contacts, properties, projects, deals, saved_queries

  • Activities: appointments, todos, notes, messages, cancelations

  • Media: documents, images

  • Organization: brokers, teams, departments, commission_splits

  • Config: deal_pipelines, policies, relationships, property_details

  • Lookup: groups, contact_sources, contact_reasons, contact_statuses, reservation_reasons, property_statuses

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name to export

TDQS

A4.1/5.0
Behavior3/5

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

The description states the tool returns the full contents of the selected table, which is the primary behavior. However, with no annotations provided, the description carries the full burden of transparency and does not disclose potential limitations like rate limits, data volume handling, or whether the operation is read-only. More detail on response size or pagination would be beneficial.

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 description is front-loaded with the main purpose and use cases, followed by an organized list of tables. It is concise given the number of tables, though the list could potentially be shortened if some tables are less relevant. Overall, it is well-structured and efficient.

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 one-parameter export tool with no output schema, the description covers the purpose, usage, and available tables adequately. It does not detail the output format (though JSON is mentioned) or handling of large datasets, but for most use cases, the description provides sufficient context. Slight improvement could mention if the export is per-page or all-in-one.

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 input schema has 100% coverage with the 'table' parameter described via an enum and brief description. The description adds value by grouping the enum values into categories (Core, Activities, Media, etc.), providing semantic context beyond the raw list, which aids an AI agent in selecting the correct table.

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 clearly states the tool is for bulk exporting an entire data table as JSON, listing specific use cases (reporting, backup, migration, analytics) and providing an extensive categorized list of available tables. This distinguishes it well from sibling tools that focus on specific CRUD operations or searches.

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?

The description explicitly mentions use cases and lists available tables, giving clear context for when to use the tool. However, it does not provide explicit guidance on when not to use it or how it compares to alternatives like search or create tools, which would be helpful for an AI agent deciding between tools.

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

full_contact_360A

Get a complete 360° view of a contact — everything you need before calling a client.

Combines 4 API calls in parallel:

  • Full contact details with children, documents, relationships, owned properties

  • Search profiles (what they're looking for)

  • Active deals (which properties they're linked to)

  • Recent activity (last 10 interactions)

Returns a complete contact dossier in one request. Use this when you need the full picture: "Tell me everything about Herr Weber."

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYesContact ID to get 360° view for

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool combines 4 API calls in parallel and lists the categories of data returned (contact details, search profiles, active deals, recent activity). It does not mention authentication, rate limits, or potential latency, but the core behavior is transparent.

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 concise and well-structured: a clear purpose sentence, a bullet list of components, and a usage recommendation. No unnecessary words.

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?

Given no output schema, the description lists what data is returned (contact details, profiles, deals, activity). It is sufficient for understanding the tool's output. However, it could mention that the response is a composite object, but overall it is 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?

Only one parameter (contact_id) with 100% schema description coverage. The description does not add extra meaning beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool's purpose: 'Get a complete 360° view of a contact'. It mentions combining 4 API calls and provides a concrete example ('Tell me everything about Herr Weber'), distinguishing it from siblings like get_contact.

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?

The description explicitly advises 'Use this when you need the full picture', giving a clear usage context. However, it does not contrast with sibling tools like get_contact or specify when not to use it.

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

get_contactA

Get full details of a single contact by ID.

Use this tool to:

  • View complete contact information before a call

  • Check relationships, documents, and owned properties

  • See sub-contacts (e.g. family members at same address)

Use 'include' to load related data in one request.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact ID
includeNoComma-separated related data to include. Values: children (sub-contacts), documents, relationships, owned_properties. Example: 'children,documents'

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It correctly describes the tool as a read operation (get details) and mentions the ability to include related data via the 'include' parameter. No side effects are implied, which is appropriate for a GET-like tool.

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?

Extremely concise and well-structured: three sentences, each with a clear purpose. The first sentence states the primary function, the second lists use cases, and the third explains a key parameter. No redundant information.

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?

Given 2 parameters, no output schema, and no annotations, the description covers the essential aspects: what it does, when to use, and how to use the include parameter. Could optionally mention return format or required permissions, but overall sufficient for effective tool usage.

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 description coverage is 100%, so baseline is 3. The description adds value by explaining the 'include' parameter's purpose (load related data in one request) and lists example values (children, documents, etc.), enhancing understanding beyond 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 clearly states the tool retrieves full details of a single contact by ID. It lists specific use cases (view before call, check relationships/documents/properties, see sub-contacts), distinguishing it from sibling tools like search_contacts or create_contact.

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?

Provides explicit use cases (view before call, check related data) and mentions the 'include' parameter for loading related data. However, it does not explicitly state when not to use this tool or contrast with search_contacts for listing contacts, which would be helpful.

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

get_contact_favoritesA

Get properties that a contact has favorited/bookmarked.

Returns the list of properties the contact has marked as favorites in Propstack. Use to understand which listings a buyer is most interested in.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYesContact ID

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description bears full responsibility. It correctly implies a read-only operation ('Get... Returns the list...'), which is consistent with the tool name. It does not mention any side effects or permissions, but for a simple retrieval tool, this is adequate.

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 concise—two sentences, no filler. The main action is front-loaded, and every word adds value. It is optimally sized for its simplicity.

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?

With only one parameter and no annotations, the description covers the purpose and use case. However, it lacks information about the output format (e.g., list of property IDs or objects), which would be helpful given no output schema. Otherwise, it is reasonably complete for a simple get 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 100% (contact_id described as 'Contact ID'). The description does not add any further meaning beyond the schema. It mentions 'contact' in the use case but does not elaborate on the parameter format or constraints.

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 clearly states the action ('Get properties that a contact has favorited/bookmarked') and the resource ('contact favorites'), with an explicit use case ('understand which listings a buyer is most interested in'). It distinguishes itself from siblings by focusing on favorites retrieval, which no other sibling tool does.

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?

The description explains when to use the tool ('to understand which listings a buyer is most interested in'), which provides clear context. However, it does not explicitly state when not to use it or mention any alternative tools, leaving some room for ambiguity.

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

get_contact_sourcesA

List all available contact/lead sources in Propstack.

Returns the list of sources like "Immobilienscout 24", "Website", "Empfehlung", etc. with their IDs.

Use this tool to look up valid source IDs before creating or updating contacts with client_source_id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations exist, but the description correctly implies a read-only listing operation by stating it 'returns the list of sources... with their IDs'. It could mention static nature or cache behavior, but for a simple list, this is sufficient.

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 concise sentences: first states purpose, second gives examples, third provides actionable guidance. No wasted words, and the structure is logical and front-loaded.

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?

Given zero parameters and no output schema, the description fully covers the tool's behavior: it lists sources with IDs, gives examples, and explains when to use it. Nothing essential 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?

The tool has no parameters and the schema is empty, so the description adds value by explaining the return type and usage context, which helps the agent understand what to expect beyond 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 explicitly states 'List all available contact/lead sources in Propstack' and provides concrete examples like 'Immobilienscout 24', 'Website', 'Empfehlung', making the purpose immediately clear. No sibling tool has a similar function, so it is distinct.

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?

The description directly advises using this tool to look up valid source IDs before creating or updating contacts with client_source_id, providing explicit when-to-use guidance and practical context.

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

get_pipelineA

Get a single deal pipeline by ID with its stages.

Returns the pipeline with all stages in order. Use this when you already know which pipeline you need and want its stage details.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPipeline ID

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It states it returns the pipeline with stages in order, which is adequate for a simple read operation but doesn't explicitly confirm no side effects or other behavioral traits.

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 that are clear and front-loaded with the key action and result. No superfluous information.

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?

The description covers purpose, usage context, and what is returned. For a simple one-parameter tool without output schema, this is nearly complete. Minor omission: no example or format details for the response.

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 schema already describes the id parameter. The description adds 'by ID' but doesn't significantly enhance understanding beyond 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 clearly states the tool gets a single deal pipeline by ID with its stages, which is a specific verb+resource. It distinguishes from siblings like list_pipelines by focusing on a single pipeline with stage details.

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?

The description explicitly says 'Use this when you already know which pipeline you need and want its stage details,' providing clear context. It doesn't mention alternatives but the context with sibling tools implies them.

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

get_projectA

Get full details of a single project by ID.

Returns the complete project with all units, images, floorplans, documents, and links.

Use this tool to:

  • See how a project is performing (unit statuses)

  • Check how many units are still available vs. sold/reserved

  • View project media and documents

  • Get unit-level details (prices, sizes, statuses)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProject ID

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the complete return data (units, images, floorplans, documents, links) and specific details like unit statuses and prices. It does not cover auth or rate limits, but for a read operation this is acceptable.

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 concise and well-structured: a clear one-sentence summary followed by bullet points for usage. Every sentence adds value, and the main purpose is front-loaded.

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?

Given no output schema and low complexity (single parameter), the description covers the necessary information: purpose, return content, and use cases. It lacks details on pagination or limitations, but those are irrelevant for a single-project retrieval.

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 schema covers the single parameter 'id' with description 'Project ID'. The description adds value by explaining the scope of the response (full details), which goes beyond the schema's minimal info. With 100% schema coverage, baseline is 3, and the extra context justifies a 4.

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 clearly states 'Get full details of a single project by ID', specifying the verb, resource, and scope. It distinguishes from sibling tools like 'list_projects' which list multiple projects, and 'get_property' for a different entity.

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?

The description provides explicit use cases in bullet points, such as checking unit statuses and viewing media. It does not mention when not to use it or alternatives, but the context is clear enough for the agent to decide.

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

get_propertyA

Get full details of a single property by ID.

Use this tool to:

  • View complete property information for an exposé

  • Check images, floorplans, documents, and links

  • See custom fields, broker assignment, and project

  • Get multilingual texts (use locale parameter)

Always fetches with new=1 (extra fields) and expand=1 (custom fields).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProperty ID
include_translationsNoComma-separated language codes for multilingual texts (e.g. 'en,de'). Omit for default language only.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that it always fetches with new=1 and expand=1, providing extra fields and custom fields. This goes beyond basic purpose. However, it does not cover authentication 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 extremely concise, using a short header and bullet points. Every sentence adds value, and the main action is front-loaded.

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 single-property retrieval tool with no output schema, the description covers all key aspects: returned data (images, floorplans, documents, links, custom fields, project), multilingual support, and hidden parameters. It is complete.

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%, but the description adds value by explaining that include_translations is for 'multilingual texts' and that locale parameter exists. This exceeds the schema descriptions alone.

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 clearly states 'Get full details of a single property by ID' and lists specific use cases (view images, floorplans, documents) that distinguish it from sibling tools like search_properties which lists multiple properties.

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?

The description provides explicit use cases and mentions the locale parameter, but does not explicitly state when not to use it or compare with alternatives. The context is clear enough for an agent to infer appropriate usage.

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

get_property_statusesA

List all available property statuses in Propstack.

Returns statuses like "Verfügbar", "Reserviert", "Verkauft" with their IDs, colors, and sort positions.

Use this tool to look up valid status IDs before:

  • Filtering properties by status in search_properties

  • Setting a property's status in create_property or update_property

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden. It transparently describes the tool as a list operation returning statuses with IDs, colors, and sort positions. No hidden side effects or surprises are implied.

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 two short paragraphs: the first states what the tool does and what it returns; the second gives usage context. Every sentence is useful and there is 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?

Despite lacking an output schema, the description specifies the return value (statuses with IDs, colors, sort positions). Given the simplicity of the tool (no parameters, no side effects), the description is sufficiently complete.

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

Parameters5/5

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

The tool has zero parameters, so schema coverage is effectively 100%. The description adds value by explaining the output structure (statuses with IDs, colors, sort positions), which compensates for the lack of an input schema. Baseline for 0 parameters is elevated.

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 clearly states that the tool lists all available property statuses, providing examples ('Verfügbar', 'Reserviert', 'Verkauft') and the data returned (IDs, colors, sort positions). It is distinct from sibling tools which create, update, or search other entities.

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?

The description explicitly instructs when to use this tool: before filtering properties by status in search_properties or before setting a status in create_property or update_property. It names specific sibling tools and provides actionable guidance.

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

get_taskA

Get full details of a single task by ID.

Returns the task with all linked entities expanded (contacts, properties, projects, viewings) by default.

Use this tool to:

  • View full context of an activity before acting on it

  • Check linked contacts and properties

  • See appointment details (time, location, state)

  • Check if a to-do has been completed

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask ID
includeNoComma-separated related data to include (default: 'clients,units,projects,viewings')

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It discloses that linked entities are expanded by default and lists specific details returned. However, it does not mention read-only nature, rate limits, or authentication needs, which are typical for a get 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?

The description is concise: one opening sentence, one sentence on default behavior, and a bulleted list of use cases. No redundant information, front-loaded with the core purpose.

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?

Despite no output schema, the description adequately explains the return value (linked entities, specific fields like contacts, properties, projects, viewings, appointment details, todo status). For a low-complexity tool with only 2 parameters, this is fully 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?

Schema coverage is 100% with descriptions for both parameters. The description adds value by explaining default expansion behavior and giving examples of what the 'include' parameter controls, going beyond 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 clearly states the verb (get), resource (task), and method (by ID). It distinguishes from sibling tools like search_activities and list_* tools by focusing on a single task with full detail.

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?

Explicit bullet points list specific use cases (view context, check linked entities, see appointment details, check completion). While it doesn't explicitly state when not to use, the context is clear and informative.

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

list_activity_typesA

List all activity/task types in Propstack.

These are templates for creating notes, todos (reminders), events, and messages. Each has an id, name, and category. Use these IDs when creating tasks:

  • category "for_notes" → note_type_id in create_task

  • category "for_reminders" → todo_type_id (when is_reminder: true)

  • category "for_events" → event_type_id (when is_event: true)

  • category "message" → snippet_id for email templates

Categories map to search_activities filter: for_notes→note, for_reminders→reminder, for_events→event, message→message.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category (message, for_notes, for_reminders, for_events)

TDQS

A4.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does not explicitly state that the tool is read-only or mention any side effects, auth requirements, or rate limits. However, it implies a read operation ('List') and explains output structure, which is adequate but not exhaustive.

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 well-structured: a concise first sentence summarizing the purpose, followed by clear bullet-point-like explanations of categories and usage. Every sentence adds value without 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?

Given that there is no output schema, the description compensates by listing the output fields (id, name, category) and explaining their use. It also covers the relationship with create_task and search_activities, making the tool's role in the ecosystem clear.

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

Parameters5/5

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

The single parameter 'category' is described in the schema with enum values and a description. The tool description goes beyond by explaining the real-world meaning of each category and how it maps to task creation fields, adding significant context that is not in the schema alone.

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 clearly states 'List all activity/task types in Propstack.' It specifies the resource (activity/task types) and verb (list), and distinguishes from related siblings like search_activities by explaining the output (id, name, category) and how categories map to different task creation 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?

The description provides explicit usage guidance: it maps each category to the appropriate ID field in create_task (note_type_id, todo_type_id, event_type_id, snippet_id) and explains how categories correspond to search_activities filter values. This helps the agent decide when to use this tool and how to apply the results.

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

list_contact_statusesA

List contact statuses (Kontaktstatus) in Propstack.

Use these IDs for search_contacts (status param) and create_contact/update_contact (client_status_id). E.g. "Lead", "Kunde", "Archiviert".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. It implies a read-only listing but does not disclose any behavioral traits such as pagination, caching, or ordering. The description is straightforward but could be more transparent.

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 short, consisting of three sentences with no fluff. Each sentence adds value: stating the action, explaining usage, and giving examples.

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?

Despite no output schema, the description provides sufficient context for a simple listing tool: it lists contact statuses and explains how to use the IDs. It is complete given the tool's simplicity.

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?

There are no parameters (0 params), so schema coverage is 100% by default. The description does not need to add parameter meaning since none exist, earning the baseline score of 4.

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 clearly states 'List contact statuses' with a specific verb and resource, and provides examples like 'Lead', 'Kunde', 'Archiviert'. It distinguishes itself from sibling list tools by specifying 'contact statuses'.

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?

The description explicitly instructs how to use the IDs for search_contacts and create_contact/update_contact, providing clear context of use. It does not mention when not to use, but the guidance is direct.

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

list_custom_fieldsA

List custom field definitions for an entity type in Propstack.

IMPORTANT: Call this tool to discover what custom fields exist before reading or writing custom field values on contacts, properties, etc.

Returns field groups, each containing field definitions with:

  • name: The API key to use (e.g. "cf_budget_range")

  • pretty_name: Human-readable label (e.g. "Budget Range")

  • type: Field type (String, Dropdown, Number, Date, etc.)

  • options: Available values for Dropdown fields

To READ custom fields: use expand=true on search or get tools. To WRITE custom fields: use partial_custom_fields: {"cf_field_name": "value"}. To FILTER by custom fields: add cf_fieldname=value as a search param.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity type to get custom fields for

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return structure in detail (field groups, fields with name, pretty_name, type, options) and explains how to use the results. It does not mention any destructive behavior or authentication, which is acceptable for a read-only list operation.

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 description is well-structured with clear sections: purpose, usage, return format, cross-references. It is not overly verbose and front-loads the key information. Minor redundancy (e.g., 'IMPORTANT' and then same info) could be trimmed, but overall efficient.

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?

Given no output schema, the description fully explains the return values and how to interpret them. It covers input, output, and usage context comprehensively. Adequate for a simple tool with one parameter.

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 coverage is 100% with the 'entity' parameter already documented via enum and description. The description does not add extra parameter semantics beyond what the schema provides, but the schema itself is sufficient. Baseline 3 is appropriate.

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 clearly states 'List custom field definitions for an entity type in Propstack.' It uses a specific verb+resource and distinguishes itself from sibling tools by explaining that it discovers fields before reading/writing.

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?

Explicitly says 'Call this tool to discover what custom fields exist before reading or writing custom field values.' It also provides guidance on when to use other tools (search with expand, write with partial_custom_fields), making the usage context very clear.

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

list_documentsA

List documents attached to a property, project, or contact.

Documents include floor plans (Grundrisse), exposés, contracts, photos, and any other uploaded files.

Use this tool to:

  • See all documents for a property ("Where's the Grundriss?")

  • List a contact's uploaded files

  • Find exposés or contracts for a project

  • Check what's already been uploaded before adding more

Filter by exactly one of property_id, project_id, or client_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
sortNoSort string (e.g. 'created_at,desc')
per_pageNoResults per page (default: 25)
client_idNoFilter by contact ID
project_idNoFilter by project ID
property_idNoFilter by property ID

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It fails to disclose pagination behavior, default sorting, or any limitations. The description focuses on what the tool lists but not on how it behaves (e.g., rate limits, response structure).

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 description is well-structured with a clear main purpose, followed by examples and usage guidance. It is front-loaded and informative, though slightly verbose with the bullet points. Could be trimmed but still effective.

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?

Given the lack of an output schema and annotations, the description provides reasonable context about document types and filtering rules. However, it omits details about the return format (e.g., pagination metadata) and any behavioral constraints, which are necessary for full completeness.

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. The description adds value by emphasizing the 'exactly one filter' constraint and listing document types, which helps the agent understand parameter usage. However, it does not elaborate on page, per_page, or sort beyond 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 clearly states the tool lists documents attached to a property, project, or contact, with specific examples of document types. It differentiates well from sibling tools like upload_document and other list/search tools.

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?

The description provides explicit guidance on when to use the tool, including concrete use cases and the critical instruction to filter by exactly one of property_id, project_id, or client_id. It does not explicitly mention when not to use it, but the positive guidance is strong.

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

list_eventsA

List calendar events (Termine) in Propstack.

Events are appointments like property viewings, client meetings, notary appointments, etc.

Use this tool to:

  • See what's scheduled this week (starts_at_after/starts_at_before)

  • List upcoming viewings for a broker (broker=ID)

  • Find cancelled appointments (state="cancelled")

  • Check recurring events

  • Filter by contact (client=ID) or property (property=ID)

  • Answer "what viewings are scheduled this week?"

Event states:

  • neutral: Scheduled, not yet happened

  • took_place: Completed

  • cancelled: Was cancelled

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by tag/group ID (Merkmal)
pageNoPage number (default: 1)
stateNoEvent state: neutral (scheduled), took_place, cancelled
brokerNoFilter by broker ID
clientNoFilter by contact ID
projectNoFilter by project ID
per_pageNoResults per page (default: 25)
propertyNoFilter by property ID
note_typeNoFilter by event category/type ID
recurringNoFilter for recurring events only
ends_at_afterNoEvents ending after this date/time (ISO 8601)
ends_at_beforeNoEvents ending before this date/time (ISO 8601)
starts_at_afterNoEvents starting after this date/time (ISO 8601, e.g. '2025-01-01')
starts_at_beforeNoEvents starting before this date/time (ISO 8601, e.g. '2025-12-31')

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It covers event states but omits pagination behavior, result ordering, scope of results (user-specific?), and whether it is read-only. Some key behavioral aspects are missing.

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 description is structured with a definition, bulleted use cases, and event states. It is informative but could be slightly more concise without losing clarity.

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?

Given 14 parameters, no output schema, and no annotations, the description covers usage and states but fails to describe the return format, default pagination, or sorting behavior, leaving gaps for an AI agent.

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%, yet the description adds meaningful context by illustrating how parameters are used in practice (e.g., 'List upcoming viewings for a broker') and explaining event states, exceeding the schema's bare descriptions.

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 clearly states it lists calendar events in Propstack, provides examples of event types, and enumerates specific use cases. It differentiates from sibling tools like search_activities by focusing on events.

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?

The description includes explicit use cases and lists event states, but does not mention when to avoid using this tool or suggest alternatives for non-event listings.

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

list_locationsA

List geographic areas/districts (Geolagen) in Propstack.

Returns location IDs and names used for property and search profile location matching. Use location IDs when creating search profiles or filtering properties by area.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided; description adequately conveys that the tool is a read-only list operation returning IDs and names, but lacks additional behavioral details such as authentication 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?

Three concise sentences front-load the core purpose and immediate usage, with no redundant or extraneous 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?

For a parameterless list tool, the description sufficiently covers purpose, output content, and usage, despite lacking an output schema.

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?

No parameters exist; schema coverage is effectively 100%. Description adds value by clarifying the usage context of the returned data beyond 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?

Description clearly states the tool lists geographic areas/districts (Geolagen) and specifies the purpose for property and search profile matching, distinguishing it from sibling tools that handle other entities.

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 indicates when to use the returned location IDs (creating search profiles, filtering properties), providing practical usage context, though it does not mention when to avoid this tool.

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

list_pipelinesA

List all deal pipelines and their stages in Propstack.

Returns each pipeline with its ordered stages, including stage IDs, names, positions, colors, and chance percentages.

You NEED stage IDs from this tool to create or move deals. Call this before using create_deal or update_deal if you don't know the stage IDs.

Typical pipelines: Sales (Verkauf), Acquisition (Akquise), Rental (Vermietung). Typical stages: Anfrage → Besichtigung → Reserviert → Notartermin → Verkauft.

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?

Without annotations, the description carries full burden. It explains what is returned (ordered stages with IDs, names, etc.) but does not explicitly state that the tool is read-only or safe, nor does it mention any side effects or auth requirements.

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 concise, front-loaded with the main purpose, and every sentence adds value. It efficiently covers what the tool does, why it's needed, and typical examples without unnecessary words.

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?

Given no output schema, the description fully explains the return values (stage IDs, positions, colors, chance percentages) and provides usage context and typical pipelines. It is complete for a simple listing 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?

No parameters exist, so baseline of 4 applies. The description adds no parameter information because there are none, but it is consistent with 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 explicitly states the tool lists all deal pipelines and their stages, with specific verb and resource. It clearly differentiates from siblings like get_pipeline and pipeline_summary by its plural nature and mention of stages.

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?

Provides clear context on when to use: before create_deal or update_deal if stage IDs are unknown. However, it does not explicitly mention when not to use it or compare with get_pipeline for a single pipeline.

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

list_projectsA

List development projects in Propstack.

A project is a "super-object" that groups multiple property units (e.g. a new-build apartment complex with 20 units).

Use this tool to:

  • See all active development projects

  • Get an overview of unit counts and statuses

  • Find a project by name before drilling into its units

Use expand=true to include custom fields in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
expandNoInclude custom fields in response
per_pageNoResults per page (default: 25)

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses expand behavior but lacks details on pagination, rate limits, or default sorting. Adequate but not rich.

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?

Concisely written with clear structure: headline, definition, bullet use cases, and parameter note. Every sentence adds value; no fluff.

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?

Completeness is good given no output schema and 100% parameter coverage. Missing some behavioral details (e.g., pagination defaults), but overall covers purpose, use cases, and expand parameter well.

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 baseline is 3. Description adds value for expand parameter but not for page or per_page. Overall minimal additional meaning beyond 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 clearly states the tool lists development projects in Propstack and defines what a project is. It distinguishes from sibling tools like get_project by focusing on listing all active projects.

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?

Description lists explicit use cases: see all active projects, get unit counts and statuses, find by name. Lacks mention of when not to use or alternatives like get_project, but context is clear.

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

list_reservation_reasonsA

List deal cancellation reasons (Reservierungsgründe/Absagegründe).

Use when creating deal cancellations (create_task with reservation_reason_id) or filtering lost deals (search_deals reservation_reason_ids).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior2/5

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

No annotations are provided, and the description only states 'list', implying read-only, but does not explicitly disclose behavioral traits like idempotency, auth requirements, or rate limits. More transparency would be beneficial.

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, no fluff. Front-loaded with purpose and immediate usage context. Every sentence adds value.

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 simple list operation with no parameters and no output schema, the description provides all necessary context: what it lists and when to use it. No missing information.

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?

There are zero parameters, so the input schema covers 100% by default. The description adds no parameter-level detail needed, but meets the baseline of 4 as per guidelines for 0-parameter tools.

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 explicitly states it lists deal cancellation reasons and provides specific use cases (creating cancellations, filtering lost deals). This clearly distinguishes it from sibling tools like search_deals or create_task.

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?

The description explicitly says when to use the tool: for create_task with reservation_reason_id and search_deals with reservation_reason_ids. It does not include when-not-to-use or alternatives, but the context is clear and sufficient given the siblings.

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

list_search_profilesA

List search profiles (Suchprofile) in Propstack.

A search profile captures what a buyer or renter is looking for — cities, price range, room count, features, etc. Every search profile belongs to a contact.

Use this tool to:

  • See what a specific contact is looking for (filter by client)

  • List all active search profiles

  • Review criteria before matching properties

Filter by contact ID to answer "What is this buyer looking for?"

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
clientNoContact ID — show only this contact's search profiles
per_pageNoResults per page (default: 25)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full responsibility. It correctly implies a read-only operation (listing) and explains the entity's purpose. However, it does not disclose pagination behavior, rate limits, or whether the tool returns all results or only active profiles (the bullet says 'all active' but the description doesn't clarify filtering). This is a moderate gap.

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 concise and well-structured: it starts with a clear one-line summary, explains the concept briefly, lists key use cases in bullet points, and ends with a specific example filter. Every sentence adds value, with no superfluous content.

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?

Given the tool has 3 optional parameters, no required parameters, and no output schema, the description should cover output and pagination details. It mentions 'list all active' but doesn't explain pagination limits or default behavior. It also omits what fields are returned. This is adequate but not fully 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 100%, providing baseline parameter explanations. The description adds contextual value for the 'client' parameter ('See what a specific contact is looking for') but does not enhance 'page' or 'per_page' beyond what the schema already provides. Overall, it meets the baseline without exceeding expectations.

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 clearly states 'List search profiles' with a specific verb and resource. It explains what a search profile is and provides concrete use cases, such as filtering by client. The sibling tools list includes create/delete/update functions for search profiles, so this tool is clearly the list variant, making it distinct.

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?

The description offers explicit usage scenarios: see what a contact is looking for, list all active profiles, review criteria before matching. It advises filtering by contact ID. However, it does not explicitly exclude alternative tools (e.g., search functions) or mention when not to use this tool, so it misses some comparative guidance.

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

list_tagsA

List all tags/labels (Merkmale/Gruppen) in Propstack.

Use these IDs to filter contacts (search_contacts group param) or assign tags (create_contact/update_contact group_ids). Filter by entity to get tags for contacts, properties, or activities.

Entity: for_clients (default), for_properties, for_activities.

Returns flat list: Name (ID: 123). Use super_groups param to optionally try hierarchical view via /super_groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNoFilter by entity type (default: for_clients)
super_groupsNoIf true, fetch hierarchical structure from /super_groups (Obermerkmale with children)

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses return format (flat list with Name and ID) and optional hierarchical view via super_groups, adding behavioral context beyond schema.

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?

Description is concise with two sentences plus a bullet-like list for entity options, and a note on return format. Every sentence adds value without redundancy.

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?

Given no output schema, description covers return format, entity filtering, and super_groups behavior. Missing pagination/limits but acceptable for a simple 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?

Schema coverage is 100% with descriptions. Description adds meaning by explaining entity filter purpose and hinting that super_groups may 'try' hierarchical view, going beyond raw 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?

Description clearly states 'List all tags/labels' with specific resource and filtering by entity, distinguishing it from sibling tools like create_tag.

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?

Provides context for using returned IDs with search_contacts and create_contact/update_contact, and explains entity filtering options, though no explicit when-not-to-use or alternatives are mentioned.

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

list_teamsA

List all teams/departments in Propstack.

Returns teams with their broker member assignments. Use for team-level filtering and to understand the organizational structure.

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?

No annotations are provided, so description must disclose all behavioral traits. It correctly indicates a read-only list operation, but does not explicitly state safety (non-destructive) or mention potential pagination or performance characteristics. Adequate for a simple list with no 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 concise sentences that front-load the core purpose and add value with return details and usage guidance. No wasted words.

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?

Given no parameters and no output schema, the description fully covers the tool's capability: it lists all teams, returns broker assignments, and is used for filtering and understanding structure. No missing information.

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?

There are no parameters, so schema coverage is trivially 100%. Description adds no parameter detail, but none is needed. Baseline for 0 parameters is 4.

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?

Description clearly states it lists all teams/departments in Propstack and specifies it returns broker member assignments. Distinguishes from sibling tools like list_users (which lists individual users) and list_projects (which lists projects).

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 says 'Use for team-level filtering and to understand the organizational structure,' providing clear context for when to use. Does not include when-not-to-use or alternatives, but the purpose is sufficiently clear.

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

list_usersA

List all brokers/agents (Nutzer) in the Propstack account.

Returns team members with their IDs, names, email, phone, position, team, and department assignments.

You need broker IDs for:

  • Assigning contacts or properties to a broker

  • Filtering by broker in search tools

  • Setting the sender for emails (send_email broker_id)

  • Assigning tasks and events

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?

With no annotations, the description is responsible for behavioral clarity. It states the tool returns a list of users with specific fields, implying a read operation. However, it does not mention pagination, authentication, or other constraints, which would be helpful for complete transparency.

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 concise, with three clear sentences: purpose, return values, and usage scenarios. It is front-loaded with the main action and avoids unnecessary detail. Every sentence serves a purpose.

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?

Given no parameters and no output schema, the description completely covers the tool's purpose, return data, and practical applications. It is self-contained and provides all necessary context for an agent to use it correctly.

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 input schema has zero parameters, and the description acknowledges this by focusing on output. It adds value by explaining what the tool returns and why it's useful (for getting broker IDs). Baseline for 0 params is 4, and the description meets this.

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 clearly states 'List all brokers/agents (Nutzer) in the Propstack account.' It uses a specific verb and resource, and distinguishes itself from sibling tools like list_teams by focusing on users/brokers. The return fields are enumerated, aiding understanding.

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?

The description explicitly outlines when to use the tool: to obtain broker IDs for assigning contacts/properties, filtering searches, setting email senders, and assigning tasks/events. This provides clear context, though it does not explicitly mention when not to use it or alternatives.

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

list_webhooksA

List all configured webhooks in Propstack.

Returns each webhook with its URL, subscribed events, active status, and HMAC secret. Use to review existing automation triggers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations present; description discloses return fields but does not explicitly state read-only nature, authentication needs, or potential side effects.

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 concise sentences with key information front-loaded; no unnecessary verbiage.

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?

Covers the essential output fields and use case; lacks mention of pagination or limits, but acceptable for a simple 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?

With zero parameters and 100% schema coverage, the description adds no param info but explains the output meaning, which is appropriate.

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 clearly states the action ('list all configured webhooks') and distinguishes from siblings by focusing on retrieval vs. creation/deletion.

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?

Provides explicit usage guidance ('Use to review existing automation triggers'), though it does not mention when not to use it (e.g., if a filtered list is needed).

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

match_contacts_to_propertyA

Find contacts whose search profiles match a property. Returns a ranked list with match scores.

Use when a new listing comes in to find potential buyers/renters: "Who should I send this new listing to?"

Logic:

  1. Fetches the property details (type, price, rooms, space, city, features)

  2. Fetches active search profiles (paginates, capped by max_profiles)

  3. Scores each profile against the property on: marketing type, city, price range, room count, living space, property type, and features

  4. Returns top 20 matches sorted by score with match/mismatch details

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYesProperty ID to find matching contacts for
max_profilesNoMax search profiles to fetch and score (default: 1000). Caps API calls and memory for large accounts.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses the tool's behavior: it fetches property details, paginates search profiles capped by max_profiles, scores on multiple criteria, and returns top 20 matches. It also explains the capping rationale (limits API calls and memory).

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 well-structured with a clear overview, usage guidance, and logical steps. It is concise without unnecessary words, and every sentence contributes to understanding.

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?

Given the tool's complexity with multi-step matching, the description covers all necessary aspects: input, process, and output (ranked list, top 20, scores, details). No output schema is needed as the description suffices.

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%, and the description adds value by explaining the purpose of max_profiles (default 1000, caps API calls/memory) and implying property_id's role. This goes beyond the schema's brief descriptions.

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 clearly states 'Find contacts whose search profiles match a property', using a specific verb and resource. It distinguishes this tool from sibling search tools by focusing on matching contacts to a property, which is a unique capability.

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?

The description explicitly provides a use case: 'Use when a new listing comes in to find potential buyers/renters', with an example question. It lacks explicit exclusions or alternatives, but the guidance is strong.

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

pipeline_summaryA

Pipeline overview — deals per stage, total values, and stale deals needing attention.

Fetches all deal pipelines and deals, then aggregates:

  • Deal count per stage

  • Total value per stage (from deal price or property price)

  • Stale deals: deals with no update in 14+ days

Filter by pipeline_id and/or broker_id. Use when asked: "How's the pipeline looking?" or "Give me a sales overview."

ParametersJSON Schema
NameRequiredDescriptionDefault
broker_idNoFilter by broker ID
pipeline_idNoFilter by specific pipeline ID

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains the aggregation logic (counts, totals, stale deal detection) but does not disclose potential side effects, authentication requirements, or performance considerations. The behavioral disclosure is moderate.

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 concise, front-loaded with the main purpose, and structured into digestible bullet points. Every sentence adds value without redundancy.

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?

Without an output schema, the description adequately explains what the tool returns (deal count per stage, total value, stale deals). It also covers filtering. However, it does not describe the response structure (e.g., whether it's a list of stage objects) or pagination, leaving minor gaps.

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 input schema has 100% parameter description coverage (broker_id and pipeline_id). The description adds usage context (filtering options) but does not provide additional semantic depth beyond what the schema already states. Baseline 3 is appropriate.

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 clearly states it provides a pipeline overview with deals per stage, total values, and stale deals, and includes specific query examples like 'How's the pipeline looking?'. This distinguishes it from sibling tools that list or search individual entities.

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?

The description explicitly says when to use the tool ('use when asked: "How's the pipeline looking?" or "Give me a sales overview."') and mentions optional filters. It lacks explicit 'when not to use' or alternative tools, but the context is clear.

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

property_performance_reportA

Performance report for a property — days on market, inquiry count, pipeline breakdown, and activity summary.

Combines 3 API calls in parallel:

  • Full property details (with custom fields)

  • All deals/inquiries for this property

  • Activity feed (last 50 interactions)

Calculates: days on market, total inquiries, deals by stage/category, and recent activity breakdown by type.

Use when asked: "How is the Friedrichstr property doing?"

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYesProperty ID to generate report for

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool combines 3 API calls in parallel and calculates specific metrics (days on market, total inquiries, deals by stage, activity breakdown). This provides good behavioral insight beyond basic purpose.

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?

Description is concise and well-structured. It uses bullet points and a clear example, making it easy to scan. No unnecessary sentences.

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?

Despite having no output schema, the description fully explains what the report contains (specific metrics, data sources, calculations). An agent can confidently understand what will be returned.

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?

Only one parameter (property_id) with 100% schema coverage. Description does not add extra semantics for the parameter beyond what the schema already provides ('Property ID to generate report for'). The description focuses on overall behavior, not parameter detail.

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?

Description clearly states the tool generates a performance report for a property, listing specific metrics (days on market, inquiries, pipeline breakdown, activity summary). It distinguishes from siblings like 'get_property' and 'search_deals' by being a composite report.

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?

Provides a concrete usage example ('How is the Friedrichstr property doing?'), making it clear when to invoke. Does not explicitly state when not to use or list alternatives, but the context is strong.

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

search_activitiesA

Search the activity feed/timeline in Propstack.

Activities are the read-only feed of everything that happened: emails sent, notes logged, tasks created, events scheduled, cancellations, GDPR policy changes, etc.

Use this tool to:

  • View the full interaction history for a contact (client_id)

  • See all activity on a property (property_id)

  • Track what a broker has been doing (broker_id)

  • Filter by activity type to find specific interactions

  • Answer "what happened with this contact/property this week?"

Activity types:

  • message: Emails sent/received

  • note: Call notes, comments

  • reminder: To-do items (Aufgaben)

  • event: Appointments (Termine)

  • policy: GDPR consent changes

  • cancelation: Deal cancellations (Absagen)

  • decision: Deal decisions

  • sms: SMS messages

  • letter: Letters (Briefe)

Use list_activity_types to see all valid types for this account.

ParametersJSON Schema
NameRequiredDescriptionDefault
perNoResults per page (default: 20)
pageNoPage number (default: 1)
typeNoFilter by activity type
orderNoSort order (default: desc)
sort_byNoField to sort by
broker_idNoFilter by broker ID
client_idNoFilter by contact ID — show all activity for this contact
project_idNoFilter by project ID
property_idNoFilter by property ID — show all activity for this property

TDQS

A4.1/5.0
Behavior3/5

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

The description states activities are read-only, indicating a safe, non-destructive operation. No annotations are provided, so the description carries full burden; it adds no further behavioral context such as permissions, rate limits, 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?

The description is well-structured with a clear opening, bullet-pointed use cases, and an activity type list. It is appropriately sized for the complexity, though it could be slightly trimmed without losing value.

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?

Given no output schema and 9 optional parameters, the description covers key use cases, filter options, and activity types. It references list_activity_types for completeness, leaving no major gaps for an agent to use the tool effectively.

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%, and the description adds meaningful context beyond the schema, e.g., explaining client_id shows all activity for a contact, and listing activity types with examples. This helps the agent understand parameter usage.

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 clearly states the tool searches the activity feed/timeline, lists what activities include (emails, notes, etc.), and provides specific use cases. It effectively distinguishes the tool's purpose from sibling tools like list_events by focusing on the broad activity feed.

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?

The description explicitly lists when to use the tool (e.g., viewing interaction history, tracking broker activity) and suggests using list_activity_types for valid types. It does not mention when not to use or directly compare to alternatives, but the guidance is clear and contextual.

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

search_contactsA

Search and filter contacts in Propstack CRM.

Use this tool to:

  • Find contacts by name, email, or phone number

  • List recent leads (sort by created_at desc)

  • Find uncontacted leads (last_contact_at is null)

  • Filter by broker assignment, status, tags, or GDPR status

  • Search across all contact fields with 'q' parameter

The 'q' parameter searches across: first name, last name, all emails, all addresses, and all phone numbers.

Phone search ('phone_number') ignores formatting — both 015712345678 and 0157-123-456-78 will match.

Returns paginated results. Use expand=true for full details including custom fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFulltext search across name, email, address, phone
pageNoPage number (default: 1)
emailNoSearch by email address
groupNoFilter by tag/group IDs (Merkmale)
orderNoSort order (default: desc)
ownerNoFilter for property owners
expandNoInclude full details and custom fields
statusNoFilter by contact status IDs
sort_byNoField to sort results by
sourcesNoFilter by lead source IDs (e.g. ImmoScout24, Website)
archivedNoArchive filter: '-1' = all (including archived), '1' = archived only. Omit for non-archived only (default).
languageNoFilter by language codes (e.g. 'de', 'en')
per_pageNoResults per page (default: 25)
broker_idNoFilter by assigned broker ID
newsletterNoFilter by newsletter opt-in
gdpr_statusNoGDPR status: 0=Keine Angabe, 1=Ignoriert, 2=Zugestimmt, 3=Widerrufen
project_idsNoFilter by associated project IDs
not_in_groupNoExclude contacts with these tag/group IDs
phone_numberNoSearch by phone number (formatting-insensitive)
created_at_toNoFilter contacts created before this date (ISO 8601)
updated_at_toNoFilter contacts updated before this date (ISO 8601)
accept_contactNoFilter by contact permission
home_countriesNoFilter by home country codes
created_at_fromNoFilter contacts created after this date (ISO 8601)
updated_at_fromNoFilter contacts updated after this date (ISO 8601)
include_childrenNoInclude sub-contacts in results

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and effectively discloses key behaviors: pagination, phone search formatting insensitivity, cross-field search for 'q', and the expand parameter for full details. It does not cover rate limits or auth but adequately describes the search behavior.

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 concise and well-structured: a header line followed by bullet points listing use cases. Every sentence adds value, and it is front-loaded with the purpose. No fluff, appropriately sized for a search tool with many parameters.

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?

Given the 26 parameters, lack of output schema, and no annotations, the description covers major use cases and adds behavioral details (phone search insensitivity, cross-field search). It mentions pagination and expand. It is nearly complete, though could mention default pagination values (but those are in schema). The sibling search_contacts_by_phone is a slight redundancy but not a gap.

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 parameters are documented. The description adds significant meaning beyond schema: explains the 'q' parameter searches across specific fields, details phone_number formatting insensitivity with examples, and clarifies the archived parameter's special values. This enriches understanding.

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 clearly states it is for searching and filtering contacts in the CRM, listing specific use cases (find by name/email/phone, list recent leads, etc.). It effectively distinguishes from sibling tools like get_contact (single contact) and search_contacts_by_phone (phone-specific).

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?

The description provides clear scenarios for when to use the tool (e.g., find contacts, list recent leads). However, it does not explicitly state when not to use it or mention alternative tools like get_contact for a specific contact. The bullet points offer good context but lack exclusions.

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

search_contacts_by_phoneA

Look up a contact by phone number.

This is the go-to tool for voice agent caller identification. When a call comes in, use this tool with the caller's phone number to instantly find the matching contact.

Phone matching ignores formatting — all of these find the same contact: 015712345678, 0157-123-456-78, +49 157 12345678

Returns the matching contact(s) with key details. If no match is found, the caller is unknown and you should create a new contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
phone_numberYesPhone number to search for (any format — formatting is ignored)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It adds a key behavioral trait: 'Phone matching ignores formatting' with examples. However, it does not mention read-only nature, response structure, or any limits. The return statement is vague ('key details'). Adequate but not thorough.

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 concise with four front-loaded sentences. Every sentence adds value: purpose, when to use, formatting behavior, fallback action. No redundant or unnecessary text.

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 1-param tool with no output schema, the description covers the core: what it does, when to use, formatting behavior, return summary, and no-match handling. It is nearly complete, though it could mention if multiple matches are possible or ordering. Minor gap.

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 the parameter well. The description repeats the formatting behavior and adds examples of acceptable formats, which adds marginal practical value. Baseline 3 is appropriate.

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 clearly states 'Look up a contact by phone number' with a specific verb+resource. It further specifies the use case as 'go-to tool for voice agent caller identification', which distinguishes it from sibling tools like search_contacts (presumably for other criteria) and get_contact (for ID).

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?

The description explicitly tells when to use the tool: 'When a call comes in, use this tool with the caller's phone number'. It also provides post-action guidance: 'If no match is found, the caller is unknown and you should create a new contact.' It lacks explicit when-not-to-use, but the context and implied alternative (search_contacts) are clear.

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

search_dealsA

Search and filter deals (contact↔property relationships) in Propstack.

Use this tool to:

  • Show all deals in a specific pipeline stage

  • Find deals for a contact or property

  • Track deal pipeline progress for a project

  • Find lost deals and cancellation reasons

  • Filter by broker, team, feeling (cold/warm/hot)

A "deal" represents an interested contact linked to a property at a specific stage in a sales/rental pipeline (e.g. Anfrage → Besichtigung → Reserviert → Notartermin → Verkauft).

Use include="client,property" to get expanded contact and property details in one request.

Common queries:

  • All active deals: category="qualified"

  • Lost deals this month: category="lost" + created_at_from

  • Deals for a property: property_id=123

  • Pipeline view: deal_pipeline_id + sort_by=deal_stage_id

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
orderNoSort order (default: desc)
includeNoComma-separated related data to expand: 'client', 'property', or 'client,property'
sort_byNoField to sort results by
team_idNoFilter by team ID
categoryNoDeal category: qualified (active), unqualified (not yet), lost (cancelled/rejected)
per_pageNoResults per page (default: 25)
broker_idNoFilter by assigned broker ID
client_idNoFilter by contact ID
feeling_toNoMaximum feeling score
project_idNoFilter by project ID
property_idNoFilter by property ID
feeling_fromNoMinimum feeling score (0=none, 1=cold, 2=warm, 3=hot)
created_at_toNoFilter deals created before this date (ISO 8601)
start_date_toNoFilter by deal start date to (ISO 8601)
deal_stage_idsNoFilter by deal stage IDs (pipeline steps)
created_at_fromNoFilter deals created after this date (ISO 8601)
start_date_fromNoFilter by deal start date from (ISO 8601)
client_source_idNoFilter by lead source ID
deal_pipeline_idNoFilter by deal pipeline ID
client_broker_idsNoFilter by contact's assigned broker IDs
property_broker_idsNoFilter by property's assigned broker IDs
show_archived_clientsNoInclude deals with archived contacts
reservation_reason_idsNoFilter by cancellation/reservation reason IDs
hide_archived_propertiesNoExclude deals with archived properties

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It explains the concept of deals, pipeline stages, categories, and the include parameter for expanded data. As a read operation, destructive behavior is not expected, but auth needs or rate limits are not mentioned. Still, it is transparent about core functionality.

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?

The description is overly long with several paragraphs. While it provides comprehensive information, it could be tightened. The structure is logical (definition, usage, include option, examples) but lacks brevity.

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?

Given 25 parameters, no required ones, and no output schema, the description sufficiently covers the tool's purpose, filtering options, and use cases. It does not explain return format or pagination details beyond schema, but the provided context is adequate for agent selection.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds significant context beyond parameter descriptions: explains deal stages, feeling scores (cold/warm/hot), category meanings (qualified, unqualified, lost), and provides common query patterns. This enriches parameter understanding.

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 clearly states the tool searches and filters deals, defines a deal as a contact-property relationship in a pipeline, and lists specific use cases. It distinguishes from sibling tools like search_contacts or search_properties by focusing on deals.

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 lists when to use the tool with examples (e.g., show all deals in a pipeline stage, find deals for a contact/property, track pipeline progress). Lacks explicit when-not-to-use or direct comparisons to alternatives, but the examples provide strong guidance.

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

search_propertiesA

Search and filter properties (Objekte) in Propstack CRM.

Use this tool to:

  • Find properties by address, ID, or exposé ID (use 'q' for fulltext)

  • Filter by status, type, marketing type, or project

  • Find properties in a price/rent range

  • List properties by size, rooms, or construction year

  • Filter by custom fields with cf_ prefix parameters

The 'q' parameter searches: unit_id, street, zip code, city, district, exposé ID.

Range filter pattern: 11 numeric fields each have _from and _to variants. For example, price_from=200000 & price_to=400000 finds properties priced 200–400k. Available range fields: price, base_rent, total_rent, property_space_value, living_space, plot_area, number_of_rooms, number_of_bed_rooms, number_of_bath_rooms, floor, construction_year.

Common queries:

  • "Apartments 300–400k in Berlin": q="Berlin", marketing_type=BUY, rs_type=APARTMENT, price_from=300000, price_to=400000

  • "All available rentals": marketing_type=RENT, status=

  • "Properties on market 90+ days": sort_by=created_at, order=asc

  • "What's in Project X?": project_id=

Always returns total count. Use expand=true for custom fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFulltext search across unit_id, street, zip, city, district, exposé ID
pageNoPage number (default: 1)
exactNoUse exact matching for text search
groupNoFilter by tag/group ID (Merkmal)
orderNoSort order (default: desc)
expandNoInclude full details and custom fields
statusNoComma-separated property status IDs (use get_property_statuses to look up)
countryNoFilter by country code (e.g. 'DE')
rs_typeNoProperty type filter
sort_byNoField to sort results by (default: unit_id)
archivedNoArchive filter: '-1' = all (including archived), '1' = archived only. Omit for non-archived only (default).
floor_toNoMaximum floor
per_pageNoResults per page (default: 25)
price_toNoMaximum purchase price (EUR)
floor_fromNoMinimum floor
price_fromNoMinimum purchase price (EUR)
project_idNoFilter by project ID
object_typeNoObject category: LIVING (Wohnen), COMMERCIAL (Gewerbe), INVESTMENT (Anlage)
base_rent_toNoMaximum base rent (EUR/month)
plot_area_toNoMaximum plot area (m²)
property_idsNoFilter to specific property IDs
total_rent_toNoMaximum total rent (EUR/month)
base_rent_fromNoMinimum base rent (EUR/month)
marketing_typeNoFilter by marketing type: BUY (Kauf) or RENT (Miete)
plot_area_fromNoMinimum plot area (m²)
living_space_toNoMaximum living space (m²)
total_rent_fromNoMinimum total rent (EUR/month)
include_variantsNoInclude property variants
living_space_fromNoMinimum living space (m²)
number_of_rooms_toNoMaximum number of rooms
construction_year_toNoBuilt before this year
number_of_rooms_fromNoMinimum number of rooms
construction_year_fromNoBuilt after this year
number_of_bed_rooms_toNoMaximum bedrooms
number_of_bath_rooms_toNoMaximum bathrooms
property_space_value_toNoMaximum property space (m²)
number_of_bed_rooms_fromNoMinimum bedrooms
number_of_bath_rooms_fromNoMinimum bathrooms
property_space_value_fromNoMinimum property space (m²)

TDQS

A4.1/5.0
Behavior3/5

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

Without annotations, the description carries the behavioral transparency burden. It mentions that the tool always returns total count and optionally expand custom fields. It does not discuss rate limits, error handling, or detailed output structure. While adequate for a read tool, more transparency about pagination or defaults would improve it.

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 description is well-structured with bullet points and examples, front-loading the purpose. It is somewhat lengthy but justified given the tool's complexity (39 parameters). Every sentence adds value, though a slight trim could improve conciseness.

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?

Given the large number of parameters and no output schema, the description covers usage patterns well, including examples and total count mention. It lacks description of return structure (e.g., object fields), but for a search tool, it is fairly complete.

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?

With 100% schema coverage, baseline is 3. The description adds value by explaining the range filter pattern (from/to), grouping numeric fields, and clarifying the scope of the 'q' parameter. Examples demonstrate common usage, going beyond 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 clearly states the verb ('search and filter') and resource ('properties in Propstack CRM'), distinguishing it from sibling tools like get_property (single property) and list_projects (projects). It provides specific details about search criteria.

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?

The description includes explicit guidance on when to use the tool, such as finding properties by address, ID, or filtering by various fields. It provides common query examples. However, it does not explicitly state when not to use it or alternatives, though sibling differentiation is implicit.

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

send_emailA

Send an email using a Propstack email template (snippet).

Propstack sends emails through connected broker email accounts. The broker_id determines which account sends the email. The snippet_id selects the email template to use.

Use this tool to:

  • Send an exposé to an interested contact

  • Send a follow-up email after a viewing

  • Send a confirmation or rejection to a lead

Link the email to contacts, properties, and projects so it appears in the correct CRM activity feeds.

Important:

  • broker_id must be a broker with a connected email account

  • snippet_id is the email template ID — the template may contain merge fields that Propstack fills automatically (contact name, property details, etc.)

  • to[] are the recipient email addresses

  • cc[] are optional CC recipients

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipient email addresses
toYesRecipient email addresses
broker_idYesSender broker ID (must have connected email account)
client_idsNoContact IDs to link this email to
snippet_idYesEmail template (snippet) ID
project_idsNoProject IDs to link this email to
property_idsNoProperty IDs to link this email to

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that emails are sent through connected broker accounts, that emails can be linked to CRM objects, and that templates may contain auto-filled merge fields. This provides good insight into behavior.

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 well-structured with bullet points and clear sections. It is concise yet thorough, with every sentence adding value.

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?

The description covers the tool's purpose, all parameters with important notes, and the CRM linking aspect. However, since there is no output schema, it could have mentioned the return value (e.g., confirmation ID) for completeness.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant value beyond the schema by explaining how parameters relate (e.g., broker_id determines sender, snippet_id selects template), adding context about merge fields, and clarifying the CRM linking purpose.

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 clearly states 'Send an email using a Propstack email template', with specific verbs and resources. It lists three concrete use cases (exposé, follow-up, confirmation/rejection) and distinguishes this tool from siblings (no other send email tool exists).

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?

The description provides explicit guidance on when to use (e.g., sending exposés, follow-ups) and important prerequisites (broker_id must have connected email, snippet_id is template ID). However, it does not explicitly state when not to use or mention alternatives.

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

smart_lead_intakeA

Complete lead intake workflow — dedup check, create/update contact, log notes, create deal if specific property, and set follow-up reminder.

Perfect for post-call processing from a voice agent. Handles the entire intake in one tool call:

  1. If phone or email provided → search for existing contact (dedup)

  2. If found → update contact; if not → create new contact

  3. If notes provided → log as a note task

  4. If property_id provided → create deal at first pipeline stage

  5. Create follow-up reminder for broker (due tomorrow 9am)

Returns what was done: created vs updated, IDs of all created records.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoEmail address (also used for dedup search)
notesNoCall notes or free-text about the interaction
phoneNoPhone number (also used for dedup search)
broker_idNoAssigned broker ID
last_nameYesContact last name
source_idNoLead source ID (use get_contact_sources to look up)
first_nameYesContact first name
property_idNoSpecific property ID the lead is interested in (creates a deal)
property_interestNoFree text about what the lead is looking for (logged as note, not parsed into search profile)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description fully discloses the tool's behavior: dedup logic (by phone/email), conditional deal creation, note logging, and follow-up reminder. It also states the return value (created vs. updated, IDs). However, it omits potential error scenarios or edge cases (e.g., multiple dedup matches).

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 well-structured with a summary sentence, a bulleted list of steps, and a final output note. Every sentence is informative and non-redundant. The structure is front-loaded and easy to parse.

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?

Given the complexity (9 parameters, 2 required, no output schema), the description covers the workflow comprehensively, including return value. It explains conditional behavior for property_id and notes. A score of 4 reflects minor gaps (e.g., no mention of parameter interactions or constraints), but overall it is sufficient for agent use.

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% with each parameter described. The description adds significant value by explaining how parameters are used in the workflow (e.g., 'email and phone used for dedup search', 'property_id creates deal', 'notes logged as note task'). This goes beyond the schema definitions.

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 clearly states the tool's purpose as a complete lead intake workflow, listing specific steps: dedup check, create/update contact, log notes, create deal if property_id, set follow-up reminder. It differentiates from simpler sibling tools like create_contact and create_deal by emphasizing its multi-step, automated nature.

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?

The description explicitly recommends use for 'post-call processing from a voice agent' and enumerates the workflow steps, providing clear context. While it does not explicitly state when not to use or list alternatives, the inference from sibling tools is straightforward. A score of 4 reflects good guidance with room for explicit exclusions.

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

update_contactA

Update an existing contact in Propstack CRM.

Use this tool to:

  • Update contact details after a call

  • Change broker assignment

  • Add or remove tags (Merkmale)

  • Update GDPR status

  • Change contact rating or status

Tag management options:

  • group_ids: replaces ALL tags with this list

  • add_group_ids: adds tags without removing existing ones

  • sub_group_ids: removes specific tags

Only provide the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact ID to update
emailNoEmail address
phoneNoPhone number
ratingNoContact rating: 0 (none) to 3 (top priority)
companyNoCompany name
archivedNoArchive or unarchive the contact
languageNoLanguage code (e.g. 'de', 'en')
positionNoJob position/title
broker_idNoID of the assigned broker/agent
group_idsNoReplace ALL tags with this list of tag IDs
home_cityNoHome address: city
last_nameNoLast name
first_nameNoFirst name
newsletterNoNewsletter opt-in
salutationNoSalutation: mr (Herr) or ms (Frau)
descriptionNoFree-text description or notes
gdpr_statusNoGDPR status: 0=Keine Angabe, 1=Ignoriert, 2=Zugestimmt, 3=Widerrufen
home_streetNoHome address: street
office_cityNoOffice address: city
home_countryNoHome address: country code
add_group_idsNoAdd these tag IDs without removing existing tags
home_zip_codeNoHome address: postal code
office_streetNoOffice address: street
sub_group_idsNoRemove these tag IDs from the contact
academic_titleNoAcademic title (e.g. 'Dr.', 'Prof.')
accept_contactNoContact permission granted
office_countryNoOffice address: country code
office_zip_codeNoOffice address: postal code
client_source_idNoLead source ID
client_status_idNoContact status ID
home_house_numberNoHome address: house number
office_house_numberNoOffice address: house number
partial_custom_fieldsNoCustom field values as key-value pairs

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions 'Only provide the fields you want to change,' implying a partial update, but lacks details on idempotency, error handling, or required permissions. For a mutation tool, this is minimal transparency.

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 well-structured with bullet points and sections. It is concise yet informative, front-loaded with purpose and use cases, and avoids unnecessary verbosity.

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?

Given 33 parameters and no output schema or annotations, the description fairly covers the update behavior and tag management. It lacks error/response info and validation details, but for a tool with many optional fields, it is mostly complete.

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. The description adds value by explaining tag management (group_ids, add_group_ids, sub_group_ids) and rating scale (0-3). For other parameters, the schema descriptions are clear, but the description does not elaborate on them further.

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 clearly states 'Update an existing contact' and lists specific use cases (e.g., after a call, change broker, tags, GDPR). The verb-resource combination is explicit, and the tool is distinct from siblings like create_contact and delete_contact.

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?

The description provides clear usage scenarios and guidance on tag management options. It tells when to use the tool after a call or for specific updates, but does not explicitly exclude cases or mention alternatives like create or delete for similar operations.

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

update_dealA

Update an existing deal in Propstack.

Use this tool to:

  • Move a deal to the next pipeline stage (change deal_stage_id)

  • Update expected/agreed price

  • Add or update notes

  • Change broker assignment

  • Update feeling score after contact

  • Record cancellation reason

Only provide the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDeal ID to update
dateNoDeal date (ISO 8601)
noteNoFree-text note about this deal
feelingNoFeeling score: 0=none, 1=cold, 2=warm, 3=hot
categoryNoDeal category
broker_idNoAssigned broker ID
client_idNoContact ID
sold_priceNoExpected or agreed price
property_idNoProperty ID
deal_stage_idNoPipeline stage ID — change this to move through pipeline
deal_pipeline_idNoPipeline ID
reservation_reason_idNoCancellation/reservation reason ID (for lost deals)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It explains the purpose of certain fields (e.g., deal_stage_id for pipeline movement, feeling score range) but does not disclose side effects, authorization needs, or whether the update is idempotent. No contradictions with annotations (none provided).

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 concise: a one-line header, a bullet list of use cases, and a final instruction. Every sentence adds value with no redundancy, and the structure is well-organized for quick scanning.

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?

The description covers the main use cases and parameter intent but omits information about the return value (e.g., whether it returns the updated deal object). Given the tool's complexity (12 parameters) and missing output schema, this is a minor gap.

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 description coverage is 100%, so baseline is 3. The description adds value by contextualizing parameters (e.g., 'deal_stage_id — change this to move through pipeline', 'reservation_reason_id — for lost deals') and emphasizing partial updates, which goes beyond the schema's individual descriptions.

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 clearly states 'Update an existing deal in Propstack' and lists specific use cases (move pipeline stage, update price, etc.), making the purpose unambiguous and distinct from sibling update tools.

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?

The description provides explicit scenarios for using the tool (e.g., 'Move a deal to the next pipeline stage') and includes the instruction 'Only provide the fields you want to change,' indicating partial updates. It lacks explicit guidance on when not to use it, but the context is sufficient.

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

update_emailA

Update an email in Propstack.

Use this tool to:

  • Mark an email as read or unread

  • Archive an email

  • Categorize an email (set message_category_id)

  • Link an email to contacts, properties, or projects

Only provide the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEmail/message ID to update
readNoMark as read (true) or unread (false)
archivedNoArchive (true) or unarchive (false)
client_idsNoContact IDs to link this email to
project_idsNoProject IDs to link this email to
property_idsNoProperty IDs to link this email to
message_category_idNoEmail category ID

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool performs mutations but does not mention side effects, permissions, or error conditions. The list of updatable fields provides some transparency.

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 brief and well-organized with bullet points. Every sentence adds value, and the most important information (purpose, actions, usage pattern) is front-loaded.

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?

Given 7 parameters and no output schema, the description adequately covers what can be updated but omits what the tool returns (e.g., success indicator, updated email object). It also lacks context on potential prerequisites for linking to contacts/projects.

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 the schema already describes parameters. The description adds value with the 'Only provide the fields you want to change' directive, indicating partial updates. This goes beyond the schema's individual field descriptions.

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 clearly states 'Update an email in Propstack' and enumerates specific actions (read/unread, archive, categorize, link), making the purpose unambiguous. It distinguishes from siblings like 'send_email' and list tools.

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?

Explicit use cases are listed, and the instruction 'Only provide the fields you want to change' guides partial updates. However, it does not explicitly compare to alternatives or state when not to use this tool.

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

update_propertyA

Update an existing property in Propstack CRM.

Use this tool to:

  • Update the price or rent

  • Change property status (e.g. mark as reserved or sold)

  • Edit description texts

  • Assign to a different broker or project

  • Update custom fields

Only provide the fields you want to change. Use get_property_statuses to look up valid status IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProperty ID to update
latNoLatitude
lngNoLongitude
cityNoCity
floorNoFloor number
priceNoPurchase price (EUR)
titleNoProperty title / headline
statusNoProperty status ID (use get_property_statuses)
streetNoStreet name
countryNoCountry code
rs_typeNoProperty type
courtageNoCommission amount or percentage
zip_codeNoPostal code
base_rentNoBase rent (EUR/month)
broker_idNoAssigned broker ID
plot_areaNoPlot area (m²)
other_noteNoAdditional notes text
project_idNoProject ID
total_rentNoTotal rent (EUR/month)
object_typeNoObject category
rs_categoryNoProperty sub-type
house_numberNoHouse number
living_spaceNoLiving space (m²)
courtage_noteNoCommission details
location_noteNoLocation description text
marketing_typeNoMarketing type: BUY or RENT
furnishing_noteNoFurnishing description text
number_of_roomsNoNumber of rooms
description_noteNoProperty description text
construction_yearNoYear of construction
number_of_bed_roomsNoNumber of bedrooms
number_of_bath_roomsNoNumber of bathrooms
partial_custom_fieldsNoCustom field values as key-value pairs

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions updating an existing property and partial updates ('Only provide the fields you want to change'), but does not disclose side effects, authorization needs, rate limits, or what happens if the property does not exist.

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 description is concise, front-loaded with purpose, and efficiently covers key points in a few sentences. It could benefit from slightly more structured formatting.

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?

With 33 parameters, no output schema, and no annotations, the description lacks completeness. It does not cover error handling, response format, or required permissions for updates, leaving significant gaps for a complex 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 100%, so baseline is 3. The description adds some context by grouping update categories (price, status, etc.) and mentioning custom fields, but does not significantly enhance understanding beyond the schema descriptions.

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 clearly states 'Update an existing property in Propstack CRM' and lists specific use cases (update price, status, etc.). It differentiates from sibling tools like 'create_property' and 'get_property'.

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?

The description provides clear context on when to use the tool by listing typical update actions and advising to use 'get_property_statuses' for valid status IDs. However, it does not explicitly state when not to use this tool versus alternatives.

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

update_search_profileA

Update an existing search profile in Propstack.

Use this tool to:

  • Expand or narrow budget ("increase max price to 450k")

  • Add or change cities ("also look in Potsdam")

  • Adjust room count or space requirements

  • Toggle feature requirements (add/remove balcony, lift, etc.)

  • Activate or deactivate the profile

Only provide the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSearch profile ID to update
latNoLatitude for radius search center
lngNoLongitude for radius search center
liftNoLift/elevator required: 'true', 'false', or omit for any
noteNoFree-text note about this search profile
floorNoMinimum floor
priceNoMinimum purchase price (EUR)
activeNoWhether the search profile is active (default: true)
cellarNoCellar required: 'true', 'false', or omit for any
citiesNoCity names to search in (e.g. ['Berlin', 'Potsdam'])
gardenNoGarden required: 'true', 'false', or omit for any
radiusNoSearch radius in meters from lat/lng center
rentedNoCurrently rented: 'true', 'false', or omit for any
balconyNoBalcony required: 'true', 'false', or omit for any
regionsNoRegion names to search in
floor_toNoMaximum floor
price_toNoMaximum purchase price (EUR)
rs_typesNoProperty types (e.g. ['APARTMENT', 'HOUSE'])
base_rentNoMinimum base rent (EUR/month)
client_idNoContact ID (rarely changed)
group_idsNoTag/group IDs to assign
plot_areaNoMinimum plot area (m²)
total_rentNoMinimum total rent (EUR/month)
base_rent_toNoMaximum base rent (EUR/month)
living_spaceNoMinimum living space (m²)
location_idsNoPropstack location/district IDs
plot_area_toNoMaximum plot area (m²)
yield_actualNoMinimum actual yield (%)
price_per_sqmNoMinimum price per m² (EUR)
rs_categoriesNoProperty categories (e.g. ['APARTMENT_NORMAL', 'HOUSE_DETACHED'])
total_rent_toNoMaximum total rent (EUR/month)
marketing_typeNoMarketing type: BUY (Kauf) or RENT (Miete)
living_space_toNoMaximum living space (m²)
number_of_roomsNoMinimum number of rooms
yield_actual_toNoMaximum actual yield (%)
built_in_kitchenNoBuilt-in kitchen required: 'true', 'false', or omit for any
price_multiplierNoMinimum price multiplier (Vervielfältiger)
price_per_sqm_toNoMaximum price per m² (EUR)
construction_yearNoMinimum construction year
number_of_rooms_toNoMaximum number of rooms
number_of_bed_roomsNoMinimum number of bedrooms
price_multiplier_toNoMaximum price multiplier
construction_year_toNoMaximum construction year
number_of_bed_rooms_toNoMaximum number of bedrooms

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It indicates mutation ('update', 'activate/deactivate') but does not disclose auth requirements, rate limits, side effects, or whether updates are partial (PATCH-like).

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 concise, front-loaded with the tool's purpose, and uses a bullet-like list for examples. Every sentence adds value without unnecessary detail.

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?

The description covers parameters well but lacks information about the return value (no output schema) and does not mention authentication or rate limits. For a complex tool with 44 parameters, this is a moderate gap.

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% with descriptions for all 44 parameters, so the description adds minimal extra meaning beyond listing categories of changes. Baseline 3 is appropriate.

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 clearly states the tool updates an existing search profile and lists specific use cases (expand budget, change cities, etc.), distinguishing it from sibling tools like create_search_profile and delete_search_profile.

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?

The description gives explicit guidance on when to use the tool and advises to provide only changing fields, but does not explicitly contrast with other tools or state when not to use it.

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

update_taskA

Update an existing task in Propstack.

Use this tool to:

  • Mark a to-do as done

  • Reschedule an appointment (change starts_at/ends_at)

  • Add notes to an existing task (update body)

  • Change broker assignment

  • Update event state (took_place, cancelled)

  • Link additional contacts or properties

Only provide the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask ID to update
bodyNoTask body (HTML allowed)
doneNoMark to-do as completed
rruleNoiCal RRULE for recurring events
stateNoEvent state (e.g. 'neutral', 'took_place', 'cancelled')
titleNoTask title / subject line
all_dayNoAll-day event flag
ends_atNoEvent end time (ISO 8601)
privateNoPrivate event flag
due_dateNoDue date (ISO 8601)
is_eventNoAppointment flag
locationNoEvent location
broker_idNoID of the assigned broker/agent
recurringNoRecurring event flag
remind_atNoReminder notification time (ISO 8601)
starts_atNoEvent start time (ISO 8601)
client_idsNoContact IDs to link this task to
is_reminderNoTo-do flag
project_idsNoProject IDs to link this task to
note_type_idNoActivity type ID
property_idsNoProperty IDs to link this task to
reservation_reason_idNoCancellation reason ID

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It indicates mutation but does not mention success/failure responses, auth requirements, side effects, rate limits, or return values. The absence of an output schema amplifies this gap.

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 description is concise with a clear bullet list and a final directive. It earns its space without verbosity. A slight improvement could integrate the use cases more tightly with the parameter list.

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?

Given 22 parameters and no output schema, the description adequately covers common use cases but omits return value details, error handling, and prerequisites (e.g., task must exist). The agent may need to infer behavior from similar tools.

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 baseline is 3. The description lists common update scenarios but does not add meaning beyond what the schema already provides for each parameter. The guideline 'Only provide the fields you want to change' is helpful but not parameter-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 clearly states it updates an existing task in Propstack and enumerates specific use cases (mark done, reschedule, add notes, etc.), making the tool's purpose unmistakable and well-distinguished from creation or deletion tools.

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?

The description explicitly lists when to use the tool (e.g., mark done, reschedule, add notes) and advises to only provide fields to change. However, it does not mention when not to use it or direct to alternative tools like create_task for new tasks.

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

upload_documentA

Upload a document to a property, project, or contact in Propstack.

The doc field must be a base64 data URI, e.g.: "data:application/pdf;base64,JVBERi0xLjQ..." "data:image/png;base64,iVBORw0KGgo..."

Attach to exactly one entity: property_id, project_id, or client_id.

Use the boolean flags to classify the document:

  • is_floorplan: Mark as a floor plan (Grundriss)

  • is_exposee: Mark as an exposé document

  • is_private: Hide from public/portal views

  • on_landing_page: Show on the property landing page

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesBase64 data URI (e.g. 'data:application/pdf;base64,...')
titleYesDocument title
client_idNoAttach to this contact
is_exposeeNoMark as exposé document
is_privateNoMark as private (hidden from portals)
project_idNoAttach to this project
property_idNoAttach to this property
is_floorplanNoMark as floor plan (Grundriss)
on_landing_pageNoShow on property landing page

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the requirement to attach to exactly one entity and the classification flags, but fails to disclose important behaviors such as whether the upload overwrites existing documents, required permissions, size limits, or the response format (e.g., does it return a document ID?). This is a significant gap for a mutation tool.

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 description is concise and well-structured, with clear sections for the doc format and flag explanations. It is front-loaded with the main purpose and entity constraint. Minor improvement could be more bullet-like formatting, but overall effective.

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?

Given the tool has 9 parameters, no output schema, and moderate complexity, the description covers the essential: doc format, entity attachment, and flag meanings. However, it lacks details on error handling, success response, and what happens if multiple entity IDs are provided (though implied exactly one). It is adequate but not fully complete.

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?

With 100% schema coverage, baseline is 3. The description adds substantial value beyond the schema: it explains the doc field must be a base64 data URI with examples, clarifies that exactly one entity ID should be provided, and describes the meaning of each boolean flag in natural language. This improves understanding.

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 clearly states the action ('Upload a document'), the target ('to a property, project, or contact'), and the platform ('Propstack'). It also distinguishes from sibling tools as the only upload-specific tool, and specifies the classification flags. No ambiguity.

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 description implies when to use (when uploading a document) but does not explicitly compare with alternatives like list_documents or other create tools. No 'when not to use' guidance is provided. The context from sibling names helps but is not 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. Dates show when Glama detected each change.

  1. 53 tool updatesv1.0.0
    • First observedcreate_contact
    • First observedcreate_deal
    • First observedcreate_ownership
    • First observedcreate_partnership
    • First observedcreate_property
    • First observedcreate_search_profile
    • First observedcreate_tag
    • First observedcreate_task
    • First observedcreate_webhook
    • First observeddelete_contact
    • First observeddelete_search_profile
    • First observeddelete_webhook
    • First observedexport_data
    • First observedfull_contact_360
    • First observedget_contact
    • First observedget_contact_favorites
    • First observedget_contact_sources
    • First observedget_pipeline
    • First observedget_project
    • First observedget_property
    • First observedget_property_statuses
    • First observedget_task
    • First observedlist_activity_types
    • First observedlist_contact_statuses
    • First observedlist_custom_fields
    • First observedlist_documents
    • First observedlist_events
    • First observedlist_locations
    • First observedlist_pipelines
    • First observedlist_projects
    • First observedlist_reservation_reasons
    • First observedlist_search_profiles
    • First observedlist_tags
    • First observedlist_teams
    • First observedlist_users
    • First observedlist_webhooks
    • First observedmatch_contacts_to_property
    • First observedpipeline_summary
    • First observedproperty_performance_report
    • First observedsearch_activities
    • First observedsearch_contacts
    • First observedsearch_contacts_by_phone
    • First observedsearch_deals
    • First observedsearch_properties
    • First observedsend_email
    • First observedsmart_lead_intake
    • First observedupdate_contact
    • First observedupdate_deal
    • First observedupdate_email
    • First observedupdate_property
    • First observedupdate_search_profile
    • First observedupdate_task
    • First observedupload_document

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlap exists (e.g., create_ownership vs. create_partnership, get_contact vs. full_contact_360, search_contacts vs. search_contacts_by_phone). Detailed descriptions mitigate confusion.

Naming Consistency3/5

Naming is mixed: many follow verb_noun (create_X, update_X), but some use noun_verb (pipeline_summary) or compound nouns (smart_lead_intake). Consistent pattern across all CRUD-like tools, but outliers reduce overall consistency.

Tool Count3/5

53 tools is high for a single server, covering many CRM aspects. While each tool earns its place, the count exceeds typical coherence sweet spot (3-15) and may overwhelm agents.

Completeness4/5

Covers contacts, properties, deals, tasks, emails, documents, webhooks, pipelines, and more. Minor gaps: missing create/update for projects and delete for properties/deals, but most workflows are supported.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects Claude AI to GoHighLevel CRM, enabling comprehensive automation across 269+ tools including contact management, messaging, sales pipeline, appointments, marketing, and e-commerce operations.
    26
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Universal AI API Orchestrator. 850 tools across 53 services under a single MCP interface. Connect Claude, GPT, or Gemini to Stripe, Slack, GitHub, LinkedIn, Cloudflare, Shopify, Twilio, and 46 more via natural language. $0.10/execution, no subscription. Patent Pending.
    293
    5
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to GoHighLevel CRM via MCP, enabling full sub-account automation with 269+ tools for contacts, messaging, sales, marketing, and more.
    26
    ISC
  • F
    license
    A
    quality
    D
    maintenance
    MCP server for ManyChat API integration that enables Claude and other AI assistants to manage subscribers, tags, custom fields, flows, and send messages through natural language.
    17
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ashev87/propstack-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server