| name | israeli-contact-fields |
| description | The closed vocabulary of Google Contacts custom fields used for Israeli entries, and the rules for mapping messy real-world details onto them โ which hours go in which field, why the keys are fixed, how Notes mirrors the structured fields, and how update_contact's replace-not-append behaviour destroys data if used carelessly. Use when deciding where a piece of information belongs, or when editing an existing Israeli contact by hand. |
Field mapping
Google Contacts custom fields are free-form key/value pairs. Google stores both
halves verbatim and never translates or normalises either, which makes them the
right home for Israeli specifics โ and means that a key which drifts by one
character stops matching the rest of the phonebook.
So the keys are closed. The full table with examples is
reference/custom-field-keys.md; read it before writing any field. Sixteen
keys, exact strings, no seventeenth without adding it to that file first.
The decisions that get made wrong
Which hours field. Hours (Reception) is the counter โ ืงืืืช ืงืื, the place
you physically stand. Hours (Phone) is the ืืืงื. They are different
timetables at almost every Israeli government office and health fund, and
merging them produces an entry that will eventually send someone to a locked
door. When a source gives only one, record only one, and say which it is.
Hours (Summer) and Hours (Winter) are for offices that publish separate
seasonal timetables. Because the key names carry the season and not the
channel, the builder prefixes the value with counter: or call centre:. Keep
that prefix if you write the field by hand.
Shabbat and chag is one field, deliberately. Friday close, Shabbat status,
chol hamoed and fast days all go in Shabbat and Chag as a single readable
string. Splitting them into four fields buries the one that matters on the day
under three that do not. Keep relative phrasing intact: "closes two hours
before candle lighting" is more accurate stored than any clock time you could
resolve it to, because candle lighting moves by an hour and forty minutes
across the year.
Dial Notes says what the numbers do not. Which of them work from abroad,
which is premium rate, where an extension goes. It is generated by
scripts/il_phone.py โ see the israeli-phone-numbers skill โ and should not
be written by hand except to record something the classifier cannot know, like
"the English option is on the second menu, not the first".
Bring is not optional padding. Israeli counters turn people away over a
missing ืกืคื. For a government entry this field is often the single most useful
thing in the record.
Verified is an absolute date. Never "recently", never a relative phrase.
An entry whose age is unknown cannot be triaged later.
Omit any field you have no value for. An empty custom field is a line of noise
on a phone screen, and it hides the ones that matter.
Mirror into Notes, always
Write the structured fields and a rendered plain-text block into notes.
scripts/contact_build.py produces both from the same object in one pass, so
they cannot drift.
The reason is display coverage: Notes renders in every client that shows a
contact at all, while custom fields are rendered inconsistently โ some
third-party diallers and car head units drop them. The contact is most needed
standing outside the office on whatever device is to hand.
Updating without destroying
update_contact's list arguments โ phones, emails, urls,
custom_fields, addresses โ replace the whole collection. Passing one
phone number deletes the other three. This is the most likely way to lose data
with this plugin.
So:
- To change one custom field, use
set_custom_field. It touches nothing
else, and it both adds and overwrites, matching the key exactly.
- To change anything in a list, call
get_contact first, merge your change
into the full existing collection, and pass the complete result.
- To empty a collection deliberately, pass
[].
Contact groups and labels are not writable through the MCP server, so grouping
is done by convention instead: set organization to the parent body and fill
Branch, and one search finds every branch of an agency. A label added by hand
in the contacts UI survives updates from this plugin, because none of these
tools touch group memberships.