Apple Contacts

io.github.JonathanRReed由 GitHub 帳號 JonathanRReed 發布v1.1.6更新於 Nov 7, 2026

Inspect and search Apple Contacts on macOS, and resolve a contact into a message-ready recipient.

已驗證STDIO僅桌面效率與工作流溝通與協作

概覽

AI 產生的概覽

本機 macOS MCP 伺服器,讓助理列出、搜尋、讀取與編輯 Apple 聯絡人,並把聯絡人解析成可直接傳訊的電話號碼或電子郵件。

可以做什麼
  • 列出、搜尋與讀取聯絡人:瀏覽項目、依姓名、電話或電子郵件搜尋,並取得單筆記錄的完整內容。
  • 解析收件人:在傳訊息前把聯絡人轉成可直接使用的電話號碼或電子郵件地址。
  • 建立、更新與刪除聯絡人,包含帶標籤的電話與電子郵件方式。
  • 清理重複項目:找出疑似重複的記錄並提出可合併的候選供人工檢視。
  • 檢查設定:回報目前設定、說明 macOS 授權步驟,並在權限變更後重新檢查存取狀態。
  • 探索工具:依關鍵字搜尋此伺服器的工具目錄,並為上下文受限的用戶端載入工具的完整結構。
適用情境
適合助理需要在 Mac 上查詢使用者自己的通訊錄、在傳訊息或寄信前確認收件人,或維護聯絡人資料並清理重複項目,而不想引入功能龐雜的一體化伺服器時使用。
執行需求
僅在 macOS 上以本機方式執行,透過 uvx 從 PyPI 套件以 stdio 程序啟動(從複製的儲存庫安裝需 Python 3.11+)。需在 macOS 中授予聯絡人存取權;原生後端首次使用會編譯 Swift 輔助程式,需要 Xcode Command Line Tools。環境變數 APPLE_CONTACTS_MCP_SAFETY_MODE 可設為 safe_readonly、safe_manage 或 full_access。
安裝前請注意
寫入類工具可建立、更新並永久刪除聯絡人;刪除需要 full_access,因此除非確實要刪除,應維持 safe_readonly 或 safe_manage。傳入 phones 或 emails 陣列會取代該組聯絡方式,傳空陣列則會清空。原生後端會拒絕聯絡人備註。伺服器會讀取個人通訊錄,授權前請確認必要性。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Apple Contacts,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Apple Contacts MCP

MCP server for Apple Contacts on macOS.

Provides access to contacts for lookup, search, and recipient resolution. Use before sending messages to resolve names into phone numbers or email addresses.

When to use

  • Contact-only workflows
  • Recipient validation before messaging
  • Contact lookup separated from the all-in-one server

What It Does

  • List and search contacts
  • Full contact detail lookup
  • Message recipient resolution
  • Tool discovery helpers search_tools and get_tool_info for context-constrained clients
  • Create, update, and delete contacts
  • Duplicate detection and merge-candidate suggestions (contacts_find_duplicates, contacts_suggest_merge_candidates)
  • Phone number and email method editing with labels
  • Directory resources and recipient-check prompts
  • Health and permission checks: contacts_health, contacts_permission_guide, contacts_recheck_permissions

Install On This Mac

Quick start (uvx, from PyPI)

With uv installed:

bash
uvx apple-contacts-mcp

No clone, no venv management.

From a clone
bash
git clone https://github.com/JonathanRReed/Apple-MCPs.gitcd Apple-MCPsuv sync --all-packages

This builds one workspace environment with every server's entry point in .venv/bin (for example .venv/bin/apple-contacts-mcp). You can also point an MCP client at AppleContacts-MCP/start.sh, which prefers uv run and falls back to a plain venv bootstrap (Python 3.11+ required).

Install In AI Agents

Generic MCP client config
json
{  "mcpServers": {    "apple-contacts": {      "command": "uvx",      "args": ["apple-contacts-mcp"],      "env": {        "APPLE_CONTACTS_MCP_SAFETY_MODE": "safe_manage"      }    }  }}

Running from a clone instead? Use /path/to/Apple-MCPs/AppleContacts-MCP/start.sh as the command with empty args.

Claude Code example
bash
claude mcp add --transport stdio --scope user apple-contacts -- uvx apple-contacts-mcp

--scope user makes the server available in every project. To share it with one repository through its .mcp.json instead, use --scope project.

Safety Modes

  • safe_readonly
  • safe_manage
  • full_access

Transport

stdio is the default and recommended transport. Set APPLE_CONTACTS_MCP_TRANSPORT=streamable-http (with optional APPLE_CONTACTS_MCP_HOST and APPLE_CONTACTS_MCP_PORT) to serve Streamable HTTP instead.

Search Behavior

Name and organization searches use Contacts.app's filtered lookup. A no-match name returns an empty result without scanning the whole address book. Phone queries with a numeric/punctuation base, including recognized extension suffixes (ext, ext., extension, extn., x, #, and ;ext=) and an optional tel: prefix, retain the paginated directory fallback for method-value matching. Email queries containing @ retain it too. Extension matching keeps the base number and extension separate, requires the exact extension, and allows local-number suffix matching. Recipient resolution chooses the matching phone method and rejects multiple distinct matching methods.

Literal control characters and complex emoji returned by Contacts are decoded on the Python side without changing their text.

macOS Permissions

  • Contacts access is required
  • contacts_health reads native authorization status without requesting access or reading contacts. permission_status distinguishes authorized, unknown, denied, and failed checks. The AppleScript backend reports unknown authorization without sending Apple Events. Explicit Contacts operations retain their permission checks.

