# fulcradynamics/fulcra-context-mcp [Health: Active]

**Category:** Biology, Medicine and Bioinformatics  
**Repository:** https://github.com/fulcradynamics/fulcra-context-mcp  
**GitHub Stars:** 6  
**Views:** 4  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/fulcradynamics-fulcra-context-mcp

## Description
MCP server for accessing personal health and biometric data including sleep stages, heart rate, HRV, glucose, workouts, calendar, and location via the Fulcra Life API with OAuth2 consent.

## Tools
Capabilities this server exposes over MCP:

- **get_annotations** — Retrieve an array of all moment annotations the user recorded during a period of time.
Each item contains the value (except for moment annotations) and the metadata (name, original spec, etc.) describing the annotation.

Args:
    ann_type: annotation type (moment, duration, boolean, numeric, scale, etc.)
    start_time: The starting time of the period. Must include tz (ISO8601).
    end_time: the ending time of the period. Must include tz (ISO8601).
- **get_workouts** — Get details about the workouts that the user has done during a period of time.
Result timestamps will include time zones. Always translate timestamps to the user's local
time zone when this is known.

Args:
    start_time: The starting time of the period. Must include tz (ISO8601).
    end_time: the ending time of the period. Must include tz (ISO8601).
- **annotations_catalog** — Get the list of all annotations the user has defined. This does not get the
actual values the user has recorded; for that, use the `get_annotations` tool.
Use this tool to get the IDs and types to pass to `get_annotations`.
- **get_metrics_catalog** — Get the catalog of available metrics that can be used in time-series API calls
(`metric_time_series` and `metric_samples`).
- **get_metric_time_series** — Get user's time-series data for a single Fulcra metric.

Covers the time starting at start_time (inclusive) until end_time (exclusive).
Result timestamps will include tz. Always translate timestamps to the user's local
tz when this is known.

Args:
    metric_name: The name of the time-series metric to retrieve. Use `get_metrics_catalog` to find available metrics.
    start_time: The starting time period (inclusive). Must include tz (ISO8601).
    end_time: The ending time (exclusive). Must include tz (ISO8601).
    sample_rate: Optional. The number of seconds per sample. Default is 60. Can be smaller than 1.
    replace_nulls: Optional. When true, replace all NA with 0. Default is False.
    calculations: Optional. A list of additional calculations to perform for each
    time slice.  Not supported on cumulative metrics.  Options: "max", "min", "delta", "mean", "uniques", "allpoints", "rollingmean".
Returns:
    A JSON string representing a list of data points for the metric.
    For time ranges where data is missing, the values will be NA unless replace_nulls is true.
- **get_metric_samples** — Retrieve the raw samples related to a given metric for the user during a specified period.

In cases where samples cover ranges and not points in time, a sample will be returned
if any part of its range intersects with the requested range. For example, if start_time
is 14:00 and end_time is 15:00, a sample covering 13:30-14:30 will be included.
Result timestamps will include time zones. Always translate timestamps to the user's local
time zone when this is known.

Args:
    metric_name: The name of the metric to retrieve samples for. Use `get_metrics_catalog` to find available metrics.
    start_time: The start of the time range (inclusive), as an ISO 8601 string or datetime object.
    end_time: The end of the time range (exclusive), as an ISO 8601 string or datetime object.
Returns:
    A JSON string representing a list of raw samples for the metric.
- **get_sleep_cycles** — Return sleep cycles summarized from sleep stages.

Processes raw sleep data samples into sleep cycles by finding gaps in the
sleep sample data within a specified time interval.
Result timestamps will include time zones. Always translate timestamps to the user's local
time zone when this is known.

Args:
    start_time: The starting timestamp (inclusive), as an ISO 8601 string or datetime object.
    end_time: The ending timestamp (exclusive), as an ISO 8601 string or datetime object.
    cycle_gap: Optional. Minimum time interval separating distinct cycles (e.g., "PT2H" for 2 hours).
               Defaults to server-side default if not provided.
    stages: Optional. Sleep stages to include. Defaults to all stages if not provided.
    gap_stages: Optional. Sleep stages to consider as gaps in sleep cycles.
                Defaults to server-side default if not provided.
    clip_to_range: Optional. Whether to clip the data to the requested date range. Defaults to True.
Returns:
    A JSON string representing a pandas DataFrame containing the sleep cycle data.
- **get_location_at_time** — Gets the user's location at the given time.

If no sample is available for the exact time, searches for the closest one up to
window_size seconds back.

Result timestamps will include time zones. Always translate timestamps to the user's local
time zone when this is known.

