# local-mcp MCP server

Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.

## Links
- Registry page: https://www.getdrio.com/mcp/com-local-mcp-local-mcp
- Repository: https://github.com/lanchuske/local-mcp-releases

## Install
- Command: `npx -y local-mcp`
- Endpoint: https://local-mcp.com/mcp
- Auth: Not captured

## Setup notes
- Package: Npm local-mcp v3.0.360
- Environment variable: LMCP_REF
- Remote endpoint: https://local-mcp.com/mcp

## Tools
- setup_install (Install LMCP) - Returns a personalized LMCP install link and setup steps (~30 sec to install). LMCP is a free Mac app that gives access to Mail, Calendar, Contacts, Teams, OneDrive, Notes, Reminders, and 100+ tools on the user's Mac (data stays local). A user would invoke this to install LMCP or reconnect it. Pass os ("macos", or windows/linux/ios/android). Optional: email, step, issue. Endpoint: https://local-mcp.com/mcp
- chrome_click (Chrome Click) - Clicks the first element matching a CSS selector in the current Google Chrome tab. Returns the tag name and visible text of the clicked element so you can confirm the right thing was hit. Pass `wait_for_navigation: true` to wait up to 3 seconds for the page to load after the click. Endpoint: https://local-mcp.com/mcp
- chrome_fill_form (Chrome Fill Form) - Fills multiple form fields in one shot in the current Google Chrome tab. Pass fields as a JSON object mapping CSS selector to value. Endpoint: https://local-mcp.com/mcp
- chrome_go_back (Chrome Go Back) - Navigates the current Google Chrome tab back to the previous page. Endpoint: https://local-mcp.com/mcp
- chrome_history (Chrome History) - Lists or searches the user's Google Chrome browsing history (local SQLite, read-only — no page is opened). Optional `query` matches the URL or page title (case-insensitive substring). Returns url, title, visit_count and last_visit (ISO), newest first. Requires Full Disk Access. For Safari use safari_history. Endpoint: https://local-mcp.com/mcp
- chrome_list_tabs (Chrome List Tabs) - Lists every open tab across all Google Chrome windows with title, URL, and whether it is active. Endpoint: https://local-mcp.com/mcp
- chrome_navigate (Chrome Navigate) - Navigates Google Chrome to a URL. Pass new_tab=true to open in a new tab. Endpoint: https://local-mcp.com/mcp
- chrome_query_selector_all (Chrome Query Selector All) - Runs document.querySelectorAll in the current Google Chrome tab and returns a compact summary of each match. Endpoint: https://local-mcp.com/mcp
- chrome_read_tab (Chrome Read Tab) - Reads the rendered text content of a Google Chrome tab. Call with NO arguments to read the current (active) tab — the same tab chrome_wait_for/chrome_click/chrome_navigate just operated on; use this right after chrome_wait_for, since the tab may have navigated and its URL changed. Or identify a specific tab by `url_match` (substring match against URL; first hit wins — falls back to the active tab if nothing matches) or by `window_index` + `tab_index` (from chrome_list_tabs). Text is capped at `max_bytes` (default 100 KB). Pass `include_html: true` to also get the raw HTML source. Pass `include_links: true` to extract all links with their href and text. Requires 'Allow JavaScript from Apple Events' (Chrome → View → Developer); run chrome_setup_check if reads come back empty. Endpoint: https://local-mcp.com/mcp
- chrome_search_tabs (Chrome Search Tabs) - Searches the rendered text of every open Google Chrome tab for a substring. Returns each matching tab with the surrounding snippet. Useful for 'do I have a tab open with X?' across many tabs. Requires 'Allow JavaScript from Apple Events' (Chrome → View → Developer). Endpoint: https://local-mcp.com/mcp
- chrome_setup_check (Chrome Setup Check) - Reports whether Google Chrome is ready for interactive tools (chrome_click, chrome_type, chrome_evaluate_js, chrome_read_tab text). Returns setup instructions if JavaScript from Apple Events is not enabled. Endpoint: https://local-mcp.com/mcp
- chrome_type (Chrome Type) - Sets the value of an input/textarea matching a CSS selector in the current Google Chrome tab and fires input/change events. Endpoint: https://local-mcp.com/mcp
- chrome_wait_for (Chrome Wait For) - Polls the current Google Chrome tab until a CSS `selector` appears, or until `text_match` appears (anywhere on the page, or inside `selector` if you also pass one). Pass at least one of `selector`/`text_match`. Useful after chrome_click to wait for the next page or a modal to render. Endpoint: https://local-mcp.com/mcp
- complete_omnifocus_task (Complete OmniFocus Task) - Marks an OmniFocus task as complete by task ID or name. Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- complete_reminder (Complete Reminder) - Marks a reminder complete in Apple Reminders (Reminders.app). Requires confirm=true. For Microsoft To Do use todo_complete_task instead. Endpoint: https://local-mcp.com/mcp
- configure_clients (Configure Clients) - Adds Local MCP to the config of installed MCP-capable AI clients on this Mac (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Zed) so they can use LMCP's tools — no manual JSON editing. Read-only PREVIEW unless confirm:true. Optionally pass a single `client` id to configure just that one. Returns which clients it set up, which already had Local MCP, which aren't installed, and the restart step for each. Pair with list_missing_permissions for fully agent-driven setup. Endpoint: https://local-mcp.com/mcp
- connect_m365_account (Connect Microsoft 365 Account) - Connect your Microsoft 365 account. Call once to get a login code, then call again after you've authenticated at microsoft.com/devicelogin to confirm the connection. Endpoint: https://local-mcp.com/mcp
- connect_todoist (Connect Todoist) - Connect Todoist. For security your API token is entered directly in Local MCP's own settings window — never passed through the AI. Call this to get the instructions, or to check whether Todoist is already connected. Endpoint: https://local-mcp.com/mcp
- create_calendar_event (Create Calendar Event) - Creates an event in the Mac's Calendar app (Calendar.app). Requires title, start_date, end_date. Optionally invite attendees by email (CalDAV/Exchange calendars only), or make it a repeating event with `recurrence` (daily/weekly/monthly/yearly). For Microsoft 365 use m365_create_event instead. Endpoint: https://local-mcp.com/mcp
- create_draft (Create Draft) - Saves an email to the Mail.app Drafts folder for the user to review and send manually — never sends. Composes a new draft (pass `to`/`subject`/`body`), or a reply draft (pass `reply_to_message_id` plus `body`). A reply draft's response includes `threaded`: true means the saved draft was read back and its headers reference the source message (it will appear inside the conversation); false means it saved WITHOUT threading headers (relay the warning to the user); "unconfirmed" means it could not be read back in time (e.g. Exchange sync lag). On a multi-account Mac, pass `account` (an account name from list_email_accounts) or `from` (a sender address) to place the draft in that account's Drafts; otherwise it lands in the default account. Attach files by passing `attachments` (comma-separated absolute file paths, e.g. a PDF quote) — they are attached to the saved draft. Use this for the cautious user who wants AI-composed mail but insists on sending it themselves. Endpoint: https://local-mcp.com/mcp
- create_email_folder (Create Email Folder) - Creates a new mailbox folder in Mail.app. Endpoint: https://local-mcp.com/mcp
- create_note (Create Note) - Creates a new note in Apple Notes. The body accepts Markdown (headings, bold/italic, bullet/numbered lists, links, inline code) — it's converted to Apple Notes' native formatting. Requires confirm=true to execute. Endpoint: https://local-mcp.com/mcp
- create_omnifocus_task (Create OmniFocus Task) - Creates a new task in OmniFocus. Requires confirm=true to execute. Endpoint: https://local-mcp.com/mcp
- create_referral_invites (Create Referral Invites) - Records referral invites for the colleagues a user chose to invite and returns a unique referral link per person, so the user can later see who installed or activated LMCP. It does not send anything itself — each returned link can be included in an email or message to that person. `lang` records the language the invite is written in (e.g. "es", "en"). Endpoint: https://local-mcp.com/mcp
- create_reminder (Create Reminder) - Creates a reminder in Reminders.app. Endpoint: https://local-mcp.com/mcp
- create_reminder_list (Create Reminder List) - Creates a new list in Apple Reminders (Reminders.app). Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- daily_brief (Daily Brief) - Returns a single morning briefing combining today's calendar events, overdue and due-today reminders, unread inbox email count + subjects, and — when a location is provided — today's weather. Perfect for starting each day: one call gives you everything on your plate. Endpoint: https://local-mcp.com/mcp
- delete_calendar_event (Delete Calendar Event) - Deletes an event from the Mac's Calendar app (Calendar.app) by ID. Requires confirm=true. For a repeating event, pass span='future' to delete the whole series (this and all following occurrences); the default deletes only the single occurrence. For Microsoft 365 use m365_delete_event instead. Endpoint: https://local-mcp.com/mcp
- delete_reminder (Delete Reminder) - Permanently deletes a reminder in Apple Reminders (Reminders.app) by ID. Get the reminder_id from list_reminders. Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- delete_reminder_folder (Delete Reminder Folder) - Deletes an Apple Reminders list AND all reminders inside it — cannot be undone. Pass the list name (or list_id from get_reminder_folders). Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- disconnect_m365_account (Disconnect Microsoft 365 Account) - Disconnect your Microsoft 365 account and remove stored tokens. Endpoint: https://local-mcp.com/mcp
- disconnect_todoist (Disconnect Todoist) - Disconnect Todoist and remove the stored API token. Endpoint: https://local-mcp.com/mcp
- excel_create (Excel Create) - Creates a new Excel spreadsheet (.xlsx file) with headers and optional data rows. Endpoint: https://local-mcp.com/mcp
- excel_read (Excel Read) - Reads data from an Excel spreadsheet (.xlsx file). Returns the first row as `headers` and the remaining data rows as `rows` — mirroring excel_create's `headers`/`rows` params, so a read→create round-trip needs no manual row-0 handling. Endpoint: https://local-mcp.com/mcp
- excel_write_cell (Excel Write Cell) - Writes a value to a specific cell in an Excel file. Address the cell either with `cell` in A1 notation (e.g. "B2") or with `row`+`column` as 1-based integers. Endpoint: https://local-mcp.com/mcp
- file_list (File List) - Lists files and folders in a local directory. Defaults to the user's home directory. Returns name, path, type (file/directory), size, and modification date for each item. Sorted: directories first, then files, both alphabetically. Endpoint: https://local-mcp.com/mcp
- file_read (File Read) - Reads a plain text file from the local filesystem by its absolute path — the primary, default tool for reading a local text file (use this unless the file is a PDF, Word, Excel, or PowerPoint document, which have their own readers). The path must be inside an allowed folder — the same allowlist as file_write (the home directory by default; extend via Settings → Advanced → Allowed folders). A path outside the allowlist returns an actionable 'access denied' naming the allowed folders. Supports .txt, .md, .csv, .json, .xml, .log, .yaml, .toml and common code file types; auto-detects UTF-8 with Latin-1/Windows-1252 fallback. For files in OneDrive use onedrive_read_file, in Google Drive gdrive_read_file; for PDFs pdf_read, Word word_read, Excel excel_read. Endpoint: https://local-mcp.com/mcp
- file_search (File Search) - Searches for files and folders by name (case-insensitive, partial match) starting from a root directory. Defaults to the home directory. Returns matching items with path, type, and size. Endpoint: https://local-mcp.com/mcp
- file_write (File Write) - Writes text to a local file — create, overwrite, or append. For .txt/.md/.csv/.json/.log and any plain-text or code file. (For Word use word_create, Excel excel_create, PowerPoint ppt_create.) The path must be inside an allowed folder — the same allowlist as file_read (home directory by default; extend via Advanced Settings → Allowed folders). Overwriting an existing file requires confirm=true (the first call returns a preview instead); append=true adds to the end and never needs confirm. Missing parent folders are created. Endpoint: https://local-mcp.com/mcp
- finder_list (Finder List) - Lists files and folders in a directory (Spotlight-free). The path must be inside an allowed folder — the same allowlist as file_read/file_write (the home directory by default; extend via Settings → Advanced → Allowed folders). A path outside the allowlist returns an actionable 'access denied' naming the allowed folders. Endpoint: https://local-mcp.com/mcp
- finder_search (Finder Search) - Searches for files by name within the allowlist (uses mdfind/Spotlight). Scoped to the allowed folders — the home directory by default (extend via Settings → Advanced → Allowed folders); pass path= to search a specific allowed folder. A path outside the allowlist returns an actionable 'access denied'. Endpoint: https://local-mcp.com/mcp
- gdrive_file_info (Gdrive File Info) - Metadata for a file/folder in the synced Google Drive: size, dates, type. Cheaper than listing the whole directory. Endpoint: https://local-mcp.com/mcp
- gdrive_list_files (Gdrive List Files) - Lists files and folders in a Google Drive path (the locally-synced folder). Use gdrive_root first for valid roots — 'My Drive' and 'Shared drives' live inside each mount. Returns up to `limit` entries (default 1000). Endpoint: https://local-mcp.com/mcp
- gdrive_read_file (Gdrive Read File) - Reads a text file from the synced Google Drive folder (.txt, .md, .csv, .json, code files...). Note: native Google Docs/Sheets/Slides sync as .gdoc/.gsheet pointers, not real files — export them from Drive or read Office/PDF copies instead. Auto-detects UTF-8 with Latin-1/CP1252 fallback. For files outside Google Drive, use file_read. Endpoint: https://local-mcp.com/mcp
- gdrive_root (Gdrive Root) - Lists the Google Drive folders synced on this Mac (My Drive, Shared drives, per-account mounts). Start here to get valid paths for the other gdrive_* tools. Reads the folder Google Drive for Desktop already syncs — no Google API, no OAuth. Endpoint: https://local-mcp.com/mcp
- gdrive_search_files (Gdrive Search Files) - Searches the synced Google Drive folder for files by name (recursive). Returns up to max_results matches (default 50). Endpoint: https://local-mcp.com/mcp
- gdrive_write_file (Gdrive Write File) - Writes or overwrites a text file in the synced Google Drive folder — it uploads automatically via the official client. First call returns a preview; pass confirm=true to write. Endpoint: https://local-mcp.com/mcp
- get_audit_log (Get Audit Log) - Returns recent LMCP tool call history from the local audit log. Each entry shows timestamp, tool name, call source (local/cloud), success status, and duration. Useful for GDPR Article 30 compliance reporting and debugging. Endpoint: https://local-mcp.com/mcp
- get_config (Get Config) - Returns the current LMCP configuration (api_key masked). Endpoint: https://local-mcp.com/mcp
- get_contact (Get Contact) - Gets a contact from the Mac's Contacts app (Contacts.app) by name or ID. Pass `name` to look up directly by name (no need to search_contacts first — if several people match it returns a compact list to choose from), or `contact_id` for an exact lookup. For Microsoft 365 use m365_get_contact instead. Endpoint: https://local-mcp.com/mcp
- get_datetime (Get Datetime) - Get the current date and time of the machine where LMCP runs — with timezone and UTC offset. Call this whenever you need the real 'now' on the user's computer: before creating calendar events or reminders, resolving relative dates like 'today'/'tomorrow'/'next Friday', or timestamping. Takes no arguments. Endpoint: https://local-mcp.com/mcp
- get_m365_person (Get Microsoft 365 Person) - Get detailed information about a specific person in your Microsoft 365 directory by their user ID or email address. Use 'me' to get the currently authenticated user's profile. Endpoint: https://local-mcp.com/mcp
- get_reminder_folders (Get Reminder Folders) - Lists the lists (folders) in Apple Reminders (Reminders.app) on this Mac. For Microsoft To Do use todo_get_folders instead. Endpoint: https://local-mcp.com/mcp
- get_weather (Get Weather) - Gets the current weather and a short daily forecast for a location. Pass a city name ('London', 'San Francisco', 'Tokyo,JP') or 'lat,lon' coordinates. Uses Open-Meteo — no API key required. Location must be provided (there is no device-location access). Endpoint: https://local-mcp.com/mcp
- list_accounts (List Accounts) - Lists Mail.app email accounts WITH each account's email addresses and type (imap/pop/iCloud). Slower — queries Mail directly. For just the account NAMES (to pass to list_emails(account=...)), prefer list_email_accounts: it's faster (cached, no Mail lock). Use list_accounts only when you specifically need the addresses or account type. Endpoint: https://local-mcp.com/mcp
- list_calendar_events (List Calendar Events) - Lists events from the Mac's Calendar app (Calendar.app, local/iCloud calendars) in a date range, or reads ONE event in full via event_id. List entries preview notes (200 chars, notes_truncated flag) and cap attendees; pass event_id to get the complete notes and full roster. Defaults to today + 7 days. For a Microsoft 365 calendar use m365_list_events instead. Endpoint: https://local-mcp.com/mcp
- list_calendar_names (List Calendar Names) - Lists the calendars in the Mac's Calendar app (Calendar.app, local/iCloud). For Microsoft 365 calendars use the m365 calendar tools instead. Endpoint: https://local-mcp.com/mcp
- list_contacts (List Contacts) - Lists contacts from the macOS Contacts app. Optionally filter by group. Endpoint: https://local-mcp.com/mcp
- list_displays (List Displays) - Lists connected displays with bounds (global space, top-left origin, points), backing scale_factor, and which is main. display_id is the CGDirectDisplayID — the SAME value list_windows reports for each window's display_id, so you can map a window to its display. Stable for the session. No permission required. Endpoint: https://local-mcp.com/mcp
- list_email_accounts (List Email Accounts) - Lists all Mail.app account NAMES (fast — cached, no Mail lock). This is the preferred way to get account names: call it first to discover them, then use list_emails(account=name) to fetch messages from a specific account. If you also need each account's email addresses or type (imap/pop/iCloud), use list_accounts instead. Endpoint: https://local-mcp.com/mcp
- list_email_folders (List Email Folders) - Lists the full folder (mailbox) tree for Apple Mail (Mail.app) accounts, including nested subfolders. Use this to discover the exact folder names that move_email(target_mailbox=...) and list_emails(mailbox=...) expect. Outlook.com, Exchange, Gmail, iCloud and IMAP accounts added to Mail.app are all included. For a Graph-only Microsoft 365 mailbox not added to Mail.app, use m365_list_emails instead.

