Quantified Self MCP Server
Quantified Self MCP Server
一个本地 Model Context Protocol(MCP)服务器,让 LLM(例如 Claude Desktop)可以查询你的个人健康和财务数据。所有数据都存储在两个本地 SQLite 文件中,由你控制的 Python 进程直接从磁盘读取。没有云数据库,没有仪表盘,没有第三方服务。
包含内容
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运行 init_db.py 会在 server.py 旁边创建一个 data/ 文件夹,其中包含 health.db 和 finance.db——该文件夹不包含在此处,因为它是在你的机器上根据你自己的数据生成的。
Related MCP server: apple-health-mcp
暴露的工具
工具 | 返回 | 参数(全部可选) |
| 每日步数、睡眠时长、静息心率 |
|
| 分类支出账本,含总计 |
|
两个工具都返回匹配的行以及计算出的汇总(健康数据的平均值/最小值/最大值,财务数据按类别的总计),这样模型就不必自行跨多行进行聚合。
1. 设置环境
需要 Python 3.10+。
cd quantified-self-mcp
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt2. 加载你的数据
使用附带的示例立即试用:
python init_db.py health sample_data/health_sample.csv
python init_db.py finance sample_data/finance_sample.csv要使用你自己的数据,请将其导出为包含以下列的 CSV,然后对你的文件运行相同的命令:
健康 CSV:
date, steps, sleep_hours, resting_heart_rate财务 CSV:
date, category, amount, description(description可选)
日期应为 ISO 格式(2026-08-23);也接受 MM/DD/YYYY 并会自动转换。金额/数字可以包含 $ 和 ,(例如 $1,234.56)——这些会被自动去除。有问题的行(日期错误、金额非数字、缺少类别等)会被跳过并发出警告,而不会中止整个导入;最后打印的一行总会告诉你加载了多少行、跳过了多少行。
再次运行 init_db.py health 会按日期进行 upsert(随着你添加天数,可以安全地重复运行);init_db.py finance 每次都会追加新行,因为账本没有天然的唯一键。向任一命令添加 --replace 可改为先清空表。
3.(可选)单独测试
在接入任何客户端之前,你可以打开 MCP Inspector 并在浏览器中直接调用工具:
fastmcp dev inspector server.py4. 连接到 Claude Desktop
Claude Desktop 将本地 MCP 服务器作为子进程启动,并通过 stdio 与它们通信,基于一个 JSON 配置文件:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
你可以从应用直接跳转:设置 → 开发者 → 编辑配置。
在 mcpServers 下添加一个条目,使用绝对路径——重要的是,将 command 指向你刚刚创建的虚拟环境内部的 Python 解释器,而不是裸的 python。Claude Desktop 在最小化环境中运行服务器,该环境不能可靠地继承你 shell 的 PATH 或已激活的 venv,因此裸的 "python" 通常会解析到错误的解释器(或根本解析不到),服务器会静默地无法启动。
{
"mcpServers": {
"quantified-self": {
"command": "/absolute/path/to/quantified-self-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/quantified-self-mcp/server.py"]
}
}
}在 Windows 上,通常是:
{
"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"]
}
}
}保存文件,然后完全退出并重新打开 Claude Desktop(不仅仅是关闭窗口——必须重启才能加载配置更改)。查看聊天框中的锤子/工具图标,确认 quantified-self 已连接。
FastMCP 还附带一个 CLI 快捷方式,可以为你编辑此文件——fastmcp install claude-desktop server.py --name "Quantified Self"——值得一试(运行 fastmcp install claude-desktop --help 查看当前标志),但上面的手动 JSON 始终有效,并且在出问题时更容易调试。Anthropic 还有一种较新的一键式"桌面扩展"打包格式,用于本地 MCP 服务器;对于像这样的个人使用来说不是必需的,但如果你想把此服务器分享给不太习惯编辑 JSON 的人,值得了解一下。
5.(可选)在 Docker 中运行 / 托管在 Glama 上
#5-optional-run-it-in-docker--host-it-on-glama
项目包含一个 Dockerfile,供任何想在容器中而不是本地 venv 中运行的人使用——包括托管在 Glama 上,当仓库中存在 Dockerfile 时,Glama 会直接从中构建。
docker build -t quantified-self-mcp .
docker run -i --rm -v "$PWD/data:/app/data" quantified-self-mcp该镜像仅包含 Python(python:3.12-slim + pip install -r requirements.txt);此项目中没有任何 Node.js。HEALTH_DB_PATH 和 FINANCE_DB_PATH 默认为容器内的 /data/health.db 和 /data/finance.db,这样挂载的卷(例如 Glama 的 /data 挂载)可以在重新部署时持久化你的数据库——请参阅 server.py 顶部的 Configuration 部分来覆盖它们。
glama.json 有意保持极简——它只是将 Glama 指向此仓库;Dockerfile 才是镜像如何构建和启动(python server.py,通过 stdio)的实际事实来源。glama.json 的早期版本试图手动配置一个通用 buildpack(裸的 debian:trixie-slim 基础镜像加上手动 pip install 构建步骤和 cmdArguments),而不是使用 Dockerfile——该镜像没有可靠地预置 Python 解释器,平台会回退到尝试运行此仓库中不存在的 Node.js 入口点(Cannot find module '/app/server.js')。提供 Dockerfile 消除了这种歧义。
隐私模型——"本地"到底意味着什么
值得对此精确说明,因为这是整个项目的意义所在:
两个 SQLite 数据库只存在于你的磁盘上,位于此项目的
data/文件夹内。服务器不进行任何网络调用,没有遥测,也不会同步到任何地方。server.py以 SQLite 的只读模式打开两个数据库(不仅仅是"不发出写入"——连接在物理上无法写入)。即使是有缺陷或恶意的提示词,也无法让任一工具修改你的数据;只有由你在终端中运行的init_db.py才会写入它们。当 MCP 客户端调用这些工具之一时,该查询返回的特定行会成为发送给回答模型的对话的一部分——这就是 MCP 向模型提供信息的机制。如果你使用 Claude Desktop 搭配托管模型,这意味着你询问的任何数据切片都会在该轮对话中发送给 Anthropic,就像你在聊天中键入的任何其他内容一样。
所以这里的"本地"意味着:你的完整数据集永远不会存储在任何第三方数据库中,也不会同步到任何第三方数据库,除非实际调用工具,否则不会传输任何内容——即使调用,也只有该特定调用返回的行,而不是整个数据库。这并不意味着端到端完全离线。要做到这一点,你需要一个完全本地的模型运行时(例如 Ollama)搭配一个兼容 MCP 的客户端。
故障排除
服务器没有出现在 Claude Desktop 中:检查
command和args是否使用绝对路径,确认 venv 的 Python 路径确实存在,并确认你完全退出并重新打开了应用。日志位于~/Library/Logs/Claude(macOS)或%APPDATA%\Claude\logs(Windows)——mcp-server-quantified-self.log会专门显示此服务器的 stderr。工具报"未找到健康/财务数据库":先为该数据集运行
init_db.py——工具故意不自动创建空数据库,这样你就不会得到静默的空答案。对
server.py的编辑似乎没有生效:重启 Claude Desktop;它每个应用会话启动一次服务器进程,而不是每条消息启动一次。在 Glama 上托管失败,报
Cannot find module '/app/server.js':这意味着部署回退到了 Node.js 运行时而不是 Python——此仓库没有server.js。请从附带的Dockerfile构建(参见上面的"在 Docker 中运行 / 托管在 Glama 上"),而不是使用通用 buildpack 配置,这样平台才能可靠地运行python server.py。
扩展此项目
几个自然的后续步骤,如果你想要的话——这些都没有内置,只是模式指向的方向:
编写工具(
log_expense、log_daily_metric),以便通过 LLM 而不是直接通过 CSV/SQL 添加条目。更多指标——体重、锻炼、情绪、饮水量——每个都只是另一张表和另一个读取工具。
一个预算对比实际工具,将
read_finance_data的总计与你定义的目标进行比较。
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