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.

LMCP

REMOTE · LOCAL-MCP.COM · 2 COMPONENTS

Mac & Windows: let ChatGPT, Claude & Cursor use your email, calendar, iMessage, Teams, files.

0 this week 39 Trust /100

Last scanned (1 hour ago)

Scores higher than 35% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Communication

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.

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.

  • 30 Sept 26 0
    • Authorization: pass → fail ▼ security
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 17 Sept 26 0
    • Endpoint reachability: reachable → behind authorisation ▼ security
    • Transport: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Stability: fail → unverified ▼ security
    • Authorization: fail → pass ▲ security
    • First check of Authorization: partial security
    • Schema quality: 75 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → 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
    • “run_diagnostics” reworded the description of “focus” cosmetic
    • “configure_clients” reworded the description of “client” cosmetic
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 5 Nov 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
confirmboolean–Must be true to complete; called without it, returns a preview.
task_idstring–Exact task id from list_omnifocus_tasks (preferred). Provide this OR task_name.
task_namestring–Task 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
confirmboolean–Must 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
clientstring–Optional: 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,…
confirmboolean–Must 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
attendeesarray–List of email addresses to invite (optional, CalDAV/Exchange only)
calendarstring–Calendar name to match (optional, alternative to calendar_id)
calendar_idstring–Calendar UUID from list_calendar_names (optional, defaults to default calendar)
confirmboolean–Must 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…
locationstring–Location (optional)
notesstring–Event notes (optional)
recurrencestring–Make it a repeating event: 'daily', 'weekly', 'monthly', or 'yearly' (optional; omit for a one-time event).
recurrence_countinteger–Total number of occurrences (optional). Mutually exclusive with recurrence_until; if neither is given the event repeats indefinitely.
recurrence_intervalinteger–Repeat every N periods (optional, default 1 — e.g. recurrence='weekly' + recurrence_interval=2 = every 2 weeks).
recurrence_untilstring–ISO 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––
recurrencestring–Present 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
accountstring–Account name (from list_email_accounts) whose Drafts folder receives the draft. Alternative to `from`.
attachmentsstring–Files to attach, as comma-separated absolute paths (e.g. a PDF).
bccstring–BCC address(es), comma-separated.
bodystring–Plain-text body of the draft.
ccstring–CC address(es), comma-separated.
confirmboolean–Must be true to actually save the draft. Without it, returns a preview of the recipient/sender, subject, and that the body will be saved.
fromstring–Sender address — on a multi-account Mac, selects which account's Drafts to use. Alternative to `account`.
html_bodystring–HTML body of the draft. Takes precedence over `body` when both are given.
reply_allboolean–For a reply draft, include all original recipients (reply-all) instead of just the sender.
reply_to_message_idstring–Message id (from list_emails/search_emails) to draft a reply to, instead of a new message.
subjectstring–Subject line for a new draft. Ignored for reply drafts (they inherit the original subject).
tostring–Recipient 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
accountstring–Account name (optional, uses default)
confirmboolean–Must 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
confirmboolean–Must be true to create; called without it, returns a preview.
defer_datestring–Defer/start date, ISO 8601 — the task stays hidden until then.
due_datestring–Due date, ISO 8601 (YYYY-MM-DD or full timestamp).
flaggedboolean–Create the task flagged.
namestringyesThe task title.
notestring–Longer note/body for the task.
projectstring–Project 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
langstring–ISO 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
confirmboolean–Must be true to create
due_datestring–ISO 8601 date (optional)
list_namestring–Reminder list name (optional)
notesstring–Notes (optional)
prioritystring–Priority: 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
confirmboolean–Must 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_emailsboolean–Include unread email summary from Mail.app (default true, skipped gracefully if Mail is not running)
locationstring–Optional 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.
incompletearray–Sections 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…
notestring–Onboarding enrichment shown when nothing is scheduled.
remindersarrayyesReminders due today or overdue.
weatherobject–Today'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
confirmboolean–Must be true to delete
event_idstringyesEvent identifier from list_calendar_events
spanstring–For 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_idstring–The note's id, as list_notes/search_notes report it.
note_namestring–Exact title, when you don't have the id. If several notes share it, the first match is deleted — prefer note_id.
NameTypeReqDescription
deletedboolean–True only when the deletion was VERIFIED by re-reading the note
folder_afterstring–Where it ended up (present when it moved instead of vanishing)
folder_beforestring–The folder the note was in before deleting
idstring––
in_trashboolean–The note moved to Recently Deleted (Apple purges it after 30 days) rather than vanishing outright
namestring––
next_actionsarray––
verifiedboolean–The 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
confirmboolean–Must 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
confirmboolean–Must be true to delete
list_idstring–List identifier from get_reminder_folders (alternative to name)
namestring–List 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
confirmboolean–Must be true to create
headersarrayyesColumn headers
pathstringyesOutput path for the .xlsx file
rowsarray–Array 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_downloadboolean–If 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_rowsinteger–Max rows to return (default 100)
pathstringyesAbsolute path to the .xlsx file
sheet_namestring–Sheet 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_cellsarray–Present 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
cellstring–Cell in A1 notation, e.g. "B2" (alternative to row+column)
columninteger–Column number (1-based) — use with `row`, or use `cell` instead
confirmboolean–Must be true to modify
pathstringyesPath to the .xlsx file
rowinteger–Row number (1-based) — use with `column`, or use `cell` instead
sheet_namestring–Sheet 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
pathstring–Absolute path to the directory. Defaults to the home directory (~) if omitted.
show_hiddenboolean–Include 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_bytesinteger–Maximum bytes to read (default 1 MB, max 10 MB)
offsetinteger–Start reading at this byte offset (default 0)
pathstringyesAbsolute path to the file
NameTypeReqDescription
bytesintegeryesTotal file size in bytes
contentstringyesDecoded file text content
encodingstring–Encoding used to decode (utf8 | cp1252 | latin1)
offsetinteger–Byte offset the read started at
pathstringyesResolved absolute path of the file
truncatedboolean–True 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_typestring–Filter by extension, e.g. 'pdf', 'docx', 'xlsx'. Omit for all types.
max_resultsinteger–Maximum number of results to return. Default 50, max 200.
querystringyesFilename pattern to search for (partial, case-insensitive)
rootstring–Root 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
appendboolean–Append to the end instead of overwriting (default false)
confirmboolean–Required (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
limitinteger–Max items (default 100)
pathstring–Absolute path to list (default: ~)
NameTypeReqDescription
countinteger–Items returned in this response.
itemsarray––
notestring––
pathstring––
totalinteger–Total 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
limitinteger–Max results (default 50)
pathstring–Limit 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
confirmboolean–Must 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
limitinteger–Max 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_bytesinteger–Max bytes (default 1MB, cap 10MB)
offsetinteger–Start byte offset (default 0)
pathstringyesAbsolute path to the file
NameTypeReqDescription
bytesintegeryesTotal file size in bytes
bytes_readinteger–Number of bytes read in this slice
contentstringyesDecoded file text content
encodingstring–Encoding used to decode (utf8 | cp1252 | latin1 | ascii | utf16)
offsetinteger–Byte offset the read started at
pathstringyesAbsolute path of the file
truncatedboolean–True 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_resultsinteger–Maximum results (default 50)
querystringyesFilename pattern to search for
rootstring–Restrict 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
confirmboolean–Must 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
limitinteger–Number of recent entries to return (default 50, max 200)
okboolean–Filter to successes (true) or failures (false) only (optional)
toolstring–Filter 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_idstring–Exact identifier from list_contacts/search_contacts. Provide this OR name.
namestring–Full 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_ofstring–ISO 8601 UTC instant when this list snapshot was read from EventKit (not when iCloud last synced).
cache_age_secondsinteger–Age of the snapshot. 0 means it was read fresh for this call.
countinteger––
listsarray––
notestring–Present 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
daysinteger–Number 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–
notestring–Present 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
calendarstring–Filter 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_idstring–Filter by a single calendar UUID from list_calendar_names (optional).
calendar_idsarray–Filter by multiple calendar UUIDs (optional).
end_datestring–ISO 8601 date (YYYY-MM-DD). Defaults to start_date + 7 days.
event_idstring–Read 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…
limitinteger–Max number of events to return (most recent first within the range). Optional; defaults to all in range.
start_datestring–ISO 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_namestring–Filter by group name (optional)
limitinteger–Max 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
accountsarray–Mail.app accounts, by name.
countinteger–Number 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.

Install

How do I install the LMCP MCP server?

LMCP 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'
Common questions

What is the LMCP MCP server?

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

Is the LMCP MCP server safe to use?

LMCP 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 LMCP MCP server expose?

LMCP 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 LMCP MCP server require authentication?

Yes. LMCP 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 LMCP MCP server still maintained?

LMCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.