# Apple Contacts

Lets an AI client read and search Apple Contacts on macOS, then turn a match into a recipient ready for a message.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 29
- Author: JonathanRReed
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/JonathanRReed/Apple-MCPs/tree/HEAD/applecontacts-mcp
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/apple-contacts

## What it does

The server runs on your Mac and hands the client tools for looking up entries in Contacts. One of them resolves a person into a recipient you can drop straight into an email or a text. Handy when the agent needs to reach someone and you don't have the address at hand.

You need macOS and Python 3.11+. Startup goes through `uvx apple-contacts-mcp`, so install `uv` first — the command fails without it. Safety behaviour comes from `APPLE_CONTACTS_MCP_SAFETY_MODE`; a blank or invalid value falls back to `safe_readonly`. Access to Contacts itself is granted by you in the macOS prompt or System Settings. Nothing approves it on your behalf.

\`stdio` is the default transport. Streamable HTTP needs `APPLE_<DOMAIN>_MCP_TRANSPORT=streamable-http` plus the host and port variables, and the bind is limited to `127.0.0.1`, `::1` or `localhost` — these servers have no remote authentication and reject network or wildcard binds. Putting one behind a tunnel or public proxy is out. Whatever the server returns may travel on to your model provider, and Apple apps sync through iCloud, so local execution does not keep the data local.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `APPLE_CONTACTS_MCP_SAFETY_MODE` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env APPLE_CONTACTS_MCP_SAFETY_MODE=<APPLE_CONTACTS_MCP_SAFETY_MODE> --transport stdio applecontacts-mcp -- uvx apple-contacts-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from apple-contacts-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add applecontacts-mcp --env APPLE_CONTACTS_MCP_SAFETY_MODE=<APPLE_CONTACTS_MCP_SAFETY_MODE> -- uvx apple-contacts-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from apple-contacts-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "applecontacts-mcp": {
            "command": "uvx",
            "args": [
                "apple-contacts-mcp"
            ],
            "env": {
                "APPLE_CONTACTS_MCP_SAFETY_MODE": "<APPLE_CONTACTS_MCP_SAFETY_MODE>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from apple-contacts-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "applecontacts-mcp": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "apple-contacts-mcp"
            ],
            "env": {
                "APPLE_CONTACTS_MCP_SAFETY_MODE": "<APPLE_CONTACTS_MCP_SAFETY_MODE>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from apple-contacts-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e APPLE_CONTACTS_MCP_SAFETY_MODE=<APPLE_CONTACTS_MCP_SAFETY_MODE> applecontacts-mcp uvx apple-contacts-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from apple-contacts-mcp <command>

## When to use it
- look up a contact when you don't have the exact address
- resolve a person into a message recipient
- confirm someone exists in Contacts before sending
- expose only contacts to the agent, not mail or calendar

## Example prompts
- Find Maria Sokolova in Contacts and show me her email address
- Resolve the recipient for the contract email and verify the address through Contacts
- Search Contacts for the surname Reed and tell me the phone number

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

From the same set: [jonathanrreed/apple-mcps](https://affpapa.org/en/nevibecode/by/jonathanrreed/apple-mcps.md) — 4 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
