Health Export MCP vs ProjectPulse MCP

A side-by-side look at the Health Export MCP and ProjectPulse MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Health Export MCP logoHealth Export MCPMonitoring · Local subprocess (stdio)Query 190 Apple Health metrics from any MCP agent — zero-dependency, read-only, local-first.67GreatAuth: no auth requiredProjectPulse MCP logoProjectPulse MCPMonitoring · Local subprocess (stdio)Monitor GitHub repo health, DORA metrics and CI signals from your AI assistant.64GoodAuth: not declared

Verdict: choose Health Export MCP for monitoring work as a local process; choose ProjectPulse MCP for monitoring as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Health Export MCP logoChoose Health Export MCP when

  • You need dedicated capabilities in the Monitoring domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You have the keys it needs: HEALTH_DATA_DIR.
  • You want tools like get_mcp_status, list_metrics, get_health_metrics.
Explore Health Export MCP

ProjectPulse MCP logoChoose ProjectPulse MCP when

  • You need dedicated capabilities in the Monitoring domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: GITHUB_TOKEN.
  • You want tools like check_ci_status, get_repo_health, analyze_dependencies.
Explore ProjectPulse MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecHealth Export MCP logoHealth Export MCPProjectPulse MCP logoProjectPulse MCP
CategoryMonitoringMonitoring
Quality signal67/100 · Great64/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNo auth requiredNot declared
PricingFreeFree
Required env varsHEALTH_DATA_DIRGITHUB_TOKEN
Verified ownerCommunity listingCommunity listing
GitHub stars81
Directory activity 9 views 0 installs 0 upvotes 4 views 0 installs 0 upvotes
Tools148

Tools & capabilities

Health Export MCP tools 14

  • get_mcp_statusHealth check: data source, how many metrics/workouts are available, which optional context files exist, and the most recent data date. Call this first to confirm the bridge is connected.
  • list_metricsList every available Apple Health metric with its unit, day count, and date range. Use this to discover metric names before querying.
  • get_health_metricsGet values for a metric (or all metrics) over an optional date range, with an aggregate (avg/sum/min/max/latest). The core data-retrieval tool. Every result carries a `coverage` block giving the metric's real firstDate/lastDate/days: check it before trusting a long window, and note that `aggregate` is always computed over the full range even when `points` are rolled up. Single-metric answers also list any logged point events inside the window as segmentBoundaries.
  • get_trendsCompare the most recent N-day window against the prior N days for a metric: change, percent change and direction (up/down/flat). Also returns `daysAvailable` and `windowSatisfied`: if windowSatisfied is false the file does not hold enough history for the window you asked for, and the comparison is over less data than requested. Logged point events inside the compared span are listed as segmentBoundaries.
  • compare_periodsCompare a metric between two arbitrary date periods (A vs B): each aggregate plus the change and percent change. Pass periodA/periodB explicitly, or pass anchor {eventId, days} to build both periods around a logged event (the before/after question, with the event day excluded from both sides).
  • get_structured_exportReturn clean structured JSON for the chosen metrics/date range. Paginated: the result carries `nextCursor` when more metrics remain; pass it back as `cursor` for the next page. Prefer naming the metrics you need and a date range; calling it bare over a full history is a lot of data.
  • get_intradayThe current hour-by-hour window from the iOS app's HOURLY automations (health-intraday.json, app 1.4+): each metric's hourly points plus its latest value. The file is REPLACED on every hourly run, so this is a live within-day view, not history; use get_health_metrics for day-level questions. Returns available:false with setup guidance when no hourly automation has delivered yet.
  • query_health_dataNatural-language convenience: pass a question and get routed structured results. Prefer the specific tools above when you can, and call list_metrics first to see how much history exists, since this tool answers over whatever the file holds.
  • list_eventsLogged context events from health-events.json: medication starts, habit changes, doctor visits, life events, shift blocks, episodes, travel, and any type a newer app adds. Optional {type, tag, start, end} filters; a range event matches a window it overlaps. Sorted ascending by date. Returns available:false when the file was never exported; absence means nothing was exported, not that nothing happened.
  • get_profileThe context fields the user explicitly opted in to sharing (health-profile.json): conditions, medications, goals, allergies, notes. Returns the fields plus a presentFields list. An absent field was withheld by the user or never enabled; absence must never be read as "none".
  • get_workoutsQuery the workouts cache with {activityType (a name like Running, or a raw HealthKit id like 37), start, end} filters and pagination ({limit} default 50 max 200, {cursor} from a previous nextCursor). Records are returned exactly as stored, including the newer optional keys (avgHeartRate, maxHeartRate, running dynamics, cycling power, intervals, hasRoute) when the app exported them; older caches simply lack those keys and nothing is fabricated. Also returns summary {count, byActivityType} over everything that matched.
  • get_sleep_sessionsClustered sleep sessions from health-sessions.json with {start, end, day} filters. Sessions are attributed to the WAKING day, matching the daily cache's sleep_analysis, so the two surfaces never disagree; a split night appears as multiple sessions with the same day, returned as-is. Timestamps carry the local UTC offset at the time of the sample.
  • +2 more on the listing page

