v2.3.0
Features
Full custom fields support for the Pipedrive MCP server.
Writing custom values
All *_create / *_update tools for deals, persons, organizations, products and leads now accept a custom_fields object:
{
"title": "ACME deal",
"value": 50000,
"custom_fields": {
"Industria": "Tech",
"Budget": 50000,
"Tags": ["Enterprise", "EU"]
}
}- Keys can be display names (case-insensitive, trimmed) or 40-char hash keys
enum/setlabels translated to option ids automaticallymonetaryaccepts a number or{ value, currency }daterange/timerangeexpand{ start, end }to the two hash keys Pipedrive expects- Unknown names produce a clear error with top-3 Levenshtein suggestions
- Duplicate display names raise
duplicate_namewith candidate hashes
Reading enriched responses
*_get, *_list and *_search now include custom_fields_resolved alongside the raw payload:
{
"id": 123,
"title": "ACME deal",
"abc123def456...": 18,
"custom_fields_resolved": { "Industria": "Tech" }
}Read-path enrichment is opportunistic — only adds the resolved map if the field-definitions cache is warm; never adds an extra HTTP call. Search response shape (data.items[].item) is also handled.
CRUD for field definitions
Twelve new tools mirror the existing organization-field CRUD pattern:
fields_create_deal_field,fields_update_deal_field,fields_delete_deal_field,fields_bulk_delete_deal_fieldsfields_create_person_field,fields_update_person_field,fields_delete_person_field,fields_bulk_delete_person_fieldsfields_create_product_field,fields_update_product_field,fields_delete_product_field,fields_bulk_delete_product_fields
Leads share deal field definitions (no separate /leadFields endpoint in Pipedrive).
Breaking-ish change
Create/update zod schemas for deals, persons, organizations, products and leads no longer reject unknown top-level keys (.strict() removed). Custom values should now be passed inside custom_fields instead of at the top level. Existing top-level hash keys are silently stripped by zod's default behavior.
Organization tools were also migrated to use the canonical schemas (instead of inline ones), exposing 6 additional address fields previously not accessible: label, address_subpremise, address_sublocality, address_admin_area_level_1, address_admin_area_level_2, address_formatted_address.
Docs
See docs/CUSTOM_FIELDS.md for full usage guide.
Tests
959 tests passing (33 files). Type-check, build and lint clean.
Full diff: #32