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 上本地运行,以 stdio 进程通过 uvx 从 PyPI 包启动(从克隆安装需 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 分