Pass account=<name> (from list_email_accounts) to enumerate one account fully; without it, every account is walked which can be slow on macOS 15+. Message counts are off by default (slow on IMAP) — pass include_counts=true to add unread/total per folder. Endpoint: https://local-mcp.com/mcp
- list_emails (List Emails) - Use this when the user wants to see or triage their inbox on this Mac (Apple Mail — any account added to Mail.app: iCloud, Gmail, IMAP, Exchange). Lists email headers (subject, sender, date, unread); call read_email(message_id) for the full body. For a Microsoft 365 mailbox NOT added to Mail.app, use m365_list_emails.

IMPORTANT: On machines with 3+ accounts, always pass account=<name> (from list_email_accounts) to avoid timeouts. Without account, all accounts are scanned which can be slow on macOS 15+.

Supports pagination: use offset to page through results (e.g. offset=20 for page 2 with limit=20). The limit parameter is capped at 50 per call (default 20); to read more, page with offset rather than requesting a larger limit. Endpoint: https://local-mcp.com/mcp
- list_m365_people_insights (List Microsoft 365 People Insights) - List the people most relevant to you in Microsoft 365 — based on your communication patterns, collaboration history, and org chart. Useful for meeting prep and contact enrichment. Endpoint: https://local-mcp.com/mcp
- list_message_chats (List Message Chats) - Lists recent iMessage / Messages.app conversations (chat id, name, service). Start here for Messages — the chat id it returns is what read_messages / search_messages / send_message need. Endpoint: https://local-mcp.com/mcp
- list_missing_permissions (List Missing Permissions) - Returns the macOS privacy (TCC) permissions Local MCP needs that are NOT granted yet, each with a one-click `open_url` that opens the exact System Settings → Privacy & Security pane. Read-only and passive (never prompts). Use it during setup or before a workflow to tell the user precisely which "Allow" clicks remain (Calendar, Contacts, Reminders, Mail Automation, Full Disk Access, Screen Recording, Accessibility) instead of failing mid-task. `all_granted: true` means nothing is left to do. Endpoint: https://local-mcp.com/mcp
- list_notes (List Notes) - Lists notes from Apple Notes app. Optionally filter by folder.

