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

com.local-mcp/local-mcp

REMOTE · LOCAL-MCP.COM · 2 COMPONENTS · SCANNED SEP 20

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

−41 this week 39 Trust /100

Recent critical change

Authorization (16 Sept 2026). See the changelog before you install this server.

Trust breakdown (7 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 → Why this is hard to score →

Endpoint Security97
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • The endpoint enforces authorisation, advertised via RFC 9728 protected-resource metadata. View diagnostics → Pass
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
  • The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability0
Schema Quality & AI Usability0
  • Schema blocked by authentication: the endpoint requires auth we don't have to read it. See how to fix → Unverified
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
  • Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Tool Safety0
  • Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Capabilities0
  • Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. See how to fix → Unverified

Unverified: 6 categories

Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm. Claim this server and supply a read-only token to verify it and lift the score.

Install

How do I install the com.local-mcp/local-mcp server?

com.local-mcp/local-mcp is a hosted endpoint at https://local-mcp.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · local-mcp.com

# add to Claude Code
claude mcp add --transport http com-local-mcp-local-mcp 'https://local-mcp.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-local-mcp-local-mcp": {
      "url": "https://local-mcp.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-local-mcp-local-mcp": {
      "type": "http",
      "url": "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"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-local-mcp-local-mcp": {
      "Transport": "http",
      "Url": "https://local-mcp.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-local-mcp-local-mcp -t streamable-http -u '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.

  • 17 Sept 26 −41
    • Endpoint reachability: reachable → behind authorisation security
    • Stability: fail → unverified security
    • Tool safety: pass → unverified security
    • Transport: pass → unverified security
    • Authorization: fail → pass security
    • First check of Authorization: partial security
    • Tool coverage: 100 → unverified functional
    • Schema quality: 75 → unverified functional
    • Capabilities: pass → unverified functional
  • 16 Sept 26 0
    • Authorization: unverified → fail critical
  • 15 Sept 26 0
    • Authorization: fail → unverified security
  • 13 Sept 26 0
    • Authorization: unverified → fail critical
  • 12 Sept 26 0
    • Authorization: fail → unverified security
    • Tool “run_diagnostics” rewrote its description, which is the text the model reads security
    • Tool “configure_clients” rewrote its description, which is the text the model reads security
    • New tool “lmcp_doctor” functional
    • “configure_clients” reworded the description of “client” cosmetic
    • “run_diagnostics” reworded the description of “focus” cosmetic
  • 11 Sept 26 0
    • Tool “finder_list” rewrote its description, which is the text the model reads security
    • Tool “file_write” 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_search” rewrote its description, which is the text the model reads security
  • 8 Sept 26 +29
    • Authorization: unverified → fail critical
    • Injection markers: unverified → pass security
    • Tool “excel_write_cell” rewrote its description, which is the text the model reads security
    • Tool “excel_create” rewrote its description, which is the text the model reads security
    • Tool “reply_email” rewrote its description, which is the text the model reads security
    • Schema quality: unverified → fail functional
    • Schema quality: 223 → 127 functional
    • Schema quality: 223 → 125 functional
    • Tool coverage: unverified → 100 functional
    • Schema quality: good → excellent functional
    • This server's schema is too large to store in full, so we cannot compare its tools day to day functional
    • “excel_read” added an optional parameter “force_download” cosmetic
    • “pdf_read” added an optional parameter “force_download” cosmetic
    • “ppt_read” added an optional parameter “force_download” cosmetic
    • “reply_email” added an optional parameter “save_as_draft” cosmetic
    • “word_read” added an optional parameter “force_download” cosmetic
    • “reply_email” reworded the description of “confirm” cosmetic
  • 7 Sept 26 −27
    • Tool safety: pass → unverified security
    • Authorization: fail → unverified security
    • Schema quality: 125 → 223 functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: fail → unverified functional
    • MCP protocol: fail → pass functional
    • Schema quality: excellent → good functional
    • Server version: e57f9d66-d10 → c2609ba9-0f4 functional
    • This server's schema is too large to store in full, so we cannot compare its tools day to day 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 20 Sept 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=YE1,O=Let's Encrypt,C=US 16 Sept 2026 15 Dec 2026 ECDSA 256 ECDSA-SHA384 611e3e1599b7d3d83dea72ee1855d00484e
SANs: *.local-mcp.com, local-mcp.com
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
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

Background: What to check on a remote MCP endpoint →

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 Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On connection
HTTP status 401

WWW-Authenticate challenge Bearer realm="OAuth", resource_metadata="https://local-mcp.com/.well-known/oauth-protected-resource/mcp", error="invalid_token", error_description="Missing or invalid access token"

Bearer realm="OAuth", resource_metadata="https://local-mcp.com/.well-known/oauth-protected-resource/mcp", error="invalid_token", error_description="Missing or invalid access token"
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=()
www-authenticate Bearer realm="OAuth", resource_metadata="https://local-mcp.com/.well-known/oauth-protected-resource/mcp", error="invalid_token", error_description="Missing or invalid access token"

Protected resource metadata

Document https://local-mcp.com/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://local-mcp.com/mcp
Authorisation server https://www.local-mcp.com

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://local-mcp.com/mcp Auth required 401
http (plaintext) http://local-mcp.com/mcp HTTPS enforced 301 https://local-mcp.com/mcp
MCP tools · 204 exposed · ~25,946 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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
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 ~265

Adds Local MCP to the config of the MCP-capable AI apps installed on this Mac, from LMCP's client catalog (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Zed, Codex / ChatGPT desktop, Jan, LM Studio, Warp, Antigravity, Cline, Roo and more) — no manual JSON editing. Read-only PREVIEW unless confirm:true. Optionally pass a single `client` id. Reports per client whether it was set up, was already set up, can't be set up automatically (and why), or isn't installed, plus the step the user must take for the change to apply (restart the app, or open a new session). Pair with list_missing_permissions for fully agent-driven setup.

NameTypeReqDescription
clientstringOptional: configure only this client. One of: claude-desktop, claude-code, cursor, windsurf, vscode, zed, lmstudio, warp, antigravity, cline, roo, codex, jan, opencode, goose, hermes, raycast, msty,…
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 ~53

Connect Todoist. For security your API token is entered directly in Local MCP's own settings window — never passed through the AI. Call this to get the instructions, or to check whether Todoist is already connected.

Input schema present but exposes no named parameters.

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 ~566

Saves an email to the Mail.app Drafts folder for the user to review and send manually — it never sends. Compose a new draft with `to`/`subject` and `body` or `html_body`, or save a native reply with `reply_to_message_id`, `reply_all`, and `body` or `html_body`; the response names the Drafts mailbox and subject. A reply draft's response includes `threaded`: true means the saved draft was read back and its headers reference the source message (it will appear inside the conversation); false means it saved WITHOUT threading headers (relay the warning to the user); "unconfirmed" means it could not be read back in time (e.g. Exchange sync lag). On a multi-account Mac, pass `account` (an account name from list_email_accounts) or `from` (a sender address) to place the draft in that account's Drafts; otherwise it lands in the default account. Attach files by passing `attachments` (comma-separated absolute file paths, e.g. a PDF quote) — they are attached to the saved draft. Use this for the cautious user who wants AI-composed mail but insists on sending it themselves. Requires confirm=true to actually save it — without it, returns a preview without touching Mail.app.

NameTypeReqDescription
accountstringAccount name (from list_email_accounts) whose Drafts folder receives the draft. Alternative to `from`.
attachmentsstringFiles to attach, as comma-separated absolute paths (e.g. a PDF).
bccstringBCC address(es), comma-separated.
bodystringPlain-text body of the draft.
ccstringCC address(es), comma-separated.
confirmbooleanMust be true to actually save the draft. Without it, returns a preview of the recipient/sender, subject, and that the body will be saved.
fromstringSender address — on a multi-account Mac, selects which account's Drafts to use. Alternative to `account`.
html_bodystringHTML body of the draft. Takes precedence over `body` when both are given.
reply_allbooleanFor a reply draft, include all original recipients (reply-all) instead of just the sender.
reply_to_message_idstringMessage id (from list_emails/search_emails) to draft a reply to, instead of a new message.
subjectstringSubject line for a new draft. Ignored for reply drafts (they inherit the original subject).
tostringRecipient address(es) for a new draft, comma-separated. Omit for a reply draft (uses reply_to_message_id).
NameTypeReqDescription
accountstring
attachmentsarray
attachments_failedarray
fromstring
kindstring
mailboxstring
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.
incompletearraySections that could NOT be read this time (each step has its own ceiling). An empty/absent list means every section was actually read; a section named here means its data is missing, NOT that it is e…
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_note ~175

Deletes a note from Apple Notes, by ID or exact title. Like deleting it in the app, the note goes to "Recently Deleted" and Apple purges it after 30 days — the user can still recover it there. Requires confirm=true. The result is VERIFIED: the tool re-reads the note after deleting and reports the deletion as unverified if it is still where it was, so a success here means the note is really gone from list_notes/search_notes/read_note. Find note_id with list_notes or search_notes.

NameTypeReqDescription
confirmboolean
note_idstringThe note's id, as list_notes/search_notes report it.
note_namestringExact title, when you don't have the id. If several notes share it, the first match is deleted — prefer note_id.
NameTypeReqDescription
deletedbooleanTrue only when the deletion was VERIFIED by re-reading the note
folder_afterstringWhere it ended up (present when it moved instead of vanishing)
folder_beforestringThe folder the note was in before deleting
idstring
in_trashbooleanThe note moved to Recently Deleted (Apple purges it after 30 days) rather than vanishing outright
namestring
next_actionsarray
verifiedbooleanThe note was re-read after deleting and is no longer where it was

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 ~146

Creates a new Excel spreadsheet (.xlsx file) with headers and optional data rows. JSON numbers (integers and decimals) are written as numbers, so SUM() and charts work on them; JSON strings always stay text even when they look numeric ("007", "1e3", or " 42"), as do integer values longer than 10 digits because they are identifiers like a CUIT, CBU or phone number rather than quantities.

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 ~173

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
force_downloadbooleanIf the file is stored in the cloud and evicted from this Mac (dataless), request the download and wait for it instead of failing. Off by default: a download can take minutes and use metered data, so…
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; numeric cells are numbers and text cells are strings — feeds straight into excel_create's `rows`
sheetstringyesName of the sheet that was read
sheetsarrayyesAll sheet names in the workbook
sparse_cellsarrayPresent only when the sheet has cells far outside the table (beyond column 64): each is {row, col, value} with REAL 1-based indices. Kept out of `rows` so one stray cell can't pad every row — but nev…

No examples provided.

excel_write_cell ~202

Writes a value to a specific cell in an Excel file. Numeric-looking value strings are written as numbers only when they round-trip exactly; otherwise they stay text. Address the cell either with `cell` in A1 notation (e.g. "B2") or with `row`+`column` as 1-based integers.

NameTypeReqDescription
cellstringCell in A1 notation, e.g. "B2" (alternative to row+column)
columnintegerColumn number (1-based) — use with `row`, or use `cell` instead
confirmbooleanMust be true to modify
pathstringyesPath to the .xlsx file
rowintegerRow number (1-based) — use with `column`, or use `cell` instead
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 ~242

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). Reads anywhere on this Mac — home, external disks, cloud drives, /tmp — with one exception: credential and identity locations (keychains, ~/.ssh, ~/.aws, browser logins, another user's home, Time Machine backups) are never read. 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 ~200

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.) Writes anywhere on this Mac, with two exceptions: files your machine runs by itself (shell startup files, LaunchAgents, git hooks, AI-client configs) and credential locations are never written. 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 ~81

Lists files and folders in a directory (Spotlight-free). Lists any folder on this Mac. Credential and identity locations (keychains, ~/.ssh, browser login stores, another user's home, Time Machine backups) are refused.

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 ~83

Searches for files by name anywhere on this Mac (uses mdfind/Spotlight); pass path= to scope it to one folder. Credential and identity locations are refused.

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_delete_file ~136

Deletes a file or an empty folder from the synced Google Drive folder — Google Drive for Desktop syncs the deletion to the cloud (the item lands in Drive's trash). Deleting a .gdoc/.gsheet/.gslides pointer removes the real Google Doc/Sheet/Slides. Never deletes a folder that still has contents. First call returns a preview of what was actually found at that path; pass confirm=true to delete.

NameTypeReqDescription
confirmbooleanMust be true to actually delete
pathstringyesAbsolute path under a Google Drive mount (use gdrive_root / gdrive_list_files to get one)
NameTypeReqDescription
deletedbooleanyesTrue only when the folder listing no longer shows the item
pathstringyes
typestringyesWhat was deleted: file, folder, or google_doc_pointer

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.

get_m365_person ~95

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.

NameTypeReqDescription
idstringyesUser ID (GUID), email address (UPN), or 'me' for the authenticated user, e.g. 'sarah@contoso.com', 'a1b2c3d4-...', or 'me'
NameTypeReqDescription
departmentstring
emailstring
idstring
mobilestring
namestring
officestring
phonesarray
titlestring
upnstring

No examples provided.

get_reminder_folders ~92

Lists the lists (folders) in Apple Reminders (Reminders.app) on this Mac. Every answer carries as_of (when the list snapshot was read) and cache_age_seconds; if cache_age_seconds is above 0 the snapshot is that many seconds old and a list created since then may be missing — call again to force a re-read. For Microsoft To Do use todo_get_folders instead.

Input schema present but exposes no named parameters.

NameTypeReqDescription
as_ofstringISO 8601 UTC instant when this list snapshot was read from EventKit (not when iCloud last synced).
cache_age_secondsintegerAge of the snapshot. 0 means it was read fresh for this call.
countinteger
listsarray
notestringPresent only when the snapshot is not fresh: says how old it is and what may be missing.

No examples provided.

get_weather ~132

Gets the current weather and a short daily forecast for a location. Pass a city name ('London', 'San Francisco', 'Tokyo,JP') or 'lat,lon' coordinates. Uses Open-Meteo — no API key required. Location must be provided (there is no device-location access).

NameTypeReqDescription
daysintegerNumber of forecast days, 1-7 (default 3)
locationstringyesCity name (e.g. 'London', 'Buenos Aires', 'Tokyo,JP') or 'lat,lon' coordinates (e.g. '40.71,-74.01')

Structured output declared, but exposes no named fields.

No examples provided.

list_accounts ~141

Lists Mail.app email accounts WITH each account's email addresses, server_name and type. type is whatever Mail reports — imap | pop | iCloud | smtp | unknown — and Mail's scripting dictionary has NO Exchange value, so Exchange (EWS) accounts always come back as unknown, flagged with type_undetermined: true and a type_note; for those read the mailbox through the m365_* tools (or outlook_diagnose) instead of routing by type. Slower — queries Mail directly. For just the account NAMES (to pass to list_emails(account=...)), prefer list_email_accounts: it's faster (cached, no Mail lock).

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountsarrayyes
countintegeryes
notestringPresent when some account's type could not be determined: how many, and what to do.

No examples provided.

list_calendar_events ~315

Lists events from the Mac's Calendar app (Calendar.app, local/iCloud calendars) in a date range, or reads ONE event in full via event_id. List entries preview notes (200 chars, notes_truncated flag) and cap attendees; pass event_id to get the complete notes and full roster. Defaults to today + 7 days. For a Microsoft 365 calendar use m365_list_events instead.

NameTypeReqDescription
calendarstringFilter by calendar name — partial, case-insensitive (optional). To pick one of several same-titled calendars, qualify it as "Account/Calendar" (e.g. "Exchange/Calendario") using the source from list_…
calendar_idstringFilter by a single calendar UUID from list_calendar_names (optional).
calendar_idsarrayFilter by multiple calendar UUIDs (optional).
end_datestringISO 8601 date (YYYY-MM-DD). Defaults to start_date + 7 days.
event_idstringRead exactly ONE event by its id (from a previous list) with FULL notes and the complete attendee roster — required before editing notes of an event whose list entry says notes_truncated. When set, a…
limitintegerMax number of events to return (most recent first within the range). Optional; defaults to all in range.
start_datestringISO 8601 date (YYYY-MM-DD). Defaults to today.
NameTypeReqDescription
countinteger
end_datestring
eventsarray
start_datestring

No examples provided.

list_calendar_names ~39

Lists the calendars in the Mac's Calendar app (Calendar.app, local/iCloud). For Microsoft 365 calendars use the m365 calendar tools instead.

Input schema present but exposes no named parameters.

NameTypeReqDescription
calendarsarray
countinteger

No examples provided.

list_contacts ~52

Lists contacts from the macOS Contacts app. Optionally filter by group.

NameTypeReqDescription
group_namestringFilter by group name (optional)
limitintegerMax contacts to return (default 100)
NameTypeReqDescription
contactsarrayyes
countintegeryes

No examples provided.

list_displays ~74

Lists connected displays with bounds (global space, top-left origin, points), backing scale_factor, and which is main. display_id is the CGDirectDisplayID — the SAME value list_windows reports for each window's display_id, so you can map a window to its display. Stable for the session. No permission required.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_email_accounts ~80

Lists all Mail.app account NAMES (fast — cached, no Mail lock). This is the preferred way to get account names: call it first to discover them, then use list_emails(account=name) to fetch messages from a specific account. If you also need each account's email addresses or type (imap/pop/iCloud), use list_accounts instead.

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountsarrayMail.app accounts, by name.
countintegerNumber of accounts.
tipstring

No examples provided.

list_email_folders ~176

Lists the full folder (mailbox) tree for Apple Mail (Mail.app) accounts, including nested subfolders. Use this to discover the exact folder names that move_email(target_mailbox=...) and list_emails(mailbox=...) expect. Outlook.com, Exchange, Gmail, iCloud and IMAP accounts added to Mail.app are all included. For a Graph-only Microsoft 365 mailbox not added to Mail.app, use m365_list_emails instead. Pass account=<name> (from list_email_accounts) to enumerate one account fully; without it, every account is walked which can be slow on macOS 15+. Message counts are off by default (slow on IMAP) — pass include_counts=true to add unread/total per folder.

NameTypeReqDescription
accountstring
include_countsboolean
NameTypeReqDescription
account_countinteger
accountsarray
folder_countinteger
next_actionsarray
truncatedboolean

No examples provided.

Common questions

What is the com.local-mcp/local-mcp server?

com.local-mcp/local-mcp is listed in the public MCP registry as com.local-mcp/local-mcp. Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free. This page covers its hosted endpoint (https://local-mcp.com/mcp).

Is the com.local-mcp/local-mcp server safe to use?

com.local-mcp/local-mcp scores 39 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the com.local-mcp/local-mcp server expose?

com.local-mcp/local-mcp exposes 204 tools: setup_install, complete_omnifocus_task, complete_reminder, configure_clients, connect_m365_account, and 199 more. Their descriptions and schemas cost roughly 25,946 tokens of context every time the server is loaded.

Does the com.local-mcp/local-mcp server require authentication?

Yes. com.local-mcp/local-mcp asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the com.local-mcp/local-mcp server still maintained?

com.local-mcp/local-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.