Quantified Self MCP Server
Servidor MCP de Quantified Self
Un servidor local del Model Context Protocol (MCP) que permite a un LLM — p. ej. Claude Desktop — consultar tus datos personales de salud y finanzas. Todo se almacena en dos archivos SQLite locales y se lee directamente del disco mediante un proceso de Python que tú controlas. Sin base de datos en la nube, sin panel de control, sin servicios de terceros.
Qué incluye
quantified-self-mcp/
├── server.py # the MCP server (FastMCP) — 2 tools
├── init_db.py # loads a CSV file into the local SQLite database
├── requirements.txt
├── .gitignore # keeps data/ and .db files out of version control
└── sample_data/
├── health_sample.csv # 30 days of sample data, so you can try it immediately
└── finance_sample.csv # ~2 months of sample expensesAl ejecutar init_db.py se crea una carpeta data/ junto a server.py que contiene health.db y finance.db; esa carpeta no está incluida aquí, ya que se genera en tu máquina a partir de tus propios datos.
Related MCP server: apple-health-mcp
Herramientas expuestas
Herramienta | Devuelve | Parámetros (todos opcionales) |
| Pasos diarios, horas de sueño, frecuencia cardíaca en reposo |
|
| Libro de gastos por categoría, con totales |
|
Ambas herramientas devuelven las filas coincidentes más resúmenes calculados (promedios/mín/máx para salud, totales por categoría para finanzas), de modo que el modelo no tenga que hacer su propia agregación entre muchas filas.
1. Configurar el entorno
Requiere Python 3.10+.
cd quantified-self-mcp
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt2. Cargar tus datos
Pruébalo de inmediato con las muestras incluidas:
python init_db.py health sample_data/health_sample.csv
python init_db.py finance sample_data/finance_sample.csvPara usar tus propios datos, expórtalos a CSV con estas columnas y ejecuta los mismos comandos con tus archivos:
CSV de salud:
date, steps, sleep_hours, resting_heart_rateCSV de finanzas:
date, category, amount, description(descriptiones opcional)
Las fechas deben estar en formato ISO (2026-08-23); también se acepta MM/DD/AAAA y se convierte. Las cantidades/números pueden incluir $ y , (p. ej. $1.234,56) — se eliminan automáticamente. Una fila con un problema (fecha incorrecta, cantidad no numérica, categoría faltante, etc.) se omite con una advertencia en lugar de abortar toda la importación; la última línea impresa siempre te indica cuántas filas se cargaron frente a cuántas se omitieron.
Volver a ejecutar init_db.py health actualiza por fecha (es seguro re-ejecutarlo a medida que añades días); init_db.py finance añade filas nuevas cada vez, ya que un libro de gastos no tiene una clave única natural. Añade --replace a cualquiera de los dos comandos para vaciar la tabla primero.
3. (Opcional) probarlo de forma independiente
Antes de conectarlo a cualquier cliente, puedes abrir el MCP Inspector y llamar a las herramientas directamente en un navegador:
fastmcp dev inspector server.py4. Conectarlo a Claude Desktop
Claude Desktop lanza servidores MCP locales como subprocesos y se comunica con ellos a través de stdio, según un archivo de configuración JSON:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Puedes ir directamente desde la aplicación: Ajustes → Desarrollador → Editar configuración.
Añade una entrada en mcpServers, usando rutas absolutas — es importante que command apunte al intérprete de Python dentro del entorno virtual que acabas de crear, no a un python a secas. Claude Desktop ejecuta los servidores en un entorno mínimo que no hereda de forma fiable el PATH de tu shell ni un venv activado, por lo que un "python" a secas suele resolverse al intérprete incorrecto (o a ninguno) y el servidor falla silenciosamente al iniciarse.
{
"mcpServers": {
"quantified-self": {
"command": "/absolute/path/to/quantified-self-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/quantified-self-mcp/server.py"]
}
}
}En Windows, normalmente es:
{
"mcpServers": {
"quantified-self": {
"command": "C:\\absolute\\path\\to\\quantified-self-mcp\\.venv\\Scripts\\python.exe",
"args": ["C:\\absolute\\path\\to\\quantified-self-mcp\\server.py"]
}
}
}Guarda el archivo y, a continuación, cierra y vuelve a abrir Claude Desktop por completo (no basta con cerrar la ventana; es necesario reiniciar para cargar los cambios de configuración). Busca el icono de herramientas/martillo en el cuadro de chat para confirmar que quantified-self está conectado.
FastMCP también incluye un atajo CLI que edita este archivo por ti — fastmcp install claude-desktop server.py --name "Quantified Self" — merece la pena probarlo (ejecuta fastmcp install claude-desktop --help para ver las opciones actuales), pero el JSON manual anterior siempre funcionará y es más fácil de depurar si algo falla. Anthropic también tiene un formato de empaquetado más reciente de "Desktop Extension" con un solo clic para servidores MCP locales; no es necesario para un uso personal como este, pero conviene saber que existe si algún día quieres compartir este servidor con alguien menos cómodo editando JSON.
5. (Opcional) ejecutarlo en Docker / alojarlo en Glama
#5-optional-run-it-in-docker--host-it-on-glama
Se incluye un Dockerfile para quien quiera ejecutar esto en un contenedor en lugar de un venv local, incluido alojarlo en Glama, que compila directamente a partir del Dockerfile de un repositorio cuando está presente.
docker build -t quantified-self-mcp .
docker run -i --rm -v "$PWD/data:/app/data" quantified-self-mcpLa imagen es solo Python (python:3.12-slim + pip install -r requirements.txt); no hay Node.js en ningún lugar de este proyecto. HEALTH_DB_PATH y FINANCE_DB_PATH apuntan por defecto a /data/health.db y /data/finance.db dentro del contenedor, de modo que un volumen montado (p. ej. el montaje /data de Glama) conserve tus bases de datos entre redespliegues; consulta la sección de Configuración al principio de server.py para sobrescribirlos.
glama.json es intencionadamente mínimo — solo indica a Glama que use este repositorio; el Dockerfile es la fuente de verdad real sobre cómo se compila e inicia la imagen (python server.py, a través de stdio). Una versión anterior de glama.json intentaba configurar manualmente un buildpack genérico (una imagen base debian:trixie-slim desnuda más pasos de compilación manuales de pip install y cmdArguments) en lugar de usar un Dockerfile — esa imagen no tenía un intérprete de Python aprovisionado de forma fiable, y la plataforma acababa intentando ejecutar un punto de entrada de Node.js que no existe en este repositorio (Cannot find module '/app/server.js'). Incluir un Dockerfile elimina esa ambigüedad.
Modelo de privacidad — qué significa realmente "local"
Conviene ser precisos al respecto, ya que es el objetivo principal del proyecto:
Ambas bases de datos SQLite viven solo en tu disco, dentro de la carpeta
data/de este proyecto. El servidor no realiza llamadas de red, no tiene telemetría y no sincroniza nada en ningún sitio.server.pyabre ambas bases de datos en modo de solo lectura de SQLite (no es solo que "no emita escrituras" — la conexión es físicamente incapaz de hacerlo). Ni siquiera un prompt con errores o malintencionado puede conseguir que ninguna de las dos herramientas modifique tus datos; soloinit_db.py, ejecutado por ti desde la terminal, escribe en ellas.Cuando un cliente MCP llama a una de estas herramientas, las filas específicas devueltas para esa consulta pasan a formar parte de la conversación enviada al modelo que responda — ese es el mecanismo que usa MCP para dar información a un modelo. Si usas Claude Desktop con un modelo alojado, eso significa que la porción de datos sobre la que preguntes se envía a Anthropic para ese turno, igual que cualquier otra cosa que escribas en el chat.
Así que "local" aquí significa: tu conjunto de datos completo nunca se almacena ni se sincroniza en ninguna base de datos de terceros, y no se transmite nada a menos que se invoque realmente una herramienta — y, aun así, solo las filas que devuelve esa llamada concreta, no toda la base de datos. No significa totalmente sin conexión de extremo a extremo. Para eso necesitarías un runtime de modelo totalmente local (p. ej. Ollama) junto con un cliente compatible con MCP.
Solución de problemas
El servidor no aparece en Claude Desktop: comprueba que
commandyargsusan rutas absolutas, confirma que la ruta de Python del venv existe realmente y confirma que cerraste y volviste a abrir la aplicación por completo. Los registros están en~/Library/Logs/Claude(macOS) o%APPDATA%\Claude\logs(Windows) —mcp-server-quantified-self.logmostrará el stderr de este servidor específicamente."No health/finance database found" desde una herramienta: ejecuta primero
init_db.pypara ese conjunto de datos — las herramientas no crean bases de datos vacías automáticamente a propósito, para que no obtengas respuestas vacías en silencio.Los cambios en
server.pyno parecen surtir efecto: reinicia Claude Desktop; inicia el proceso del servidor una vez por sesión de la aplicación, no por mensaje.El alojamiento en Glama falla con
Cannot find module '/app/server.js': esto significa que el despliegue recurrió a un runtime de Node.js en lugar de Python — este repositorio no tieneserver.js. Compila a partir delDockerfileincluido (consulta "Ejecutarlo en Docker / alojarlo en Glama" más arriba) en lugar de una configuración de buildpack genérica, para que la plataforma ejecutepython server.pyde forma fiable.
Ampliar esto
Algunos pasos siguientes naturales, si los quieres — nada de esto está construido, solo es hacia donde lleva el patrón:
Escribir herramientas (
log_expense,log_daily_metric) para que las entradas se puedan añadir a través del LLM en lugar de mediante CSV/SQL directamente.Más métricas — peso, entrenamientos, estado de ánimo, ingesta de agua — cada una es solo otra tabla y otra herramienta de lectura.
Una herramienta de presupuesto frente a real que compare los totales de
read_finance_datacon los objetivos que definas.
Maintenance
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that allows users to query and analyze their Apple Health data using SQL and natural language, utilizing DuckDB for fast and efficient health data analysis.931,096564MIT
- AlicenseNot gradedqualityCmaintenanceLoads Apple Health export data into a local SQLite database and exposes tools to query health metrics and workout records via natural language.2MIT
- AlicenseNot gradedqualityCmaintenanceTurns a personal-finance SQLite database into typed, schema-validated tools that an AI assistant can call directly, letting you manage accounts, transactions, budgets, debts, investments, tax estimates, and goals through natural language.60MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying personal data synced from services like Lunch Money and Strava using SQL via Claude.131MIT
Related MCP Connectors
The grounded data layer for any LLM: governed SQL, metrics, lineage and catalog over your data.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Thecimal/quantified-self-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server