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
list_emails ~254

Use this when the user wants to see or triage their inbox on this Mac (Apple Mail — any account added to Mail.app: iCloud, Gmail, IMAP, Exchange). Lists email headers (subject, sender, date, unread); call read_email(message_id) for the full body. For a Microsoft 365 mailbox NOT added to Mail.app, use m365_list_emails. IMPORTANT: on machines with 2+ accounts, call with account=<name> (from list_email_accounts). Without it, and when the fast index can't answer, list_emails returns the account list instead of scanning all of them — scanning every account in one call has no time limit and can block Mail for other requests too (#2268). Exactly 1 account is unaffected. Supports pagination: use offset to page through results (e.g. offset=20 for page 2 with limit=20). The limit parameter is capped at 50 per call (default 20); to read more, page with offset rather than requesting a larger limit.

NameTypeReqDescription
accountstring
limitinteger
mailboxstring
offsetinteger
unread_onlyboolean
NameTypeReqDescription
countinteger
messagesarray
next_actionsarray
offsetinteger

No examples provided.

list_m365_people_insights ~65

List the people most relevant to you in Microsoft 365 — based on your communication patterns, collaboration history, and org chart. Useful for meeting prep and contact enrichment.

NameTypeReqDescription
limitintegerNumber of people to return (default 20, max 50)
NameTypeReqDescription
countinteger
peoplearray

No examples provided.

list_message_chats ~61

Lists recent iMessage / Messages.app conversations (chat id, name, service). Start here for Messages — the chat id it returns is what read_messages / search_messages / send_message need.

NameTypeReqDescription
limitintegerMax conversations (default 30)
NameTypeReqDescription
chatsarray
countinteger
notestring

No examples provided.

list_missing_permissions ~116

Returns the macOS privacy (TCC) permissions Local MCP needs that are NOT granted yet, each with a one-click `open_url` that opens the exact System Settings → Privacy & Security pane. Read-only and passive (never prompts). Use it during setup or before a workflow to tell the user precisely which "Allow" clicks remain (Calendar, Contacts, Reminders, Mail Automation, Full Disk Access, Screen Recording, Accessibility) instead of failing mid-task. `all_granted: true` means nothing is left to do.

Input schema present but exposes no named parameters.

NameTypeReqDescription
all_grantedboolean
grantedarray
missingarray
summarystring

No examples provided.

list_notes ~410

Lists notes from Apple Notes app. Optionally filter by folder. Paginated: `limit` is capped at 500 per call, so page with `offset` (offset=500 returns notes 501-1000) instead of asking for a bigger limit. The response carries `total` (how many notes match in all) and `has_more` (whether anything is left past this page), so you never have to guess whether you got everything — page until `has_more` is false, which is exact even when `total_is_estimated` says the count is only a lower bound. To read a WHOLE library, pass order="id" — see the order parameter.

NameTypeReqDescription
folderstring
limitintegerNotes per page (default 50, capped at 500). To get more, page with offset.
offsetintegerHow many notes to skip (default 0). offset=500 with limit=500 returns notes 501-1000. An offset past the end returns an empty page with has_more=false, not an error.
orderstringorder: "modified" (default) sorts newest-modified first — what you want to SHOW someone, but NOT safe for paging: modification date changes, so a note edited between two calls jumps to the front and…
NameTypeReqDescription
countintegerNotes in THIS page
has_morebooleanTrue when notes remain past this page — call again with offset = offset + count
next_actionsarray
notesarray
offsetintegerWhere this page started
orderstringThe ordering actually applied (modified | id)
totalintegerNotes matching in total, ignoring limit/offset. A LOWER BOUND, not the exact figure, when total_is_estimated is true
total_is_estimatedbooleanTrue when the exact count could not be taken (the unbounded COUNT failed, or the JXA fallback answered) — total is then only a lower bound. has_more stays exact either way: page until it is false, ne…

No examples provided.

list_omnifocus_folders ~63

Lists folders in OmniFocus. Folders group related projects (e.g. "Work", "Personal"). Use list_omnifocus_projects to see the projects inside them.

NameTypeReqDescription
limitintegerMax folders to return (default 100).
NameTypeReqDescription
countinteger
foldersarray

No examples provided.

list_omnifocus_projects ~94

Lists projects in OmniFocus. Start here for OmniFocus (alongside list_omnifocus_folders) — the project name it returns feeds list_omnifocus_tasks / create_omnifocus_task / search_omnifocus_tasks.

NameTypeReqDescription
include_completedbooleanInclude completed/dropped projects (default excludes them).
limitintegerMax projects to return (default 100).
NameTypeReqDescription
countinteger
projectsarray

No examples provided.

list_omnifocus_tags ~20

Lists all tags defined in OmniFocus.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countinteger
tagsarray

No examples provided.

list_omnifocus_tasks ~130

Lists tasks from OmniFocus. Filter by project, tag, inbox, due today, or flagged status.

NameTypeReqDescription
due_todaybooleanOnly tasks due today or overdue.
flaggedbooleanOnly flagged tasks.
inboxbooleanOnly unfiled inbox tasks.
include_completedbooleanInclude completed tasks (default excludes them).
limitintegerMax tasks to return (default 50).
projectstringOnly tasks in this project (name, case-insensitive).
tagstringOnly tasks carrying this tag.
NameTypeReqDescription
countinteger
tasksarray

No examples provided.

list_referral_candidates ~83

Returns the user's emailable contacts plus an invite template, for recommending LMCP to a colleague. A user would invoke this when they want to invite or recommend someone. Returns a list of candidate contacts and a message template; create_referral_invites then generates each chosen person's unique invite link.

NameTypeReqDescription
limitintegerMax contacts to return (default 60)
NameTypeReqDescription
candidatesarray
countinteger
langstring
notesstring
template_bodystring
template_subjectstring

No examples provided.

list_reminders ~115

Lists reminders from Apple Reminders (Reminders.app) on this Mac. Optionally filter by completion status or list name. For Microsoft To Do use todo_list_tasks instead.

NameTypeReqDescription
completedbooleanfalse or omitted = incomplete (the default). true = completed. There is no 'both': ask twice if you need them.
limitintegerMax number of reminders to return (earliest due first). Optional; defaults to all.
list_namestringFilter by reminder list name (optional)
NameTypeReqDescription
countintegerNumber returned in this response.
remindersarray
totalintegerTotal matching before the limit.

No examples provided.

list_windows ~237

Lists on-screen windows of any app with window_id, owning app bundle id + name, title, bounds (global space, top-left, points), display_id (the CGDirectDisplayID — matches list_displays, so you can look up which display a window is on), and is_focused. Window TITLES require Screen Recording permission — without it this returns an explicit permission_required error rather than a title-less result. Optional app_bundle_id filter — note that Electron-style apps often own their windows from a HELPER process with a different bundle id, so a filter can come back empty while the app is plainly on screen. on_screen_only DEFAULTS TO TRUE and excludes minimized, hidden and other-Space windows; pass false to see them. When the result is empty this tool returns a `note` explaining which filter emptied it and what to pass instead — read it instead of concluding the app has no windows. window_id is stable within the session for later targeting.

NameTypeReqDescription
app_bundle_idstringOnly return windows owned by this app bundle id.
on_screen_onlybooleanOnly on-screen windows (default true).

No output schema declared.

No examples provided.

lmcp_doctor ~156

Checks everything LMCP depends on on this Mac — the AI apps connected to it, macOS permissions, each integration, and whether an LMCP update is waiting — and fixes what it safely can: it adds LMCP to installed AI apps that are missing it and repairs entries whose command no longer exists. Read-only PREVIEW unless confirm:true. Anything it can't fix (a permission, restarting an app, a config it can't edit safely, installing an update) comes back in `needs_you` with the exact step. Use it when LMCP "doesn't work" in some app.

