# Local MCP server

Agent View of the PolicyLayer registry record for Local: identity, probed posture, risk grade, and all 234 tools classified. HTML page: https://policylayer.com/tools/com-local-mcp-local-mcp

## Facts

- Server id: `local-mcp`
- Install: `npx -y local-mcp`
- Homepage: https://github.com/lanchuske/local-mcp
- Registry record: grade F, identity unverified
- Lifecycle: active
- Auth posture: open
- CORS policy: *
- Rate-limited: no
- Tools: 234 (200 with introspected schema)
- Tool categories present: Destructive, Execute, Read, Write
- Context-window cost: 27464 tokens per request — https://policylayer.com/token-cost/com-local-mcp-local-mcp
- Tags: com local mcp local mcp, admin, automation
- Record last modified: 2026-07-22T10:47:17.753Z

## Tools (234)

| Tool | Category | Risk | Record |
| --- | --- | --- | --- |
| `delete_calendar_event` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/delete-calendar-event.md |
| `delete_reminder` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/delete-reminder.md |
| `delete_reminder_list` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/delete-reminder-list.md |
| `m365_delete_event` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-delete-event.md |
| `onedrive_delete_file` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-delete-file.md |
| `recipe_delete` | Destructive | Critical | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-delete.md |
| `chrome_click` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-click.md |
| `chrome_evaluate_js` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-evaluate-js.md |
| `chrome_fill_form` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-fill-form.md |
| `chrome_go_back` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-go-back.md |
| `chrome_navigate` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-navigate.md |
| `chrome_type` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-type.md |
| `chrome_wait_for` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-wait-for.md |
| `nordvpn_diagnose` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/nordvpn-diagnose.md |
| `notion_open_page` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-open-page.md |
| `recipe_run` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-run.md |
| `run_diagnostics` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/run-diagnostics.md |
| `run_terminal_command` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/run-terminal-command.md |
| `safari_click` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-click.md |
| `safari_evaluate_js` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-evaluate-js.md |
| `safari_fill_form` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-fill-form.md |
| `safari_go_back` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-go-back.md |
| `safari_navigate` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-navigate.md |
| `safari_query_selector_all` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-query-selector-all.md |
| `safari_type` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-type.md |
| `safari_wait_for` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-wait-for.md |
| `screen_record_start` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/screen-record-start.md |
| `screen_record_stop` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/screen-record-stop.md |
| `setup_install` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/setup-install.md |
| `ui_click` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-click.md |
| `ui_keystroke` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-keystroke.md |
| `ui_menu_bar_click` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-menu-bar-click.md |
| `ui_type` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-type.md |
| `ui_wait_for_element` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-wait-for-element.md |
| `update_local_mcp` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/update-local-mcp.md |
| `web_click` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-click.md |
| `web_eval` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-eval.md |
| `web_login` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-login.md |
| `web_navigate` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-navigate.md |
| `web_session_close` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-session-close.md |
| `web_show` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-show.md |
| `web_wait_for` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/web-wait-for.md |
| `whatsapp_connect` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-connect.md |
| `window_focus` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/window-focus.md |
| `window_set_frame` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/window-set-frame.md |
| `zalo_connect` | Execute | High | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-connect.md |
| `chrome_list_tabs` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-list-tabs.md |
| `chrome_query_selector_all` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-query-selector-all.md |
| `chrome_read_tab` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-read-tab.md |
| `chrome_search_tabs` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-search-tabs.md |
| `chrome_setup_check` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/chrome-setup-check.md |
| `daily_brief` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/daily-brief.md |
| `excel_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/excel-read.md |
| `finder_list` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/finder-list.md |
| `finder_search` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/finder-search.md |
| `fs_list` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/fs-list.md |
| `fs_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/fs-read.md |
| `fs_search` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/fs-search.md |
| `gdrive_file_info` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-file-info.md |
| `gdrive_list_files` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-list-files.md |
| `gdrive_read_file` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-read-file.md |
| `gdrive_root` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-root.md |
| `gdrive_search_files` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-search-files.md |
| `get_audit_log` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-audit-log.md |
| `get_config` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-config.md |
| `get_contact` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-contact.md |
| `get_datetime` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-datetime.md |
| `get_m365_person` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-m365-person.md |
| `get_weather` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/get-weather.md |
| `list_accounts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-accounts.md |
| `list_calendar_events` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-calendar-events.md |
| `list_calendar_names` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-calendar-names.md |
| `list_contacts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-contacts.md |
| `list_displays` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-displays.md |
| `list_email_accounts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-email-accounts.md |
| `list_email_folders` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-email-folders.md |
| `list_emails` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-emails.md |
| `list_m365_people_insights` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-m365-people-insights.md |
| `list_message_chats` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-message-chats.md |
| `list_notes` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-notes.md |
| `list_omnifocus_folders` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-omnifocus-folders.md |
| `list_omnifocus_projects` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-omnifocus-projects.md |
| `list_omnifocus_tags` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-omnifocus-tags.md |
| `list_omnifocus_tasks` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-omnifocus-tasks.md |
| `list_referral_candidates` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-referral-candidates.md |
| `list_reminder_lists` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-reminder-lists.md |
| `list_reminders` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-reminders.md |
| `list_safari_bookmarks` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-safari-bookmarks.md |
| `list_windows` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/list-windows.md |
| `lmcp_state` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/lmcp-state.md |
| `lmcp_welcome` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/lmcp-welcome.md |
| `m365_get_contact` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-get-contact.md |
| `m365_list_contacts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-list-contacts.md |
| `m365_list_emails` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-list-emails.md |
| `m365_list_events` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-list-events.md |
| `m365_read_email` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-read-email.md |
| `m365_search_contacts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-search-contacts.md |
| `m365_search_emails` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-search-emails.md |
| `media_probe` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/media-probe.md |
| `nordvpn_servers` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/nordvpn-servers.md |
| `nordvpn_status` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/nordvpn-status.md |
| `notion_list_databases` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-list-databases.md |
| `notion_list_pages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-list-pages.md |
| `notion_list_workspaces` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-list-workspaces.md |
| `notion_read_database` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-read-database.md |
| `notion_read_page` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-read-page.md |
| `notion_search` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/notion-search.md |
| `onedrive_file_info` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-file-info.md |
| `onedrive_list_files` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-list-files.md |
| `onedrive_read_file` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-read-file.md |
| `onedrive_root` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-root.md |
| `onedrive_search_files` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-search-files.md |
| `outlook_diagnose` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/outlook-diagnose.md |
| `pdf_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/pdf-read.md |
| `permissions_status` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/permissions-status.md |
| `ppt_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/ppt-read.md |
| `read_email` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/read-email.md |
| `read_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/read-messages.md |
| `read_note` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/read-note.md |
| `recipe_get` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-get.md |
| `recipe_list` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-list.md |
| `recipe_runs` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-runs.md |
| `safari_list_tabs` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-list-tabs.md |
| `safari_read_tab` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-read-tab.md |
| `safari_search_tabs` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-search-tabs.md |
| `safari_setup_check` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/safari-setup-check.md |
| `screen_record_status` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/screen-record-status.md |
| `screenshot_capture` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/screenshot-capture.md |
| `search_contacts` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-contacts.md |
| `search_emails` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-emails.md |
| `search_m365_directory` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-m365-directory.md |
| `search_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-messages.md |
| `search_notes` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-notes.md |
| `search_omnifocus_tasks` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/search-omnifocus-tasks.md |
| `servicenow_get_incident` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-get-incident.md |
| `servicenow_list_my_incidents` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-list-my-incidents.md |
| `servicenow_search_incidents` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-search-incidents.md |
| `servicenow_search_kb` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-search-kb.md |
| `signal_connect` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-connect.md |
| `signal_list_chats` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-list-chats.md |
| `signal_read_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-read-messages.md |
| `signal_search_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-search-messages.md |
| `slack_list_channels` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/slack-list-channels.md |
| `slack_list_workspaces` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/slack-list-workspaces.md |
| `slack_read_channel_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/slack-read-channel-messages.md |
| `slack_search_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/slack-search-messages.md |
| `stocks_get_chart` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/stocks-get-chart.md |
| `stocks_get_quote` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/stocks-get-quote.md |
| `stocks_search_symbol` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/stocks-search-symbol.md |
| `teams_call_history` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-call-history.md |
| `teams_list_channels` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-list-channels.md |
| `teams_list_chats` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-list-chats.md |
| `teams_list_teams` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-list-teams.md |
| `teams_read_channel_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-read-channel-messages.md |
| `teams_read_chat_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-read-chat-messages.md |
| `todo_list_lists` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/todo-list-lists.md |
| `todo_list_tasks` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/todo-list-tasks.md |
| `ui_find_element` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-find-element.md |
| `ui_get_element` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/ui-get-element.md |
| `update_self_diagnosis` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/update-self-diagnosis.md |
| `video_blur_region` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/video-blur-region.md |
| `video_reframe` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/video-reframe.md |
| `web_extract` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/web-extract.md |
| `web_find` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/web-find.md |
| `web_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/web-read.md |
| `web_screenshot` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/web-screenshot.md |
| `web_session_list` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/web-session-list.md |
| `whatsapp_list_chats` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-list-chats.md |
| `whatsapp_read_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-read-messages.md |
| `whatsapp_search_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-search-messages.md |
| `word_read` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/word-read.md |
| `zalo_diagnose` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-diagnose.md |
| `zalo_list_chats` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-list-chats.md |
| `zalo_read_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-read-messages.md |
| `zalo_search_messages` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-search-messages.md |
| `zoom_list_recordings` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zoom-list-recordings.md |
| `zoom_read_transcript` | Read | Low | https://policylayer.com/tools/com-local-mcp-local-mcp/zoom-read-transcript.md |
| `complete_omnifocus_task` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/complete-omnifocus-task.md |
| `complete_reminder` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/complete-reminder.md |
| `connect_m365_account` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/connect-m365-account.md |
| `connect_servicenow` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/connect-servicenow.md |
| `create_calendar_event` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-calendar-event.md |
| `create_draft` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-draft.md |
| `create_email_folder` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-email-folder.md |
| `create_note` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-note.md |
| `create_omnifocus_task` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-omnifocus-task.md |
| `create_referral_invites` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-referral-invites.md |
| `create_reminder` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-reminder.md |
| `create_reminder_list` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/create-reminder-list.md |
| `disconnect_m365_account` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/disconnect-m365-account.md |
| `disconnect_servicenow` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/disconnect-servicenow.md |
| `excel_create` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/excel-create.md |
| `excel_write_cell` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/excel-write-cell.md |
| `gdrive_write_file` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/gdrive-write-file.md |
| `m365_create_event` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-create-event.md |
| `m365_reply_email` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-reply-email.md |
| `m365_send_email` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/m365-send-email.md |
| `move_email` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/move-email.md |
| `onedrive_move_file` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-move-file.md |
| `onedrive_set_scope` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-set-scope.md |
| `onedrive_write_file` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/onedrive-write-file.md |
| `ppt_create` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/ppt-create.md |
| `recipe_save` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/recipe-save.md |
| `record_marker` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/record-marker.md |
| `rename_reminder_list` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/rename-reminder-list.md |
| `reply_email` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/reply-email.md |
| `report_problem` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/report-problem.md |
| `request_feature` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/request-feature.md |
| `save_attachment` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/save-attachment.md |
| `send_email` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/send-email.md |
| `send_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/send-message.md |
| `servicenow_add_comment` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-add-comment.md |
| `servicenow_create_incident` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-create-incident.md |
| `servicenow_update_incident` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/servicenow-update-incident.md |
| `signal_friction` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-friction.md |
| `signal_send_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/signal-send-message.md |
| `teams_send_channel_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-send-channel-message.md |
| `teams_send_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/teams-send-message.md |
| `todo_complete_task` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/todo-complete-task.md |
| `todo_create_task` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/todo-create-task.md |
| `update_calendar_event` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/update-calendar-event.md |
| `update_note` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/update-note.md |
| `update_reminder` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/update-reminder.md |
| `video_concat` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/video-concat.md |
| `video_export_gif` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/video-export-gif.md |
| `video_trim` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/video-trim.md |
| `web_type` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/web-type.md |
| `whatsapp_disconnect` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-disconnect.md |
| `whatsapp_send_file` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-send-file.md |
| `whatsapp_send_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/whatsapp-send-message.md |
| `word_append` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/word-append.md |
| `word_create` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/word-create.md |
| `zalo_disconnect` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-disconnect.md |
| `zalo_send_message` | Write | Medium | https://policylayer.com/tools/com-local-mcp-local-mcp/zalo-send-message.md |

## Tool descriptions

- `delete_calendar_event` — Deletes an event from the Mac's Calendar app (Calendar.app) by ID. Requires confirm=true. For Microsoft 365 use m365_delete_event instead.
- `delete_reminder` — Permanently deletes a reminder in Apple Reminders (Reminders.app) by ID. Get the reminder_id from list_reminders. Requires confirm=true.
- `delete_reminder_list` — Deletes an Apple Reminders list AND all reminders inside it — cannot be undone. Pass the list name (or list_id from list_reminder_lists). Requires confirm=true.
- `m365_delete_event` — Delete a calendar event from your Microsoft 365 / Outlook calendar by its ID.
- `onedrive_delete_file` — Deletes a file or empty folder from OneDrive.
- `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 wi…
- `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 se…
- `chrome_evaluate_js` — Runs arbitrary JavaScript in the current Google Chrome tab and returns its result. Requires 'Allow JavaScript from Apple Events' in Chrome's View → Developer menu.
- `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.
- `chrome_go_back` — Navigates the current Google Chrome tab back to the previous page.
- `chrome_navigate` — Navigates Google Chrome to a URL. Pass new_tab=true to open in a new tab.
- `chrome_type` — Sets the value of an input/textarea matching a CSS selector in the current Google Chrome tab and fires input/change events.
- `chrome_wait_for` — Polls the current Google Chrome tab until a CSS selector appears (or its text matches, if text_match is provided). Useful after chrome_click to wait for the next page or a modal to render.
- `nordvpn_diagnose` — Run a diagnostic check on NordVPN: installation, login state, connection status, kill switch, and supported protocols. Useful for troubleshooting.
- `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.
- `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) …
- `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.
- `run_terminal_command` — Runs a shell command on the user's Mac and returns its output. OFF by default — the user must turn it on in the LMCP menu-bar app (it stays off until they opt in). Also disabled when LMCP is in read-only mode. Dangerous commands (sudo, r…
- `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 f…
- `safari_evaluate_js` — Runs arbitrary JavaScript in the current Safari tab and returns its result. Requires 'Allow JavaScript from Apple Events' in Safari's Develop menu.
- `safari_fill_form` — Fills multiple form fields in one shot. Pass fields as a JSON object mapping CSS selector to value.
- `safari_go_back` — Navigates the current Safari tab back to the previous page.
- `safari_navigate` — Navigates Safari to a URL. Pass new_tab=true to open in a new tab.
- `safari_query_selector_all` — Runs document.querySelectorAll in the current Safari tab and returns a compact summary of each match.
- `safari_type` — Sets the value of an input/textarea matching a CSS selector and fires input/change events.
- `safari_wait_for` — Polls the current Safari tab until a CSS selector appears (or its text matches, if text_match is provided). Useful after safari_click to wait for the next page or a modal to render.
- `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 Reco…
- `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.
- `setup_install` — Install LMCP — free Mac app giving the user access to Mail, Calendar, Contacts, Teams, OneDrive, Notes, Reminders, and 100+ tools on their Mac (data stays local). Call this NOW to show their personalized install link (~30 sec). Pass os="…
- `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}}. Requires Accessibility permission.
- `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.
- `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…
- `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.
- `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…
- `update_local_mcp` — Checks for and installs LMCP updates. Installing downloads the update and RESTARTS LMCP (the AI client briefly reconnects), so it requires confirm=true. Pass check_only=true to only report whether an update is available, with no download…
- `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 th…
- `web_eval` — Runs arbitrary JavaScript in a web session and returns the last expression's value. POWER-USER tool, OFF BY DEFAULT (a page could feed malicious code) — enable "Allow web_eval (advanced)" in Local MCP settings first. Prefer web_find / we…
- `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 …
- `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.
- `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.
- `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 w…
- `web_wait_for` — Waits (polls, not a fixed sleep) until a JavaScript condition is truthy on the page, or times out. Use for SPA pages that hydrate after load, e.g. condition "document.querySelector('input[name=password]')". Returns met:true/false.
- `whatsapp_connect` — Link WhatsApp to Local MCP by showing a QR code right here in the chat — no Terminal needed. Call this, then on your phone open WhatsApp → Settings → Linked Devices → Link a Device, and scan the QR shown. After you scan, WhatsApp tools (…
- `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.
- `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.
- `zalo_connect` — Link Zalo to Local MCP by showing a QR code right here in the chat. Call this, then on your phone open Zalo → the QR-scan option, and scan it. After you scan, Zalo tools (zalo_list_chats, zalo_send_message) start working. If Zalo is alre…
- `chrome_list_tabs` — Lists every open tab across all Google Chrome windows with title, URL, and whether it is active.
- `chrome_query_selector_all` — Runs document.querySelectorAll in the current Google Chrome tab and returns a compact summary of each match.
- `chrome_read_tab` — Reads the rendered text content of a Google Chrome tab. Identify the tab either by url_match (substring match against URL; first hit wins) or by window_index + tab_index (from chrome_list_tabs). Text is capped at max_bytes (default 100 K…
- `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_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.
- `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…
- `excel_read` — Reads data from an Excel (.xlsx) file. Returns sheets and cell values.
- `finder_list` — Lists files and folders at any absolute path (Spotlight-free directory listing, including outside the home folder). For sandboxed reads under the user's home, prefer fs_list.
- `finder_search` — Searches for files by name anywhere on the filesystem (uses mdfind/Spotlight).
- `fs_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.
- `fs_read` — Reads a text file from the local filesystem. Supports .txt, .md, .csv, .json, .xml, .log, .yaml, .toml and common code file types. For PDFs use pdf_read, for Word use word_read, for Excel use excel_read.
- `fs_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.
- `gdrive_file_info` — Metadata for a file/folder in the synced Google Drive: size, dates, type. Cheaper than listing the whole directory.
- `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).
- `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 inste…
- `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.
- `gdrive_search_files` — Searches the synced Google Drive folder for files by name (recursive). Returns up to max_results matches (default 50).
- `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.
- `get_config` — Returns the current LMCP configuration (api_key masked).
- `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 ex…
- `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 '…
- `get_m365_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.
- `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-l…
- `list_accounts` — Lists email accounts configured in Mail.app.
- `list_calendar_events` — Lists events from the Mac's Calendar app (Calendar.app, local/iCloud calendars) in a date range. Defaults to today + 7 days. For a Microsoft 365 calendar use m365_list_events instead.
- `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.
- `list_contacts` — Lists contacts from the macOS Contacts app. Optionally filter by group.
- `list_displays` — Lists connected displays with bounds (global space, top-left origin, points), backing scale_factor, and which is main. display_id is stable for the session so a scripted run can target the same display across steps. No permission required.
- `list_email_accounts` — Lists all Mail.app accounts by name. Call this first to discover account names, then use list_emails(account=name) to fetch messages from a specific account. Much faster than querying all accounts at once.
- `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, Excha…
- `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 f…
- `list_m365_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.
- `list_message_chats` — Lists recent iMessage/Messages.app conversations.
- `list_notes` — Lists notes from Apple Notes app. Optionally filter by folder.
- `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.
- `list_omnifocus_projects` — Lists projects in OmniFocus.
- `list_omnifocus_tags` — Lists all tags defined in OmniFocus.
- `list_omnifocus_tasks` — Lists tasks from OmniFocus. Filter by project, tag, inbox, due today, or flagged status.
- `list_referral_candidates` — Step 1 of recommending LMCP to a colleague. Returns the user's emailable contacts plus a playful invite template. Use this when the user wants to invite/recommend someone. Then: show a few candidates, let the user PICK (never email every…
- `list_reminder_lists` — Lists the lists (folders) in Apple Reminders (Reminders.app) on this Mac. For Microsoft To Do use todo_list_lists instead.
- `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.
- `list_safari_bookmarks` — Lists Safari bookmarks (title + URL) from the Mac's Safari (reads ~/Library/Safari/Bookmarks.plist — needs Full Disk Access).
- `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, and is_focused. Window TITLES require Screen Recording permission — without it this returns an ex…
- `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/C…
- `lmcp_welcome` — ★ START HERE — the user just installed LMCP and has not run a single tool yet. This tool exists ONLY right now: it disappears from the tool list the moment the first real tool call happens, so this is your one chance to activate the user…
- `m365_get_contact` — Get full details of a specific Microsoft 365 contact by ID. Get the ID from m365_list_contacts or m365_search_contacts.
- `m365_list_contacts` — List contacts from your Microsoft 365 / Outlook address book.
- `m365_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 (inc…
- `m365_list_events` — List upcoming calendar events from your Microsoft 365 / Outlook calendar.
- `m365_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.
- `m365_search_contacts` — Search contacts in your Microsoft 365 address book by name, email, or company.
- `m365_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.
- `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.
- `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.
- `nordvpn_status` — Check NordVPN connection status: connected/disconnected, auto-connect, snooze, and last known location. Does NOT open NordVPN.
- `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.
- `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 …
- `notion_list_workspaces` — Lists the Notion workspaces cached on this Mac with their members (names and emails).
- `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.
- `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 …
- `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.
- `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.
- `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.
- `onedrive_read_file` — Reads a text file from OneDrive or the local filesystem. 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 .…
- `onedrive_root` — Lists all mounted OneDrive directories on this Mac.
- `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.
- `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.
- `pdf_read` — Reads and extracts text from a PDF file.
- `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-sequ…
- `ppt_read` — Reads slide text content from a PowerPoint (.pptx) file.
- `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 mailb…
- `read_messages` — Reads messages from an iMessage conversation by chat ID or contact name.
- `read_note` — Reads the full content of a note by name or ID.
- `recipe_get` — Returns the full manifest of a recipe by name. recipe_not_found if unknown.
- `recipe_list` — Lists available workflow recipes (bundled + user-saved), with name, description and params. Run one with recipe_run.
- `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 nam…
- `safari_list_tabs` — Lists every open tab across all Safari windows with title, URL, and whether it is active.
- `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). Pas…
- `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.
- `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.
- `screen_record_status` — Reports whether a recording is active, with the session_id, elapsed_ms, output path, and marker_count.
- `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.
- `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.
- `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 w…
- `search_m365_directory` — Search your organization's Microsoft 365 directory for users by name or email. Returns matching users with their title, department, and contact info.
- `search_messages` — Searches iMessage conversations by content, sender name, or date range.
- `search_notes` — Searches Apple Notes by title or content.
- `search_omnifocus_tasks` — Searches OmniFocus tasks by name or note content.
- `servicenow_get_incident` — Get full details of a specific ServiceNow incident by number or sys_id.
- `servicenow_list_my_incidents` — List incidents assigned to you or opened by you in ServiceNow.
- `servicenow_search_incidents` — Search incidents in ServiceNow by keyword, number, or caller.
- `servicenow_search_kb` — Search the ServiceNow Knowledge Base for articles.
- `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 …
- `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_…
- `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…
- `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.
- `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` — Lists the Slack workspaces (teams) the user has connected in Slack Desktop. Reads from the local IndexedDB cache — no token needed. Only workspaces that have been synced to disk are returned.
- `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 com…
- `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 specifi…
- `stocks_get_chart` — Gets historical price data for a stock symbol. Range: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max.
- `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.
- `stocks_search_symbol` — Searches for a stock ticker symbol by company name. Returns matching symbols and exchanges.
- `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), partici…
- `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 brow…
- `teams_list_chats` — Lists Microsoft Teams chats (direct messages and group chats).
- `teams_list_teams` — Lists all Microsoft Teams workspaces the user belongs to.
- `teams_read_channel_messages` — Reads messages from a Microsoft Teams channel.
- `teams_read_chat_messages` — Reads messages from a Teams chat or direct message thread.
- `todo_list_lists` — Lists Microsoft To Do task lists. Requires Microsoft account in Reminders sync (System Settings → Internet Accounts → Microsoft Exchange → enable Reminders).
- `todo_list_tasks` — Lists tasks from a Microsoft To Do list (or any Reminders list). Syncs via macOS Reminders.
- `ui_find_element` — Finds an element 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. fou…
- `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.
- `update_self_diagnosis` — Returns the self-update health state: current version, last N update attempts (with errors), writability of the update cache, and any stale LMCP binaries found at alternate paths. Call this when auto-update seems stuck or when you need t…
- `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 time…
- `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; defaul…
- `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.
- `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.
- `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 …
- `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.
- `web_session_list` — Lists the open web-automation sessions (named login profiles) with each one's current URL and page title.
- `whatsapp_list_chats` — Lists WhatsApp conversations with last message preview. Returns chat IDs, contact names, and recent message snippets. Some contacts may appear with @lid identifiers (e.g. 123456@lid) instead of phone numbers — this is a WhatsApp privacy …
- `whatsapp_read_messages` — Reads messages from a specific WhatsApp chat. The chat_id must come from a previous whatsapp_list_chats call. ⚠️ Uses Wacli (unofficial WhatsApp client). Accounts may be restricted for ToS violations.
- `whatsapp_search_messages` — Offline full-text search across all WhatsApp chats. Only locally-cached messages are searched — no network access required. Optionally restrict search to a specific chat_id. ⚠️ Uses Wacli (unofficial WhatsApp client). Accounts may be res…
- `word_read` — Reads text content from a Word (.docx) file.
- `zalo_diagnose` — Reports whether Zalo is linked to Local MCP (via zalo_connect). Call it first if Zalo tools aren't working.
- `zalo_list_chats` — Lists your Zalo conversations — friends and groups — so you can pick a recipient. Requires Zalo linked (zalo_connect); if it isn't, returns an actionable connect hint, never an empty list.
- `zalo_read_messages` — Reads recent Zalo messages that Local MCP captured while linked. Optionally pass thread (a thread id from zalo_list_chats) to read one conversation. NOTE: Zalo's web protocol can't backfill old history — this returns messages received si…
- `zalo_search_messages` — Searches your captured Zalo messages by text. Searches only messages received while Local MCP was linked and listening (Zalo can't backfill older history). Requires Zalo linked; otherwise returns an actionable connect hint.
- `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 appro…
- `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.…
- `complete_omnifocus_task` — Marks an OmniFocus task as complete by task ID or name. Requires confirm=true.
- `complete_reminder` — Marks a reminder complete in Apple Reminders (Reminders.app). Requires confirm=true. For Microsoft To Do use todo_complete_task instead.
- `connect_m365_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.
- `connect_servicenow` — Connect to your ServiceNow instance using your username and password. Credentials are stored locally and never sent to Claude's servers.
- `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). For Microsoft 365 use m365_create_event instead.
- `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). On a multi-account Mac, pass account…
- `create_email_folder` — Creates a new mailbox folder in Mail.app.
- `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.
- `create_omnifocus_task` — Creates a new task in OmniFocus. Requires confirm=true to execute.
- `create_referral_invites` — Step 2 of the colleague-invite flow. Given the recipients the user PICKED, records each invite and returns a UNIQUE referral link per person (so the user can later see who installed/activated). Call this AFTER the user chooses, then put …
- `create_reminder` — Creates a reminder in Reminders.app.
- `create_reminder_list` — Creates a new list in Apple Reminders (Reminders.app). Requires confirm=true.
- `disconnect_m365_account` — Disconnect your Microsoft 365 account and remove stored tokens.
- `disconnect_servicenow` — Disconnect from ServiceNow and remove stored credentials.
- `excel_create` — Creates a new Excel (.xlsx) file with headers and optional data rows.
- `excel_write_cell` — Writes a value to a specific cell in an Excel 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.
- `m365_create_event` — Create a calendar event in your Microsoft 365 / Outlook calendar.
- `m365_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 Mai…
- `m365_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 M…
- `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…
- `onedrive_move_file` — Moves or renames a file/folder within OneDrive.
- `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 immedi…
- `onedrive_write_file` — Writes text content to a file in OneDrive.
- `ppt_create` — Creates a PowerPoint (.pptx) file with title and bullet slides.
- `recipe_save` — Saves a user-authored recipe manifest (JSON) to ~/.local/share/local-mcp/recipes/. Must have a name and a non-empty steps array. Returns {name}.
- `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_ac…
- `rename_reminder_list` — Renames an existing Apple Reminders list. Pass the current list name (or list_id from list_reminder_lists) and new_name. Requires confirm=true.
- `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_emai…
- `report_problem` — Report a problem, feature request, or integration request to the LMCP team. IMPORTANT: Do NOT call this tool automatically. ALWAYS ask the user first: "Would you like me to report this issue to the LMCP team?" Only call this tool if the …
- `request_feature` — Submit 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. Ask the user first, then call with confirm=true. Without confirm, returns a preview. The r…
- `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.
- `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_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 …
- `servicenow_add_comment` — Add a comment or work note to a ServiceNow incident. Comments are visible to the caller; work notes are internal only.
- `servicenow_create_incident` — Create a new incident in ServiceNow.
- `servicenow_update_incident` — Update fields on an existing ServiceNow incident — state, priority, assignment. Use sys_id from servicenow_get_incident.
- `signal_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 +…
- `signal_send_message` — Preview (and get send guidance for) a message to a Signal chat. NOTE: Signal Desktop exposes no local send API — the Signal integration reads the local database read-only — so LMCP cannot transmit Signal messages directly. The first call…
- `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 cal…
- `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 — n…
- `todo_complete_task` — Marks a Microsoft To Do task as complete (via Reminders sync).
- `todo_create_task` — Creates a task in Microsoft To Do (via Reminders sync). Task appears in To Do automatically once synced.
- `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 to…
- `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.
- `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.
- `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.
- `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.
- `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…
- `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).
- `whatsapp_disconnect` — Unlink WhatsApp from Local MCP — logs out the linked device on this Mac (via wacli). Your chats stay on your phone; this only disconnects this Mac, and WhatsApp tools stop working until you run whatsapp_connect again. Write operation: th…
- `whatsapp_send_file` — Sends a file attachment to a WhatsApp chat. The chat_id MUST come from a previous whatsapp_list_chats call — never fabricate IDs. file_path must be an absolute path to a local file. This is a write operation: the first call (confirm=fals…
- `whatsapp_send_message` — Sends a text message to a WhatsApp chat. The chat_id MUST come from a previous whatsapp_list_chats call — never fabricate IDs. This is a write operation: the first call (confirm=false) returns a preview without sending; set confirm=true …
- `word_append` — Appends text to an existing Word (.docx) document.
- `word_create` — Creates a new Word (.docx) document with the given content.
- `zalo_disconnect` — Unlink Zalo from Local MCP (removes the saved session on this Mac). Your chats stay in Zalo; this only disconnects this Mac, and Zalo tools stop working until you run zalo_connect again. Write operation: first call (confirm=false) previe…
- `zalo_send_message` — Sends a Zalo message to a conversation. WRITE operation with a preview gate: the first call (confirm=false) returns a preview WITHOUT sending; set confirm=true to actually send. to is a thread id from zalo_list_chats; set type="group" fo…

## Related servers

- UnClick (1658 tools) — https://policylayer.com/tools/io-github-malamutemayhem-unclick-mcp-server.md
- Nodebench (824 tools) — https://policylayer.com/tools/io-github-homenshum-nodebench.md
- Yaver (812 tools) — https://policylayer.com/tools/io-github-kivanccakmak-yaver.md
- Binance MCP Server (734 tools) — https://policylayer.com/tools/nirholas-binance-mcp.md
- Crow (587 tools) — https://policylayer.com/tools/kh0pper-crow.md
- Fortimanager (584 tools) — https://policylayer.com/tools/jmpijll-fortimanager-mcp.md
- TinyFn (572 tools) — https://policylayer.com/tools/io-tinyfn-tinyfn.md
- Mcp (571 tools) — https://policylayer.com/tools/io-github-2s-io-mcp.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=com-local-mcp-local-mcp · API: https://policylayer.com/registry/api · Recommended policies for every tool: https://policylayer.com/policies/com-local-mcp-local-mcp
