# io.github.davidmosiah/polarmcp (npm · polar-mcp-unofficial)

Privacy-first unofficial Polar AccessLink v4 MCP server for AI health, sleep and training agents.

- Trust score: 70/100 (medium)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `polar-mcp-unofficial`: 70/100 (this document), [markdown](https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial.md), [page](https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial)

## Channel facts

- Registry: `npm`
- Package: `polar-mcp-unofficial`
- Version: `0.3.6`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (129 of 130), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (129 of 130), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4532 tokens (~103/item across 44 items; 37 tools + 7 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 93/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 77% of tool parameters carry a description.
  - Structured output schemas are declared (86% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add davidmosiah-polarmcp -- npx -y polar-mcp-unofficial
```

### Codex

```bash
codex mcp add davidmosiah-polarmcp -- npx -y polar-mcp-unofficial
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "davidmosiah-polarmcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "polar-mcp-unofficial"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add davidmosiah-polarmcp --command npx --arg -y --arg polar-mcp-unofficial
```

### Hermes

```yaml
mcp_servers:
  davidmosiah-polarmcp:
    command: "npx"
    args: ["-y", "polar-mcp-unofficial"]
```

### Other

```json
{
  "mcpServers": {
    "davidmosiah-polarmcp": {
      "command": "npx",
      "args": [
        "-y",
        "polar-mcp-unofficial"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 70, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 66, +41)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 25, −27)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 52, +26)

- [functional regression] Dependency health: partial → unverified
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 26, −26)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 52)

First indexed and scored.

## MCP tools (37)

### `polar_data_inventory` (~44 tokens)

Polar Data Inventory

Inventory supported Polar data domains, auth scope requirements, privacy boundary and recommended first calls. Does not call Polar APIs or expose user data.

Input parameters:

- `response_format` (string)

Output parameters:

- `api_boundary`
- `auth`
- `categories` (array)
- `data_access_model` (string)
- `first_tools` (array)
- `generated_at` (string)
- `kind` (string)
- `links` (object)
- `mcp_name` (string)
- `notes` (array)
- `privacy_modes` (array)
- `recommended_agent_flow` (array)
- `scopes` (array)
- `source` (string)
- `totals` (object)
- `unofficial` (boolean)

### `polar_agent_manifest` (~44 tokens)

Polar Agent Manifest

Machine-readable install, runtime and client guidance for AI agents. Does not call Polar or expose secrets.

Input parameters:

- `client` (string)
- `response_format` (string)

Output parameters:

- `agent_rules` (array)
- `client` (string)
- `hermes` (object)
- `links` (object)
- `mcp_name` (string)
- `oauth` (object)
- `package` (object)
- `project` (string)
- `recommended_first_calls` (array)
- `resources` (array)
- `standard_tools` (array)
- `troubleshooting` (array)
- `unofficial` (boolean)

### `polar_capabilities` (~32 tokens)

Polar MCP Capabilities

Explain supported Polar data, privacy boundaries, recommended agent workflow and project links.

Input parameters:

- `response_format` (string)

Output parameters:

- `api_boundary` (object)
- `auth_model` (object)
- `client_aliases` (object)
- `contribution_paths` (array)
- `creator` (object)
- `links` (object)
- `mcp_name` (string)
- `privacy_modes` (array)
- `project` (string)
- `recommended_agent_flow` (array)
- `supported_data` (array)
- `unofficial` (boolean)

### `polar_quickstart` (~61 tokens)

Polar Quickstart

Personalized 3-step setup walkthrough for the human user. Adapts to current state (env vars set? token present? what's next?). Call this first when the user asks 'how do I connect Polar?'

Input parameters:

- `response_format` (string)

### `polar_demo` (~50 tokens)

Polar Demo

Returns realistic example payloads of polar_daily_summary, polar_wellness_context, and polar_list_nightly_recharge so agents see the contract before calling real Polar APIs.

Input parameters:

- `response_format` (string)

### `polar_get_auth_url` (~70 tokens)

Get Polar OAuth URL

Generate a Polar OAuth authorization URL. Use this first when no local token exists.

Input parameters:

- `response_format` (string)
- `scopes` (array): Optional scope override. Defaults to read-only Polar scopes used by this server.
- `state` (string): Optional OAuth state value generated by the caller.

Output parameters:

- `auth_url` (string)
- `next_step` (string)
- `redirect_uri` (string)
- `scopes` (array)

### `polar_exchange_code` (~61 tokens)

Exchange Polar OAuth Code

Exchange a Polar OAuth authorization code for local tokens. Tokens are stored locally with 0600 permissions and are never returned.

Input parameters:

- `code` (string, required): OAuth authorization code, or a full redirect URL containing ?code=...
- `response_format` (string)

Output parameters:

- `expires_at` (number)
- `note` (string)
- `ok` (boolean)
- `scope` (string)
- `token_path` (string)

### `polar_get_account_data` (~70 tokens)

Polar Account Data

Read Polar user account fields exposed by AccessLink. Requires profile:read.

Input parameters:

- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `polar_list_activity` (~168 tokens)

Polar Daily Activity

List Polar daily activity records. Requires activity:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_calendar` (~171 tokens)

Polar Calendar

List Polar calendar entries in a date range. Requires calendar:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_continuous_samples` (~179 tokens)

Polar Continuous Samples

List continuous sample records for a date range. Requires continuous_samples:read. Not medical advice.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_nightly_recharge` (~181 tokens)

Polar Nightly Recharge

List Nightly Recharge results in a date range. Requires nightly_recharge:read. Not medical advice.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_ppi_samples` (~178 tokens)

Polar PPI Samples

List pulse-to-pulse interval samples in a date range. Requires ppi_data:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_skin_contacts` (~173 tokens)

Polar Skin Contacts

List skin contact periods in a date range. Requires skin_contact:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_sleeps` (~177 tokens)

Polar Sleeps

List Polar sleep records in a date range. Requires sleep:read. Not medical advice.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_sleep_wake_vectors` (~180 tokens)

Polar Sleep Wake Vectors

List sleep/wake vector records in a date range. Requires sleep:read. Not medical advice.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_sports` (~171 tokens)

Polar Sports

List sports available in the Polar ecosystem. Requires sports:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_sport_profile_catalog` (~171 tokens)

Polar Sport Profile Catalog

Load Polar sport profile catalog. Requires sports:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_sport_profiles` (~171 tokens)

Polar Sport Profiles

List the user's Polar sport profiles. Requires sports:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_subscriptions` (~171 tokens)

Polar Subscriptions

List user subscriptions and entitlements. Requires user_subscription:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_temperature_measurements` (~174 tokens)

Polar Temperature Measurements

List temperature measurements in a date range. Requires temperature_measurement:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_tests` (~178 tokens)

Polar Test Results

List Polar fitness/orthostatic/running test results in a date range. Requires tests:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_training_sessions` (~173 tokens)

Polar Training Sessions

List Polar training sessions in a date range. Requires training_sessions:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_training_targets` (~173 tokens)

Polar Training Targets

List calendar training targets in a date range. Requires training_targets:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_training_target_favorites` (~172 tokens)

Polar Training Target Favorites

List user training target favorites. Requires training_targets:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_list_user_devices` (~171 tokens)

Polar User Devices

List devices registered to the Polar user. Requires devices:read.

Input parameters:

- `after` (string): Only return Polar records after this time. Converted to Polar's inclusive from query parameter.
- `all_pages` (boolean): Fetch multiple pages up to max_pages.
- `before` (string): Only return Polar records before this time. Converted to Polar's exclusive to query parameter.
- `limit` (integer): Local page-size hint used for pagination safety.
- `max_pages` (integer): Maximum pages to fetch when all_pages is true.
- `page` (integer): Polar page number.
- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)

Output parameters:

- `count` (integer)
- `endpoint` (string)
- `has_more` (boolean)
- `next_page` (integer)
- `pages_fetched` (integer)
- `privacy_mode` (string)
- `records` (array)

### `polar_get_route` (~97 tokens)

Polar Route

Load a Polar route by route id. Routes are GPS-sensitive; default privacy modes redact coordinates. Requires routes:read.

Input parameters:

- `privacy_mode` (string): Optional per-call privacy override. Defaults to POLAR_PRIVACY_MODE or structured. raw returns upstream Polar JSON. summary minimizes sensitive health and profile details.
- `response_format` (string)
- `route_id` (string, required): Polar route id returned by a calendar or training-session record.

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `polar_connection_status` (~52 tokens)

Polar Connection Status

Check local Polar config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Polar or exposing secrets.

Input parameters:

- `client` (string)
- `response_format` (string)

Output parameters:

- `automatic_auth_supported` (boolean)
- `cache` (object)
- `client` (string)
- `client_checks` (object)
- `config` (object)
- `missing_env` (array)
- `next_steps` (array)
- `node` (object)
- `oauth` (object)
- `ok` (boolean)
- `privacy_mode` (string)
- `ready_for_polar_api` (boolean)
- `redirect_uri` (string)
- `required_env` (object)
- `token` (object)

### `polar_cache_status` (~37 tokens)

Polar Cache Status

Show optional local SQLite cache status. Enable with POLAR_CACHE=sqlite or POLAR_CACHE=true.

Input parameters:

- `response_format` (string)

Output parameters:

- `enabled` (boolean)
- `entries` (integer)
- `http_cache` (object)
- `newest_cached_at` (string)
- `path` (string)

### `polar_privacy_audit` (~37 tokens)

Polar Privacy Audit

Return local privacy, cache, token-path and env-presence posture without revealing secret values.

Input parameters:

- `response_format` (string)

Output parameters:

- `cache_enabled` (boolean)
- `cache_path` (string)
- `config_source` (string)
- `gps_redaction_default` (boolean)
- `local_config_exists` (boolean)
- `local_config_path` (string)
- `local_config_secure_permissions` (boolean)
- `notes` (array)
- `privacy_mode_default` (string)
- `project` (string)
- `raw_payloads_opt_in` (boolean)
- `redacted_key_patterns` (array)
- `required_env_present` (object)
- `secret_env_vars` (array)
- `stdout_safe` (boolean)
- `token_path` (string)
- `unofficial` (boolean)

### `polar_revoke_access` (~46 tokens)

Revoke Polar OAuth Access

Delete the local Polar token file. Use only when the user explicitly wants to disconnect this MCP; revoke the remote grant from Polar if needed.

Input parameters:

- `response_format` (string)

Output parameters:

- `local_tokens_cleared` (boolean)
- `note` (string)
- `ok` (boolean)
- `token_path` (string)

### `polar_daily_summary` (~80 tokens)

Polar Daily Training Summary

Build a practical daily summary from Polar sleep, activity, Nightly Recharge and training data when available. Read-only and non-medical.

Input parameters:

- `days` (integer): Lookback window for recent training context.
- `response_format` (string)
- `timezone` (string): IANA timezone used only for display, e.g. America/New_York.

Output parameters:

- `generated_at` (string)
- `kind` (string)

### `polar_weekly_summary` (~104 tokens)

Polar Weekly Training Review

Build a weekly Polar scorecard with sleep, activity, Nightly Recharge, training load context, bottlenecks and actions. Read-only and non-medical.

Input parameters:

- `compare_days` (integer): Prior comparison window in days. Use 0 to disable comparison.
- `days` (integer): Recent analysis window in days.
- `response_format` (string)
- `timezone` (string): IANA timezone used only for display, e.g. America/New_York.

Output parameters:

- `generated_at` (string)
- `kind` (string)

### `polar_wellness_context` (~98 tokens)

Polar Wellness Context

Normalize Polar Nightly Recharge, sleep and training load into the shared wellness_context shape for recommendation engines.

Input parameters:

- `days` (integer): Lookback window for normalized Polar wellness context.
- `injury_flags` (array)
- `notes` (string)
- `response_format` (string)
- `soreness` (array)
- `timezone` (string): IANA timezone used only for display, e.g. America/New_York.

Output parameters:

- `generated_at` (string)
- `injury_flags` (array)
- `notes` (array)
- `recent_training_load` (string)
- `soreness` (array)
- `source` (string)

### `polar_profile_get` (~67 tokens)

Get Shared Wellness Profile

Read the canonical Delx Wellness profile shared with the other wellness MCP connectors (Nourish, Cycle Coach, CGM, etc.). Read-only. Profile stores only what the user typed during onboarding — never OAuth tokens, API keys, or biomarkers.

Input parameters:

- `response_format` (string)

### `polar_profile_update` (~129 tokens)

Update Shared Wellness Profile

Persist a partial patch to the canonical Delx Wellness profile. Requires explicit_user_intent=true after the user confirms they want to save. Rejects secret-like fields (oauth, token, api_key, password, cookie, refresh, session).

Input parameters:

- `explicit_user_intent` (boolean): Set to true ONLY after the user has explicitly confirmed they want to save this. Otherwise the tool refuses to write.
- `patch` (object, required): Partial WellnessProfileDocument patch. Top-level keys: profile, goals, devices, training, nutrition, preferences, safety, notes.
- `response_format` (string)

### `polar_onboarding` (~100 tokens)

Wellness Onboarding Flow

Read-only. Return the 11-question Delx Wellness onboarding flow (en or pt-BR), the current shared profile, missing critical fields, and a cross-connector hint. Use this when the user starts a fresh wellness session and you need to fill out preferred_name, goals, devices, training context, nutrition, preferences, and safety.

Input parameters:

- `locale` (string): Onboarding locale. Defaults to en.
- `response_format` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 66
- 2026-08-01: 25
- 2026-07-31: 25
- 2026-07-30: 52
- 2026-07-28: 26
- 2026-07-27: 52

## Links

- npm package: https://www.npmjs.com/package/polar-mcp-unofficial
- Socket report: https://socket.dev/npm/package/polar-mcp-unofficial
- Repository: https://github.com/davidmosiah/polar-mcp
- Website: https://wellness.delx.ai/connectors/polar
- Changelog RSS feed: https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial/changelog.json
- HTML version of this page: https://verifymcp.io/servers/davidmosiah-polarmcp/polar-mcp-unofficial
