Skip to main content
Glama

LMCP State

lmcp_state
Read-only

Returns a structured snapshot of the LMCP environment: server and tray 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

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
tccNoTCC permission states. Automation keys (<app>_automation) are one of notDetermined | authorized | denied | notRunning.
archNo
updateNo
versionNoServing (running) server version.
built_atNoUTC build timestamp (F-041). 'unknown' if unstamped.
servicesNoPer-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/accounts values are placeholders and not yet authoritative. Once scanned, `scanned_seconds_ago` gives the age (seconds) of that background snapshot and `freshness` restates that a false/0/not-available is advisory, not a live check — never gate a task on it.
ai_clientNo
build_shaNoGit short SHA of the build (F-041). 'unknown' if unstamped.
machine_idNo
os_versionNo
web_agentsNoWeb (cloud-relay) clients, counts only: `count` connected (absent when unknown), `relayed_calls_since_launch`, `last_remote_call` {at, tool, ok, ago_s}.
menu_bar_appNoWhether the LMCP menu-bar app is installed. When installed is false, only this MCP server is running (started via npx or the Claude Desktop extension), without the menu-bar app; `install` says how the user can get it.
tray_versionNo
last_activityNo
skill_captureNoDark-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 recent-calls ring. PRIVACY: the ring is IN-MEMORY ONLY — never written to disk, never transmitted, cleared on restart — and argument values are PII-scrubbed on entry, so it holds the SHAPE of a workflow, not its content. No UI acts on it yet; it exists to tune thresholds. Opt out with the skill_capture_enabled config flag.
always_allowedNoKinds of action the person allowed without asking (`actions`, families such as send_email), whether IT forbids it (`forbidden_by_it`), and how to revoke one (set_always_allowed with allowed: false).
license_statusNotrial | active | expired
cloud_token_setNo
tunnel_connectedNo
client_autoconfigNoWhat LMCP's last automatic setup did per AI client (keyed by client id): result (configured, already, failed, skipped or blocked by IT policy), reason_key, at, path. Tell the user which apps were connected and which weren't, and why.
cloud_data_enabledNo
relay_token_other_machineNoPresent (true) only when this Mac's Cloud Relay token was issued for a different machine id; see relay_token_other_machine_fix.
relay_token_other_machine_fixNo
relay_token_other_machine_detailNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / always_allowed
      Added value: +{
      +  "description": "Kinds of action the person allowed without asking (`actions`, families such as send_email), whether IT forbids it (`forbidden_by_it`), and how to revoke one (set_always_allowed with allowed: false).",
      +  "type": "object"
      +}
    • addedOutput schema / properties / client_autoconfig
      Added value: +{
      +  "description": "What LMCP's last automatic setup did per AI client (keyed by client id): result (configured, already, failed, skipped or blocked by IT policy), reason_key, at, path. Tell the user which apps were connected and which weren't, and why.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / menu_bar_app
      Added value: +{
      +  "description": "Whether the LMCP menu-bar app is installed. When installed is false, only this MCP server is running (started via npx or the Claude Desktop extension), without the menu-bar app; `install` says how the user can get it.",
      +  "properties": {
      +    "install": {
      +      "description": "Present only when installed is false.",
      +      "type": "string"
      +    },
      +    "installed": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / relay_token_other_machine
      Added value: +{
      +  "description": "Present (true) only when this Mac's Cloud Relay token was issued for a different machine id; see relay_token_other_machine_fix.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / relay_token_other_machine_detail
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / relay_token_other_machine_fix
      Added value: +{
      +  "type": "string"
      +}
  3. Changed7 schema fields changed
    • addedOutput schema / properties / last_activity / properties / last_remote
      Added value: +{
      +  "description": "Last call relayed from a web client (source cloud), when there was one.",
      +  "type": "object"
      +}
    • changedOutput schema / properties / tcc / description
      Previous value: -"TCC permission states, e.g. granted | denied | authorized."New value: +"TCC permission states. Automation keys (<app>_automation) are one of notDetermined | authorized | denied | notRunning."
    • addedOutput schema / properties / tcc / properties / mail_automation_last_known
      Added value: +{
      +  "description": "Present only when mail_automation is notRunning: \"authorized\" if the grant was confirmed before. Not a live verdict.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / messages_automation
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / notes_automation
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / omnifocus_automation
      Added value: +{
      +  "description": "Each <app>_automation is present only if the app is installed; <app>_last_known and <app>_note may accompany it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / web_agents
      Added value: +{
      +  "description": "Web (cloud-relay) clients, counts only: `count` connected (absent when unknown), `relayed_calls_since_launch`, `last_remote_call` {at, tool, ok, ago_s}.",
      +  "type": "object"
      +}
  4. Changed7 schema fields changed
    • removedOutput schema / properties / last_activity / properties / last_remote
      Removed value: -{
      -  "description": "Last call relayed from a web client (source cloud), when there was one.",
      -  "type": "object"
      -}
    • changedOutput schema / properties / tcc / description
      Previous value: -"TCC permission states. Automation keys (<app>_automation) are one of notDetermined | authorized | denied | notRunning."New value: +"TCC permission states, e.g. granted | denied | authorized."
    • removedOutput schema / properties / tcc / properties / mail_automation_last_known
      Removed value: -{
      -  "description": "Present only when mail_automation is notRunning: \"authorized\" if the grant was confirmed before. Not a live verdict.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / tcc / properties / messages_automation
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / tcc / properties / notes_automation
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / tcc / properties / omnifocus_automation
      Removed value: -{
      -  "description": "Each <app>_automation is present only if the app is installed; <app>_last_known and <app>_note may accompany it.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / web_agents
      Removed value: -{
      -  "description": "Web (cloud-relay) clients, counts only: `count` connected (absent when unknown), `relayed_calls_since_launch`, `last_remote_call` {at, tool, ok, ago_s}.",
      -  "type": "object"
      -}
  5. Changed7 schema fields changed
    • addedOutput schema / properties / last_activity / properties / last_remote
      Added value: +{
      +  "description": "Last call relayed from a web client (source cloud), when there was one.",
      +  "type": "object"
      +}
    • changedOutput schema / properties / tcc / description
      Previous value: -"TCC permission states, e.g. granted | denied | authorized."New value: +"TCC permission states. Automation keys (<app>_automation) are one of notDetermined | authorized | denied | notRunning."
    • addedOutput schema / properties / tcc / properties / mail_automation_last_known
      Added value: +{
      +  "description": "Present only when mail_automation is notRunning: \"authorized\" if the grant was confirmed before. Not a live verdict.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / messages_automation
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / notes_automation
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / tcc / properties / omnifocus_automation
      Added value: +{
      +  "description": "Each <app>_automation is present only if the app is installed; <app>_last_known and <app>_note may accompany it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / web_agents
      Added value: +{
      +  "description": "Web (cloud-relay) clients, counts only: `count` connected (absent when unknown), `relayed_calls_since_launch`, `last_remote_call` {at, tool, ok, ago_s}.",
      +  "type": "object"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / skill_capture
      Added value: +{
      +  "description": "Dark-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 recent-calls ring. PRIVACY: the ring is IN-MEMORY ONLY — never written to disk, never transmitted, cleared on restart — and argument values are PII-scrubbed on entry, so it holds the SHAPE of a workflow, not its content. No UI acts on it yet; it exists to tune thresholds. Opt out with the skill_capture_enabled config flag.",
      +  "properties": {
      +    "ring_size": {
      +      "type": "integer"
      +    },
      +    "would_fire_signatures": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  7. Changed2 schema fields changed
    • addedOutput schema / properties / build_sha
      Added value: +{
      +  "description": "Git short SHA of the build (F-041). 'unknown' if unstamped.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / built_at
      Added value: +{
      +  "description": "UTC build timestamp (F-041). 'unknown' if unstamped.",
      +  "type": "string"
      +}
  8. Changed1 schema field changed
    • changedOutput schema / properties / services / description
      Previous value: -"Per-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/accounts values are placeholders and not yet authoritative."New value: +"Per-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/accounts values are placeholders and not yet authoritative. Once scanned, `scanned_seconds_ago` gives the age (seconds) of that background snapshot and `freshness` restates that a false/0/not-available is advisory, not a live check — never gate a task on it."
  9. Changed1 schema field changed
    • changedOutput schema / properties / services / description
      Previous value: -"Per-domain reachability summary (mail, calendar, contacts, teams, onedrive, slack, …); shape varies by domain."New value: +"Per-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/accounts values are placeholders and not yet authoritative."
  10. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld false, but the description goes well past them: sub-500ms latency, passive behaviour (never prompts, never opens windows, never touches network), and two state-machine caveats — scan_pending placeholders vs. scanned_seconds_ago snapshot cadence (~60s) — plus the staleness warning. This is exactly the context an agent needs to interpret a 'false' service value without panicking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the payload contents, then the caveats, which is the right order. Slightly apologetic/repetitive at the end — 'never use this tool as a preflight gate' and 'the actual tool call is the source of truth, just attempt it' say the same thing twice — but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no exposition; annotations cover the safety profile; the description supplies the remaining operational knowledge (freshness, placeholder semantics, no-side-effects guarantee) that an agent would otherwise get wrong. Complete for a zero-param read tool that many agents will call defensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. It does add semantic meaning to key output fields (scan_pending, scanned_seconds_ago), which is bonus value even though the output schema technically covers it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Returns a structured snapshot') plus an enumerated inventory of what the snapshot contains (versions, AI client, relay state, TCC permissions, per-service reachability). It clearly separates itself from report_problem, but the near-neighbour diagnostic siblings (lmcp_doctor, permissions_status, run_diagnostics, list_missing_permissions) are never named, so an agent must infer the boundary from their names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('verify the environment is healthy before attempting a tool, or to understand what's installed and accessible'), explicit when-NOT ('never use this tool as a preflight gate to skip or cancel a task'), and an explicit alternative for a competing need ('For reporting failures, use report_problem instead'). Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources