Skip to main content
Glama
Quantified Self MCP Server

Quantified Self MCP Server

Check how current the data is

get_data_status
Read-onlyIdempotent

Check database freshness and completeness before drawing conclusions: reports latest data date, coverage gaps, last import, and overall status (CURRENT, STALE, INCOMPLETE, NO_DATA, IMPORT_FAILED).

Instructions

Report how current and complete the database is: latest data date, coverage window, gaps, last successful import, and an overall status of CURRENT, STALE, INCOMPLETE, NO_DATA or IMPORT_FAILED. Check this before drawing conclusions from any analysis, and say so when the status is anything other than CURRENT. The status and latest_data describe the database as a whole, so one metric that is still arriving keeps them current while another has stopped: read stale_metrics too, and do not present a listed metric as current.

Use this tool when:

  • the user asks how up to date their data is, or whether an import is needed.

  • you are about to interpret recent data and want to know whether it is fresh enough to trust.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "get_data_status"
  }
}

Input Schema

NameRequiredDescriptionDefault
stale_after_daysNoHow many days the latest data may trail today before the status becomes STALE. Defaults to 2.

Output Schema

NameRequiredDescriptionDefault
gapsYes
as_ofYes
actionNo
reasonNo
sourceNo
statusYes
coverageYes
gap_countYes
days_behindNo
latest_dataNo
missing_daysYes
latest_importNo
stale_metricsNo
days_with_dataYes
stale_after_daysYes
last_successful_importNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.1
    • addedOutput schema / properties / stale_metrics
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "properties": {
      +      "days_behind": {
      +        "type": "integer"
      +      },
      +      "latest_data": {
      +        "type": "string"
      +      },
      +      "metric": {
      +        "type": "string"
      +      },
      +      "stale_after_days": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "metric",
      +      "latest_data",
      +      "days_behind",
      +      "stale_after_days"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changedv1.0.30
    • changedOutput schema / properties / latest_import / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "error": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "finished_at": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "id": {
      -        "type": "integer"
      -      },
      -      "importer": {
      -        "type": "string"
      -      },
      -      "measurements_written": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "rows_loaded": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "rows_skipped": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "source_file": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "source_sha256": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "started_at": {
      -        "type": "string"
      -      },
      -      "status": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "importer",
      -      "status",
      -      "started_at"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "coverage_after_end": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "coverage_after_start": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "coverage_before_end": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "coverage_before_start": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "error": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "finished_at": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "id": {
      +        "type": "integer"
      +      },
      +      "importer": {
      +        "type": "string"
      +      },
      +      "measurements_written": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "records_added": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "records_removed": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "records_seen": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "records_unchanged": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "records_updated": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "rows_loaded": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "rows_skipped": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "source_file": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "source_sha256": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "started_at": {
      +        "type": "string"
      +      },
      +      "status": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "importer",
      +      "status",
      +      "started_at"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Addedv1.0.29

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered by structured fields. The description still adds real behavioral context the annotations cannot: the aggregate status is database-wide while per-metric freshness lives in stale_metrics, and a privacy note warns that returned data enters the client's model context. The aggregate-versus-per-metric caveat is the standout, but the long privacy paragraph is disclosure of an environment property rather than tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, then usage, then a caveat, then privacy – a sensible order and the bullet triggers are scannable. It runs long for a one-parameter read tool, and the three-sentence privacy note adds bulk that is only tangentially about invoking this tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-field explanation is not strictly required, yet the description still names the status enum values and the stale_metrics field an agent must consult. Combined with usage triggers and the aggregate caveat, nothing needed to select or call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains stale_after_days, its default of 2, and what STALE means. The description never mentions the parameter, so it adds no meaning beyond the structured field, which is the baseline case for a fully documented single optional parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource and enumerates the exact outputs: latest data date, coverage window, gaps, last successful import, and a status enum. It is unambiguous about what the tool reports, though it never names get_import_status, the sibling whose territory (import state) partially overlaps, so an agent must infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'Use this tool when' block gives two concrete triggers (user asks about recency or whether an import is needed; agent is about to interpret recent data), plus an imperative to check it before drawing any conclusions. It stops short of a when-not statement or a named alternative for cases where per-import detail is wanted instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.