# Intentions MCP Server

> Personalized timing intelligence for AI agents — ask 'should I do X on this date?'

- name: io.github.intentions-me/intentions-mcp
- version: 0.1.2
- connection class: R1 (autonomous)
- trust: 97/100
- quality: 80/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.intentions-me%2Fintentions-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.intentions-me%2Fintentions-mcp/tools

**An agent can connect on its own if it already holds `INTENTIONS_MCP_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "intentions-mcp": {
      "type": "http",
      "url": "https://mcp.intentions.me/mcp",
      "headers": {
        "Authorization": "Bearer ${INTENTIONS_MCP_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${INTENTIONS_MCP_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-2d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 80/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 7 tools declare all four hints; missing: intentions_ask_day (destructiveHint, idempotentHint); intentions_ask_hour (destructiveHint, idempotentHint); intentions_get_profile (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 2,780 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 8 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 2,780 tokens to load them all
- tool set hash: 1827dfa1b8816716f325e2542fa62421
- tools last changed: 2026-10-18T17:57:11.548Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.intentions-me/intentions-mcp.svg)](https://protogrid.dev/servers/io.github.intentions-me/intentions-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `intentions_energy_chart` changed (description, inputSchema)
  - before: Call when the user wants a visual overview rather than a narrative answer ("show me this week", "chart for today", "next 12 months", "看一下图"). Returns an ASCII chart: `hourly` = 12 two-hour blocks of one day, `weekly` = 7 days, `yearly` = 12 months. The `hourly` mode emits the same hour-resolution scores as `intentions_ask_hour` and `yearly` the month-by-month view, and both are Pro: on the free tier they return a `subscription_required` error whose payload suggests alternatives. `weekly` is free for the past week and the week ahead (omit `date` for this week); further out it is Pro too.
  - after: Call when the user wants a visual overview rather than a narrative answer ("show me this week", "chart for today", "next 12 months", "看一下图"). Returns an ASCII chart: `hourly` = 12 two-hour blocks of one day, `weekly` = 7 days, `yearly` = 12 months. The `hourly` mode emits the same hour-resolution scores as `intentions_ask_hour` and is Pro: on the free tier it returns a `subscription_required` error whose payload suggests alternatives. `weekly` is free for the past week and the week ahead (omit `date` for this week), and `yearly` for the months of last year and this year (omit `date` for this year); further out both are Pro too.
- 2026-10-18 `intentions_ask_month` changed (description, inputSchema)
  - before: Call when the user asks at month granularity or wants the best month from a multi-month window ("how is next month", "best month in 2026 to X", "下个月适合吗"). Use for trip-month selection, launch months, content-calendar planning, quarterly/annual decisions. Modes: single month, compare up to 5 months, or scan up to 12 months (returns top 5). Scanning a range of months is Pro; single and compared months are free. Returns month score, element breakdown, adverse alerts. For day precision near the 4th–6th of a month use `intentions_ask_day`; for hour precision use `intentions_ask_hour`.
  - after: Call when the user asks at month granularity or wants the best month from a multi-month window ("how is next month", "best month in 2026 to X", "下个月适合吗"). Use for trip-month selection, launch months, content-calendar planning, quarterly/annual decisions. Modes: single month, compare up to 5 months, or scan up to 12 months (returns top 5). Single and compared months are free; scanning a range is free inside last year and this year, and Pro further out. Returns month score, element breakdown, adverse alerts. For day precision near the 4th–6th of a month use `intentions_ask_day`; for hour precision use `intentions_ask_hour`.
- 2026-10-16 `intentions_energy_chart` changed (description, inputSchema)
  - before: Call when the user wants a visual overview rather than a narrative answer ("show me this week", "chart for today", "next 12 months", "看一下图"). Returns an ASCII chart: `hourly` = 12 two-hour blocks of one day, `weekly` = 7 days, `yearly` = 12 months. The `hourly` mode emits the same hour-resolution scores as `intentions_ask_hour` and is gated behind the Pro subscription on the same terms — on the free tier it returns a `subscription_required` error whose payload suggests `weekly` / `yearly` chart modes or `intentions_ask_day` as alternatives. `weekly` and `yearly` are always free.
  - after: Call when the user wants a visual overview rather than a narrative answer ("show me this week", "chart for today", "next 12 months", "看一下图"). Returns an ASCII chart: `hourly` = 12 two-hour blocks of one day, `weekly` = 7 days, `yearly` = 12 months. The `hourly` mode emits the same hour-resolution scores as `intentions_ask_hour` and `yearly` the month-by-month view, and both are Pro: on the free tier they return a `subscription_required` error whose payload suggests alternatives. `weekly` is free for the past week and the week ahead (omit `date` for this week); further out it is Pro too.
- 2026-10-16 `intentions_ask_month` changed (description, inputSchema)
  - before: Call when the user asks at month granularity or wants the best month from a multi-month window ("how is next month", "best month in 2026 to X", "下个月适合吗"). Use for trip-month selection, launch months, content-calendar planning, quarterly/annual decisions. Modes: single month, compare up to 5 months, or scan up to 12 months (returns top 5). Returns month score, element breakdown, adverse alerts. For day precision near the 4th–6th of a month use `intentions_ask_day`; for hour precision use `intentions_ask_hour`.
  - after: Call when the user asks at month granularity or wants the best month from a multi-month window ("how is next month", "best month in 2026 to X", "下个月适合吗"). Use for trip-month selection, launch months, content-calendar planning, quarterly/annual decisions. Modes: single month, compare up to 5 months, or scan up to 12 months (returns top 5). Scanning a range of months is Pro; single and compared months are free. Returns month score, element breakdown, adverse alerts. For day precision near the 4th–6th of a month use `intentions_ask_day`; for hour precision use `intentions_ask_hour`.
- 2026-10-16 `intentions_ask_year` changed (description, inputSchema)
  - before: Call when the user asks about a full calendar year as a whole ("how is 2026", "今年怎么样", "what's next year like overall"). Returns year-level score, verdict, adverse alerts, and element dimensions. For month precision use `intentions_ask_month`; for day use `intentions_ask_day`. Window: currentYear-1 to currentYear+1 only.
  - after: Call when the user asks about a full calendar year as a whole ("how is 2026", "今年怎么样", "what's next year like overall"). Returns year-level score, verdict, adverse alerts, and element dimensions. For month precision use `intentions_ask_month`; for day use `intentions_ask_day`. Window: currentYear-3 to currentYear+3 only.
- 2026-10-16 `intentions_ask_day` changed (description, inputSchema)
  - before: Call when the user asks about timing a decision for a specific date, or wants to pick the best day from a multi-day window. Covers trip dates, launch days, interview/meeting days, publish/send dates, travel, negotiation windows, relationship moments — any "when to X" question where the answer is a date ("should I X on April 23", "best day this month to Y", "下周四怎么样"). Modes: single date, compare up to 5 dates, or scan a range up to 31 days. Returns score (0-100), verdict, per-layer year/month/day breakdown (alerts + dimension signals), element breakdown, adverse alerts. For multi-month windows use `intentions_ask_month`; for hour precision use `intentions_ask_hour`.
  - after: Call when the user asks about timing a decision for a specific date, or wants to pick the best day from a multi-day window. Covers trip dates, launch days, interview/meeting days, publish/send dates, travel, negotiation windows, relationship moments — any "when to X" question where the answer is a date ("should I X on April 23", "best day this month to Y", "下周四怎么样"). Modes: single date, compare up to 5 dates, or scan a range up to 31 days. On the free tier a range must sit inside the past week and the week ahead; single and compared dates are free anywhere in the window. Returns score (0-100), verdict, per-layer year/month/day breakdown (alerts + dimension signals), element breakdown, adverse alerts. For multi-month windows use `intentions_ask_month`; for hour precision use `intentions_ask_hour`.
- 2026-10-15 `intentions_get_profile` changed (description)
  - before: Fetch the user's currently stored birth info. Use this before `intentions_set_birth_info` when updating an existing profile so you can send back a complete merged payload. Returns { hasProfile, birthInfo: { year, month, day, hour, minute, gender } | null } where any unknown field (e.g. unknown hour) is returned as `null`. No quota cost.
  - after: Fetch the user's currently stored birth info. Use this before `intentions_set_birth_info` when updating an existing profile so you can send back a complete merged payload. Returns { hasProfile, birthInfo: { year, month, day, hour, minute, gender } | null, profileChanges: { remaining, resetsAt } | null } where any unknown birth field (e.g. unknown hour) is returned as `null`. `profileChanges` is how many changes to the date, gender or a known hour are left this calendar month (UTC) and the ISO instant they come back; if `remaining` is 0, tell the user before attempting such a change. No quota cost.
- 2026-10-15 `intentions_set_birth_info` changed (description)
  - before: Call once to register the user's birth date/time/gender. Each call is a complete replacement — all 6 fields must be supplied. For fields the user does not know or prefers not to share, pass `null` explicitly (e.g. `hour: null` for unknown birth time, `gender: null` for unspecified). To update just one field, first call `intentions_get_profile` to fetch the current values, merge the user's new input, then call this tool with the full merged payload. Identity-changing edits (year/month/day/hour/gender) are limited to 3 per calendar month; adding precision (e.g. filling in a previously-null hour) is always free. Returns the element profile.
  - after: Call once to register the user's birth date/time/gender. Each call is a complete replacement — all 6 fields must be supplied. For fields the user does not know or prefers not to share, pass `null` explicitly (e.g. `hour: null` for unknown birth time, `gender: null` for unspecified). To update just one field, first call `intentions_get_profile` to fetch the current values, merge the user's new input, then call this tool with the full merged payload. Changes to the date, gender or a known hour (including setting a known hour back to null) are limited to 3 per calendar month (UTC); filling in a previously-null hour, or the minute, is always free. `intentions_get_profile` returns how many are left. Returns the element profile.

Full history: https://api.protogrid.dev/v1/servers/io.github.intentions-me%2Fintentions-mcp/changes

## Remotes

- https://mcp.intentions.me/mcp (streamable-http, auth api_key ${INTENTIONS_MCP_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `intentions_ask_day`: Call when the user asks about timing a decision for a specific date, or wants to pick the best day from a multi-day window. Covers trip dates, launch days, interview/meeting days, publish/send dates, travel, negotiation windows, relationship moments — any "when to X" question where the answer is a date ("should I X on April 23", "best day this month to Y", "下周四怎么样"). Modes: single date, compare up to 5 dates, or scan a range up to 31 days. On the free tier a range must sit inside the past week and the week ahead; single and compared dates are free anywhere in the window. Returns score (0-100), verdict, per-layer year/month/day breakdown (alerts + dimension signals), element breakdown, adverse alerts. For multi-month windows use `intentions_ask_month`; for hour precision use `intentions_ask_hour`.
- `intentions_ask_hour`: Call when the user asks about timing within a specific day — best hour to act, morning vs afternoon, when during the day ("best time today to X", "morning or afternoon for Y", "几点去见面好"). Use for interview slots, meeting times, send/publish times, departure times, workout windows. Pro subscription required; on the free tier this returns a `subscription_required` error whose payload suggests `intentions_ask_day` for day-level analysis or `intentions_energy_chart` with period `weekly` / `yearly` for a visual overview (the caller LLM decides whether to retry). Modes: single (date+hour), compare up to 5 hour-pairs, or scan all 12 two-hour blocks of one day. Accepts any clock hour 0..23; internally mapped to the containing 2-hour block midpoint (0/2/4/…/22). 23:00–23:59 automatically rolls the effective day forward by one. Every output entry includes a `window { start, end }` local wall-clock span (`YYYY-MM-DDTHH:MM`, no timezone offset — interpret in the same frame as the input hour). Always cite this when presenting the time. Returns score, verdict, adverse alerts.
- `intentions_ask_month`: Call when the user asks at month granularity or wants the best month from a multi-month window ("how is next month", "best month in 2026 to X", "下个月适合吗"). Use for trip-month selection, launch months, content-calendar planning, quarterly/annual decisions. Modes: single month, compare up to 5 months, or scan up to 12 months (returns top 5). Single and compared months are free; scanning a range is free inside last year and this year, and Pro further out. Returns month score, element breakdown, adverse alerts. For day precision near the 4th–6th of a month use `intentions_ask_day`; for hour precision use `intentions_ask_hour`.
- `intentions_ask_year`: Call when the user asks about a full calendar year as a whole ("how is 2026", "今年怎么样", "what's next year like overall"). Returns year-level score, verdict, adverse alerts, and element dimensions. For month precision use `intentions_ask_month`; for day use `intentions_ask_day`. Window: currentYear-3 to currentYear+3 only.
- `intentions_energy_chart`: Call when the user wants a visual overview rather than a narrative answer ("show me this week", "chart for today", "next 12 months", "看一下图"). Returns an ASCII chart: `hourly` = 12 two-hour blocks of one day, `weekly` = 7 days, `yearly` = 12 months. The `hourly` mode emits the same hour-resolution scores as `intentions_ask_hour` and is Pro: on the free tier it returns a `subscription_required` error whose payload suggests alternatives. `weekly` is free for the past week and the week ahead (omit `date` for this week), and `yearly` for the months of last year and this year (omit `date` for this year); further out both are Pro too.
- `intentions_get_profile`: Fetch the user's currently stored birth info. Use this before `intentions_set_birth_info` when updating an existing profile so you can send back a complete merged payload. Returns { hasProfile, birthInfo: { year, month, day, hour, minute, gender } | null, profileChanges: { remaining, resetsAt } | null } where any unknown birth field (e.g. unknown hour) is returned as `null`. `profileChanges` is how many changes to the date, gender or a known hour are left this calendar month (UTC) and the ISO instant they come back; if `remaining` is 0, tell the user before attempting such a change. No quota cost.
- `intentions_set_birth_info`: Call once to register the user's birth date/time/gender. Each call is a complete replacement — all 6 fields must be supplied. For fields the user does not know or prefers not to share, pass `null` explicitly (e.g. `hour: null` for unknown birth time, `gender: null` for unspecified). To update just one field, first call `intentions_get_profile` to fetch the current values, merge the user's new input, then call this tool with the full merged payload. Changes to the date, gender or a known hour (including setting a known hour back to null) are limited to 3 per calendar month (UTC); filling in a previously-null hour, or the minute, is always free. `intentions_get_profile` returns how many are left. Returns the element profile.
