Apple Health Data with Elasticsearch
A Python-based MCP server that connects to an Elasticsearch index with Apple HealthKit data.
MCP Server for Apple Health Data with Elasticsearch - Starter Project
Welcome! This repository contains the complete and final source code for the blog post, "Unlock Your LLM's Potential: Building an MCP Server with Elasticsearch for Real Health Data".
This project provides a runnable implementation of a custom Model Context Protocol (MCP) server. Built with Python and the FastMCP framework, this server connects to an Elasticsearch index containing sample Apple HealthKit step data. This setup allows an LLM client like Claude to query personal health data using natural language.
Prerequisites
Before you begin, ensure you have the following installed and running:
- Python 3.10+
- Elasticsearch: An instance of Elasticsearch 8.x running locally at
http://localhost:9200. - Claude Desktop: The MCP client we will use to interact with the server.
- uv : For managing Python packages.
Getting Started
Follow these steps to set up your local environment and install the necessary dependencies.
1. Navigate to Your Project Directory
Open your terminal or command prompt and navigate to the project folder.
cd path/to/your/folder/apple-watch-health-mcp
2. Initialize the Python Project
This step creates the pyproject.toml file, which uv uses to manage your project's dependencies.
uv init
3. Create and Activate a Virtual Environment
# Create the virtual environment
uv venv
# Activate the environment
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate
4. Install Dependencies
Install the necessary Python packages. Note that we are specifying a compatible version for the elasticsearch library to match the v8.x server used in this tutorial.
uv add "mcp[cli]" "elasticsearch>=8.0.0,<9.0.0" aiohttp pydantic
Environment Configuration
Setting up the API Key
After creating the API key in Elasticsearch, you need to configure it in your environment:
# Export the API key for the current session
export ES_API_KEY="your_encoded_api_key_here"
Usage Instructions
With the environment set up, you can now run the solution.
1. Ingest the Sample Data
First, run the provided script to populate your Elasticsearch instance with the sample data. This script will create the index with the correct mapping and insert the 30 sample documents.
python ingest_data.py
You should see output confirming that the documents were ingested successfully.
2. Test the Server with MCP Inspector
Before installing in Claude, you can verify that the server is working correctly using the MCP Inspector tool.
mcp dev apple_watch_mcp.py
This will open a web interface where you can interactively test the server's resources, tools, and prompts.
3. Install and Use in Claude
This is the final step to connect your MCP server to the Claude Desktop client.
-
Install the server: Run this command in your terminal.
mcp install apple_watch_mcp.py --name "Apple Health Steps"This command registers the server in Claude Desktop's configuration file.
Run the command below to view the contents of this file.
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json
You should see a structure similar to this inside the file, under the "mcpServers" key:
{
"mcpServers": {
"Apple Health Steps": {
"command": "/full/path/to/your/uv",
"args": [
"--directory",
"/path/to/repository/apple-watch-health-mcp",
"run",
"apple_watch_mcp.py"
// Other arguments may appear depending on your setup
]
}
// ... other servers might be listed here
}
}
-
Restart Claude Desktop: You must close and reopen the Claude Desktop application for it to load the new server configuration.
-
Start Chatting: Once restarted, Claude will automatically run your MCP server in the background. You can now ask it questions about your health data in natural language. Try these examples from the blog post:
- "What was my most active day this week?"
- "Compare my activity between Apple Watch and iPhone"
- Or use the built-in slash commands like
/daily_reportor/trend_analysis.
File Descriptions
apple_watch_mcp.py: The complete and final script for the MCP server, containing all implemented Resources, Tools, and Prompts.ingest_data.py: A helper script that populates your Elasticsearch instance with the sample data.sample_data.json: A JSON file containing fictitious Apple Health step count data for testing.README.md: This file, providing instructions to run the complete solution.
Related Servers
Mallory MCP Server
Access real-time cyber and threat intelligence, including details on vulnerabilities, threat actors, and malware.
ERDDAP MCP Server
Access ERDDAP servers worldwide to search, discover, and retrieve oceanographic and environmental scientific datasets.
Epicor Kinetic MCP Server by CData
A read-only MCP server by CData that enables LLMs to query live data from Epicor Kinetic.
Crunchbase
Access Crunchbase data for business information and insights. Requires a Crunchbase API key.
MemFlow MCP
Enables Large Language Models to store and retrieve persistent memories with intelligent search capabilities.
MySQL MCP Server
Enables secure interaction with MySQL databases, allowing AI assistants to list tables, read data, and execute SQL queries through a controlled interface.
MS SQL MCP Server
A bridge for AI assistants to directly query and explore Microsoft SQL Server databases.
SolanaBot
Interact with the Solana blockchain to check balances, send SOL, and airdrop SOL.
Astro MCP
A modular server providing unified access to multiple astronomical datasets, including astroquery services and DESI data sources.
Metabase MCP Server
Interact with Metabase, the open-source business intelligence platform, using Large Language Models.