Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

com.local-mcp/local-mcp

REMOTE · LOCAL-MCP.COM · 2 COMPONENTS · SCANNED AUG 3

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

+1 this week 64 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security66
Transport & Reachability100
Schema Quality & AI Usability69
  • 75% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 23427 tokens (~103/item across 227 items; 226 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management11
  • Stability check failed: schema churn in the 8 days we've observed: 38 tool removals, 0 breaking changes, 0 auth/transport breaks, 26 additions. See how to fix → Fail
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 81% of tool parameters carry a description.Partial
  • Structured output schemas are declared (84% of tools); any adoption earns full credit.Pass
Capabilities47
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · local-mcp.com

# add to Claude Code
claude mcp add --transport http com-local-mcp-local-mcp https://local-mcp.com/mcp
# ~/.codex/config.toml
[mcp_servers.com-local-mcp-local-mcp]
url = "https://local-mcp.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-local-mcp-local-mcp": {
      "type": "remote",
      "url": "https://local-mcp.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-local-mcp-local-mcp --url https://local-mcp.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-local-mcp-local-mcp:
    url: "https://local-mcp.com/mcp"
// mcp.json
{
  "mcpServers": {
    "com-local-mcp-local-mcp": {
      "type": "http",
      "url": "https://local-mcp.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 11.

  • 2 Aug 26 0
    • Tool “update_self_diagnosis” was removed security
    • Tool “update_local_mcp” was removed security
    • Tool “todo_list_lists” was removed security
    • Tool “delete_reminder_list” was removed security
    • Tool “signal_friction” was removed security
    • Tool “rename_reminder_list” was removed security
    • Tool “list_reminder_lists” was removed security
    • New tool “delete_reminder_folder”, which the server declares destructive security
    • Tool “word_append” rewrote its description, which is the text the model reads security
    • Tool “word_create” rewrote its description, which is the text the model reads security
    • Tool “file_read” rewrote its description, which is the text the model reads security
    • Tool “ppt_create” rewrote its description, which is the text the model reads security
    • Tool “safari_wait_for” rewrote its description, which is the text the model reads security
    • Tool “chrome_wait_for” rewrote its description, which is the text the model reads security
    • Schema quality: good → fair functional
    • Server version: ff5a8769-3ea → 592a6ae2-fec functional
    • Server version: 08fa612d-2a3 → ff5a8769-3ea functional
    • New tool “todo_get_folders” functional
    • New tool “report_friction” functional
    • New tool “rename_reminder_folder” functional
    • New tool “lmcp_upgrade_diagnostics” functional
    • New tool “lmcp_install_upgrade” functional
    • New tool “get_reminder_folders” functional
    • New tool “todoist_create_task” functional
    • New tool “connect_todoist” functional
    • New tool “todoist_list_tasks” functional
    • New tool “todoist_list_projects” functional
    • New tool “survey_respond” functional
    • New tool “disconnect_todoist” functional
    • New tool “survey_skip” functional
    • New tool “todoist_complete_task” functional
    • “list_omnifocus_tasks” reworded the description of “include_completed” cosmetic
    • “list_omnifocus_tasks” reworded the description of “inbox” cosmetic
    • “list_omnifocus_tasks” reworded the description of “flagged” cosmetic
    • “list_omnifocus_tasks” reworded the description of “due_today” cosmetic
    • “list_omnifocus_projects” reworded the description of “limit” cosmetic
    • “list_omnifocus_projects” reworded the description of “include_completed” cosmetic
    • “list_omnifocus_folders” reworded the description of “limit” cosmetic
    • “create_omnifocus_task” reworded the description of “name” cosmetic
    • “create_omnifocus_task” reworded the description of “due_date” cosmetic
    • “list_omnifocus_tasks” reworded the description of “limit” cosmetic
    • “create_omnifocus_task” reworded the description of “flagged” cosmetic
    • “complete_omnifocus_task” reworded the description of “confirm” cosmetic
    • “complete_omnifocus_task” reworded the description of “task_id” cosmetic
    • “complete_omnifocus_task” reworded the description of “task_name” cosmetic
    • “create_omnifocus_task” reworded the description of “confirm” cosmetic
    • “create_omnifocus_task” reworded the description of “defer_date” cosmetic
    • “update_reminder” reworded the description of “list_name” cosmetic
    • “todo_list_tasks” reworded the description of “list” cosmetic
    • “todo_create_task” reworded the description of “list” cosmetic
    • “create_omnifocus_task” reworded the description of “project” cosmetic
    • “create_omnifocus_task” reworded the description of “note” cosmetic
    • “list_omnifocus_tasks” reworded the description of “project” cosmetic
    • “search_omnifocus_tasks” reworded the description of “query” cosmetic
    • “search_omnifocus_tasks” reworded the description of “limit” cosmetic
    • “list_omnifocus_tasks” reworded the description of “tag” cosmetic
    • “safari_wait_for” reworded the description of “selector” cosmetic
    • “safari_wait_for” reworded the description of “text_match” cosmetic
    • “chrome_wait_for” reworded the description of “selector” cosmetic
    • “chrome_wait_for” reworded the description of “text_match” cosmetic
    • “safari_wait_for” made “selector” optional cosmetic
    • “chrome_wait_for” made “selector” optional cosmetic
  • 1 Aug 26 +1
    • Server version: b4f82cea-409 → 08fa612d-2a3 functional
  • 31 Jul 26 −4
    • Tool “servicenow_get_incident” was removed security
    • Tool “connect_servicenow” was removed security
    • Tool “disconnect_servicenow” was removed security
    • Tool “servicenow_add_comment” was removed security
    • Tool “servicenow_create_incident” was removed security
    • Tool “servicenow_list_my_incidents” was removed security
    • Tool “servicenow_search_incidents” was removed security
    • Tool “servicenow_search_kb” was removed security
    • Tool “servicenow_update_incident” was removed security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “create_calendar_event” rewrote its description, which is the text the model reads security
    • Tool “create_referral_invites” rewrote its description, which is the text the model reads security
    • Tool “delete_calendar_event” rewrote its description, which is the text the model reads security
    • Tool “file_read” rewrote its description, which is the text the model reads security
    • Tool “finder_list” rewrote its description, which is the text the model reads security
    • Tool “finder_search” rewrote its description, which is the text the model reads security
    • Tool “report_problem” rewrote its description, which is the text the model reads security
    • Schema quality: pass → fail functional
    • MCP protocol: pass → fail functional
    • The server now declares the “prompts” capability functional
    • The server now declares the “resources” capability functional
    • First check of Schema quality: 75 functional
    • New prompt “draft_email” functional
    • New prompt “daily_briefing” functional
    • New prompt “summarize_inbox” functional
    • MCP protocol version: 2025-11-25 → 2024-11-05 functional
    • New resource “welcome.html” functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
    • Server version: 1.0 → b4f82cea-409 functional
    • “create_calendar_event” added an optional parameter “recurrence” cosmetic
    • “create_calendar_event” added an optional parameter “recurrence_count” cosmetic
    • “create_calendar_event” added an optional parameter “recurrence_interval” cosmetic
    • “create_calendar_event” added an optional parameter “recurrence_until” cosmetic
    • “delete_calendar_event” added an optional parameter “span” cosmetic
  • 30 Jul 26 +6
    • Stability: 0.10 → fail security
    • Schema quality: fair → good functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 −4
    • Tool “lmcp_state” rewrote its description, which is the text the model reads security
    • Schema quality: good → fair functional
    • New tool “list_missing_permissions” functional
    • New tool “configure_clients” functional
  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://local-mcp.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=local-mcp.com CN=YE2,O=Let's Encrypt,C=US 19 Jul 2026 17 Oct 2026 ECDSA 256 ECDSA-SHA384 534465691c49f58d100f7c86d2438a66172
SANs: *.local-mcp.com, local-mcp.com
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC secure

Validation of local-mcp.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
local-mcp.com. present 2371 13 Verified
local-mcp.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000
content-security-policy default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' static.cloudflareinsights.com plausible.io https://*.clarity.ms https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https: blob:; font-src 'self' data:; connect-src 'self' https://www.local-mcp.com https://office-mcp-production.up.railway.app https://plausible.io https://static.cloudflareinsights.com https://cloudflareinsights.com https://api.npmjs.org https://*.clarity.ms https://*.google-analytics.com https://*.analytics.google.com https://www.googletagmanager.com https://cdn.growthbook.io; frame-ancestors 'none'; base-uri 'self'; form-action 'self' https://www.local-mcp.com https://chatgpt.com https://claude.ai
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=(), payment=()
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://local-mcp.com/mcp Verified 200
http (plaintext) http://local-mcp.com/mcp HTTPS enforced 301 https://local-mcp.com/mcp
MCP tools — 226 exposed · ~23,278 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
chrome_click ~139

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.

NameTypeReqDescription
nthintegerWhich match to click if there are several (0-based, default 0)
selectorstringyesCSS selector (e.g. 'button.primary', '#save', '[data-testid=login]')
wait_for_navigationbooleanWait up to 3s for page load after click (default false)

Structured output declared, but exposes no named fields.

No examples provided.

chrome_fill_form ~43

Fills multiple form fields in one shot in the current Google Chrome tab. Pass fields as a JSON object mapping CSS selector to value.

NameTypeReqDescription
fieldsstringyes
NameTypeReqDescription
okboolean
resultobject

No examples provided.

chrome_go_back ~30

Navigates the current Google Chrome tab back to the previous page.

NameTypeReqDescription
window_indexinteger
NameTypeReqDescription
fromstring
tostring
went_backboolean

No examples provided.

chrome_history ~117

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.

NameTypeReqDescription
limitintegerMax entries to return (default 50, max 200).
querystringSubstring to match against the URL or page title. Omit to list the most recent history.

No output schema declared.

No examples provided.

chrome_list_tabs ~29

Lists every open tab across all Google Chrome windows with title, URL, and whether it is active.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countinteger
tabsarray

No examples provided.

chrome_navigate ~51

Navigates Google Chrome to a URL. Pass new_tab=true to open in a new tab.

NameTypeReqDescription
new_tabboolean
urlstringyes
window_indexinteger
NameTypeReqDescription
navigatedboolean
new_tabboolean
urlstring

No examples provided.

chrome_query_selector_all ~44

Runs document.querySelectorAll in the current Google Chrome tab and returns a compact summary of each match.

NameTypeReqDescription
limitinteger
selectorstringyes
NameTypeReqDescription
okboolean
resultobject

No examples provided.

chrome_read_tab ~252

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 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.

NameTypeReqDescription
include_htmlbooleanAlso return the HTML source (default false)
include_linksbooleanExtract all links with href + visible text (default false). Great for navigating SPAs.
max_bytesintegerMax bytes of text (and html) to return (default 102400)
tab_indexintegerTab index from chrome_list_tabs (default active tab of that window)
url_matchstringSubstring to match against the tab URL. Takes precedence over indices.
window_indexintegerWindow index from chrome_list_tabs (default 0)
NameTypeReqDescription
htmlstring
html_bytesinteger
html_truncatedboolean
link_countinteger
linksarray
links_errorstring
textstring
text_bytesinteger
titlestring
truncatedboolean
urlstring

No examples provided.

chrome_search_tabs ~117

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).

NameTypeReqDescription
contextintegerCharacters of context around each match (default 120)
max_tabsintegerMax tabs to scan (default 30). Higher = slower.
querystringyesSubstring to search for (case-insensitive)
NameTypeReqDescription
hitsarray
querystring
scannedinteger

No examples provided.

chrome_setup_check ~48

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
instructionsstring
ready_for_js_toolsboolean
tabs_openinteger

No examples provided.

chrome_type ~53

Sets the value of an input/textarea matching a CSS selector in the current Google Chrome tab and fires input/change events.

NameTypeReqDescription
clearboolean
selectorstringyes
valuestringyes
NameTypeReqDescription
okboolean
resultobject

No examples provided.

chrome_wait_for ~153

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.

NameTypeReqDescription
selectorstringCSS selector to wait for (optional if text_match is given)
text_matchstringText to wait for. With `selector`, must appear inside that element; without it, anywhere on the page.
timeout_msintegerMax time to wait (default 10000 = 10s, max 30000)

Structured output declared, but exposes no named fields.

No examples provided.

complete_omnifocus_task ~93

Marks an OmniFocus task as complete by task ID or name. Requires confirm=true.

NameTypeReqDescription
confirmbooleanMust be true to complete; called without it, returns a preview.
task_idstringExact task id from list_omnifocus_tasks (preferred). Provide this OR task_name.
task_namestringTask title to match when you don't have the id.
NameTypeReqDescription
completedboolean
idstring
namestring

No examples provided.

complete_reminder ~62

Marks a reminder complete in Apple Reminders (Reminders.app). Requires confirm=true. For Microsoft To Do use todo_complete_task instead.

NameTypeReqDescription
confirmbooleanMust be true to complete
reminder_idstringyesReminder ID from list_reminders

Structured output declared, but exposes no named fields.

No examples provided.

configure_clients ~179

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.

NameTypeReqDescription
clientstringOptional: configure only this client — one of claude, claude-code, cursor, windsurf, vscode, zed. Omit to do all installed ones.
confirmbooleanMust be true to write the config. Without it, returns a preview of what would change.

Structured output declared, but exposes no named fields.

No examples provided.

connect_m365_account ~43

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestring
okboolean

No examples provided.

connect_todoist ~64

Connect Todoist using your personal API token (Todoist → Settings → Integrations → Developer → copy the API token). Stored locally, never sent to Claude's servers.

NameTypeReqDescription
api_tokenstringyesYour Todoist API token (a 40-char hex string)
NameTypeReqDescription
messagestringyes
okbooleanyes

No examples provided.

create_calendar_event ~473

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.

NameTypeReqDescription
attendeesarrayList of email addresses to invite (optional, CalDAV/Exchange only)
calendarstringCalendar name to match (optional, alternative to calendar_id)
calendar_idstringCalendar UUID from list_calendar_names (optional, defaults to default calendar)
confirmbooleanMust be true to create the event
end_datestringyesISO 8601 date or datetime, same timezone rules as start_date. For an all-day event pass a bare date (end is inclusive: same date as start = a one-day all-day event; a later date spans through that da…
locationstringLocation (optional)
notesstringEvent notes (optional)
recurrencestringMake it a repeating event: 'daily', 'weekly', 'monthly', or 'yearly' (optional; omit for a one-time event).
recurrence_countintegerTotal number of occurrences (optional). Mutually exclusive with recurrence_until; if neither is given the event repeats indefinitely.
recurrence_intervalintegerRepeat every N periods (optional, default 1 — e.g. recurrence='weekly' + recurrence_interval=2 = every 2 weeks).
recurrence_untilstringISO 8601 date the repetition stops on (optional; takes precedence over recurrence_count).
start_datestringyesISO 8601 date or datetime. With a time (2026-06-27T09:00:00) the event is timed; a time with NO timezone is read in the Mac's LOCAL zone, append Z or an offset (2026-06-27T09:00:00Z, or +02:00) to pi…
titlestringyesEvent title
NameTypeReqDescription
attendees_notestring
attendees_requestedarray
createdboolean
endstring
idstring
recurrencestringPresent when the event repeats (human-readable summary)
startstring
titlestring

No examples provided.

create_draft ~245

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` (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.

NameTypeReqDescription
accountstring
attachmentsstring
bccstring
bodystring
ccstring
fromstring
html_bodystring
reply_allboolean
reply_to_message_idstring
subjectstring
tostring
NameTypeReqDescription
accountstring
attachmentsarray
attachments_failedarray
fromstring
kindstring
reply_to_message_idstring
saved_draftboolean
subjectstring
tostring

No examples provided.

create_email_folder ~53

Creates a new mailbox folder in Mail.app.

NameTypeReqDescription
accountstringAccount name (optional, uses default)
confirmbooleanMust be true to create
namestringyesFolder name
NameTypeReqDescription
createdbooleanyes
namestringyes

No examples provided.

create_note ~83

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.

NameTypeReqDescription
bodystringyes
confirmboolean
folderstring
namestringyes
NameTypeReqDescription
createdboolean
idstring
namestring

No examples provided.

create_omnifocus_task ~147

Creates a new task in OmniFocus. Requires confirm=true to execute.

NameTypeReqDescription
confirmbooleanMust be true to create; called without it, returns a preview.
defer_datestringDefer/start date, ISO 8601 — the task stays hidden until then.
due_datestringDue date, ISO 8601 (YYYY-MM-DD or full timestamp).
flaggedbooleanCreate the task flagged.
namestringyesThe task title.
notestringLonger note/body for the task.
projectstringProject to file the task under (name). Omit for the inbox.
NameTypeReqDescription
createdboolean
idstring
namestring

No examples provided.

create_referral_invites ~132

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").

NameTypeReqDescription
langstringISO language of the invite you're writing (the user's conversation language, e.g. 'es', 'en'). Defaults to the Mac's language.
recipientsarrayyesThe picked recipients.
NameTypeReqDescription
invitesarray
nextstring

No examples provided.

create_reminder ~94

Creates a reminder in Reminders.app.

NameTypeReqDescription
confirmbooleanMust be true to create
due_datestringISO 8601 date (optional)
list_namestringReminder list name (optional)
notesstringNotes (optional)
prioritystringPriority: none | low | medium | high (optional)
titlestringyesReminder title

Structured output declared, but exposes no named fields.

No examples provided.

create_reminder_list ~52

Creates a new list in Apple Reminders (Reminders.app). Requires confirm=true.

NameTypeReqDescription
confirmbooleanMust be true to create
namestringyesName for the new reminder list

Structured output declared, but exposes no named fields.

No examples provided.

daily_brief ~125

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.

NameTypeReqDescription
include_emailsbooleanInclude unread email summary from Mail.app (default true, skipped gracefully if Mail is not running)
locationstringOptional city name or 'lat,lon' to include today's weather in the brief (e.g. 'London', 'San Francisco'). Omitted if not provided.
NameTypeReqDescription
datestringyesToday's date (YYYY-MM-DD).
emailsobject|nullyesUnread email summary (unread_count + recent_unread), or {skipped} / {error}, or null when not requested.
eventsarrayyesToday's calendar events.
notestringOnboarding enrichment shown when nothing is scheduled.
remindersarrayyesReminders due today or overdue.
weatherobjectToday's weather (current conditions + forecast), only present when a location was provided.

No examples provided.

delete_calendar_event ~136

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.

NameTypeReqDescription
confirmbooleanMust be true to delete
event_idstringyesEvent identifier from list_calendar_events
spanstringFor a recurring event: 'this' (default — only this occurrence) or 'future' (this and all following occurrences). Ignored for non-recurring events.

Structured output declared, but exposes no named fields.

No examples provided.

delete_reminder ~65

Permanently deletes a reminder in Apple Reminders (Reminders.app) by ID. Get the reminder_id from list_reminders. Requires confirm=true.

NameTypeReqDescription
confirmbooleanMust be true to delete
reminder_idstringyesReminder identifier from list_reminders

Structured output declared, but exposes no named fields.

No examples provided.

delete_reminder_folder ~93

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.

NameTypeReqDescription
confirmbooleanMust be true to delete
list_idstringList identifier from get_reminder_folders (alternative to name)
namestringList name to delete (or pass list_id)

Structured output declared, but exposes no named fields.

No examples provided.

disconnect_m365_account ~21

Disconnect your Microsoft 365 account and remove stored tokens.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestring
okboolean

No examples provided.

disconnect_todoist ~20

Disconnect Todoist and remove the stored API token.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyes
okbooleanyes

No examples provided.

excel_create ~74

Creates a new Excel spreadsheet (.xlsx file) with headers and optional data rows.

NameTypeReqDescription
confirmbooleanMust be true to create
headersarrayyesColumn headers
pathstringyesOutput path for the .xlsx file
rowsarrayArray of row arrays with data (optional)
NameTypeReqDescription
createdbooleanyesTrue when the file was created
headersarrayyesColumn headers written
pathstringyesPath of the created .xlsx file
rowsintegeryesNumber of data rows written

No examples provided.

excel_read ~113

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.

NameTypeReqDescription
max_rowsintegerMax rows to return (default 100)
pathstringyesAbsolute path to the .xlsx file
sheet_namestringSheet name to read (optional, reads first sheet)
NameTypeReqDescription
countintegeryesNumber of DATA rows returned (excludes the header row)
headersarrayyesThe first row, as column headers — mirrors excel_create's `headers` param
rowsarrayyesData rows AFTER the header row (each an array of cell-value strings) — feeds straight into excel_create's `rows`
sheetstringyesName of the sheet that was read
sheetsarrayyesAll sheet names in the workbook

No examples provided.

excel_write_cell ~95

Writes a value to a specific cell in an Excel file.

NameTypeReqDescription
columnintegeryesColumn number (1-based)
confirmbooleanMust be true to modify
pathstringyesPath to the .xlsx file
rowintegeryesRow number (1-based)
sheet_namestringSheet name (default: first sheet)
valuestringyesValue to write
NameTypeReqDescription
colintegeryesColumn that was written (1-based)
rowintegeryesRow that was written (1-based)
valuestringyesValue written to the cell
writtenbooleanyesTrue when the cell was written

No examples provided.

file_list ~96

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.

NameTypeReqDescription
pathstringAbsolute path to the directory. Defaults to the home directory (~) if omitted.
show_hiddenbooleanInclude hidden files (starting with '.'). Default false.
NameTypeReqDescription
countinteger
dirsinteger
filesinteger
itemsarray
pathstring

No examples provided.

file_read ~241

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.

NameTypeReqDescription
max_bytesintegerMaximum bytes to read (default 1 MB, max 10 MB)
offsetintegerStart reading at this byte offset (default 0)
pathstringyesAbsolute path to the file
NameTypeReqDescription
bytesintegeryesTotal file size in bytes
contentstringyesDecoded file text content
encodingstringEncoding used to decode (utf8 | cp1252 | latin1)
offsetintegerByte offset the read started at
pathstringyesResolved absolute path of the file
truncatedbooleanTrue if more content remains beyond what was returned

No examples provided.

file_search ~134

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.

NameTypeReqDescription
file_typestringFilter by extension, e.g. 'pdf', 'docx', 'xlsx'. Omit for all types.
max_resultsintegerMaximum number of results to return. Default 50, max 200.
querystringyesFilename pattern to search for (partial, case-insensitive)
rootstringRoot directory to search from. Defaults to home directory (~).
NameTypeReqDescription
countinteger
querystring
resultsarray
rootstring

No examples provided.

file_write ~192

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.

NameTypeReqDescription
appendbooleanAppend to the end instead of overwriting (default false)
confirmbooleanRequired (true) to OVERWRITE an existing file. Not needed to create a new file or to append.
contentstringyesText content to write
pathstringyesAbsolute path to the file to write

Structured output declared, but exposes no named fields.

No examples provided.

finder_list ~100

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.

NameTypeReqDescription
limitintegerMax items (default 100)
pathstringAbsolute path to list (default: ~)
NameTypeReqDescription
countintegerItems returned in this response.
itemsarray
notestring
pathstring
totalintegerTotal items when the listing was truncated.
truncatedboolean

No examples provided.

finder_search ~110

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'.

NameTypeReqDescription
limitintegerMax results (default 50)
pathstringLimit search to this directory (optional)
querystringyesFilename or content to search for
NameTypeReqDescription
countintegeryes
querystringyes
resultsarrayyes

No examples provided.

gdrive_file_info ~50

Metadata for a file/folder in the synced Google Drive: size, dates, type. Cheaper than listing the whole directory.

NameTypeReqDescription
pathstringyesAbsolute path to the file or folder
NameTypeReqDescription
createdstring
modifiedstring
namestring
pathstring
sizeinteger
size_humanstring
typestring

No examples provided.

gdrive_list_files ~96

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).

NameTypeReqDescription
limitintegerMax entries (default 1000, max 5000)
pathstringyesAbsolute path to the Google Drive folder
NameTypeReqDescription
countinteger
itemsarray
notestring
totalinteger
truncatedboolean

No examples provided.

gdrive_read_file ~175

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.

NameTypeReqDescription
encodingstring'auto' (default), 'utf8', 'latin1', 'cp1252', 'ascii', 'utf16'
max_bytesintegerMax bytes (default 1MB, cap 10MB)
offsetintegerStart byte offset (default 0)
pathstringyesAbsolute path to the file
NameTypeReqDescription
bytesintegeryesTotal file size in bytes
bytes_readintegerNumber of bytes read in this slice
contentstringyesDecoded file text content
encodingstringEncoding used to decode (utf8 | cp1252 | latin1 | ascii | utf16)
offsetintegerByte offset the read started at
pathstringyesAbsolute path of the file
truncatedbooleanTrue if more content remains beyond what was returned

No examples provided.

gdrive_root ~61

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
rootsarray

No examples provided.

gdrive_search_files ~80

Searches the synced Google Drive folder for files by name (recursive). Returns up to max_results matches (default 50).

NameTypeReqDescription
max_resultsintegerMaximum results (default 50)
querystringyesFilename pattern to search for
rootstringRestrict to this Drive path (optional - defaults to all mounts)
NameTypeReqDescription
countinteger
querystring
resultsarray

No examples provided.

gdrive_write_file ~82

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.

NameTypeReqDescription
confirmbooleanMust be true to actually write
contentstringyesText content to write
pathstringyesAbsolute path under a Google Drive mount
NameTypeReqDescription
bytesintegeryes
overwrotebooleanyes
pathstringyes
writtenbooleanyes

No examples provided.

get_audit_log ~113

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.

NameTypeReqDescription
limitintegerNumber of recent entries to return (default 50, max 200)
okbooleanFilter to successes (true) or failures (false) only (optional)
toolstringFilter to entries for a specific tool name (optional)
NameTypeReqDescription
countinteger
entriesarray

No examples provided.

get_config ~19

Returns the current LMCP configuration (api_key masked).

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_contact ~121

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.

NameTypeReqDescription
contact_idstringExact identifier from list_contacts/search_contacts. Provide this OR name.
namestringFull or partial contact name — the one-step path. Provide this OR contact_id.

Structured output declared, but exposes no named fields.

No examples provided.

get_datetime ~73

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
epoch_secondsintegeryesUnix epoch seconds.
humanstringyesHuman-readable local date/time.
iso_localstringyesCurrent time in ISO 8601 with the machine's local UTC offset.
iso_utcstringyesCurrent time in ISO 8601, UTC.
timezonestringyesIANA timezone identifier.
utc_offsetstringyesUTC offset like +02:00.
weekdaystringyes

No examples provided.