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
Tesouro Direto MCP Server
Provides natural language access to Brazilian treasury bond data from the Tesouro Direto API, allowing users to query market data and bond details.
CData Zoho Books
A read-only MCP server by CData for querying live data from Zoho Books. Requires an external CData JDBC Driver.
SAP OData MCP Server
An MCP server for integrating with SAP OData services, configured via environment variables.
楼宇大数据服务
Provides comprehensive building and office address information queries, including enterprise office address search and building information queries.
F1Data
Access Formula 1 data, including race results, driver standings, and circuit information.
Gremlin
Interact with any Gremlin-compatible graph database using natural language, with support for schema discovery, complex queries, and data import/export.
Dremio
Integrate Large Language Models (LLMs) with Dremio, a data lakehouse platform.
MongoDB
Interact with MongoDB databases and MongoDB Atlas.
MongoDB MCP Server
A server for performing CRUD operations on a MongoDB database.
QuickBooks Online by CData
A read-only MCP server for querying live QuickBooks Online data. Requires a separate CData JDBC Driver for QuickBooks Online.