ProjectPulse MCP tools 8

  • check_ci_statusFetches recent CI/CD workflow runs (GitHub Actions) for a GitHub repository. - Side effects: None. This is a strictly read-only operation. - Data sources: GitHub REST API (actions/runs). - Auth requirements: No authentication required for public repositories. Uses configured token if available. - Rate limits: Subject to standard GitHub API limits. - Return shape: Returns a JSON array of workflow runs including name, status, conclusion, head_branch, created_at, updated_at, and html_url. - Usage guidelines: Use this tool ONLY to check raw GitHub Actions workflow history and CI build statuses. DO NOT use this tool for other analyses: - For a computed A-F health score grading, use 'get_health_score' instead. - For retrieving basic repository stats (stars, forks), use 'get_repo_health' instead. - For calculated DORA metrics, use 'get_dora_metrics' instead.
  • get_repo_healthFetches basic repository metadata and statistics from the public GitHub API. - Side effects: None. This is a strictly read-only operation. - Data sources: Public GitHub REST API (GET /repos/{owner}/{repo}). - Auth requirements: No authentication required for public repositories. Uses configured GitHub token if available. - Rate limits: Subject to standard GitHub API limits (60 requests/hour unauthenticated, 5000 requests/hour authenticated). - Return shape: Returns a JSON object containing specific metadata: full_name (string), description (string), stargazers_count (number), open_issues_count (number), language (string), license (string, SPDX ID), pushed_at (ISO 8601 string), default_branch (string), archived (boolean), and forks_count (number). - Usage guidelines: Use this tool ONLY to retrieve basic raw metadata (like stars, forks, language, and issue counts). DO NOT use this tool for other specific analyses: - For a computed A-F health score grading, use 'get_health_score' instead. - For checking CI/CD workflow run statuses, use 'check_ci_status' instead. - For package vulnerabilities and dependency graph, use 'analyze_dependencies' instead. - For code security and static analysis, use 'analyze_code_scanning' instead.
  • analyze_dependenciesFetches Dependabot alerts for a GitHub repository to analyze vulnerable package dependencies. - Side effects: None. This is a strictly read-only operation. - Data sources: GitHub REST API (dependabot/alerts). - Auth requirements: Requires GITHUB_TOKEN with appropriate permissions (dependabot alerts are often restricted). - Rate limits: Subject to standard GitHub API limits. - Return shape: Returns a JSON array of vulnerable package dependencies including summary, severity, package_name, state, and html_url. - Usage guidelines: Use this tool ONLY to find vulnerable package dependencies (npm, pip, etc.). DO NOT use this tool for other checks: - For static code security vulnerabilities (CodeQL), use 'analyze_code_scanning' instead. - For a computed A-F health score grading, use 'get_health_score' instead.
  • analyze_code_scanningFetches or triggers open Code Scanning (CodeQL) alerts for a GitHub repository. - Side effects: Read-only by default. If trigger_scan=true, writes to GitHub Actions by creating a workflow_dispatch event. - Data sources: GitHub REST API (code-scanning/alerts and actions). - Auth requirements: Requires GITHUB_TOKEN with appropriate permissions (security-events). - Rate limits: Subject to standard GitHub API limits. - Return shape: Returns a JSON array of alert objects including rule_id, severity, rule_description, state, location paths, and html_url. - Usage guidelines: Use this tool ONLY for deep static code vulnerability scanning (CodeQL). DO NOT use this tool for other checks: - For package/dependency vulnerabilities, use 'analyze_dependencies' instead. - For a computed A-F health score grading, use 'get_health_score' instead. - For checking standard CI/CD workflow statuses, use 'check_ci_status' instead.
  • get_health_scoreCalculates a 0-100 health score and A-F grade for a GitHub repository. - Side effects: Writes a trend snapshot to local disk for history tracking. Read-only against GitHub API. - Data sources: GitHub REST API (repos, actions, dependabot) and OpenSSF Scorecard API. - Auth requirements: No authentication required for public repositories. Uses configured token if available. - Rate limits: Subject to standard GitHub API limits (heavy usage across multiple endpoints). - Return shape: Returns a JSON object with a grade (A-F), total score, detailed category breakdown (CI, freshness, security, community, maintenance), improvement suggestions, and historical trend data. - Usage guidelines: Use this tool ONLY for deep analytical grading and overall repository health assessment. DO NOT use this tool for quick metadata checks: - For basic raw metadata (stars, language, etc.), use 'get_repo_health' instead. - For raw CI workflow statuses, use 'check_ci_status' instead. - For deep code vulnerability scanning, use 'analyze_code_scanning' instead. - For DORA metrics, use 'get_dora_metrics' instead.
  • get_dora_metricsCalculates DORA proxy metrics (deployment frequency, lead time, change failure rate, MTTR) for a GitHub repository. - Side effects: None. This is a strictly read-only operation. - Data sources: GitHub REST API (releases, actions/runs, pulls). - Auth requirements: No special authentication required for public repositories. Private repositories require GITHUB_TOKEN. - Rate limits: Subject to standard GitHub API limits. Heavy API usage due to multiple list endpoints being queried. - Return shape: Returns a JSON object with calculated DORA metrics over the specified period. - Usage guidelines: Use this tool ONLY to evaluate DORA metrics and team delivery performance. DO NOT use this tool for other checks: - For raw workflow statuses, use 'check_ci_status' instead. - For a computed A-F health score grading, use 'get_health_score' instead. - For general repository metadata, use 'get_repo_health' instead.
  • compare_reposCompares health scores of multiple GitHub repositories (2-5 repos) and ranks them. - Side effects: None. This is a strictly read-only operation. - Data sources: GitHub REST API and OpenSSF Scorecard API (via get_health_score logic). - Auth requirements: No authentication required for public repositories. Uses configured token if available. - Rate limits: Subject to standard GitHub API limits. Multiplies API calls by the number of repositories compared. - Return shape: Returns a JSON object containing a ranked list of repositories (owner, repo, rank) with their detailed health breakdown (score, CI, freshness, security, community, maintenance). - Usage guidelines: Use this tool ONLY when you need to compare or rank multiple repositories against each other based on their health scores. DO NOT use this tool for analyzing a single repository: - For getting the health score of a single repository, use 'get_health_score' instead. - For comparing raw metadata instead of health scores, query 'get_repo_health' individually.
  • check_best_practicesChecks whether a GitHub repository follows open-source community best practices. - Evaluates 12 checks: README, LICENSE, SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT, issue/PR templates, branch protection, Dependabot, CI/CD, description, and topics. - Returns a weighted 0-100 score with A-F grade, per-check pass/fail/unknown status, and actionable suggestions for missing items. - Side effects: None. Read-only operation. - Rate limits: ~6 GitHub API calls per invocation. - Branch protection check requires admin access — returns "unknown" (not penalized) if token lacks permission. - Use this tool to audit repo quality and discoverability. For a computed health grade based on CI/security/activity, use 'get_health_score' instead.

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Health Export MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "io-github-philipad-health-export-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "health-export-mcp"
      ],
      "env": {
        "HEALTH_DATA_DIR": "YOUR_HEALTH_DATA_DIR_HERE"
      }
    }
  }
}

ProjectPulse MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "projectpulse-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "projectpulse-mcp"
      ],
      "env": {
        "GITHUB_TOKEN": "YOUR_GITHUB_TOKEN_HERE"
      }
    }
  }
}

Frequently asked questions

Health Export MCP is categorized under Monitoring and uses a local stdio subprocess. ProjectPulse MCP belongs to Monitoring and uses a local stdio subprocess. Pick Health Export MCP for monitoring work and ProjectPulse MCP for monitoring.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Health Export MCP is listed as free. Auth: no auth required. ProjectPulse MCP is listed as free. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add io-github-philipad-health-export-mcp and projectpulse-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Health Export MCP has a quality signal of 67/100 (Great) with 9 views, 0 installs and 8 GitHub stars. ProjectPulse MCP has 64/100 (Good) with 4 views, 0 installs and 1 GitHub stars.