NameTypeReqDescription
confirmbooleanMust be true to apply the fixes. Without it, returns what would be fixed and what needs the user.
NameTypeReqDescription
failedarrayyes
fixedarrayyes
modestringyespreview | applied
needs_youarrayyes
ok_countinteger
summarystringyes
would_fixarrayyes

No examples provided.

lmcp_install_upgrade ~134

Checks for and installs a newer LMCP version — a self-upgrade of the LMCP app itself (not editing any of your data). Installing downloads the new version and RESTARTS LMCP (the AI client briefly reconnects), so it requires confirm=true. Pass check_only=true to only report whether a newer version is available, with no download or restart.

NameTypeReqDescription
check_onlybooleanIf true, only report availability — no download, no install, no restart.
confirmbooleanMust be true to actually install (which restarts LMCP). Without it, returns availability + a preview.

Structured output declared, but exposes no named fields.

No examples provided.

lmcp_state ~301

Returns a structured snapshot of the LMCP environment: server/tray/teams-proxy versions, detected AI client, cloud relay state, TCC permission states (Calendar/Reminders/Contacts), and a compact summary of which services (Mail/Calendar/Contacts/Teams/OneDrive/Reminders/Notes) are reachable. Fast (<500ms), passive — never prompts the user, never opens app windows, never touches the network. Call this when you need to verify the environment is healthy before attempting a tool, or to understand what's installed and accessible. If `services.scan_pending` is true, the background service scan hasn't finished yet (just after startup) and the per-service running/accounts values are placeholders — do NOT treat them as a real outage; just call the tool you need. Otherwise `services.scanned_seconds_ago` tells you how many seconds ago that scan ran (cadence ~60s): the per-service values are a snapshot, NOT a live probe. A `false`/`0`/`not available` for a service is advisory only — it can be stale (e.g. the user connected WhatsApp or opened Mail seconds ago) — so never use this tool as a preflight gate to skip or cancel a task; the actual tool call is the source of truth, just attempt it. For reporting failures, use `report_problem` instead — it captures this same snapshot plus logs and submits to the team.

Input schema present but exposes no named parameters.

NameTypeReqDescription
ai_clientstring
archstring
build_shastringGit short SHA of the build (F-041). 'unknown' if unstamped.
built_atstringUTC build timestamp (F-041). 'unknown' if unstamped.
cloud_data_enabledboolean
cloud_token_setboolean
last_activityobject
license_statusstringtrial | active | expired
machine_idstring
os_versionstring
servicesobjectPer-domain reachability summary (mail, calendar, contacts, teams, onedrive, slack, …); shape varies by domain. May include `scan_pending: true` right after startup, meaning the per-service running/ac…
skill_captureobjectDark-launch counters for repeated-workflow detection (user-generated skills, PR-1). would_fire_signatures = how many times a save-this-workflow nudge WOULD have fired; ring_size = entries in the rece…
tccobjectTCC permission states, e.g. granted | denied | authorized.
tray_versionstring
tunnel_connectedboolean
updateobject
versionstringServing (running) server version.

No examples provided.

lmcp_upgrade_diagnostics ~104

Returns LMCP's self-upgrade health (the LMCP app upgrading itself, not editing your data): current version, the last N app-version upgrade attempts with any errors, whether the upgrade cache dir is writable, and any stale LMCP binaries at alternate paths. Call this when the app's auto-upgrade seems stuck, or to explain why a user is on an old version.

