| name | save-israeli-contact |
| description | Save an Israeli office, branch, clinic, call centre or business to Google Contacts from a URL, a pasted page, a screenshot or a phone call, keeping the details a generic contact record loses โ counter hours separate from call-centre hours, summer and winter timetables, Shabbat and chag closures, appointment-only counters, star and 1-800 numbers that will not connect from abroad, languages of service, and what to bring. Use whenever the user wants an Israeli organisation added to or updated in their contacts. |
Save an Israeli contact
The user hands you a source โ a gov.il page, a clinic's site, a photograph of a
sign on a door, or notes from a phone call โ and wants it in Google Contacts
without losing the parts that make Israeli entries different from ordinary ones.
Work in three passes: read the source, build the entry, write it. Do not skip
to writing. The whole value of this is that what lands in the phonebook is
traceable to what the source said.
Before anything
The google-contacts MCP server must be connected. If its tools are not
available, say so and stop โ do not draft an entry that cannot be saved.
There are two separate accounts in a typical setup (personal and work), each
bound to its own server. If more than one is connected, ask which phonebook
this contact belongs in before writing. Getting this wrong is not a clean
failure; it puts the contact in the wrong account.
Pass 1 โ read the source
Fetching. Israeli government and utility sites frequently block requests
from cloud IP ranges. Reach for mcp__gateway__geo-egress__fetch_markdown
first for any .gov.il, .muni.il, bank, health-fund or utility URL โ it
egresses from an Israeli residential connection. If that returns 403 or an
empty shell, use the playwright browser tools on the same host. A generic web
fetch is the least likely to work on these targets, not the most.
If the source is a photograph of a sign or a screenshot, read it directly. Signs
on doors are often more current than the website, and worth preferring when they
disagree โ say in confidence which you used.
Reading. Load reference/hebrew-vocabulary.md before parsing a Hebrew page.
The distinctions that matter and are easy to lose:
- ืงืืืช ืงืื (counter) is not ืืืงื (call centre). These are separate
timetables and they rarely coincide. Never merge them into one "hours" value.
A merged entry will eventually send someone to a closed office.
- ืืขื ื ืื ืืฉื โ human answering โ is usually a shorter window than the call
centre's stated hours. Where the source distinguishes them, record the human
hours; that is the one that determines whether the call is worth making.
- Day letters.
ืืณ-ืืณ is SundayโThursday, not MondayโFriday.
- The buried exception.
ืืณ-ืืณ 08:00-13:00, ืืืื ืืณ ืื 16:00-18:00 has a
Tuesday afternoon window. These get flattened away in summarisation and they
are often the only slot that suits someone with a job.
- Summer and winter. ืฉืขืื ืงืืฅ / ืฉืขืื ืืืจืฃ are separate published
timetables, not a formality. If both are given, record both.
Ask the user for anything the source does not say and they would know โ whether
they have been before, whether the English service is real, which entrance.
Their experience of the place is usually better than the website.
Pass 2 โ build the entry
Write a JSON object conforming to schema/israeli-org-contact.schema.json into
contacts/<slug>.json (gitignored โ it holds real details).
Rules that are not negotiable:
verbatim is required on every hours entry. Quote the source's own
wording, in its own language. Every normalised time must be traceable back to
a string that a human can re-check without refetching the page.
- Do not resolve Shabbat-relative phrasing. "Closes two hours before candle
lighting" stays as written. Candle lighting moves by an hour and forty minutes
across the year, so a resolved clock time is wrong for most of the year it is
stored. If the user wants a concrete time for a specific date, that is
Claude-Israel-Opening-Hours-Plugin's job โ optionally fill hours_rules
with a rules object for it to consume. That block is deliberately not written
to Google Contacts.
- Do not infer Shabbat closure from "Saturday: Closed". A Google listing
saying Saturday closed tells you nothing about Friday's early close, chol
hamoed, or whether the call centre keeps a different rule from the counter.
Set
shabbat_chag.status to unknown rather than guessing.
- Record languages only if the source states them, and say whether it means
the counter or the phone line. An entry that wrongly promises English service
decides whether someone brings a friend to translate.
source.retrieved is an absolute date. Israeli office hours go stale fast
and the entry needs to say how old it is.
- Name it as the user will search for it. Someone told "go to Misrad
HaPnim" will not find "Population and Immigration Authority". Put the
colloquial name in
name.he/nickname and the formal one in org.
Run python3 scripts/contact_build.py contacts/<slug>.json --check and resolve
what it reports.
Pass 3 โ write it
Build the arguments โ never hand-assemble them:
python3 scripts/contact_build.py contacts/<slug>.json
This emits the exact argument object for create_contact, with the custom
fields drawn from the closed vocabulary in reference/custom-field-keys.md and
a Notes block rendered from the same source, so the two cannot disagree.
Then:
- Search first.
search_contacts on the Hebrew name, the English name and
the main phone number โ all three. Israeli organisations are commonly
already in a phonebook under a different transliteration, and creating a
duplicate is much harder to notice than to avoid.
- New contact โ
create_contact with the emitted arguments.
- Existing contact โ
get_contact first, then update_contact. The list
arguments (phones, emails, urls, custom_fields, addresses)
replace the entire collection. Merge the existing entries into what you
pass, or you will silently delete the ones you left out. To change a single
custom field, use set_custom_field instead and touch nothing else.
- Show the user what was written and what the builder warned about.
When the entry is thin
A contact with a name and a phone number is still worth saving. Do not stall
waiting for a complete record โ write what you have, and put what is missing in
confidence so the next pass knows where to look. An entry that says "hours not
checked" is more useful than no entry, and much more useful than invented hours.