Launch Checklist

  • Add uvx apple-contacts-mcp (or a clone's AppleContacts-MCP/start.sh) to your MCP client
  • Reload or reconnect the client so the Contacts tool surface is loaded into context
  • Call contacts_health first
  • If Contacts access is blocked, call contacts_permission_guide
  • After changing macOS permissions, call contacts_recheck_permissions

Prompting Notes

  • tools/list returns the full Contacts tool surface. Context-constrained clients can use search_tools first, then get_tool_info for the Contacts tool they need.
  • Run Contacts before any iMessage or Mail action when the user gives a person name.
  • Resolve by name, phone number, or email before acting.
  • If multiple contacts match, confirm the intended person before sending.
  • When updating a person, pass explicit phones or emails arrays only when you intend to replace that method set.
  • Keep a labeled phone or email on the contact before routing Messages or Mail through it.

Related

Native Contacts access

Contacts uses CNContactStore by default, so reads and writes do not wait for Contacts.app. First use compiles the packaged Swift helper with Xcode Command Line Tools and caches a signed application bundle, Apple Contacts MCP Helper, under ~/.apple-mcps/build. Set APPLE_CONTACTS_MCP_HELPER_BUILD_DIR to choose another build directory. If the app running the MCP server already has Contacts access, it is used. Otherwise macOS asks whether Apple Contacts MCP Helper may access Contacts. See Calendar, Reminders and Contacts: who macOS asks about.

Set APPLE_CONTACTS_MCP_BACKEND=applescript to use the previous backend. The native backend returns first and last names directly and preserves phone/email update semantics: omit a collection to keep it, or pass [] to clear it. Contact notes require a separate macOS entitlement; a nonempty note is rejected before a native write. The AppleScript backend remains available for notes.

The helper also answers lookup_handles (a JSON array of phone numbers or email addresses) with the contacts that could own them, in one pass over the directory. Unlike the other commands it never asks for access: without a grant it returns PERMISSION_DENIED or AUTHORIZATION_UNKNOWN. AppleContactsBridge.lookup_handles applies the phone_matching exact-owner rules to that set, and Apple-Tools-MCP uses it to name Messages handles, only when the helper is already built. It is not exposed as an MCP tool.

The native helper compiles an immutable source snapshot into a bundle named by its full SHA-256 hash. A source change during compilation is rejected, and a concurrent build cannot replace an installed bundle. Different source versions keep separate executables with the same bundle identifier. The helper is ad-hoc signed, so macOS may ask once more after an update that changes its source.

The native helper is adapted from Jaume Puig's work in JaumeAP/Apple-MCPs.

來源:AppleContacts-MCP/README.md,提交 9aeaa81

工具

16

contacts_health

Contacts Health

Report the active Apple Contacts MCP configuration.

無需輸入參數。

contacts_permission_guide

Contacts Permission Guide

Explain how to grant Apple Contacts permission on macOS.

無需輸入參數。

contacts_recheck_permissions

Contacts Recheck Permissions

Recheck Contacts access after the user changes macOS permissions, and notify the client that Contacts resources changed.

無需輸入參數。

contacts_list_contacts

List Contacts

List Apple Contacts entries.

輸入參數limitoffset

contacts_search_contacts

Search Contacts

Search Apple Contacts by name, phone number, or email address.

輸入參數limitquery必填

contacts_get_contact

Get Contact

Fetch full details for an Apple Contacts record by contact_id.

輸入參數contact_id必填

contacts_resolve_message_recipient

Resolve Message Recipient

Resolve a contact into a message-ready phone number or email address.

輸入參數query必填channel

contacts_find_duplicates

Find Duplicate Contacts

Find likely duplicate Apple Contacts records using names, nicknames, phone numbers, and email addresses.

無需輸入參數。

contacts_suggest_merge_candidates

Suggest Merge Candidates

Return likely duplicate Apple Contacts groups that are strong candidates for cleanup review.

輸入參數query

contacts_create_contact

Create Contact

Create a new contact in Apple Contacts with a first name (required) and optional last name, organization, and note.

輸入參數noteemailsphoneslast_namefirst_name必填organization

contacts_update_contact

Update Contact

Update an existing contact's information. Only the fields you provide will be changed.

輸入參數noteemailsphoneslast_namecontact_id必填first_nameorganization

contacts_delete_contact

Delete Contact

Permanently delete a contact by contact_id. Requires full_access safety mode.

輸入參數contact_id必填

contacts_list_prompts

Contacts List Prompts

Fallback prompt discovery tool for tool-only MCP clients.

無需輸入參數。

contacts_get_prompt

Contacts Get Prompt

Fallback prompt rendering tool for tool-only MCP clients.

輸入參數name必填arguments_json

search_tools

Search Tools

Search this server's tool catalog by keyword, alias, or domain tag.

輸入參數modelimitquery必填domain_tags

get_tool_info

Get Tool Info

Load the full schema, examples, and metadata for one tool from this server.

輸入參數name必填include_schemainclude_examples

版本歷史

8
  1. v1.1.6最新Nov 6, 2026
  2. v1.1.4Oct 29, 2026
  3. v1.1.3Oct 22, 2026
  4. v1.1.2Oct 14, 2026
  5. v1.1.1Oct 13, 2026
  6. v1.1.0Oct 10, 2026
  7. v1.0.5Sep 26, 2026
  8. v1.0.4Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分