Paginated: `limit` is capped at 500 per call, so page with `offset` (offset=500 returns notes 501-1000) instead of asking for a bigger limit. The response carries `total` (how many notes match in all) and `has_more` (whether anything is left past this page), so you never have to guess whether you got everything — page until `has_more` is false, which is exact even when `total_is_estimated` says the count is only a lower bound. To read a WHOLE library, pass order="id" — see the order parameter. Endpoint: https://local-mcp.com/mcp
- list_omnifocus_folders (List OmniFocus Folders) - Lists folders in OmniFocus. Folders group related projects (e.g. "Work", "Personal"). Use list_omnifocus_projects to see the projects inside them. Endpoint: https://local-mcp.com/mcp
- list_omnifocus_projects (List OmniFocus Projects) - Lists projects in OmniFocus. Start here for OmniFocus (alongside list_omnifocus_folders) — the project name it returns feeds list_omnifocus_tasks / create_omnifocus_task / search_omnifocus_tasks. Endpoint: https://local-mcp.com/mcp
- list_omnifocus_tags (List OmniFocus Tags) - Lists all tags defined in OmniFocus. Endpoint: https://local-mcp.com/mcp
- list_omnifocus_tasks (List OmniFocus Tasks) - Lists tasks from OmniFocus. Filter by project, tag, inbox, due today, or flagged status. Endpoint: https://local-mcp.com/mcp
- list_referral_candidates (List Referral Candidates) - Returns the user's emailable contacts plus an invite template, for recommending LMCP to a colleague. A user would invoke this when they want to invite or recommend someone. Returns a list of candidate contacts and a message template; create_referral_invites then generates each chosen person's unique invite link. Endpoint: https://local-mcp.com/mcp
- list_reminders (List Reminders) - Lists reminders from Apple Reminders (Reminders.app) on this Mac. Optionally filter by completion status or list name. For Microsoft To Do use todo_list_tasks instead. Endpoint: https://local-mcp.com/mcp
- list_safari_bookmarks (List Safari Bookmarks) - Lists Safari bookmarks (title + URL) from the Mac's Safari (reads ~/Library/Safari/Bookmarks.plist — needs Full Disk Access). Endpoint: https://local-mcp.com/mcp
- list_windows (List Windows) - Lists on-screen windows of any app with window_id, owning app bundle id + name, title, bounds (global space, top-left, points), display_id (the CGDirectDisplayID — matches list_displays, so you can look up which display a window is on), and is_focused. Window TITLES require Screen Recording permission — without it this returns an explicit permission_required error rather than a title-less result. Optional app_bundle_id filter. window_id is stable within the session for later targeting. Endpoint: https://local-mcp.com/mcp
- lmcp_install_upgrade (LMCP Install Upgrade) - Checks for and installs a newer LMCP version — a self-upgrade of the LMCP app itself (not editing any of your data). Installing downloads the new version and RESTARTS LMCP (the AI client briefly reconnects), so it requires confirm=true. Pass check_only=true to only report whether a newer version is available, with no download or restart. Endpoint: https://local-mcp.com/mcp
- lmcp_state (LMCP State) - Returns a structured snapshot of the LMCP environment: server/tray/teams-proxy versions, detected AI client, cloud relay state, TCC permission states (Calendar/Reminders/Contacts), and a compact summary of which services (Mail/Calendar/Contacts/Teams/OneDrive/Reminders/Notes) are reachable. Fast (<500ms), passive — never prompts the user, never opens app windows, never touches the network. Call this when you need to verify the environment is healthy before attempting a tool, or to understand what's installed and accessible. If `services.scan_pending` is true, the background service scan hasn't finished yet (just after startup) and the per-service running/accounts values are placeholders — do NOT treat them as a real outage; just call the tool you need. Otherwise `services.scanned_seconds_ago` tells you how many seconds ago that scan ran (cadence ~60s): the per-service values are a snapshot, NOT a live probe. A `false`/`0`/`not available` for a service is advisory only — it can be stale (e.g. the user connected WhatsApp or opened Mail seconds ago) — so never use this tool as a preflight gate to skip or cancel a task; the actual tool call is the source of truth, just attempt it. For reporting failures, use `report_problem` instead — it captures this same snapshot plus logs and submits to the team. Endpoint: https://local-mcp.com/mcp
- lmcp_upgrade_diagnostics (LMCP Upgrade Diagnostics) - Returns LMCP's self-upgrade health (the LMCP app upgrading itself, not editing your data): current version, the last N app-version upgrade attempts with any errors, whether the upgrade cache dir is writable, and any stale LMCP binaries at alternate paths. Call this when the app's auto-upgrade seems stuck, or to explain why a user is on an old version. Endpoint: https://local-mcp.com/mcp
- m365_create_event (Microsoft 365 Create Event) - Create a calendar event in your Microsoft 365 / Outlook calendar. Endpoint: https://local-mcp.com/mcp
- m365_delete_event (Microsoft 365 Delete Event) - Delete a calendar event from your Microsoft 365 / Outlook calendar by its ID. Endpoint: https://local-mcp.com/mcp
- m365_get_contact (Microsoft 365 Get Contact) - Get full details of a specific Microsoft 365 contact by ID. Get the ID from m365_list_contacts or m365_search_contacts. Endpoint: https://local-mcp.com/mcp
- m365_list_contacts (Microsoft 365 List Contacts) - List contacts from your Microsoft 365 / Outlook address book. Endpoint: https://local-mcp.com/mcp
- m365_list_emails (Microsoft 365 List Emails) - Use this when the user wants their Microsoft 365 / Outlook / Exchange inbox via the cloud — requires a connected M365 account (connect_m365_account). Returns subject, sender, date, and preview. For mail already in the Mac's Mail.app (including an Exchange account added there), use list_emails. Endpoint: https://local-mcp.com/mcp
- m365_list_events (Microsoft 365 List Events) - List upcoming calendar events from your Microsoft 365 / Outlook calendar. Endpoint: https://local-mcp.com/mcp
- m365_read_email (Microsoft 365 Read Email) - Use this when the user wants the full content of a Microsoft 365 email (message ID from m365_list_emails/m365_search_emails). Requires a connected M365 account. For a message found via list_emails/search_emails (Apple Mail), use read_email. Endpoint: https://local-mcp.com/mcp
- m365_reply_email (Microsoft 365 Reply Email) - Use this when the user wants to reply to a Microsoft 365 email (message ID from m365_list_emails). Requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For replying to a message found in Apple Mail, use reply_email. Endpoint: https://local-mcp.com/mcp
- m365_search_contacts (Microsoft 365 Search Contacts) - Search contacts in your Microsoft 365 address book by name, email, or company. Endpoint: https://local-mcp.com/mcp
- m365_search_emails (Microsoft 365 Search Emails) - Use this when the user wants to find emails in their Microsoft 365 / Outlook mailbox via the cloud — requires a connected M365 account. Searches by keyword, sender, or subject. For accounts added to the Mac's Mail.app, use search_emails. Endpoint: https://local-mcp.com/mcp
- m365_send_email (Microsoft 365 Send Email) - Use this when the user wants to send from their Microsoft 365 / Outlook account via the cloud — requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For sending from an account configured in the Mac's Mail.app, use send_email. Endpoint: https://local-mcp.com/mcp
- media_probe (Media Probe) - Reports duration_ms, width, height, fps, whether it has audio, and file size for a video/audio file. Call it before editing to reason about the footage (compute trim ranges, pick a reframe crop). No permission required. Endpoint: https://local-mcp.com/mcp
- move_email (Move Email) - Moves an email to another mailbox (nested target folders are found by name). Pass account= (returned by list_emails/search_emails) so the message lookup targets one account instead of scanning all of them — without it, multi-account Macs are slow and can time out on bulk moves. If you know the folder the message is in, also pass mailbox= (the `mailbox` field from the listing) so the lookup searches it first. Endpoint: https://local-mcp.com/mcp
- nordvpn_diagnose (NordVPN Diagnose) - Run a diagnostic check on NordVPN: installation, login state, connection status, kill switch, and supported protocols. Useful for troubleshooting. Endpoint: https://local-mcp.com/mcp
- nordvpn_servers (NordVPN Servers) - Get recommended NordVPN servers by country or specialty. Uses NordVPN public API (no account needed). Returns server name, hostname, country, city, load %, and supported technologies. Endpoint: https://local-mcp.com/mcp
- nordvpn_status (NordVPN Status) - Check NordVPN connection status: connected/disconnected, auto-connect, snooze, and last known location. Does NOT open NordVPN. Endpoint: https://local-mcp.com/mcp
- notion_list_databases (Notion List Databases) - Lists Notion databases cached on this Mac with their schema (column names and types). Use notion_read_database to get the rows. Endpoint: https://local-mcp.com/mcp
- notion_list_pages (Notion List Pages) - Lists Notion pages cached on this Mac (titles, last edited, hierarchy), newest first. Reads the Notion desktop app's local cache — no Notion API, no integration token. Note: only pages visited in Notion (or marked Available offline) are cached. Endpoint: https://local-mcp.com/mcp
- notion_list_workspaces (Notion List Workspaces) - Lists the Notion workspaces cached on this Mac with their members (names and emails). Start here for Notion — its output feeds notion_list_databases / notion_list_pages / notion_search. Endpoint: https://local-mcp.com/mcp
- notion_open_page (Notion Open Page) - Opens a Notion page in the desktop app (deep link). Accepts a page id or title. Useful to let the user view or edit a page, or to pull an uncached page into the local cache. Endpoint: https://local-mcp.com/mcp
- notion_read_database (Notion Read Database) - Reads the cached rows of a Notion database with their properties mapped through the schema. Accepts the database id or name (partial match). Only locally-cached rows are returned. Endpoint: https://local-mcp.com/mcp
- notion_read_page (Notion Read Page) - Reads a Notion page from the local cache and returns its content as markdown (headings, lists, to-dos, code, files, subpage links). Accepts a page id or a title (partial match). If parts of the page aren't cached yet, says so — open the page in Notion or mark it Available offline for full content. Endpoint: https://local-mcp.com/mcp
- notion_search (Notion Search) - Searches cached Notion content (page titles and block text) for a phrase, case-insensitive. Returns matching blocks with the page they belong to. Only locally-cached content is searched — pages never opened in Notion won't match. Endpoint: https://local-mcp.com/mcp
- onedrive_delete_file (OneDrive Delete File) - Deletes a file or empty folder from OneDrive. Endpoint: https://local-mcp.com/mcp
- onedrive_file_info (OneDrive File Info) - Returns metadata for a file or folder: size, modification date, type, and extension. Faster than listing the parent directory when you only need info about one item. Endpoint: https://local-mcp.com/mcp
- onedrive_list_files (OneDrive List Files) - Lists files and folders in a OneDrive path. Use onedrive_root to find valid paths. Returns up to `limit` entries (default 1000, max 5000); large folders are truncated with a note — narrow the path for more specific results. Endpoint: https://local-mcp.com/mcp
- onedrive_move_file (OneDrive Move File) - Moves or renames a file/folder within OneDrive. Endpoint: https://local-mcp.com/mcp
- onedrive_read_file (OneDrive Read File) - Reads a text file from your OneDrive synced folder. Supports .txt, .md, .csv, .json, .xml, .log and several code file types. Auto-detects UTF-8, falls back to Latin-1/Windows-1252 for legacy files (common in Latin American banking .TXT padrones). For files elsewhere on this Mac, use file_read. Endpoint: https://local-mcp.com/mcp
- onedrive_root (OneDrive Root) - Lists all mounted OneDrive directories on this Mac. Start here for OneDrive — the mount paths it returns are what the other onedrive_* tools (onedrive_list_files, onedrive_read_file, onedrive_search_files) need. Endpoint: https://local-mcp.com/mcp
- onedrive_search_files (OneDrive Search Files) - Searches for files by name in a OneDrive directory (recursive). Returns up to max_results matches (default 50); raise max_results or narrow the root for more. Endpoint: https://local-mcp.com/mcp
- onedrive_set_scope (OneDrive Set Scope) - Restricts LMCP's OneDrive access to a specific folder. Once set, all OneDrive tools (read, write, list, search, delete, move) only work inside the allowed folder. Pass an empty folder to remove the restriction. Changes take effect immediately. Endpoint: https://local-mcp.com/mcp
- onedrive_write_file (OneDrive Write File) - Writes text content to a file in OneDrive. Endpoint: https://local-mcp.com/mcp
- outlook_diagnose (Outlook Diagnose) - Checks which email accounts are configured in Microsoft Outlook and compares them with Mail.app. If Outlook has accounts not in Mail.app, guides the user to add them so all email tools work seamlessly. Endpoint: https://local-mcp.com/mcp
- pdf_read (PDF Read) - Reads and extracts text from a PDF document (.pdf file). Endpoint: https://local-mcp.com/mcp
- permissions_status (Permissions Status) - Reports the TCC permission state (screen recording, accessibility, microphone) this app needs to capture the screen and drive other apps' UI. Call it before a capture/automation run and surface the grant hints instead of failing mid-sequence. Screen Recording / Accessibility are granted in System Settings (not a JIT dialog); the URLs open the exact pane. Endpoint: https://local-mcp.com/mcp
- ppt_create (PowerPoint Create) - Creates a PowerPoint presentation (.pptx) at `path` from an array of slides, each {title, bullets:[…]}. Requires confirm=true — called without it, returns a preview of the deck instead of writing the file. The path must be somewhere Local MCP can write; Desktop/Documents/Downloads may need a one-time Files-and-Folders grant (System Settings → Privacy & Security → Files and Folders). Returns {created, path, slides}. Endpoint: https://local-mcp.com/mcp
- ppt_read (PowerPoint Read) - Reads slide text content from a PowerPoint presentation (.pptx file). Endpoint: https://local-mcp.com/mcp
- read_email (Read Email) - Use this when the user wants the full content of an email that lives in the Mac's Apple Mail (message ID from list_emails/search_emails). For a Microsoft 365 message ID from m365_list_emails, use m365_read_email. Pass account= (and mailbox= if known, both from list_emails/search_emails) so the lookup targets one account instead of scanning all of them. Call sequentially, not in parallel — concurrent calls serialize behind Mail.app's JXA lock and later calls will time out.

