health-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@health-mcpShow my current health status and weekly trend for music and sleep."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
health-mcp
health.ojimpo.com(Cultural Health Dashboard)の健康・文化活動データを Claude から会話で扱えるようにする読み取り専用 MCP サーバーです。
背景・動機
health-ojimpo は、音楽・読書・運動・SNS などの日常の文化的活動を外部サービスから自動収集し、個人の基準値に対するスコアとして可視化することで、メンタルヘルスの変調を早期に察知するダッシュボードです。
ダッシュボードは「眺める」には良いのですが、「先月と比べて音楽が減ってるのはなぜ?」「この1年で読書が多かった月は?」のような問いかけにはAIとの対話のほうが向いています。そこでダッシュボードのデータをMCPツールとして公開し、claude.ai / Claude Code のどちらからでも自然言語で健康データを分析できるようにしました。
同じ構成の自作MCPサーバー otp-mcp(乗換案内)・cosense-mcp(Cosense)に続く3つ目で、足場(stdio/HTTP両対応のトランスポート層)はそれらから流用しています。
Related MCP server: oura-mcp
設計思想
読み取り専用: データの取り込みや設定変更は載せない。MCP経由での誤操作リスクをゼロにし、認証なし運用(後述)を許容できるようにする
バックエンドに寄生しない: health-ojimpo の REST API を叩くだけの薄いクライアント。スコアリングロジックはバックエンド側の単一実装のまま
出力サイズを制御: スコア履歴のカテゴリ列はオプトイン、生データは件数上限 + 週/月集計モードで、LLMのコンテキストを溢れさせない
stdio と Streamable HTTP の両対応: ローカルの Claude Code からは stdio、claude.ai からは Cloudflare Tunnel 経由の HTTP で同じサーバーに接続する
ツール
ツール | 説明 |
| 現在の健康/文化スコア・ステータス、カテゴリ別の今週vs先週、コンディション(睡眠/Readiness/ストレス等)、トレンドコメント |
| スコアの時系列(1m/3m=日次、1y=週次)。カテゴリ列は必要な分だけ指定 |
| 直近の具体的なアクティビティ(聴いた曲、運動、観た映画など) |
| 設定済みデータソース一覧(カテゴリ・分類・基準値)。query_records の引数探索用 |
| 生の日次レコードを日付範囲で取得。source/categoryフィルタ、week/month集計対応 |
構成
claude.ai ──HTTPS──> Cloudflare Tunnel ──> localhost:4102 ──> health-mcp(Docker)
Claude Code ──stdio──> node build/index.js │ HTTP (docker network)
health-ojimpo backend (FastAPI) <──┘health-mcp コンテナは health-ojimpo の Docker ネットワーク(
health-ojimpo_default)に相乗りし、http://backend:8000でAPIに到達しますstdio モード(Claude Code)はホストの
http://localhost:8400(backendのlocalhost公開ポート)を使います
セットアップ
ビルド
npm install
npm run buildCLI(動作確認用)
export HEALTH_API_BASE_URL=http://localhost:8400
node build/index.js status
node build/index.js history 3m music,sleep
node build/index.js recent 5
node build/index.js sources
node build/index.js records 2026-06-01 2026-06-30 lastfm '' weekDocker(HTTP モード)
docker compose up -d --build
curl http://localhost:4102/health # {"status":"ok"}※ health-ojimpo のスタックが先に起動している必要があります(externalネットワーク参照のため)。
Claude Code への登録(stdio)
claude mcp add --scope user health \
--env HEALTH_API_BASE_URL=http://localhost:8400 \
-- node /path/to/health-mcp/build/index.jsclaude.ai への登録(リモートコネクタ)
Cloudflare Tunnel の ingress に
health-mcp.example.com → http://localhost:4102を追加claude.ai → Settings → Connectors → Add custom connector → URL に
https://health-mcp.example.com/mcpを指定
環境変数
変数 | 既定値 | 説明 |
|
| health-ojimpo バックエンドのベースURL(Docker内は |
|
|
|
|
| HTTPモードのリッスンポート |
| (空) | 設定すると |
将来の展望
主観フィードバック(気分の記録)ツール — バックエンド側にエンドポイントができたら書き込み系として追加検討
スコア変動の要因分解ツール(どのソースがスコアを下げているかの内訳)
Available Tools
5 toolsget_current_statusA
Get the current snapshot of the personal health dashboard (health.ojimpo.com): overall health score/status (NORMAL/CAUTION/CRITICAL) and cultural activity score/status (RICH/MODERATE/LOW), per-category cards (this week vs previous week with change), condition state cards (sleep/readiness/stress/weight/outing/CTL), and trend comments. Scores are percentages of personal baselines (100 = baseline met). Use this first for any 'how am I doing' question.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the tool as a 'snapshot' implying a read operation without side effects, but it does not explicitly state read-only, auth requirements, or rate limits. The description adds context about scores being percentages of baselines but lacks full transparency on behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one long sentence but front-loaded with the core purpose and efficiently lists the returned elements. It is fairly concise with no wasted words, though it could be broken into multiple sentences for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately describes the return structure: overall scores, per-category cards, condition state cards, and trend comments. It also explains score interpretation (percentages of baselines). The usage guidance adds completeness. Minor gaps: does not detail card structure or trend comment format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is trivially 100%. Per guidelines, baseline is 4. The description does not need to add parameter details since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the current snapshot of the health dashboard, listing specific components like overall health status, cultural activity score, per-category cards, condition state cards, and trend comments. It distinguishes from siblings like get_recent_activities (activities), get_score_history (history), and query_records (general query).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use this tool first for any 'how am I doing' question, providing strong usage guidance. It does not list exclusions or alternative tools for specific cases, but the context makes it clear this is the primary status tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activitiesA
List the most recent concrete activities across all sources (e.g. tracks listened, workouts, movies watched, commits) as human-readable lines with relative time. The backend keeps the latest 8.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 8). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description reveals it returns human-readable lines with relative time and a backend limit of 8, but lacks disclosure on side effects given no annotations. Adequate for listed behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the main functionality and include important details without unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description adequately covers functionality and constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the description mentions 'latest 8' which aligns with the parameter's default and max, adding no new meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists recent activities across multiple sources with human-readable lines and relative time, distinguishing it from siblings like get_current_status or query_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for retrieving recent activities, but does not explicitly specify when to use vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_score_historyA
Get the score time series: one row per date with overall health_score and cultural_score, plus optional per-category score columns. range 1m/3m = daily points, 1y = weekly points. Valid category names — activity: music, exercise, reading, movie, sns, coding, calendar, live, shopping, vitality, outing_activity, cd, podcast, game, like, study; state: sleep, readiness, stress, weight, outing, ctl. Add only the categories you need to keep output small.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Time range (default 3m). 1m/3m = daily, 1y = weekly. | |
| categories | No | Optional category columns to include in addition to the overall scores. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes output structure (per-date rows with overall scores and optional category columns) and granularity by range. It does not disclose potential limitations like empty data, rate limits, or auth needs, but it is reasonably transparent for a read-only query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the main purpose and data structure. It efficiently conveys key details, though the default range could be explicitly highlighted instead of implied.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains output structure well. It covers granularity, optional categories, and category naming. It lacks pagination or limit info but is adequate for a simple query tool with two optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value beyond schema: it states the default range (3m), lists valid category names, and provides usage advice to limit categories. This extra context aids correct parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a score time series with overall health_score and cultural_score per date, plus optional per-category columns. It specifies granularity based on range and distinguishes from siblings like get_current_status (current snapshot) and get_recent_activities (activity list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises to add only needed categories to keep output small, which guides parameter selection. However, it does not explicitly state when to use this tool versus alternatives, though context signals imply it for time series vs. current state or recent activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesA
List all configured data sources with their category, display_type (activity/card_only/state), classification (baseline/event/health_only/both), status, and baseline (base_value per aggregation period). Use to discover valid 'source' and 'category' values for query_records.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description relies on the word 'List' to imply a read-only operation. It lacks explicit statements about safety, authentication, or side effects, which would be beneficial for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant information. The first sentence states the action and lists returned fields; the second provides a clear usage directive. Maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately covers what the tool returns and its primary use case. It could mention any ordering or limits but is sufficient for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the input schema is trivial. The description adds meaning by detailing the output fields (category, display_type, classification, etc.), which helps an agent understand what information will be returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all configured data sources, specifying key attributes returned (category, display_type, etc.), and distinguishes itself from sibling tools by highlighting its utility for discovering valid source/category values for query_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'Use to discover valid source and category values for query_records.' It does not provide explicit exclusions but the context implies it is not for status or activity data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_recordsA
Query raw daily activity records (one row per date x source x category: minutes, raw_value, raw_unit). Requires a from/to date range (YYYY-MM-DD). Filter by source and/or category (see list_sources). For ranges over ~2 months prefer group_by week or month to keep output small; raw mode is capped by 'limit' and reports truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date YYYY-MM-DD (inclusive). | |
| from | Yes | Start date YYYY-MM-DD (inclusive). | |
| limit | No | Max raw rows (default 500). | |
| source | No | Filter by source id, e.g. lastfm. | |
| category | No | Filter by category, e.g. music. | |
| group_by | No | Aggregate sums per period instead of raw rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses truncation behavior and grouping aggregation. However, does not mention return format, permissions, or rate limits. Adequate but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
4 sentences, front-loaded with purpose, efficient. Every sentence adds value. Could be slightly more structured but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a query tool with 6 params and no output schema, description covers key aspects: data format, grouping, filtering, date range, limit, truncation, and reference to list_sources. Complete for typical usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds meaning beyond schema by explaining the data structure (one row per date x source x category) and that grouping aggregates sums. Provides context for source/category filtering via list_sources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies 'Query raw daily activity records' with detail on data structure (one row per date x source x category: minutes, raw_value, raw_unit). Distinguishes from siblings like get_recent_activities by focusing on raw daily records with filtering and grouping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States requirement for from/to date range, suggests filtering by source/category with reference to list_sources, and provides guidance to prefer grouping for ranges over ~2 months to keep output small, mentioning raw mode cap and truncation. Does not explicitly contrast with siblings but gives clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
get_current_status - First observed
get_recent_activities - First observed
get_score_history - First observed
list_sources - First observed
query_records
TDQS
Each tool has a clearly distinct purpose: snapshot status, recent activities, historical scores, source metadata, and raw data queries. No overlap in functionality.
All tool names follow a consistent verb_noun pattern (e.g., get_current_status, list_sources, query_records), making the set predictable and easy to navigate.
Five tools is an appropriate scope for a health dashboard, covering key operations without being too sparse or overly heavy.
The set provides a complete view of health data: current status, recent activities, historical trends, source configurations, and raw data access. No obvious gaps for a read-only dashboard.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Read-only MCP server exposing a user ORANO library to their own AI agent.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceRead-only MCP server that exposes Apple Health data (steps, workouts, sleep, etc.) from a local SQLite store, allowing AI agents to query health metrics without sending data to hosted services.7Apache 2.0
- AlicenseBqualityBmaintenanceMCP server for accessing Oura Ring data from Claude Code and claude.ai, providing summarized health metrics and raw API data.11MIT
- AlicenseAqualityAmaintenanceHosted MCP server that syncs health data from Apple Health, Fitbit, Oura, and Google Health Connect, enabling Claude and ChatGPT to query workouts, sleep, nutrition, and recovery in plain English with interactive charts.2732MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI read-only access to Apple Health data through shortcuts and Cloudflare, enabling queries of current stats, detailed records, and trends.MIT
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/ojimpo/health-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server