Propstack MCP
The Propstack MCP Server connects AI assistants (Claude, ChatGPT, Cursor) to the Propstack real estate CRM, enabling natural language management of contacts, properties, deals, and workflows.
Contact Management
Search, create, update, delete, and tag contacts with auto-deduplication
GDPR tracking, phone-based caller lookup, and lead source management
Full 360° contact view with relationships, documents, and owned properties
Property Management
Search listings with 11 range filters (price, rooms, area) and 17 sort fields
Create/update properties with owner relationships, media, and multilingual texts
Manage property statuses (Verfügbar, Reserviert, Verkauft, etc.)
Deal Pipeline
Create deals linking contacts to properties at specific pipeline stages
Move deals through stages, update price/notes, track win/loss and feeling scores
Pipeline summaries with deal counts, values, and stale deal alerts
Buyer Matching & Search Profiles
Create search profiles from natural language criteria (e.g., "3-Zimmer in Berlin, bis 400k, mit Balkon")
List, update, and delete buyer/renter search profiles
Auto-match and score contacts against new listings
Tasks & Calendar
Create and update tasks: notes, to-dos, appointments, cancellations
List calendar events filtered by date, broker, contact, or state
Email & Communication
Send templated emails linked to contacts and properties via Propstack snippets
Update emails: mark read/archived, categorize, link to CRM records
Documents
List and upload documents (floor plans, exposés, contracts) for properties, projects, or contacts
Activity Tracking
Full activity timeline (emails, notes, events, GDPR changes) filterable by contact, property, broker, or type
Relationships
Link contacts as property owners, buyers, tenants, or partners
Projects
List development projects and view unit-level details with statuses, media, and documents
Lookups & Configuration
Access pipelines, tags, custom fields, activity types, contact statuses, users/brokers, teams, and locations
Create tags for categorization
Smart Composite Workflows
Full 360° contact dossier in one call
Property performance report (days on market, inquiry count, pipeline breakdown)
Smart lead intake: dedup → create/update contact → log notes → create deal → set reminder
Scored buyer-to-property matching
Admin & Automation
Manage webhooks for CRM event automation (CLIENT_CREATED, PROPERTY_UPDATED, etc.)
Bulk export any CRM table as JSON for reporting or migration
View contact favorites (bookmarked properties)
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
fieldsdata-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_here2a. 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
Go to Settings > Connectors > Developer Mode
Add a new MCP connector
Set the command to
npx -y propstack-mcp-serverAdd environment variable
PROPSTACK_API_KEY
2d. Cursor IDE
Open Settings (Ctrl+,) → search "MCP"
Edit MCP Servers JSON, or add
mcp.jsonin 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-serverAPI Key / API-Schluessel
Get your Propstack API key:
Log in to crm.propstack.de
Go to Verwaltung > API-Schluessel (Administration > API Keys)
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 and filter contacts by name, email, phone, status, tags, broker, GDPR status, custom fields |
| Get full details of a single contact with related data |
| Create a new contact (auto-dedup by email) |
| Update contact details, tags, GDPR status, broker assignment |
| Soft-delete a contact (30-day recycle bin) |
| List lead sources (ImmoScout24, Website, Empfehlung, etc.) |
| Look up a contact by phone number (formatting-insensitive) |
Properties (Objekte)
Tool | Description |
| Search properties with 11 range filters, 17 sort fields, custom-field filters |
| Get full property details including media and custom fields |
| Create a new property listing |
| Update price, status, description, broker assignment |
| List property statuses (Verfuegbar, Reserviert, Verkauft, etc.) |
Tasks (Aufgaben & Notizen)
Tool | Description |
| Create a note, to-do, appointment, or cancellation (polymorphic) |
| Mark done, reschedule, update notes |
| Get task details with linked contacts, properties, projects |
Deals (Pipeline)
Tool | Description |
| Search deals by stage, pipeline, category, broker, feeling score |
| Link a contact to a property at a pipeline stage |
| Move deal through pipeline stages, update price/notes |
Search Profiles (Suchprofile)
Tool | Description |
| List what buyers/renters are looking for |
| Capture buyer criteria from natural language |
| Adjust budget, cities, room count, features |
| Remove a search profile |
Projects (Projekte)
Tool | Description |
| List development projects with unit counts |
| Get project details with all units, media, documents |
Activities & Events (Aktivitaeten & Termine)
Tool | Description |
| Full activity timeline for a contact, property, or project |
| Calendar events — viewings, meetings, filtered by date/state |
Emails (E-Mails)
Tool | Description |
| Send email using a Propstack template (snippet) |
| Mark read/archived, categorize, link to CRM records |
Documents (Dokumente)
Tool | Description |
| List files attached to a property, project, or contact |
| Upload a document (base64 data URI) |
Relationships (Beziehungen)
Tool | Description |
| Link a contact as property owner (Eigentuemer) |
| Link a contact as buyer, tenant, etc. (Kaeufer, Mieter) |
Lookups (Konfiguration)
Tool | Description |
| Get deal pipelines with stages (IDs, names, positions) |
| Get a single pipeline with stage details |
| List tags/groups (Merkmale) — filter contacts by group IDs |
| Create a new tag for contacts, properties, or activities |
| List note/todo/event templates for create_task |
| List contact statuses for search/assign |
| List deal cancellation reasons |
| Discover custom field definitions (names, types, options) |
| List all brokers/agents with contact info |
| List teams/departments with member assignments |
| List geographic areas (Geolagen) for location matching |
Smart Composites (Intelligente Workflows)
Tool | Description |
| Complete contact dossier — info, search profiles, deals, activity |
| Days on market, inquiry count, pipeline breakdown, activity summary |
| Deals per stage, total values, stale deals needing attention |
| Full lead workflow: dedup, create/update, log notes, deal, reminder |
| Find buyers whose search profiles match a property |
Admin (Verwaltung)
Tool | Description |
| List all configured webhook subscriptions |
| Subscribe to CRM events (CLIENT_CREATED, PROPERTY_UPDATED, etc.) |
| Remove a webhook subscription |
| Get properties a contact has favorited |
Example Conversations / Beispiel-Konversationen
Morning Briefing / Morgen-Briefing
You: What's on my calendar today?
AI: calls
list_eventswith today's date range — You have 3 viewings scheduled...
Du: Gibt es neue Leads seit gestern?
KI: ruft
search_contactsmit 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_propertyauf — 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_360auf — 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
fieldsparameter for data minimization, automated-decision notes formatch_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_KEYProject 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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address (also used for dedup/upsert matching) | ||
| phone | No | Phone number | |
| rating | No | Contact rating: 0 (none) to 3 (top priority) | |
| company | No | Company name | |
| language | No | Language code (e.g. 'de', 'en') | |
| position | No | Job position/title | |
| broker_id | No | ID of the assigned broker/agent | |
| group_ids | No | Tag/group IDs to assign to this contact | |
| home_city | No | Home address: city | |
| last_name | No | Last name | |
| first_name | No | First name | |
| newsletter | No | Newsletter opt-in | |
| salutation | No | Salutation: mr (Herr) or ms (Frau) | |
| description | No | Free-text description or notes about the contact | |
| home_street | No | Home address: street | |
| office_city | No | Office address: city | |
| home_country | No | Home address: country code | |
| home_zip_code | No | Home address: postal code | |
| office_street | No | Office address: street | |
| academic_title | No | Academic title (e.g. 'Dr.', 'Prof.') | |
| accept_contact | No | Contact permission granted | |
| office_country | No | Office address: country code | |
| office_zip_code | No | Office address: postal code | |
| client_source_id | No | Lead source ID (use get_contact_sources to look up) | |
| client_status_id | No | Contact status ID | |
| home_house_number | No | Home address: house number | |
| office_house_number | No | Office address: house number | |
| partial_custom_fields | No | Custom field values as key-value pairs (use list_custom_fields to discover available fields) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Deal date (ISO 8601) | |
| note | No | Free-text note about this deal | |
| feeling | No | Feeling score: 0=none, 1=cold, 2=warm, 3=hot | |
| broker_id | No | Assigned broker ID | |
| client_id | Yes | Contact ID (required) | |
| sold_price | No | Expected or agreed price | |
| property_id | Yes | Property ID (required) | |
| deal_stage_id | Yes | Pipeline stage ID (required — use list_pipelines or get_pipeline to look up) | |
| deal_pipeline_id | No | Pipeline ID (if multiple pipelines exist) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | Contact ID (the owner) | |
| property_id | Yes | Property ID (the owned property) |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Role name (e.g. 'Käufer', 'Mieter', 'Verwalter') | |
| client_id | Yes | Contact ID (the partner) | |
| property_id | Yes | Property ID |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude | |
| lng | No | Longitude | |
| city | No | City | |
| floor | No | Floor number | |
| price | No | Purchase price (EUR) | |
| title | No | Property title / headline | |
| status | No | Property status ID (use get_property_statuses to look up) | |
| street | No | Street name | |
| country | No | Country code (e.g. 'DE') | |
| rs_type | No | Property type (e.g. APARTMENT, HOUSE, OFFICE) | |
| courtage | No | Commission amount or percentage | |
| zip_code | No | Postal code | |
| base_rent | No | Base rent (EUR/month) | |
| broker_id | No | Assigned broker ID | |
| plot_area | No | Plot area (m²) | |
| other_note | No | Additional notes text | |
| project_id | No | Project ID this property belongs to | |
| total_rent | No | Total rent including utilities (EUR/month) | |
| object_type | No | Object category: LIVING, COMMERCIAL, or INVESTMENT | |
| rs_category | No | Property sub-type (e.g. PENTHOUSE, VILLA, MAISONETTE, SINGLE_FAMILY_HOUSE) | |
| house_number | No | House number | |
| living_space | No | Living space (m²) | |
| courtage_note | No | Commission details/notes | |
| location_note | No | Location description text | |
| marketing_type | No | Marketing type: BUY (Kauf) or RENT (Miete) | |
| furnishing_note | No | Furnishing/equipment description text | |
| number_of_rooms | No | Number of rooms | |
| description_note | No | Property description text (HTML allowed) | |
| construction_year | No | Year of construction | |
| number_of_bed_rooms | No | Number of bedrooms | |
| number_of_bath_rooms | No | Number of bathrooms | |
| partial_custom_fields | No | Custom field values as key-value pairs | |
| relationships_attributes | No | Link contacts on creation, e.g. [{internal_name: "owner", related_client_id: 123}] |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude for radius search center | |
| lng | No | Longitude for radius search center | |
| lift | No | Lift/elevator required: 'true', 'false', or omit for any | |
| note | No | Free-text note about this search profile | |
| floor | No | Minimum floor | |
| price | No | Minimum purchase price (EUR) | |
| active | No | Whether the search profile is active (default: true) | |
| cellar | No | Cellar required: 'true', 'false', or omit for any | |
| cities | No | City names to search in (e.g. ['Berlin', 'Potsdam']) | |
| garden | No | Garden required: 'true', 'false', or omit for any | |
| radius | No | Search radius in meters from lat/lng center | |
| rented | No | Currently rented: 'true', 'false', or omit for any | |
| balcony | No | Balcony required: 'true', 'false', or omit for any | |
| regions | No | Region names to search in | |
| floor_to | No | Maximum floor | |
| price_to | No | Maximum purchase price (EUR) | |
| rs_types | No | Property types (e.g. ['APARTMENT', 'HOUSE']) | |
| base_rent | No | Minimum base rent (EUR/month) | |
| client_id | Yes | Contact ID this search profile belongs to (required) | |
| group_ids | No | Tag/group IDs to assign | |
| plot_area | No | Minimum plot area (m²) | |
| total_rent | No | Minimum total rent (EUR/month) | |
| base_rent_to | No | Maximum base rent (EUR/month) | |
| living_space | No | Minimum living space (m²) | |
| location_ids | No | Propstack location/district IDs | |
| plot_area_to | No | Maximum plot area (m²) | |
| yield_actual | No | Minimum actual yield (%) | |
| price_per_sqm | No | Minimum price per m² (EUR) | |
| rs_categories | No | Property categories (e.g. ['APARTMENT_NORMAL', 'HOUSE_DETACHED']) | |
| total_rent_to | No | Maximum total rent (EUR/month) | |
| marketing_type | No | Marketing type: BUY (Kauf) or RENT (Miete) | |
| living_space_to | No | Maximum living space (m²) | |
| number_of_rooms | No | Minimum number of rooms | |
| yield_actual_to | No | Maximum actual yield (%) | |
| built_in_kitchen | No | Built-in kitchen required: 'true', 'false', or omit for any | |
| price_multiplier | No | Minimum price multiplier (Vervielfältiger) | |
| price_per_sqm_to | No | Maximum price per m² (EUR) | |
| construction_year | No | Minimum construction year | |
| number_of_rooms_to | No | Maximum number of rooms | |
| number_of_bed_rooms | No | Minimum number of bedrooms | |
| price_multiplier_to | No | Maximum price multiplier | |
| construction_year_to | No | Maximum construction year | |
| number_of_bed_rooms_to | No | Maximum number of bedrooms |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tag name | |
| entity | Yes | Which entity type this tag applies to | |
| super_group_id | No | Parent super-group ID (Obermerkmal) for hierarchy |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Task body (HTML allowed). Call notes, meeting minutes, etc. | |
| done | No | Mark to-do as completed (default: false) | |
| rrule | No | iCal RRULE for recurring events (e.g. 'FREQ=WEEKLY;COUNT=4') | |
| state | No | Event state (e.g. 'neutral', 'took_place', 'cancelled') | |
| title | Yes | Task title / subject line | |
| all_day | No | All-day event flag | |
| ends_at | No | Event end time (ISO 8601). Requires is_event: true | |
| private | No | Private event — hidden from other brokers | |
| due_date | No | Due date for to-do (ISO 8601). Requires is_reminder: true | |
| is_event | No | Set true to create an Appointment/Termin (MODE 3) | |
| location | No | Event location (address or description) | |
| broker_id | No | ID of the assigned broker/agent | |
| recurring | No | Recurring event flag | |
| remind_at | No | Reminder notification time (ISO 8601). Requires is_reminder: true | |
| starts_at | No | Event start time (ISO 8601). Requires is_event: true | |
| client_ids | No | Contact IDs to link this task to | |
| is_reminder | No | Set true to create a To-do/Aufgabe (MODE 2) | |
| project_ids | No | Project IDs to link this task to | |
| note_type_id | No | Activity type ID (e.g. for note, brief, SMS subtypes) | |
| property_ids | No | Property IDs to link this task to | |
| reservation_reason_id | No | Cancellation reason ID — setting this activates MODE 4 (Absage) |
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Event name (e.g. 'CLIENT_CREATED', 'CLIENT_UPDATED', 'PROPERTY_UPDATED') | |
| target_url | Yes | URL that Propstack will POST to when the event fires |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID to delete |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Search profile ID to delete |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID to delete |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name to export |
TDQS
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.
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.
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.
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.
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.
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."
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | Contact ID to get 360° view for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID | |
| include | No | Comma-separated related data to include. Values: children (sub-contacts), documents, relationships, owned_properties. Example: 'children,documents' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | Contact ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Pipeline ID |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project ID |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Property ID | |
| include_translations | No | Comma-separated language codes for multilingual texts (e.g. 'en,de'). Omit for default language only. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID | |
| include | No | Comma-separated related data to include (default: 'clients,units,projects,viewings') |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category (message, for_notes, for_reminders, for_events) |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity type to get custom fields for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| sort | No | Sort string (e.g. 'created_at,desc') | |
| per_page | No | Results per page (default: 25) | |
| client_id | No | Filter by contact ID | |
| project_id | No | Filter by project ID | |
| property_id | No | Filter by property ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag/group ID (Merkmal) | |
| page | No | Page number (default: 1) | |
| state | No | Event state: neutral (scheduled), took_place, cancelled | |
| broker | No | Filter by broker ID | |
| client | No | Filter by contact ID | |
| project | No | Filter by project ID | |
| per_page | No | Results per page (default: 25) | |
| property | No | Filter by property ID | |
| note_type | No | Filter by event category/type ID | |
| recurring | No | Filter for recurring events only | |
| ends_at_after | No | Events ending after this date/time (ISO 8601) | |
| ends_at_before | No | Events ending before this date/time (ISO 8601) | |
| starts_at_after | No | Events starting after this date/time (ISO 8601, e.g. '2025-01-01') | |
| starts_at_before | No | Events starting before this date/time (ISO 8601, e.g. '2025-12-31') |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| expand | No | Include custom fields in response | |
| per_page | No | Results per page (default: 25) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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?"
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| client | No | Contact ID — show only this contact's search profiles | |
| per_page | No | Results per page (default: 25) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Filter by entity type (default: for_clients) | |
| super_groups | No | If true, fetch hierarchical structure from /super_groups (Obermerkmale with children) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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:
Fetches the property details (type, price, rooms, space, city, features)
Fetches active search profiles (paginates, capped by max_profiles)
Scores each profile against the property on: marketing type, city, price range, room count, living space, property type, and features
Returns top 20 matches sorted by score with match/mismatch details
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes | Property ID to find matching contacts for | |
| max_profiles | No | Max search profiles to fetch and score (default: 1000). Caps API calls and memory for large accounts. |
TDQS
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.
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.
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.
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.
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.
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."
| Name | Required | Description | Default |
|---|---|---|---|
| broker_id | No | Filter by broker ID | |
| pipeline_id | No | Filter by specific pipeline ID |
TDQS
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.
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.
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.
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.
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.
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?"
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes | Property ID to generate report for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| per | No | Results per page (default: 20) | |
| page | No | Page number (default: 1) | |
| type | No | Filter by activity type | |
| order | No | Sort order (default: desc) | |
| sort_by | No | Field to sort by | |
| broker_id | No | Filter by broker ID | |
| client_id | No | Filter by contact ID — show all activity for this contact | |
| project_id | No | Filter by project ID | |
| property_id | No | Filter by property ID — show all activity for this property |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Fulltext search across name, email, address, phone | |
| page | No | Page number (default: 1) | |
| No | Search by email address | ||
| group | No | Filter by tag/group IDs (Merkmale) | |
| order | No | Sort order (default: desc) | |
| owner | No | Filter for property owners | |
| expand | No | Include full details and custom fields | |
| status | No | Filter by contact status IDs | |
| sort_by | No | Field to sort results by | |
| sources | No | Filter by lead source IDs (e.g. ImmoScout24, Website) | |
| archived | No | Archive filter: '-1' = all (including archived), '1' = archived only. Omit for non-archived only (default). | |
| language | No | Filter by language codes (e.g. 'de', 'en') | |
| per_page | No | Results per page (default: 25) | |
| broker_id | No | Filter by assigned broker ID | |
| newsletter | No | Filter by newsletter opt-in | |
| gdpr_status | No | GDPR status: 0=Keine Angabe, 1=Ignoriert, 2=Zugestimmt, 3=Widerrufen | |
| project_ids | No | Filter by associated project IDs | |
| not_in_group | No | Exclude contacts with these tag/group IDs | |
| phone_number | No | Search by phone number (formatting-insensitive) | |
| created_at_to | No | Filter contacts created before this date (ISO 8601) | |
| updated_at_to | No | Filter contacts updated before this date (ISO 8601) | |
| accept_contact | No | Filter by contact permission | |
| home_countries | No | Filter by home country codes | |
| created_at_from | No | Filter contacts created after this date (ISO 8601) | |
| updated_at_from | No | Filter contacts updated after this date (ISO 8601) | |
| include_children | No | Include sub-contacts in results |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| phone_number | Yes | Phone number to search for (any format — formatting is ignored) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| order | No | Sort order (default: desc) | |
| include | No | Comma-separated related data to expand: 'client', 'property', or 'client,property' | |
| sort_by | No | Field to sort results by | |
| team_id | No | Filter by team ID | |
| category | No | Deal category: qualified (active), unqualified (not yet), lost (cancelled/rejected) | |
| per_page | No | Results per page (default: 25) | |
| broker_id | No | Filter by assigned broker ID | |
| client_id | No | Filter by contact ID | |
| feeling_to | No | Maximum feeling score | |
| project_id | No | Filter by project ID | |
| property_id | No | Filter by property ID | |
| feeling_from | No | Minimum feeling score (0=none, 1=cold, 2=warm, 3=hot) | |
| created_at_to | No | Filter deals created before this date (ISO 8601) | |
| start_date_to | No | Filter by deal start date to (ISO 8601) | |
| deal_stage_ids | No | Filter by deal stage IDs (pipeline steps) | |
| created_at_from | No | Filter deals created after this date (ISO 8601) | |
| start_date_from | No | Filter by deal start date from (ISO 8601) | |
| client_source_id | No | Filter by lead source ID | |
| deal_pipeline_id | No | Filter by deal pipeline ID | |
| client_broker_ids | No | Filter by contact's assigned broker IDs | |
| property_broker_ids | No | Filter by property's assigned broker IDs | |
| show_archived_clients | No | Include deals with archived contacts | |
| reservation_reason_ids | No | Filter by cancellation/reservation reason IDs | |
| hide_archived_properties | No | Exclude deals with archived properties |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Fulltext search across unit_id, street, zip, city, district, exposé ID | |
| page | No | Page number (default: 1) | |
| exact | No | Use exact matching for text search | |
| group | No | Filter by tag/group ID (Merkmal) | |
| order | No | Sort order (default: desc) | |
| expand | No | Include full details and custom fields | |
| status | No | Comma-separated property status IDs (use get_property_statuses to look up) | |
| country | No | Filter by country code (e.g. 'DE') | |
| rs_type | No | Property type filter | |
| sort_by | No | Field to sort results by (default: unit_id) | |
| archived | No | Archive filter: '-1' = all (including archived), '1' = archived only. Omit for non-archived only (default). | |
| floor_to | No | Maximum floor | |
| per_page | No | Results per page (default: 25) | |
| price_to | No | Maximum purchase price (EUR) | |
| floor_from | No | Minimum floor | |
| price_from | No | Minimum purchase price (EUR) | |
| project_id | No | Filter by project ID | |
| object_type | No | Object category: LIVING (Wohnen), COMMERCIAL (Gewerbe), INVESTMENT (Anlage) | |
| base_rent_to | No | Maximum base rent (EUR/month) | |
| plot_area_to | No | Maximum plot area (m²) | |
| property_ids | No | Filter to specific property IDs | |
| total_rent_to | No | Maximum total rent (EUR/month) | |
| base_rent_from | No | Minimum base rent (EUR/month) | |
| marketing_type | No | Filter by marketing type: BUY (Kauf) or RENT (Miete) | |
| plot_area_from | No | Minimum plot area (m²) | |
| living_space_to | No | Maximum living space (m²) | |
| total_rent_from | No | Minimum total rent (EUR/month) | |
| include_variants | No | Include property variants | |
| living_space_from | No | Minimum living space (m²) | |
| number_of_rooms_to | No | Maximum number of rooms | |
| construction_year_to | No | Built before this year | |
| number_of_rooms_from | No | Minimum number of rooms | |
| construction_year_from | No | Built after this year | |
| number_of_bed_rooms_to | No | Maximum bedrooms | |
| number_of_bath_rooms_to | No | Maximum bathrooms | |
| property_space_value_to | No | Maximum property space (m²) | |
| number_of_bed_rooms_from | No | Minimum bedrooms | |
| number_of_bath_rooms_from | No | Minimum bathrooms | |
| property_space_value_from | No | Minimum property space (m²) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipient email addresses | |
| to | Yes | Recipient email addresses | |
| broker_id | Yes | Sender broker ID (must have connected email account) | |
| client_ids | No | Contact IDs to link this email to | |
| snippet_id | Yes | Email template (snippet) ID | |
| project_ids | No | Project IDs to link this email to | |
| property_ids | No | Property IDs to link this email to |
TDQS
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.
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.
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.
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.
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.
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:
If phone or email provided → search for existing contact (dedup)
If found → update contact; if not → create new contact
If notes provided → log as a note task
If property_id provided → create deal at first pipeline stage
Create follow-up reminder for broker (due tomorrow 9am)
Returns what was done: created vs updated, IDs of all created records.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address (also used for dedup search) | ||
| notes | No | Call notes or free-text about the interaction | |
| phone | No | Phone number (also used for dedup search) | |
| broker_id | No | Assigned broker ID | |
| last_name | Yes | Contact last name | |
| source_id | No | Lead source ID (use get_contact_sources to look up) | |
| first_name | Yes | Contact first name | |
| property_id | No | Specific property ID the lead is interested in (creates a deal) | |
| property_interest | No | Free text about what the lead is looking for (logged as note, not parsed into search profile) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID to update | |
| No | Email address | ||
| phone | No | Phone number | |
| rating | No | Contact rating: 0 (none) to 3 (top priority) | |
| company | No | Company name | |
| archived | No | Archive or unarchive the contact | |
| language | No | Language code (e.g. 'de', 'en') | |
| position | No | Job position/title | |
| broker_id | No | ID of the assigned broker/agent | |
| group_ids | No | Replace ALL tags with this list of tag IDs | |
| home_city | No | Home address: city | |
| last_name | No | Last name | |
| first_name | No | First name | |
| newsletter | No | Newsletter opt-in | |
| salutation | No | Salutation: mr (Herr) or ms (Frau) | |
| description | No | Free-text description or notes | |
| gdpr_status | No | GDPR status: 0=Keine Angabe, 1=Ignoriert, 2=Zugestimmt, 3=Widerrufen | |
| home_street | No | Home address: street | |
| office_city | No | Office address: city | |
| home_country | No | Home address: country code | |
| add_group_ids | No | Add these tag IDs without removing existing tags | |
| home_zip_code | No | Home address: postal code | |
| office_street | No | Office address: street | |
| sub_group_ids | No | Remove these tag IDs from the contact | |
| academic_title | No | Academic title (e.g. 'Dr.', 'Prof.') | |
| accept_contact | No | Contact permission granted | |
| office_country | No | Office address: country code | |
| office_zip_code | No | Office address: postal code | |
| client_source_id | No | Lead source ID | |
| client_status_id | No | Contact status ID | |
| home_house_number | No | Home address: house number | |
| office_house_number | No | Office address: house number | |
| partial_custom_fields | No | Custom field values as key-value pairs |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deal ID to update | |
| date | No | Deal date (ISO 8601) | |
| note | No | Free-text note about this deal | |
| feeling | No | Feeling score: 0=none, 1=cold, 2=warm, 3=hot | |
| category | No | Deal category | |
| broker_id | No | Assigned broker ID | |
| client_id | No | Contact ID | |
| sold_price | No | Expected or agreed price | |
| property_id | No | Property ID | |
| deal_stage_id | No | Pipeline stage ID — change this to move through pipeline | |
| deal_pipeline_id | No | Pipeline ID | |
| reservation_reason_id | No | Cancellation/reservation reason ID (for lost deals) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email/message ID to update | |
| read | No | Mark as read (true) or unread (false) | |
| archived | No | Archive (true) or unarchive (false) | |
| client_ids | No | Contact IDs to link this email to | |
| project_ids | No | Project IDs to link this email to | |
| property_ids | No | Property IDs to link this email to | |
| message_category_id | No | Email category ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Property ID to update | |
| lat | No | Latitude | |
| lng | No | Longitude | |
| city | No | City | |
| floor | No | Floor number | |
| price | No | Purchase price (EUR) | |
| title | No | Property title / headline | |
| status | No | Property status ID (use get_property_statuses) | |
| street | No | Street name | |
| country | No | Country code | |
| rs_type | No | Property type | |
| courtage | No | Commission amount or percentage | |
| zip_code | No | Postal code | |
| base_rent | No | Base rent (EUR/month) | |
| broker_id | No | Assigned broker ID | |
| plot_area | No | Plot area (m²) | |
| other_note | No | Additional notes text | |
| project_id | No | Project ID | |
| total_rent | No | Total rent (EUR/month) | |
| object_type | No | Object category | |
| rs_category | No | Property sub-type | |
| house_number | No | House number | |
| living_space | No | Living space (m²) | |
| courtage_note | No | Commission details | |
| location_note | No | Location description text | |
| marketing_type | No | Marketing type: BUY or RENT | |
| furnishing_note | No | Furnishing description text | |
| number_of_rooms | No | Number of rooms | |
| description_note | No | Property description text | |
| construction_year | No | Year of construction | |
| number_of_bed_rooms | No | Number of bedrooms | |
| number_of_bath_rooms | No | Number of bathrooms | |
| partial_custom_fields | No | Custom field values as key-value pairs |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Search profile ID to update | |
| lat | No | Latitude for radius search center | |
| lng | No | Longitude for radius search center | |
| lift | No | Lift/elevator required: 'true', 'false', or omit for any | |
| note | No | Free-text note about this search profile | |
| floor | No | Minimum floor | |
| price | No | Minimum purchase price (EUR) | |
| active | No | Whether the search profile is active (default: true) | |
| cellar | No | Cellar required: 'true', 'false', or omit for any | |
| cities | No | City names to search in (e.g. ['Berlin', 'Potsdam']) | |
| garden | No | Garden required: 'true', 'false', or omit for any | |
| radius | No | Search radius in meters from lat/lng center | |
| rented | No | Currently rented: 'true', 'false', or omit for any | |
| balcony | No | Balcony required: 'true', 'false', or omit for any | |
| regions | No | Region names to search in | |
| floor_to | No | Maximum floor | |
| price_to | No | Maximum purchase price (EUR) | |
| rs_types | No | Property types (e.g. ['APARTMENT', 'HOUSE']) | |
| base_rent | No | Minimum base rent (EUR/month) | |
| client_id | No | Contact ID (rarely changed) | |
| group_ids | No | Tag/group IDs to assign | |
| plot_area | No | Minimum plot area (m²) | |
| total_rent | No | Minimum total rent (EUR/month) | |
| base_rent_to | No | Maximum base rent (EUR/month) | |
| living_space | No | Minimum living space (m²) | |
| location_ids | No | Propstack location/district IDs | |
| plot_area_to | No | Maximum plot area (m²) | |
| yield_actual | No | Minimum actual yield (%) | |
| price_per_sqm | No | Minimum price per m² (EUR) | |
| rs_categories | No | Property categories (e.g. ['APARTMENT_NORMAL', 'HOUSE_DETACHED']) | |
| total_rent_to | No | Maximum total rent (EUR/month) | |
| marketing_type | No | Marketing type: BUY (Kauf) or RENT (Miete) | |
| living_space_to | No | Maximum living space (m²) | |
| number_of_rooms | No | Minimum number of rooms | |
| yield_actual_to | No | Maximum actual yield (%) | |
| built_in_kitchen | No | Built-in kitchen required: 'true', 'false', or omit for any | |
| price_multiplier | No | Minimum price multiplier (Vervielfältiger) | |
| price_per_sqm_to | No | Maximum price per m² (EUR) | |
| construction_year | No | Minimum construction year | |
| number_of_rooms_to | No | Maximum number of rooms | |
| number_of_bed_rooms | No | Minimum number of bedrooms | |
| price_multiplier_to | No | Maximum price multiplier | |
| construction_year_to | No | Maximum construction year | |
| number_of_bed_rooms_to | No | Maximum number of bedrooms |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID to update | |
| body | No | Task body (HTML allowed) | |
| done | No | Mark to-do as completed | |
| rrule | No | iCal RRULE for recurring events | |
| state | No | Event state (e.g. 'neutral', 'took_place', 'cancelled') | |
| title | No | Task title / subject line | |
| all_day | No | All-day event flag | |
| ends_at | No | Event end time (ISO 8601) | |
| private | No | Private event flag | |
| due_date | No | Due date (ISO 8601) | |
| is_event | No | Appointment flag | |
| location | No | Event location | |
| broker_id | No | ID of the assigned broker/agent | |
| recurring | No | Recurring event flag | |
| remind_at | No | Reminder notification time (ISO 8601) | |
| starts_at | No | Event start time (ISO 8601) | |
| client_ids | No | Contact IDs to link this task to | |
| is_reminder | No | To-do flag | |
| project_ids | No | Project IDs to link this task to | |
| note_type_id | No | Activity type ID | |
| property_ids | No | Property IDs to link this task to | |
| reservation_reason_id | No | Cancellation reason ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | Base64 data URI (e.g. 'data:application/pdf;base64,...') | |
| title | Yes | Document title | |
| client_id | No | Attach to this contact | |
| is_exposee | No | Mark as exposé document | |
| is_private | No | Mark as private (hidden from portals) | |
| project_id | No | Attach to this project | |
| property_id | No | Attach to this property | |
| is_floorplan | No | Mark as floor plan (Grundriss) | |
| on_landing_page | No | Show on property landing page |
TDQS
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.
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.
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.
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.
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.
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.
53 tool updates
v1.0.0- First observed
create_contact - First observed
create_deal - First observed
create_ownership - First observed
create_partnership - First observed
create_property - First observed
create_search_profile - First observed
create_tag - First observed
create_task - First observed
create_webhook - First observed
delete_contact - First observed
delete_search_profile - First observed
delete_webhook - First observed
export_data - First observed
full_contact_360 - First observed
get_contact - First observed
get_contact_favorites - First observed
get_contact_sources - First observed
get_pipeline - First observed
get_project - First observed
get_property - First observed
get_property_statuses - First observed
get_task - First observed
list_activity_types - First observed
list_contact_statuses - First observed
list_custom_fields - First observed
list_documents - First observed
list_events - First observed
list_locations - First observed
list_pipelines - First observed
list_projects - First observed
list_reservation_reasons - First observed
list_search_profiles - First observed
list_tags - First observed
list_teams - First observed
list_users - First observed
list_webhooks - First observed
match_contacts_to_property - First observed
pipeline_summary - First observed
property_performance_report - First observed
search_activities - First observed
search_contacts - First observed
search_contacts_by_phone - First observed
search_deals - First observed
search_properties - First observed
send_email - First observed
smart_lead_intake - First observed
update_contact - First observed
update_deal - First observed
update_email - First observed
update_property - First observed
update_search_profile - First observed
update_task - First observed
upload_document
TDQS
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 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.
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.
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
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
Connect your business apps to your MCP compatible AI in 1 click
Let AI agents query data and act across all your business apps via MCP.
- ZapierOAuthcom.zapier.mcp
Zapier MCP connects AI tools like Claude, ChatGPT, and Cursor to over 8,000 apps and 30,000+ actions, enabling AI to perform real-world tasks such as sending messages, searching data, scheduling events, and updating records. It acts as a translator between AI tools and apps, handling authentication, rate limits, and retries automatically, transforming AI from a conversational tool into a functional extension of your business stack.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceConnects Claude AI to GoHighLevel CRM, enabling comprehensive automation across 269+ tools including contact management, messaging, sales pipeline, appointments, marketing, and e-commerce operations.26-
- FlicenseNot gradedqualityNot gradedmaintenanceUniversal 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.2935-
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to GoHighLevel CRM via MCP, enabling full sub-account automation with 269+ tools for contacts, messaging, sales, marketing, and more.26ISC
- FlicenseAqualityDmaintenanceMCP 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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