Performance: body fetch is the primary latency source (avg 20s on slow IMAP). Pass include_body=false to skip it and get metadata-only (fast). Pass max_body_chars=N to cap the body at N chars after HTML stripping (default 30000; 0=unlimited). Response includes body_fetch_ms when fetch took >2s, body_omitted=true when skipped, body_truncated_at=N when cut.

When a body isn't cached on this Mac, read_email returns metadata with body_omitted=true and body_omit_reason="not_downloaded" (iCloud/IMAP optimized storage) rather than making Mail fetch it (that can be slow and tie Mail up). If the user wants it anyway, retry with force_download=true to have Mail pull the body over IMAP now and return it (waits up to ~60s). Off by default; ignored while Mail is in a cooldown. Endpoint: https://local-mcp.com/mcp
- read_messages (Read Messages) - Reads messages from an iMessage conversation by chat ID or contact name. Endpoint: https://local-mcp.com/mcp
- read_note (Read Note) - Reads the full content of a note by name or ID. Endpoint: https://local-mcp.com/mcp
- recipe_delete (Recipe Delete) - Use this when the user wants to remove one of THEIR saved recipes/skills (the manifests under ~/.local/share/local-mcp/recipes). Destructive with a preview gate: the first call (without confirm) shows what would be deleted; call again with confirm=true to actually delete. Bundled starter recipes can't be deleted. To modify a recipe instead, recipe_save with the same name overwrites it (upsert). Endpoint: https://local-mcp.com/mcp
- recipe_discover (Recipe Discover) - Browses installable community SKILLS — ready-made LMCP workflows other people published (a morning brief, inbox triage, a weekly report). A user would browse them to find a ready-made workflow for a repeatable multi-app task instead of building it from scratch. Returns a list of {id, title, category, description, steps, votes}; install one with recipe_install(id). Endpoint: https://local-mcp.com/mcp
- recipe_export (Recipe Export) - Exports a saved SKILL (recipe) as a single portable token the user can send to someone else — paste it in a message, email, or doc. The recipient installs it with recipe_import and runs it with recipe_run. A user would export a skill to share it with a teammate (a handy brief, a report, a workflow). Returns {name, skill_token} plus the readable manifest. Endpoint: https://local-mcp.com/mcp
- recipe_get (Recipe Get) - Returns the full manifest of a recipe by name. recipe_not_found if unknown. Endpoint: https://local-mcp.com/mcp
- recipe_import (Recipe Import) - Installs a SKILL someone shared with you — pass the skill_token from their recipe_export (or a raw recipe manifest JSON). Saves it to this Mac so recipe_run can use it. Safe: importing only stores the skill; when it's later run, any state-changing step (send/write/delete) previews first and needs confirmation. If a skill with the same name already exists, the import is saved under a non-colliding name. Returns {name, imported}. Endpoint: https://local-mcp.com/mcp
- recipe_install (Recipe Install) - Installs a community SKILL by id (from recipe_discover) onto this Mac so recipe_run can use it. Safe: installing only stores the skill; when it's later run, any state-changing step (send/write/delete) previews first and needs confirmation. If a skill with the same name already exists, it's saved under a non-colliding name. Returns {name, installed}. Endpoint: https://local-mcp.com/mcp
- recipe_list (Recipe List) - Lists the user's reusable SKILLS — saved recipes (an ordered sequence of LMCP tool calls with parameters), plus bundled ones — each runnable with recipe_run. Skills turn a repeated LMCP workflow into one reusable command. A user would list them to find an existing skill for a task rather than rebuilding it from scratch. Returns each skill's name, description, and steps. Endpoint: https://local-mcp.com/mcp
- recipe_run (Recipe Run) - Executes a recipe end to end: binds params, runs each step's tool in order via the registry, persists the run (see recipe_runs), and returns each step's result plus any markers_path. Recipes with state-changing steps (write/send/delete) PREVIEW first — call again with confirm:true to execute; read-only recipes run immediately. A step that errors stops the run and is reported. Endpoint: https://local-mcp.com/mcp
- recipe_runs (Recipe Runs) - Shows the history of past recipe runs and their results (recorded by recipe_run), so you can reuse, compare, or debug an automation. Pass `name` for one recipe's runs, or omit for a compact history across all recipes. Pass `run_id` (with `name`) to get that run in full detail. Newest first. Endpoint: https://local-mcp.com/mcp
- recipe_save (Recipe Save) - Saves a reusable SKILL — a named recipe (an ordered sequence of LMCP tool calls with parameters) — to this Mac so the user can re-run it anytime with recipe_run. A user would save one to turn a multi-step LMCP workflow they repeat (a morning brief, inbox triage, a weekly report, a data pull) into a single reusable command. Saved skills can be shared with other people via recipe_export. The manifest must have a name and a non-empty steps array. Returns {name}. Endpoint: https://local-mcp.com/mcp
- record_marker (Record Marker) - Drops a named marker into the active recording's timeline. t_ms is elapsed ms since recording start. Provide bounds (global points, top-left) to zoom toward an element, or omit for full-frame. note becomes a caption source. Returns no_active_session if nothing is recording. Endpoint: https://local-mcp.com/mcp
- rename_reminder_folder (Rename Reminder Folder) - Renames an existing Apple Reminders list. Pass the current list name (or list_id from get_reminder_folders) and new_name. Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- reply_email (Reply Email) - Use this when the user wants to reply to an email that lives in the Mac's Apple Mail (message ID from list_emails/search_emails). Supports plain text or HTML body. For a Microsoft 365 message ID from m365_list_emails, use m365_reply_email. Pass `account` (from list_emails/search_emails results) to skip scanning other accounts and avoid timeouts on multi-account Macs. Endpoint: https://local-mcp.com/mcp
- report_friction (Report Friction) - Send an ANONYMOUS, content-free signal when an LMCP tool fails, returns nothing useful, the user seems frustrated, or you could not accomplish what they asked. Helps the LMCP team find and fix the roughest spots. Send ONLY the category + the tool name — NEVER the user's request, message/email content, account names, or any personal data. No confirmation needed: this is anonymous (categories only) and respects the user's opt-out. Endpoint: https://local-mcp.com/mcp
- report_problem (Report Problem) - Sends a problem report, feature request, or integration request to the LMCP team — for when a user wants to report a bug, ask for a new capability, or request support for an app LMCP doesn't cover yet. Without confirm=true it returns a preview of the anonymous payload that would be sent (version, OS, permission status, and recent tool names / error-type codes — never arguments, messages or personal data); with confirm=true it submits and returns a case_id. type='problem' (default) reports a bug, type='feature' requests a new capability, type='integration' requests an unsupported app. Endpoint: https://local-mcp.com/mcp
- request_feature (Request Feature) - Submits a feature request to the LMCP team — a new capability, a tool that doesn't exist yet, or an app/integration the user wishes LMCP supported. A user would invoke this when they want to ask the team for something LMCP can't do yet. Without confirm=true it returns a preview; with confirm=true it submits. The request includes the machine ID and (if set) the account email so the team can follow up — it is not anonymous. Endpoint: https://local-mcp.com/mcp
- run_diagnostics (Run Diagnostics) - Runs a fast health check of all LMCP integrations on this machine. Shows what works, what doesn't, and how to fix it. Optionally submits a report to the LMCP team. Endpoint: https://local-mcp.com/mcp
- safari_click (Safari Click) - Clicks the first element matching a CSS selector in the current Safari tab. Returns the tag name and visible text of the clicked element so you can confirm the right thing was hit. Pass `wait_for_navigation: true` to wait up to 3 seconds for the page to load after the click (useful when clicking links or buttons that trigger navigation). Endpoint: https://local-mcp.com/mcp
- safari_fill_form (Safari Fill Form) - Fills multiple form fields in one shot. Pass fields as a JSON object mapping CSS selector to value. Endpoint: https://local-mcp.com/mcp
- safari_go_back (Safari Go Back) - Navigates the current Safari tab back to the previous page. Endpoint: https://local-mcp.com/mcp
- safari_history (Safari History) - Lists or searches the user's Safari browsing history (local SQLite, read-only — no page is opened). Optional `query` matches the URL or page title (case-insensitive substring). Returns url, title, visit_count and last_visit (ISO), newest first. Requires Full Disk Access. For Chrome use chrome_history. Endpoint: https://local-mcp.com/mcp
- safari_list_tabs (Safari List Tabs) - Lists every open tab across all Safari windows with title, URL, and whether it is active. Endpoint: https://local-mcp.com/mcp
- safari_navigate (Safari Navigate) - Navigates Safari to a URL. Pass new_tab=true to open in a new tab. Endpoint: https://local-mcp.com/mcp
- safari_query_selector_all (Safari Query Selector All) - Runs document.querySelectorAll in the current Safari tab and returns a compact summary of each match. Endpoint: https://local-mcp.com/mcp
- safari_read_tab (Safari Read Tab) - Reads the rendered text content of a Safari tab. Identify the tab either by `url_match` (substring match against URL; first hit wins) or by `window_index` + `tab_index` (from safari_list_tabs). Text is capped at `max_bytes` (default 100 KB). Pass `include_html: true` to also get the raw HTML source. Pass `include_links: true` to extract all links with their href and text (useful for following navigation in SPAs like dashboards). Endpoint: https://local-mcp.com/mcp
- safari_search_tabs (Safari Search Tabs) - Searches the rendered text of every open Safari tab for a substring. Returns each matching tab with the surrounding snippet. Useful for 'do I have a tab open with X?' questions across dozens of tabs. Endpoint: https://local-mcp.com/mcp
- safari_setup_check (Safari Setup Check) - Reports whether Safari is ready for interactive tools (safari_click, safari_type, safari_evaluate_js). Returns setup instructions if JavaScript from Apple Events is not enabled. Endpoint: https://local-mcp.com/mcp
- safari_type (Safari Type) - Sets the value of an input/textarea matching a CSS selector and fires input/change events. Endpoint: https://local-mcp.com/mcp
- safari_wait_for (Safari Wait For) - Polls the current Safari tab until a CSS `selector` appears, or until `text_match` appears (anywhere on the page, or inside `selector` if you also pass one). Pass at least one of `selector`/`text_match`. Useful after safari_click to wait for the next page or a modal to render. Endpoint: https://local-mcp.com/mcp
- save_attachment (Save Attachment) - Saves an attachment from an email to disk. Pass account= (and mailbox= if known, both from list_emails/search_emails) so the lookup targets one account instead of scanning all of them. Endpoint: https://local-mcp.com/mcp
- screen_record_start (Screen Record Start) - Begins a screen recording (ScreenCaptureKit) of a display, window, or region. Single active session in v1 — a second start returns already_recording. Returns a session_id used by record_marker and screen_record_stop. Requires Screen Recording permission; without it returns an explicit permission_required error, never a silent no-op. Endpoint: https://local-mcp.com/mcp
- screen_record_status (Screen Record Status) - Reports whether a recording is active, with the session_id, elapsed_ms, output path, and marker_count. Endpoint: https://local-mcp.com/mcp
- screen_record_stop (Screen Record Stop) - Stops the active recording, finalizes the .mov, and writes the marker timeline JSON (§6) next to it. Returns the video path, duration, resolution, marker_count and markers_path. Returns no_active_session if nothing is recording. Endpoint: https://local-mcp.com/mcp
- screenshot_capture (Screenshot Capture) - Captures a single frame of a display, window, or region to a PNG. Requires Screen Recording permission; without it returns an explicit permission_required, never a blank image. Endpoint: https://local-mcp.com/mcp
- search_contacts (Search Contacts) - Searches the Mac's Contacts app (Contacts.app, local/iCloud) by name, email, or phone number. For a Microsoft 365 directory use m365_search_contacts or search_m365_directory instead. Endpoint: https://local-mcp.com/mcp
- search_emails (Search Emails) - Use this when the user wants to find specific emails on this Mac (Apple Mail — any account added to Mail.app). Searches by keyword, sender, or date. For a Microsoft 365 mailbox NOT added to Mail.app, use m365_search_emails. On machines with 3+ accounts, pass account=<name> (from list_email_accounts) to search a specific account and avoid timeouts. Endpoint: https://local-mcp.com/mcp
- search_m365_directory (Search Microsoft 365 Directory) - Search your organization's Microsoft 365 directory for users by name or email. Returns matching users with their title, department, and contact info. Endpoint: https://local-mcp.com/mcp
- search_messages (Search Messages) - Searches iMessage conversations by content, sender name, or date range. Endpoint: https://local-mcp.com/mcp
- search_notes (Search Notes) - Searches Apple Notes by title or content.