NameTypeReqDescription
limitintegerMax recent attempts to return (default 10)
NameTypeReqDescription
binaries_foundarrayyesLMCP binaries found at known alternate paths.
cache_dirstringyes
cache_writablebooleanyesWhether the update cache dir is writable (#1 silent-failure cause).
consecutive_failuresintegeryes
current_versionstringyes
last_success_atstringyesISO 8601 timestamp of last successful update, empty if none.
recent_attemptsarrayyesRecent update attempts, newest first.
recent_attempts_countintegeryes
running_fromstringyesReal path of the currently running binary.

No examples provided.

m365_create_event ~186

Create a calendar event in your Microsoft 365 / Outlook calendar.

NameTypeReqDescription
attendeesstringComma-separated email addresses to invite (optional)
bodystringEvent description (optional)
calendarstringCalendar name to create the event in — partial, case-insensitive match (optional). Omit to use the primary calendar.
endstringyesEnd time in ISO 8601, e.g. '2026-05-20T11:00:00'
locationstringLocation (optional)
startstringyesStart time in ISO 8601, e.g. '2026-05-20T10:00:00'
subjectstringyesEvent title
timezonestringIANA timezone, e.g. 'America/New_York' (default: UTC)
NameTypeReqDescription
idstring
messagestring
okboolean

No examples provided.

m365_delete_event ~55

Delete a calendar event from your Microsoft 365 / Outlook calendar by its ID.

NameTypeReqDescription
confirmbooleanyesSet to true to confirm deletion (required)
idstringyesEvent ID from m365_list_events
NameTypeReqDescription
messagestring
okboolean

No examples provided.

m365_get_contact ~56

Get full details of a specific Microsoft 365 contact by ID. Get the ID from m365_list_contacts or m365_search_contacts.

NameTypeReqDescription
idstringyesContact ID from m365_list_contacts or m365_search_contacts
NameTypeReqDescription
business_addressstring
companystring
emailsarray
given_namestring
home_addressstring
idstring
mobilestring
namestring
notesstring
phonesarray
surnamestring
titlestring

No examples provided.

m365_list_contacts ~41

List contacts from your Microsoft 365 / Outlook address book.

NameTypeReqDescription
limitintegerMax contacts to return (default 50, max 100)
NameTypeReqDescription
contactsarray
countinteger
querystring

No examples provided.

m365_list_emails ~130

Use this when the user wants their Microsoft 365 / Outlook / Exchange inbox via the cloud — requires a connected M365 account (connect_m365_account). Returns subject, sender, date, and preview. For mail already in the Mac's Mail.app (including an Exchange account added there), use list_emails.

NameTypeReqDescription
folderstringFolder name: inbox (default), sentitems, drafts, deleteditems
limitintegerNumber of emails to return (default 20, max 50)
unread_onlybooleanIf true, return only unread emails
NameTypeReqDescription
countinteger
emailsarray

No examples provided.

m365_list_events ~92

List upcoming calendar events from your Microsoft 365 / Outlook calendar.

NameTypeReqDescription
calendarstringCalendar name to filter by — partial, case-insensitive match (optional). Omit to use the primary calendar.
daysintegerNumber of days ahead to look (default 7, max 30)
limitintegerMax events to return (default 20, max 50)
NameTypeReqDescription
calendarstring
countinteger
daysinteger
eventsarray

No examples provided.

m365_read_email ~89

Use this when the user wants the full content of a Microsoft 365 email (message ID from m365_list_emails/m365_search_emails). Requires a connected M365 account. For a message found via list_emails/search_emails (Apple Mail), use read_email.

NameTypeReqDescription
idstringyesThe email message ID from m365_list_emails or m365_search_emails
NameTypeReqDescription
bodystring
ccarray
datestring
fromstring
from_addressstring
idstring
is_readboolean
subjectstring
toarray

No examples provided.

m365_reply_email ~139

Use this when the user wants to reply to a Microsoft 365 email (message ID from m365_list_emails). Requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For replying to a message found in Apple Mail, use reply_email.

NameTypeReqDescription
confirmbooleanSet to true to actually send (default: shows preview only)
idstringyesMessage ID to reply to (from m365_list_emails or m365_read_email)
messagestringyesYour reply text
reply_allbooleanIf true, reply to all recipients (default: false)
NameTypeReqDescription
messagestring
okboolean

No examples provided.

m365_search_contacts ~43

Search contacts in your Microsoft 365 address book by name, email, or company.

NameTypeReqDescription
querystringyesSearch term — name, email, or company
NameTypeReqDescription
contactsarray
countinteger
querystring

No examples provided.

m365_search_emails ~189

Use this when the user wants to find emails in their Microsoft 365 / Outlook mailbox via the cloud — requires a connected M365 account. By default searches sender, subject, AND body (Microsoft Graph's own $search default). Pass scope="metadata" to search only sender/subject (faster, no body scan), or scope="body" to search only the message body. For accounts added to the Mac's Mail.app, use search_emails.

NameTypeReqDescription
limitintegerMax results (default 20, max 50)
querystringyesSearch query, e.g. 'budget Q2', 'from:alice@contoso.com', 'subject:invoice'
scopestring"all" (default — sender+subject+body, today's behavior), "metadata" (sender+subject only), or "body" (body only).
NameTypeReqDescription
countinteger
emailsarray
querystring
search_backendstring
search_coveragestring
search_scopestring

No examples provided.

m365_send_email ~137

Use this when the user wants to send from their Microsoft 365 / Outlook account via the cloud — requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For sending from an account configured in the Mac's Mail.app, use send_email.

NameTypeReqDescription
bodystringyesEmail body (plain text)
ccstringCC recipients (optional, comma-separated)
confirmbooleanSet to true to actually send (default: shows preview only)
subjectstringyesEmail subject
tostringyesRecipient email address. For multiple, separate with commas.
NameTypeReqDescription
messagestring
okboolean

No examples provided.

media_probe ~68

Reports duration_ms, width, height, fps, whether it has audio, and file size for a video/audio file. Call it before editing to reason about the footage (compute trim ranges, pick a reframe crop). No permission required.

NameTypeReqDescription
pathstringyesPath to the media file.

No output schema declared.

No examples provided.

move_email ~136

Moves an email to another mailbox (nested target folders are found by name). Pass account= (returned by list_emails/search_emails) so the message lookup targets one account instead of scanning all of them — without it, multi-account Macs are slow and can time out on bulk moves. If you know the folder the message is in, also pass mailbox= (the `mailbox` field from the listing) so the lookup searches it first.

NameTypeReqDescription
accountstring
confirmboolean
mailboxstring
message_idstringyes
target_mailboxstringyes
NameTypeReqDescription
message_idstring
movedboolean
tostring
warningstring

No examples provided.

nordvpn_diagnose ~38

Run a diagnostic check on NordVPN: installation, login state, connection status, kill switch, and supported protocols. Useful for troubleshooting.

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountstring
auto_connectbooleanTrue if auto-connect / connect on demand is on
connectedbooleanTrue if the VPN is connected
installedbooleanyesTrue if NordVPN is installed
kill_switchbooleanTrue if the kill switch is enabled
last_locationstring
logged_inbooleanTrue if a NordVPN account is logged in
protocolsarraySupported VPN protocols
reportstringFull formatted text report
runningbooleanTrue if the NordVPN app is running
subscriptionstring
versionstring

No examples provided.

nordvpn_servers ~137

Get recommended NordVPN servers by country or specialty. Uses NordVPN public API (no account needed). Returns server name, hostname, country, city, load %, and supported technologies.

NameTypeReqDescription
countrystringCountry name or 2-letter code (e.g. 'US', 'United States', 'JP'). Omit for auto-recommendation.
limitintegerNumber of servers to return (1-10). Default: 5.
typestringServer type filter: 'standard', 'p2p', 'double_vpn', 'onion', 'dedicated_ip'. Default: standard.
NameTypeReqDescription
countinteger
notestring
serversarray

No examples provided.

nordvpn_status ~36

Check NordVPN connection status: connected/disconnected, auto-connect, snooze, and last known location. Does NOT open NordVPN.

Input schema present but exposes no named parameters.

NameTypeReqDescription
app_runningboolean
auto_connectboolean
connectedboolean
installedboolean
last_locationstring
snoozed_untilstring
versionstring

No examples provided.

notion_list_databases ~36

Lists Notion databases cached on this Mac with their schema (column names and types). Use notion_read_database to get the rows.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countinteger
databasesarray
notestring

No examples provided.

notion_list_pages ~81

Lists Notion pages cached on this Mac (titles, last edited, hierarchy), newest first. Reads the Notion desktop app's local cache — no Notion API, no integration token. Note: only pages visited in Notion (or marked Available offline) are cached.

NameTypeReqDescription
limitintegerMax pages (default 50, max 500)
NameTypeReqDescription
countinteger
notestring
pagesarray

No examples provided.

notion_list_workspaces ~63

Lists the Notion workspaces cached on this Mac. Start here for Notion — its output feeds notion_list_databases / notion_list_pages / notion_search. Does not return workspace members: the names and emails of third parties are not part of listing workspaces.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countinteger
notestring
workspacesarray

No examples provided.

notion_open_page ~73

Opens a Notion page in the desktop app (deep link). Accepts a page id or title. Useful to let the user view or edit a page, or to pull an uncached page into the local cache.

NameTypeReqDescription
pagestringyesPage id (UUID) or title (partial, case-insensitive)
NameTypeReqDescription
openedboolean
page_idstring
titlestring

No examples provided.

notion_read_database ~82

Reads the cached rows of a Notion database with their properties mapped through the schema. Accepts the database id or name (partial match). Only locally-cached rows are returned.

NameTypeReqDescription
databasestringyesDatabase id (UUID) or name (partial, case-insensitive)
limitintegerMax rows (default 50, max 500)
NameTypeReqDescription
countinteger
notestring
rowsarray

No examples provided.

notion_read_page ~122

Reads a Notion page from the local cache and returns its content as markdown (headings, lists, to-dos, code, files, subpage links). Accepts a page id or a title (partial match). If parts of the page aren't cached yet, says so — open the page in Notion or mark it Available offline for full content.

NameTypeReqDescription
max_blocksintegerMax blocks to render (default 300, max 1000)
pagestringyesPage id (UUID) or title (partial, case-insensitive)
NameTypeReqDescription
blocks_renderedinteger
content_markdownstring
idstring
last_editedstring
notestring
titlestring
uncached_blocksinteger

No examples provided.

notion_search ~83

Searches cached Notion content (page titles and block text) for a phrase, case-insensitive. Returns matching blocks with the page they belong to. Only locally-cached content is searched — pages never opened in Notion won't match.

NameTypeReqDescription
limitintegerMax results (default 20, max 100)
querystringyesText to search for
NameTypeReqDescription
countinteger
notestring
querystring
resultsarray

No examples provided.

onedrive_delete_file ~47

Deletes a file or empty folder from OneDrive.

NameTypeReqDescription
confirmbooleanMust be true to delete
pathstringyesAbsolute path to the file or folder
NameTypeReqDescription
deletedbooleanyes
pathstringyes

No examples provided.

onedrive_file_info ~58

Returns metadata for a file or folder: size, modification date, type, and extension. Faster than listing the parent directory when you only need info about one item.

NameTypeReqDescription
pathstringyesAbsolute path to the file or folder
NameTypeReqDescription
createdstring
extensionstring
modifiedstring
namestring
pathstring
sizeinteger
size_humanstring
typestringfile | directory

No examples provided.

onedrive_list_files ~118

Lists files and folders in a OneDrive path. Use onedrive_root to find valid paths. Returns up to `limit` entries (default 1000, max 5000); large folders are truncated with a note — narrow the path for more specific results.

NameTypeReqDescription
limitintegerMax entries to return (default 1000, max 5000). Folders with more entries are truncated; the response sets truncated=true and reports the total.
pathstringyesAbsolute path to the OneDrive folder
NameTypeReqDescription
countintegerEntries returned in this response.
itemsarray
notestring
totalintegerTotal entries in the folder.
truncatedbooleanTrue when total exceeds the limit.

No examples provided.

onedrive_move_file ~53

Moves or renames a file/folder within OneDrive.

NameTypeReqDescription
confirmbooleanMust be true to move
destinationstringyesDestination path
sourcestringyesSource path
NameTypeReqDescription
fromstringyes
movedbooleanyes
tostringyes

No examples provided.

onedrive_read_file ~188

Reads a text file from your OneDrive synced folder. Supports .txt, .md, .csv, .json, .xml, .log and several code file types. Auto-detects UTF-8, falls back to Latin-1/Windows-1252 for legacy files (common in Latin American banking .TXT padrones). For files elsewhere on this Mac, use file_read.

NameTypeReqDescription
encodingstringForce a specific encoding: 'auto' (default), 'utf8', 'latin1', 'cp1252', 'ascii', 'utf16'
max_bytesintegerMaximum bytes to read (default 1048576 = 1 MB, capped at 10485760 = 10 MB)
offsetintegerStart reading at 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.

onedrive_root ~60

Lists all mounted OneDrive directories on this Mac. Start here for OneDrive — the mount paths it returns are what the other onedrive_* tools (onedrive_list_files, onedrive_read_file, onedrive_search_files) need.

Input schema present but exposes no named parameters.

NameTypeReqDescription
rootsarray

No examples provided.

onedrive_search_files ~87

Searches for files by name in a OneDrive directory (recursive). Returns up to max_results matches (default 50); raise max_results or narrow the root for more.

NameTypeReqDescription
max_resultsintegerMaximum results (default 50)
querystringyesFilename pattern to search for
rootstringRoot OneDrive path to search in (optional)
NameTypeReqDescription
countinteger
querystring
resultsarray

No examples provided.

onedrive_set_scope ~134

Restricts LMCP's OneDrive access to a specific folder. Once set, all OneDrive tools (read, write, list, search, delete, move) only work inside the allowed folder. Pass an empty folder to remove the restriction. Changes take effect immediately.

NameTypeReqDescription
confirmbooleanMust be true to apply
folderstringAllowed folder path relative to the root (e.g. '/000-Claude Personal Agent'). Empty string removes the scope.
root_namestringyesOneDrive root name (from onedrive_root, e.g. 'OneDrive-WPPCloud')
NameTypeReqDescription
accessstring
allowed_folderstring
effectstring
rootstring
scope_removedboolean
scope_setboolean

No examples provided.

onedrive_write_file ~59

Writes text content to a file in OneDrive.

NameTypeReqDescription
confirmbooleanMust be true to write
contentstringyesText content to write
pathstringyesAbsolute path to the file in OneDrive
NameTypeReqDescription
bytesintegeryes
pathstringyes
writtenbooleanyes

No examples provided.

outlook_diagnose ~48

Checks which email accounts are configured in Microsoft Outlook and compares them with Mail.app. If Outlook has accounts not in Mail.app, guides the user to add them so all email tools work seamlessly.

Input schema present but exposes no named parameters.

NameTypeReqDescription
installedbooleanyesTrue if Microsoft Outlook is installed
mail_app_accountsarray
missing_from_mail_apparrayOutlook account emails not present in Mail.app
notestringPlain-language guidance
outlook_accountsarray
reportstringFull formatted text report

No examples provided.

pdf_read ~109

Reads and extracts text from a PDF document (.pdf file).

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_pagesintegerMax pages to extract (default: all)
pathstringyesAbsolute path to the PDF file
NameTypeReqDescription
charsintegeryesNumber of characters in the extracted text
pagesintegerTotal number of pages in the PDF
textstringyesExtracted text content

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.