Args:
    time: The point in time to get the user's location for. Must include tz (ISO8601).
    window_size: Optional. The size (in seconds) to look back (and optionally forward) for samples. Defaults to 14400.
    include_after: Optional. When true, a sample that occurs after the requested time may be returned if it is the closest one. Defaults to False.
Returns:
    A JSON string representing the location data.
- **get_location_time_series** — Retrieve a time series of locations that the user was at.
Result timestamps will include time zones. Always translate timestamps to the user's local tz when this is known.

Args:
    start_time: The start of the time range (inclusive), as an ISO 8601 string or datetime object.
    end_time: The end of the range (exclusive), as an ISO 8601 string or datetime object.
    change_meters: Optional. When specified, subsequent samples that are fewer than this many meters away will not be included.
    sample_rate: Optional. The length (in seconds) of each sample. Default is 900.
    reverse_geocode: Optional. When true, Fulcra will attempt to reverse geocode the locations and include the details in the results. Default is False.
Returns:
    A JSON string representing a list of location data points.
- **get_user_info** — Return general info about the Context by Fulcra user.

Returns user references such as time zone, calendar ids, and other metadata.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "fulcra-context-mcp": {
    "command": "uvx",
    "args": ["fulcra-context-mcp@latest"],
    "env": {
      "FULCRA_ENVIRONMENT": ""
    }
  }
}
```

**Requires environment variables:** `FULCRA_ENVIRONMENT` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What fulcradynamics/fulcra-context-mcp MCP server does

The fulcradynamics/fulcra-context-mcp MCP server gives an MCP client access to data held in Fulcra Context through the Fulcra API. Its tools are aimed at personal health, biometric, activity, and contextual data rather than general-purpose database access.

Available data includes time-series metrics such as health measurements, raw metric samples, workouts, sleep-stage-derived cycles, user-recorded annotations, location samples, and general account metadata. The available metrics and annotation definitions should be discovered through the catalog tools before requesting values.

## How it works

The server uses the `fulcra-api` Python library to call Fulcra's API. OAuth2 is used for user consent. The server handles the OAuth callback and keeps exchanged tokens on the server side instead of passing them to MCP clients.

A public deployment is available at `https://mcp.fulcradynamics.com/mcp`. For local use, the process can communicate with an MCP client through stdio. When it is not configured for stdio, the README states that it uses Streamable HTTP for remote operation.

Most time-based tools require ISO 8601 timestamps that include a time zone. Results also include time zones, so clients should convert them to the user's local time zone when that information is available. Metric time-series queries can specify sampling intervals, null replacement, and selected calculations. Location queries can optionally filter nearby samples or request reverse geocoding.

## Setup and configuration

The fulcradynamics/fulcra-context-mcp MCP server can be added to Claude Desktop with `uvx`:

```json
{
  "mcpServers": {
    "fulcra_context": {
      "command": "uvx",
      "args": ["fulcra-context-mcp@latest"]
    }
  }
}
```

For a hosted connection, configure an OAuth2-capable MCP client to use the public Fulcra endpoint. The repository is intended for local operation, inspecting the implementation, and contributing. Setting `FULCRA_ENVIRONMENT=stdio` selects local stdio behavior; the README also describes stdio as the default when the server runs on its own.

## Tools and capabilities

- `annotations_catalog` lists defined annotations and supplies IDs and types for later queries.
- `get_annotations` retrieves annotation values and metadata within a time range.
- `get_metrics_catalog` lists metrics usable with time-series and sample queries.
- `get_metric_time_series` returns sampled values for one metric, with optional calculations such as mean, minimum, maximum, deltas, and rolling means.
- `get_metric_samples` returns raw samples that intersect the requested interval.
- `get_workouts` returns workouts recorded during a specified period.
- `get_sleep_cycles` derives sleep cycles from sleep-stage samples and supports gap, stage, and range options.
- `get_location_at_time` finds a location near a requested time, with configurable lookup behavior.
- `get_location_time_series` returns location points over a period, with optional distance filtering and reverse geocoding.
- `get_user_info` returns account context such as time zone, calendar IDs, and other metadata.

## Limitations and notes

Access depends on OAuth2 consent and the data available in the user's Fulcra account. Missing metric intervals may be returned as `NA` unless null replacement is requested. Sleep cycles are derived from raw sleep data, so their results depend on the available samples and selected gap rules.

The fulcradynamics/fulcra-context-mcp MCP server does not document a built-in data export, storage, or analysis layer beyond the listed MCP tools. Clients should provide valid time zones for temporal requests and should use the catalog tools before requesting metrics or annotations by name or ID.

_Full upstream README: https://allmcps.com/mcp/fulcradynamics-fulcra-context-mcp/readme_

