Propstack MCP
Connect AI assistants to the Propstack real estate CRM to manage contacts, properties, deals, and workflows through 56 tools.
Contact management — search, create, update, soft-delete, tag, GDPR status, phone lookup, dedup, lead sources.
Property management — search/filter by price, rooms, area, status; create/update listings; manage exposé fields and media.
Deal pipeline — create deals, move through stages, track win/loss, view pipeline summaries with stale deal alerts.
Buyer matching — create search profiles from natural language; match contacts to properties and reverse.
Tasks & calendar — create notes, todos, appointments, cancellations; list events and viewings.
Email — send templated emails, mark read/archived, categorize, link to CRM records.
Documents & images — list/upload documents; list/upload/update property images.
Relationships — link owners and partners (buyer, tenant, etc.) to properties.
Lookups — retrieve pipelines, tags, statuses, custom fields, users, teams, locations, activity types.
Smart composites — full contact 360, property performance report, pipeline summary, smart lead intake.
Admin — manage webhooks, bulk export data, get contact favorites.
GDPR support — data minimization via
fieldsparameter; stateless local server.
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: MCP-manychat
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 and claude.ai (web / mobile)
These clients only connect to remote MCP servers over an HTTPS URL. They
cannot start a local npx command, so this server can't be added to them
directly — use Claude Desktop, Claude Code, Cursor or another local client
instead.
If you need ChatGPT or the claude.ai apps, the server has to run behind an authenticated HTTPS endpoint. Do not expose it through an open tunnel or an unauthenticated stdio-to-HTTP bridge: anyone with the URL would get full read/write access to your CRM with your API key. Open an issue if you need a hosted setup.
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 (56)
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, custom fields, energy certificate, equipment, layout, cost, and marketing fields |
| Create a new property listing, including German residential exposé fields (energy certificate, equipment, costs) |
| Update price, status, description, broker assignment, and German residential exposé fields |
| 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) |
Images (Bilder)
Tool | Description |
| List a property's images and floor plans in portal order (IDs, titles, flags) |
| Upload an image to a property or project (base64 data URI, portal visibility) |
| Change an image's title (incl. |
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 |
| Reverse matching: find properties that fit a contact's search profiles |
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.
Inputs: email, phone, rating, company, +24 more.
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.
Inputs: client_id (required), property_id (required), deal_stage_id (required), date, +5 more.
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.
Inputs: client_id (required), property_id (required).
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").
Inputs: client_id (required), property_id (required), name.
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).
Inputs: lat, lng, city, floor, +29 more.
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".
Inputs: client_id (required), lat, lng, lift, +39 more.
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".
Inputs: name (required), entity (required), super_group_id.
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.
Inputs: title (required), body, done, rrule, +17 more.
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"
Inputs: event (required), target_url (required).
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
Inputs: id (required).
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
Inputs: id (required).
delete_webhookA
Delete a webhook subscription from Propstack.
Removes the webhook so Propstack will stop sending events to its URL.
Inputs: id (required).
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
Inputs: table (required).
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."
Inputs: contact_id (required).
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.
Inputs: id (required), include.
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.
Inputs: contact_id (required).
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.
Inputs: no named parameters.
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.
Inputs: id (required).
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)
Inputs: id (required).
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).
Inputs: id (required), include_translations.
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
Inputs: no named parameters.
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
Inputs: id (required), include.
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.
Inputs: category.
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".
Inputs: no named parameters.
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.
Inputs: entity (required).
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.
Inputs: page, sort, per_page, client_id, +2 more.
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
Inputs: tag, page, state, broker, +10 more.
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.
Inputs: no named parameters.
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.
Inputs: no named parameters.
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.
Inputs: page, expand, per_page.
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).
Inputs: no named parameters.
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?"
Inputs: page, client, per_page.
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.
Inputs: entity, super_groups.
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.
Inputs: no named parameters.
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
Inputs: no named parameters.
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.
Inputs: no named parameters.
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
Inputs: property_id (required), max_profiles.
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."
Inputs: broker_id, pipeline_id.
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?"
Inputs: property_id (required).
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.
Inputs: per, page, type, order, +5 more.
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.
Inputs: q, page, email, group, +22 more.
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.
Inputs: phone_number (required).
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
Inputs: page, order, include, sort_by, +21 more.
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=<available_id from get_property_statuses>
"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.
Inputs: q, page, exact, group, +35 more.
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
Inputs: to (required), broker_id (required), snippet_id (required), cc, +3 more.
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.
Inputs: last_name (required), first_name (required), email, notes, +5 more.
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.
Inputs: id (required), email, phone, rating, +29 more.
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.
Inputs: id (required), date, note, feeling, +8 more.
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.
Inputs: id (required), read, archived, client_ids, +3 more.
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.
Inputs: id (required), lat, lng, city, +29 more.
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.
Inputs: id (required), lat, lng, lift, +40 more.
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.
Inputs: id (required), body, done, rrule, +18 more.
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
Inputs: doc (required), title (required), client_id, is_exposee, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 53 tools
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
Related MCP Connectors
Connect your business apps to your MCP compatible AI in 1 click
Create contacts, move deals, send proposals and invoices, read your inbox, from Claude or ChatGPT.
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
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to GoHighLevel CRM via MCP, enabling full sub-account automation with 269+ tools for contacts, messaging, sales, marketing, and more.16 npmISC
- 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-
- AlicenseBqualityDmaintenanceConnects AI assistants like Claude to productivity tools such as Notion, Monday, Jira, and Slack via a remote MCP integration hub.71136 npmMIT
- AlicenseCqualityDmaintenanceEnables connecting MCP hosts like Claude to various productivity tools (Notion, Monday, Jira, etc.) through a secure no-code integration hub.71136 npmMIT