Paginated: `limit` is capped at 100 per call, so page with `offset` instead of asking for a bigger limit. The response carries `total` (how many notes match the query in all) and `has_more`, so a capped page is never mistaken for the complete answer — page until `has_more` is false, which is exact even when `total_is_estimated` says the count is only a lower bound. To walk every match, pass order="id" — see the order parameter. Endpoint: https://local-mcp.com/mcp
- search_omnifocus_tasks (Search OmniFocus Tasks) - Searches OmniFocus tasks by name or note content. Endpoint: https://local-mcp.com/mcp
- send_email (Send Email) - Use this when the user wants to send an email from an account configured in the Mac's Apple Mail. Composes and sends via Mail.app; supports plain text or HTML body. For sending from a Microsoft 365 account NOT added to Mail.app, use m365_send_email. Pass `from` to send from a specific configured Mail.app account instead of the default sender. Pass `attachments` as a comma-separated list of absolute file paths to attach files. Endpoint: https://local-mcp.com/mcp
- send_message (Send Message) - Sends an iMessage via the Mac's Messages.app to a recipient handle (phone number with country code, e.g. +14155551234, or an Apple ID email). This is a write operation: the first call (without confirm) returns a preview; call again with confirm=true to actually send. Direct (1:1) iMessage only — sending into an existing group chat isn't supported yet. Requires Messages.app signed in to iMessage + Automation permission. Endpoint: https://local-mcp.com/mcp
- signal_compose_guidance (Signal Compose Guidance) - Composes a Signal message and returns step-by-step guidance for the user to send it themselves. This tool does NOT send: Signal Desktop exposes no local send API and LMCP reads its database read-only, so it cannot transmit Signal messages. Call it when the user wants to message someone on Signal — it drafts the text and tells them how to deliver it. First call (show_send_steps=false or omitted) returns a preview; show_send_steps=true returns the send-it-yourself steps. chat_id should come from a previous signal_list_chats call — never fabricate IDs. Endpoint: https://local-mcp.com/mcp
- signal_connect (Signal Connect) - Connect Signal to Local MCP. Reports whether Signal Desktop is installed and signed in, and tells you exactly what to do next — install Signal, or open it and link your phone. (Signal links inside its own desktop app, so the QR is shown there, not here.) Once you're signed in, signal_list_chats / signal_read_messages work. If Signal is already connected, it just reports that. Endpoint: https://local-mcp.com/mcp
- signal_list_chats (Signal List Chats) - Lists Signal conversations (chats) with last-active timestamps. Reads from the local Signal Desktop database — no network access required. Returns chat IDs, contact names, and type (direct or group). Use the chat_id in subsequent signal_read_messages calls. Endpoint: https://local-mcp.com/mcp
- signal_read_messages (Signal Read Messages) - Reads messages from a specific Signal chat. The chat_id must come from a previous signal_list_chats call. Returns messages in chronological order with sender phone numbers and body text. Only messages cached locally by Signal Desktop are available. Endpoint: https://local-mcp.com/mcp
- signal_search_messages (Signal Search Messages) - Full-text search across locally-cached Signal messages. Only messages Signal Desktop has stored on disk are searched — no network access required. Optionally restrict search to a specific chat_id. Endpoint: https://local-mcp.com/mcp
- slack_list_channels (Slack List Channels) - Lists channels in a Slack workspace, including public channels, private channels, and direct messages (DMs). Reads from the local IndexedDB cache — only channels that Slack Desktop has synced to disk are returned. Pass workspace_id from slack_list_workspaces to filter to a specific workspace. Endpoint: https://local-mcp.com/mcp
- slack_list_workspaces (Slack List Workspaces) - Lists the Slack workspaces (teams) the user has connected in Slack Desktop. Start here for Slack — the workspace id it returns is what slack_list_channels / slack_read_channel_messages / slack_search_messages need. Reads from the local IndexedDB cache — no token needed. Only workspaces that have been synced to disk are returned. Endpoint: https://local-mcp.com/mcp
- slack_read_channel_messages (Slack Read Channel Messages) - Reads recent messages from a Slack channel or DM. Reads from the local IndexedDB cache — only messages that Slack Desktop has synced to disk are available (typically the last few hundred messages for active channels). channel_id must come from slack_list_channels. Endpoint: https://local-mcp.com/mcp
- slack_search_messages (Slack Search Messages) - Searches Slack messages across locally-cached channels using full-text substring matching. Only messages that Slack Desktop has synced to disk are searched — this is not the Slack cloud search API. Optionally restrict search to a specific channel_id. Endpoint: https://local-mcp.com/mcp
- stocks_get_chart (Stocks Get Chart) - Gets historical price data for a stock symbol. Range: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max. Endpoint: https://local-mcp.com/mcp
- stocks_get_quote (Stocks Get Quote) - Gets current stock price and market data for one or more symbols (e.g. AAPL, MSFT, BTC-USD). Uses Yahoo Finance — no API key required. Endpoint: https://local-mcp.com/mcp
- stocks_search_symbol (Stocks Search Symbol) - Searches for a stock ticker symbol by company name (e.g. "Apple" → AAPL). Start here for Stocks — the symbol it returns is what stocks_get_quote / stocks_get_chart need. Endpoint: https://local-mcp.com/mcp
- survey_respond (Survey Respond) - Shows or submits the short in-product survey Local MCP assigned to this machine. Called with NO arguments it returns the pending survey and, in clients that support MCP Apps, renders it as an interactive card the user answers directly — prefer this. To submit conversational answers instead, pass `answers` keyed by each question's `id` (single/scale = one value, multiple = an array of values): call once to PREVIEW, then again with confirm=true to record. Do NOT invent answers — if no human gave them (you're running autonomously), call survey_skip instead. Endpoint: https://local-mcp.com/mcp
- survey_skip (Survey Skip) - Skips the short in-product survey Local MCP showed the user, for now — use this when the user doesn't want to answer right now. They won't be asked again this session. Endpoint: https://local-mcp.com/mcp
- teams_call_history (Teams Call History) - Reads Microsoft Teams call & meeting history from the Mac's local Teams cache — no Graph API, no token, no admin consent (the same local store the Teams Calls tab renders). Each call includes direction (incoming/outgoing/missed), participants (names + ids), start / answered / end times, duration, call type (1:1/group/meeting) and a stable call id. Optional since/until (YYYY-MM-DD) narrow the range — e.g. a daily collector pulls the previous day's calls. Endpoint: https://local-mcp.com/mcp
- teams_list_channels (Teams List Channels) - Lists channels in a Microsoft Teams workspace. Returns channels that are cached in the local Teams client. If the result is empty, the channels have not been loaded into the local cache yet — ask the user to open Microsoft Teams and browse to the team's channels, then try again. Endpoint: https://local-mcp.com/mcp
- teams_list_chats (Teams List Chats) - Lists Microsoft Teams chats (direct messages and group chats). Endpoint: https://local-mcp.com/mcp
- teams_list_teams (Teams List Teams) - Lists all the Microsoft Teams the user belongs to. Start here for Teams channels — the team id it returns feeds teams_list_channels / teams_read_channel_messages. (For 1:1 and group chats, list_message-style, use teams_list_chats.) Endpoint: https://local-mcp.com/mcp
- teams_read_channel_messages (Teams Read Channel Messages) - Reads messages from a Microsoft Teams channel. Endpoint: https://local-mcp.com/mcp
- teams_read_chat_messages (Teams Read Chat Messages) - Reads messages from a Teams chat or direct message thread. Endpoint: https://local-mcp.com/mcp
- teams_search_messages (Teams Search Messages) - Searches your Microsoft Teams chat and direct-message history (all conversations at once) by text, sender name, and/or date range. Use this to find where something was discussed in Teams without knowing which chat. Returns matching messages with the chat they came from. Provide at least one of query, from_sender, since, until. Endpoint: https://local-mcp.com/mcp
- teams_send_channel_message (Teams Send Channel Message) - Sends a text message to a Microsoft Teams channel via Graph API. Requires connect_m365_account with Chat.ReadWrite / ChannelMessage.Send permissions. team_id and channel_id must come from teams_list_teams / teams_list_channels. First call returns a preview; set confirm=true to send. Endpoint: https://local-mcp.com/mcp
- teams_send_message (Teams Send Message) - Sends a text message to a Microsoft Teams chat or channel.
Requires Microsoft Teams to be running and signed in (token is read fresh from Teams' local cookies on each call). The chat_id MUST come from a previous teams_list_chats call — never fabricate ids. This is a write operation: the first call returns a preview, the second call (with confirm=true) actually sends. sent:true means the message was read back from the conversation (delivery verified); a response with status "sent_unconfirmed" means the server accepted the POST but the message could NOT be verified — tell the user to check the chat before assuming the recipient was notified. Endpoint: https://local-mcp.com/mcp
- todo_complete_task (To Do Complete Task) - Marks a Microsoft To Do task as complete (via Reminders sync). Endpoint: https://local-mcp.com/mcp
- todo_create_task (To Do Create Task) - Creates a task in Microsoft To Do (via Reminders sync). Task appears in To Do automatically once synced. Endpoint: https://local-mcp.com/mcp
- todo_get_folders (To Do Get Folders) - Lists Microsoft To Do task lists. Requires Microsoft account in Reminders sync (System Settings → Internet Accounts → Microsoft Exchange → enable Reminders). Endpoint: https://local-mcp.com/mcp
- todo_list_tasks (To Do List Tasks) - Lists tasks from a Microsoft To Do list (or any Reminders list). Syncs via macOS Reminders. Endpoint: https://local-mcp.com/mcp
- todoist_complete_task (Todoist Complete Task) - Mark a Todoist task complete (closes it). Pass the task_id from todoist_list_tasks. Endpoint: https://local-mcp.com/mcp
- todoist_create_task (Todoist Create Task) - Create a Todoist task. Optionally set a project, a natural-language due date (due_string, e.g. 'tomorrow 5pm', 'every monday'), and priority (1=normal … 4=urgent). Endpoint: https://local-mcp.com/mcp
- todoist_list_projects (Todoist List Projects) - List your Todoist projects (id + name). Use a project's id to scope todoist_list_tasks or todoist_create_task. Endpoint: https://local-mcp.com/mcp
- todoist_list_tasks (Todoist List Tasks) - List active (incomplete) Todoist tasks. Optionally scope to a project_id, or pass a Todoist filter (e.g. 'today', 'overdue', '#Work & p1'). Endpoint: https://local-mcp.com/mcp
- ui_click (Ui Click) - Clicks an element (by element_ref, at its center) or a screen coordinate (by coords). button left|right, count 2 = double-click. Returns {clicked, at:{x,y}} — `clicked` means the click event was POSTED at those coordinates, NOT that the app acted on it: CGEvent carries no delivery confirmation, so a busy, modal or input-ignoring app reports exactly the same success. Confirm the effect with ui_wait_for_element or ui_read_tree rather than trusting `clicked`. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- ui_find_element (Ui Find Element) - GUI automation — control a native app's interface. Finds an element (button, field, menu…) in an app's accessibility tree by role and/or label. Scope with app_bundle_id or window_id. Returns an opaque element_ref (usable by ui_click / ui_get_element this session) plus role, label, bounds, enabled, focused. found=false when the app is reachable but no element matches; app_not_found is an explicit error. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- ui_get_element (Ui Get Element) - Re-resolves a previously returned element_ref (its bounds/state may have changed). Returns role, label, bounds, enabled, focused, value. stale_element if the handle is unknown or the element no longer exists. Endpoint: https://local-mcp.com/mcp
- ui_keystroke (Ui Keystroke) - Sends a key combination, e.g. "cmd+shift+5", "return", "cmd+,", "escape". Modifiers: cmd, shift, alt/option, ctrl, fn. The last token is the key. unknown_key if the key isn't recognized. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- ui_menu_bar_click (Ui Menu Bar Click) - Clicks a status-bar (menu bar extra / NSStatusItem) item and optionally follows a nested menu path. Best-effort via the app's AX extras menu bar; apps that render fully custom (non-AX) menus may not be reachable (fall back to ui_click at known coords). Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- ui_read_tree (Ui Read Tree) - Returns a COMPACT accessibility tree of a running native app's labeled + interactive elements (buttons, links, text fields, checkboxes, menus…) — the native equivalent of web_read's a11y mode. Use it to DISCOVER what to act on in an unfamiliar app when you don't already know an element's role/label (ui_find_element needs one up front). Each interactive node carries a `ref` you can pass straight to ui_click. Pass app_bundle_id of a running app (e.g. com.apple.finder — see list_windows); the tree is pruned to signal-bearing nodes and bounded by max_depth (default 12) and a node budget, so very large windows return partial. The app's macOS menu bar is skipped by default (it's hundreds of menu-item nodes) — pass include_menu_bar=true if you specifically need to act on menu-bar items. Endpoint: https://local-mcp.com/mcp
- ui_type (Ui Type) - Types text into the focused control (or focuses element_ref first, then types). Sends real key events so validation/handlers fire. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- ui_wait_for_element (Ui Wait For Element) - Deterministic synchronization — replaces all sleeps. Polls for an element until it reaches state (present|enabled|focused|absent) or times out. A timeout is an EXPLICIT error, never a false success. Returns {satisfied, waited_ms, element_ref?, bounds?}. Endpoint: https://local-mcp.com/mcp
- update_calendar_event (Update Calendar Event) - Updates an existing event in the Mac's Calendar app (Calendar.app) by ID. Pass only the fields you want to change — unspecified fields are left as-is. Get the event_id from list_calendar_events. For Microsoft 365 use the m365 calendar tools instead. Endpoint: https://local-mcp.com/mcp
- update_note (Update Note) - Updates an existing note in Apple Notes. Change the title and/or body (the body accepts Markdown, converted to Apple Notes' native formatting). Find note_id with list_notes or search_notes. Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- update_reminder (Update Reminder) - Updates an existing reminder in Reminders.app. Change the title, due date, notes, priority, or move it to another list (list_name). Get reminder_id from list_reminders. Requires confirm=true. Endpoint: https://local-mcp.com/mcp
- video_blur_region (Video Blur Region) - Pixelates/blurs one or more rectangles over the video — the tool for redacting PII (an email pane, a name) before publishing a screen recording. Rects are in source pixels, top-left origin: [{x,y,w,h, start_ms?, end_ms?}] — omit the times to cover the whole clip. Great with a marker timeline's `bounds`. Returns the output path. Endpoint: https://local-mcp.com/mcp
- video_concat (Video Concat) - Stitches multiple videos end-to-end, in order, into one NEW file (e.g. assemble separate acts). All inputs should share a resolution for a clean result. Returns the output path + duration. Endpoint: https://local-mcp.com/mcp
- video_export_gif (Video Export Gif) - Exports a video (or a [start_ms,end_ms] slice of it) to an optimized looping GIF — for README/social. fps (default 12) and width (default 640, height auto) control size. Returns the output path, frame count, and size. Endpoint: https://local-mcp.com/mcp
- video_reframe (Video Reframe) - Crops a video to a target aspect ratio (e.g. "9:16" vertical, "1:1" square, "4:5") around a focus point — for social clips. Takes the LARGEST crop of that aspect that fits, centered on `focus` (x,y in source pixels, top-left origin; default = center) and clamped to the frame. Audio passes through. Returns the output path + new dimensions. Endpoint: https://local-mcp.com/mcp
- video_trim (Video Trim) - Trims a video to one or more time ranges (milliseconds), concatenated in order into a NEW file — e.g. keep [{start_ms:0,end_ms:6000},{start_ms:126000,end_ms:223000}] to drop a dead segment. Audio is carried along. Returns the output path + duration. Never overwrites the input in place. Endpoint: https://local-mcp.com/mcp
- web_click (Web Click) - Clicks an element on the current page. `target` is a CSS selector or visible text (resolved fresh each call). Clicks that SUBMIT a form preview first — call again with confirm:true to execute; plain links/buttons click directly. Returns the resulting URL/title. Endpoint: https://local-mcp.com/mcp
- web_extract (Web Extract) - Scrapes structured data from the current page. Pass `selectors` = an object mapping field names to CSS selectors (e.g. {"title":"h1","price":".price"}); returns each field's first-match text/href, null when absent. Endpoint: https://local-mcp.com/mcp
- web_find (Web Find) - Finds elements on the current page of a web session so you can decide what to click or type into. `query` is a CSS selector OR visible text to match. Returns up to 30 matches with tag/text/name/type/href — never a silent empty. Endpoint: https://local-mcp.com/mcp
- web_login (Web Login) - Opens a real browser window on the Mac for the user to sign into a website themselves (you never handle their password). After they log in, the session is saved on this Mac and reused by web_navigate/web_read/web_screenshot — they won't need to log in again. Use a stable `session` name per site (e.g. 'linkedin'). NOTE: automating sites like Instagram/LinkedIn may violate their terms — the user accepts that risk. Endpoint: https://local-mcp.com/mcp
- web_navigate (Web Navigate) - Navigates a web session to a URL (using its saved login if any) and returns the resulting URL + page title. Opens the session if it doesn't exist. Read the page with web_read. Endpoint: https://local-mcp.com/mcp
- web_read (Web Read) - Reads the current page of a web session so you can reason over it. mode='text' (visible text, default), 'a11y' (compact accessible tree of links/buttons/fields — best for deciding what to click), or 'html' (raw DOM). Returns an explicit no_session error if the session isn't open — never a silent empty. Endpoint: https://local-mcp.com/mcp
- web_screenshot (Web Screenshot) - Captures a PNG screenshot of the current page of a web session (returned inline so web AIs can see it). Useful to ground what the page looks like before acting. Endpoint: https://local-mcp.com/mcp
- web_session_close (Web Session Close) - Closes a web-automation session's window and frees it. The saved login stays on disk, so web_login/web_navigate can reopen it later without signing in again. Endpoint: https://local-mcp.com/mcp
- web_session_list (Web Session List) - Lists your web-automation login profiles: every SAVED login (persisted on disk, so web_login/web_navigate can reopen it without signing in again) plus which are currently OPEN. Each entry has `saved` (a persisted profile exists) and `open` (its window is live now, with url + title). Use it to check whether a login a recipe needs already exists before running it, instead of opening it and failing. Endpoint: https://local-mcp.com/mcp
- web_show (Web Show) - Brings a web session's browser window to the FRONT so the USER can take over directly — solve a CAPTCHA, complete 2FA, or make a choice the AI shouldn't. Local MCP never solves CAPTCHAs itself; this hands control to the user. Pair with web_screenshot first to show them what's on the page. After they finish, tell the agent to continue — the session keeps its state. Endpoint: https://local-mcp.com/mcp
- web_type (Web Type) - Types text into a form field (input/textarea) on the current page. `target` is a CSS selector or the field's visible label/placeholder. Does NOT submit — use web_click on the submit button afterwards (that step is gated). Endpoint: https://local-mcp.com/mcp
- web_wait_for (Web Wait For) - Waits (polls, not a fixed sleep) until an element appears on the page, or times out. Use for SPA pages that hydrate after load. Prefer `selector` (a CSS selector, e.g. "input[name=password]"). `condition` also accepts the form "document.querySelector('...')"; any OTHER JavaScript condition requires the web_eval opt-in in settings (it runs code on the page). Returns met:true/false. Endpoint: https://local-mcp.com/mcp
- window_focus (Window Focus) - Brings a window (by window_id from list_windows) to the front and activates its app. window_not_found if it can't be resolved. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- window_set_frame (Window Set Frame) - Pins a window (by window_id) to fixed bounds {x,y,w,h} in global points, so every take is framed identically across runs. Returns the actual post-constraint bounds. Requires Accessibility permission. Endpoint: https://local-mcp.com/mcp
- word_append (Word Append) - Appends text to the end of an existing Word (.docx) document at `path`, preserving the document's existing content and formatting. Requires confirm=true — called without it, returns a preview instead of modifying the file. Same file-access rules as word_create (Desktop/Documents/Downloads may need a Files-and-Folders grant). Returns {appended, chars_appended, path}. To create a new document use word_create; to read one use word_read. Endpoint: https://local-mcp.com/mcp
- word_create (Word Create) - Creates a new Word (.docx) document at `path` with the given text content (and an optional title rendered as the heading). Requires confirm=true — called without it, returns a preview of what will be written instead of creating the file. The path must be somewhere Local MCP can write; Desktop/Documents/Downloads may need a one-time Files-and-Folders grant (System Settings → Privacy & Security → Files and Folders). Returns {created, path}. For a OneDrive or Google Drive path use onedrive_write_file / gdrive_write_file; to append to an existing doc use word_append, to read one word_read. Endpoint: https://local-mcp.com/mcp
- word_read (Word Read) - Reads text content from a Word document (.docx file). Endpoint: https://local-mcp.com/mcp
- zoom_list_recordings (Zoom List Recordings) - Lists Zoom meeting recordings saved locally on this Mac (~/Documents/Zoom), newest first: meeting name, date, and which artifacts exist (transcript, captions, saved chat, audio, video). Local recordings only — no Zoom API, no admin approval. Use zoom_read_transcript to read the text of a meeting. Endpoint: https://local-mcp.com/mcp
- zoom_read_transcript (Zoom Read Transcript) - Reads the text artifacts of a local Zoom recording: the transcript/captions (.vtt or closed_caption.txt, cleaned to readable 'Speaker: text' lines) and the saved in-meeting chat. Pass the recording name or path from zoom_list_recordings. Perfect for 'summarize my last meeting' or 'what did we agree on in the kickoff call'. Endpoint: https://local-mcp.com/mcp

## Resources
- ui://widget/survey.html - MIME type: text/html;profile=mcp-app

## Prompts
- summarize_inbox - Summarize unread emails in your inbox, highlighting urgent items and action points. Arguments: account, count
- daily_briefing - Get a daily briefing with today's calendar events, unread emails, and pending tasks.
- draft_email - Draft an email based on context and intent. Will ask for confirmation before sending. Arguments: to, intent

## Metadata
- Owner: com.local-mcp
- Version: 3.0.360
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Aug 2, 2026
- Source: https://registry.modelcontextprotocol.io
