Skip to main content
Glama
Thecimal

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 expenses

Al 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)

read_health_data

Pasos diarios, horas de sueño, frecuencia cardíaca en reposo

start_date, end_date (ISO AAAA-MM-DD; por defecto, los últimos 30 días)

read_finance_data

Libro de gastos por categoría, con totales

start_date, end_date, category (por defecto, los últimos 90 días, todas las categorías)

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.txt

2. 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.csv

Para 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_rate

  • CSV de finanzas: date, category, amount, description (description es 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.py

4. 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.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.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-mcp

La 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.py abre 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; solo init_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 command y args usan 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.log mostrará el stderr de este servidor específicamente.

  • "No health/finance database found" desde una herramienta: ejecuta primero init_db.py para 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.py no 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 tiene server.js. Compila a partir del Dockerfile incluido (consulta "Ejecutarlo en Docker / alojarlo en Glama" más arriba) en lugar de una configuración de buildpack genérica, para que la plataforma ejecute python server.py de 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_data con los objetivos que definas.

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Turns 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.
    60
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying personal data synced from services like Lunch Money and Strava using SQL via Claude.
    13
    1
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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