
Personalized timing intelligence for AI agents — ask 'should I do X on this date?'
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer API key (format: itm_...). Generate one at https://intentions.me/account
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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`.
The decision or action being considered
Decision domain — tunes the analysis weighting. Default: general.
Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile.
Find best dates in range. Max 31 days — use ask_month for longer windows. Free tier: the past week and the week ahead only.
YYYY-MM-DD. Default: today
Up to 4 additional YYYY-MM-DD dates to compare against targetDate
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`.
| Argument | Type | Description |
|---|---|---|
| category | string | Decision domain — tunes the analysis weighting. Default: general. |
| question* | string | The decision or action being considered |
| birthInfo | object | Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile. |
| dateRange | object | Find best dates in range. Max 31 days — use ask_month for longer windows. Free tier: the past week and the week ahead only. |
| targetDate | string | YYYY-MM-DD. Default: today |
| compareDates | array | Up to 4 additional YYYY-MM-DD dates to compare against targetDate |
{
"type": "object",
"required": [
"question"
],
"properties": {
"category": {
"enum": [
"career",
"relationship",
"health",
"finance",
"travel",
"general"
],
"type": "string",
"description": "Decision domain — tunes the analysis weighting. Default: general."
},
"question": {
"type": "string",
"description": "The decision or action being considered"
},
"birthInfo": {
"type": "object",
"description": "Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile."
},
"dateRange": {
"type": "object",
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
}
},
"description": "Find best dates in range. Max 31 days — use ask_month for longer windows. Free tier: the past week and the week ahead only."
},
"targetDate": {
"type": "string",
"description": "YYYY-MM-DD. Default: today"
},
"compareDates": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"description": "Up to 4 additional YYYY-MM-DD dates to compare against targetDate"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| category | string | Decision domain — tunes the analysis weighting. Default: general. |
| question* | string | The decision or action being considered |
| bestInDay | object | Find best hours within a single day. Each entry carries an explicit `window` span. |
| birthInfo | object | Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile. |
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`.
| Argument | Type | Description |
|---|---|---|
| category | string | Decision domain — tunes the analysis weighting. Default: general. |
| question* | string | The decision or action being considered |
| birthInfo | object | Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile. |
| monthRange | object | Find best months in range. Max 12 months. Inclusive on both ends. Free inside last year and this year; Pro further out. |
| targetMonth | string | YYYY-MM. Default: current month |
| compareMonths | array |
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.
| Argument | Type | Description |
|---|---|---|
| category | string | Decision domain — tunes the analysis weighting. Default: general. |
| question* | string | The decision or action being considered |
| birthInfo | object | Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile. |
| targetYear | integer | YYYY. Default: current year. Allowed: currentYear-3 .. currentYear+3. |
{
"type": "object",
"required": [
"question"
],
"properties": {
"category": {
"enum": [
"career",
"relationship",
"health",
"finance",
"travel",
"general"
],
"type": "string",
"description": "Decision domain — tunes the analysis weighting. Default: general."
},
"question": {
"type": "string",
"description": "The decision or action being considered"
},
"birthInfo": {
"type": "object",
"description": "Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile."
},
"targetYear": {
"type": "integer",
"description": "YYYY. Default: current year. Allowed: currentYear-3 .. currentYear+3."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| date | string | YYYY-MM-DD. Default: today |
| period* | string | Which chart to render: `hourly` = 12 two-hour blocks of one day (Pro), `weekly` = 7 days from `date` (free inside the past week and the week ahead), `yearly` = the 12 months of the year of `date` (free for last year and this year). |
| birthInfo | object | Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit to use the stored profile. |
{
"type": "object",
"required": [
"period"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD. Default: today"
},
"period": {
"enum": [
"hourly",
"weekly",
"yearly"
],
"type": "string",
"description": "Which chart to render: `hourly` = 12 two-hour blocks of one day (Pro), `weekly` = 7 days from `date` (free inside the past week and the week ahead), `yearly` = the 12 months of the year of `date` (free for last year and this year)."
},
"birthInfo": {
"type": "object",
"description": "Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit to use the stored 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.
No arguments.
{
"type": "object",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| day* | integer | Birth day of month, 1–31. |
| hour* | integer | null | null if unknown |
| year* | integer | Birth year, 1920–2030. |
| month* | integer | Birth month, 1–12. |
| gender* | string | null | null if unspecified |
| minute* | integer | null | null if unknown; requires hour to also be non-null |
| targetDate | string | YYYY-MM-DD. Default: today (single mode only) |
| targetHour | integer | Clock hour 0..23. Auto-rounded to the containing 2-hour block. 23:XX rolls the effective day forward by one. |
| compareHours | array | Up to 4 additional (date, clock-hour 0..23) pairs to compare against targetDate+targetHour. Pairs that resolve to the same 2-hour block (e.g. hours 7 and 8 on the same date) are deduplicated — submit distinct blocks if you want distinct results. |
{
"type": "object",
"required": [
"question"
],
"properties": {
"category": {
"enum": [
"career",
"relationship",
"health",
"finance",
"travel",
"general"
],
"type": "string",
"description": "Decision domain — tunes the analysis weighting. Default: general."
},
"question": {
"type": "string",
"description": "The decision or action being considered"
},
"bestInDay": {
"type": "object",
"required": [
"date"
],
"properties": {
"top": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Number of top hours to return (default 5)"
},
"date": {
"type": "string"
}
},
"description": "Find best hours within a single day. Each entry carries an explicit `window` span."
},
"birthInfo": {
"type": "object",
"description": "Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile."
},
"targetDate": {
"type": "string",
"description": "YYYY-MM-DD. Default: today (single mode only)"
},
"targetHour": {
"type": "integer",
"maximum": 23,
"minimum": 0,
"description": "Clock hour 0..23. Auto-rounded to the containing 2-hour block. 23:XX rolls the effective day forward by one."
},
"compareHours": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"hour"
],
"properties": {
"date": {
"type": "string"
},
"hour": {
"type": "integer",
"maximum": 23,
"minimum": 0
}
}
},
"maxItems": 4,
"description": "Up to 4 additional (date, clock-hour 0..23) pairs to compare against targetDate+targetHour. Pairs that resolve to the same 2-hour block (e.g. hours 7 and 8 on the same date) are deduplicated — submit distinct blocks if you want distinct results."
}
}
}| Up to 4 additional YYYY-MM months to compare against targetMonth |
{
"type": "object",
"required": [
"question"
],
"properties": {
"category": {
"enum": [
"career",
"relationship",
"health",
"finance",
"travel",
"general"
],
"type": "string",
"description": "Decision domain — tunes the analysis weighting. Default: general."
},
"question": {
"type": "string",
"description": "The decision or action being considered"
},
"birthInfo": {
"type": "object",
"description": "Optional override. If provided, all 6 fields required: { year, month, day, hour, minute, gender } — use null for unknown hour/minute/gender. Omit entirely to use the stored profile."
},
"monthRange": {
"type": "object",
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
}
},
"description": "Find best months in range. Max 12 months. Inclusive on both ends. Free inside last year and this year; Pro further out."
},
"targetMonth": {
"type": "string",
"description": "YYYY-MM. Default: current month"
},
"compareMonths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"description": "Up to 4 additional YYYY-MM months to compare against targetMonth"
}
}
}{
"type": "object",
"required": [
"year",
"month",
"day",
"hour",
"minute",
"gender"
],
"properties": {
"day": {
"type": "integer",
"maximum": 31,
"minimum": 1,
"description": "Birth day of month, 1–31."
},
"hour": {
"type": [
"integer",
"null"
],
"maximum": 23,
"minimum": 0,
"description": "null if unknown"
},
"year": {
"type": "integer",
"maximum": 2030,
"minimum": 1920,
"description": "Birth year, 1920–2030."
},
"month": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Birth month, 1–12."
},
"gender": {
"enum": [
"M",
"F",
null
],
"type": [
"string",
"null"
],
"description": "null if unspecified"
},
"minute": {
"type": [
"integer",
"null"
],
"maximum": 59,
"minimum": 0,
"description": "null if unknown; requires hour to also be non-null"
}
}
}