Tasks and contacts
10 tools. Generated from the MCP server: names, inputs and prices match the code.
Create Contact
Create a contact. A person needs name (the surname; first_name and position optional; company_name on a person is the employer). An organization needs kind="organization" and company_name, and only company_name: the server mirrors it into name, so do not send both. Every read returns display_name, which is the field to render. Attach roles in the same call with property_links: [{ property_id, role, role_note?, is_primary? }]. The role belongs to the link, so one Hausverwaltung can be weg_manager on one property and sev_manager on another. Use organization_contact_id to say which company a person works for. Put an agreed rate in hourly_rate (EUR per hour, a number) with the conditions in rate_note ("netto, zzgl. Anfahrt"), never as prose in notes, where nothing can calculate with it.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| kind | string | no | Values:personorganization |
| contact_type | string | no | Values:property_managerbrokernotarybankcraftsmantenanttax_advisorinsurerappraiserlawyerauthoritysellerbuyersupplierother |
| name | string | null | no | |
| first_name | string | null | no | |
| company_name | string | null | no | |
| position | string | null | no | |
| organization_contact_id | string | null | no | |
| string | null | no | ||
| email_secondary | string | null | no | |
| phone | string | null | no | |
| phone_secondary | string | null | no | |
| mobile | string | null | no | |
| fax | string | null | no | |
| website | string | null | no | |
| street | string | null | no | |
| house_number | string | null | no | |
| address_addition | string | null | no | |
| post_code | string | null | no | |
| city | string | null | no | |
| country | string | null | no | |
| notes | string | null | no | |
| tags | array<string> | no | |
| language | string | null | no | |
| do_not_contact | boolean | no | |
| rating | integer | null | no | |
| hourly_rate | number | null | no | |
| rate_note | string | null | no | |
| external_ref | string | null | no | |
| property_links | array<object> | no |
RESTPOST /api/v1/contacts
Delete Contact
Delete a contact by id. It leaves contacts_list but still comes back with include_deleted, and tenancies that name the contact keep their tenant.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | yes |
RESTDELETE /api/v1/contacts/{id}
Get Contact
Get one contact with its property_links (each carrying the role, an optional role_note and a property_label) and, for a person, the organization they work for. Render display_name: it already resolves name vs company_name.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | yes | |
| include_deleted | boolean | no |
RESTGET /api/v1/contacts/{id}
List Contacts
List contacts (people and companies) with the roles they hold on properties. Filter by property_id and/or role to answer "who is the Hausverwalter of this object" (role weg_manager; sev_manager is the Sondereigentums-/Mietverwalter), by contact_type or kind, or search names and email with q. Use contact_type supplier for a Lieferant with no building attached. Render display_name rather than picking between name and company_name yourself. do_not_contact is a hard opt-out: never draft a message to such a contact. rating is 1-5; null means not rated, not a bad rating.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| property_id | string | no | |
| role | string | no | Values:weg_managersev_managerbrokernotarysellerbuyertenantcraftsmancaretakerbanktax_advisorinsurerappraiserlawyeradvisory_boardauthoritysupplierother |
| contact_type | string | no | Values:property_managerbrokernotarybankcraftsmantenanttax_advisorinsurerappraiserlawyerauthoritysellerbuyersupplierother |
| kind | string | no | Values:personorganization |
| q | string | no | |
| include_deleted | string | no | Values:01truefalse |
| limit | integer | no | |
| offset | integer | no |
RESTGET /api/v1/contacts
Update Contact
Update a contact's fields by id; partial body. property_links is a replace-set: omit it to leave the links alone, or send the complete array (including []) to replace them. Rename an organization through company_name; name follows on its own. Send rating: null to clear a rating back to "not rated" (1-5 are the only ratings; there is no 0).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| kind | string | no | Values:personorganization |
| contact_type | string | no | Values:property_managerbrokernotarybankcraftsmantenanttax_advisorinsurerappraiserlawyerauthoritysellerbuyersupplierother |
| name | string | null | no | |
| first_name | string | null | no | |
| company_name | string | null | no | |
| position | string | null | no | |
| organization_contact_id | string | null | no | |
| string | null | no | ||
| email_secondary | string | null | no | |
| phone | string | null | no | |
| phone_secondary | string | null | no | |
| mobile | string | null | no | |
| fax | string | null | no | |
| website | string | null | no | |
| street | string | null | no | |
| house_number | string | null | no | |
| address_addition | string | null | no | |
| post_code | string | null | no | |
| city | string | null | no | |
| country | string | null | no | |
| notes | string | null | no | |
| tags | array<string> | no | |
| language | string | null | no | |
| do_not_contact | boolean | no | |
| rating | integer | null | no | |
| hourly_rate | number | null | no | |
| rate_note | string | null | no | |
| external_ref | string | null | no | |
| property_links | array<object> | no | |
| id | string | yes |
RESTPATCH /api/v1/contacts/{id}
Create Task
Create a task. Requires title; optional links are validated.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | yes | |
| description | string | null | no | |
| category | string | no | Values:generalbanktaxescashflowrental |
| due_date | string | null | no | |
| property_id | string | null | no | |
| linked_unit_id | string | null | no | |
| linked_tenancy_id | integer | null | no | |
| linked_dd_issue_id | integer | null | no | |
| is_checked | boolean | no |
RESTPOST /api/v1/tasks
Delete Task
Delete a task by id.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | yes |
RESTDELETE /api/v1/tasks/{id}
Get Task
Get one task with full linked context (property, unit, tenancy, DD issue).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | |
| include_deleted | boolean | no |
RESTGET /api/v1/tasks/{id}
List Tasks
List tasks with optional filters (property_id, is_checked, category, include_deleted, limit, offset).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| property_id | string | no | |
| linked_dd_issue_id | integer | no | |
| is_checked | string | no | Values:01truefalse |
| category | string | no | Values:generalbanktaxescashflowrental |
| include_deleted | string | no | Values:01truefalse |
| limit | integer | no | |
| offset | integer | no |
RESTGET /api/v1/tasks
Update Task
Update a task's editable fields (e.g. title, checked state, category, linked property) by numeric id; partial body.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | no | |
| description | string | null | no | |
| category | string | no | Values:generalbanktaxescashflowrental |
| due_date | string | null | no | |
| property_id | string | null | no | |
| linked_unit_id | string | null | no | |
| linked_tenancy_id | integer | null | no | |
| linked_dd_issue_id | integer | null | no | |
| is_checked | boolean | no | |
| id | integer | yes |
RESTPATCH /api/v1/tasks/{id}